From 7d9ffda57b6d9482166cfd27c6f15a5e28792840 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 20 Sep 2015 07:40:04 -0700 Subject: [PATCH 001/110] Update Sauce credentials --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 70d1486..8bcc50c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,5 +9,5 @@ addons: sauce_connect: true env: global: - - secure: CobqmywLsSteYgnmsjGsNEp7LTa2Y4Fjoa0qvwAbyz2WueM1i5OXSSEaBQuWLPlrNn9hLh8vhBli//aanu45LGak3SPAHyvo9UCXd5gY8adykYFtrHWmKf0bKf8a8cHtrf8QjaUiG1OIezl2Pf2u+zMyY/wvOrgfiGnGqXwSUJc= - - secure: YQifxQx61jTeLitt3NTwOwprf5HTPnnbW4Ou+uAznUogKtVXIYcV8h+jKH+uqNSwiU0S4KwUnPVgbauA7G1UVYLYUGcqMHsjIqoRB6mC/lP4BcgKK9RbPCyYPTb+/pBQM97mbvQ6r8I87LvZeK2tLBZ5mnxwBo/R6tpiDDt5R24= + - secure: cBNumaXdO6q+sXCyrD0c/z++mGs7PdQBSTIbdPGF4U/4FtaLNp/I/GNrKNsfejWNlqlqaxPS/SjUdlDSdpHOVC6tSKYI6YWBMY/0ov4OPZWgMoX7WvB287MDi+627amz6REt1Cp4oaxep9xolMEO9l+FQYE5Dyu1PuJsgA/niWA= + - secure: HEualrdtngTaAR85L8ZANYyFgOgmLINwEXXk9h5cOrnWPcxNkrIiSmWJ9xxrZNosIQXa8vMEyE7MoRFFRd6bEX5UuIWEM36zoGDtAJpTXybAtHB4c2NKAKC3PlpCyl1lIdHzJQdYORs5KZRSBkA0eT0g8r5fkG/nh0y7/rhv95I= From 1405ee85337649c49fc6c09d451cf37861662821 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 20 Sep 2015 07:40:58 -0700 Subject: [PATCH 002/110] Add StackTrace.report() for easy stack reporting. --- README.md | 30 ++++++++++++++++++----- spec/stacktrace-spec.js | 53 +++++++++++++++++++++++++++++++++++++---- stacktrace.js | 25 +++++++++++++++++++ 3 files changed, 97 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index b4b8fb6..51070a2 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,8 @@ StackTrace.deinstrument(interestingFn) ``` npm install stacktrace-js bower install stacktrace-js -https://cdnjs.cloudflare.com/ajax/libs/stacktrace.js/1.0.0/stacktrace.min.js +component install stacktracejs/stacktrace.js +http://cdnjs.com/libraries/stacktrace.js ``` ## API @@ -99,18 +100,35 @@ Use [stack-generator](https://github.com/stacktracejs/stack-generator) to genera * *sourceCache: Object (String URL => String Source)* - Pre-populate source cache to avoid network requests * *offline: Boolean (default: false)* - Set to `true` to prevent all network requests -#### `StackTrace.instrument(fn, callback, /*optional*/ errback)` => Boolean -Call callback with a _stack trace_ anytime `fn` is called. Returns `true` if given Function is successfully instrumented +#### `StackTrace.instrument(fn, callback, /*optional*/ errback)` => Function +* Given a function, wrap it such that invocations trigger a callback that is called with a stack trace. * **fn: Function** - to wrap, call callback on invocation and call-through * **callback: Function** - to call with stack trace (generated by `StackTrace.get()`) when fn is called * **(Optional) errback: Function** - to call with Error object if there was a problem getting a stack trace. Fails silently (though `fn` is still called) if a stack trace couldn't be generated. -#### `StackTrace.deinstrument(fn)` => Boolean -Remove StackTrace instrumentation on `fn`. Returns `true` if de-instrumentation succeeds. +#### `StackTrace.deinstrument(fn)` => Function +Given a function that has been instrumented, revert the function to it's original (non-instrumented) state. -* **fn: Function** - Previously wrapped Function +* **fn: Function** - Instrumented Function + +#### `StackTrace.report(stackframes, url)` => [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)(String) +Given an Array of StackFrames, serialize and POST to given URL. Promise is resolved with response text from POST request. + +Example JSON POST data: +``` +{ + stack: [ + {functionName: 'fn', fileName: 'file.js', lineNumber: 32, columnNumber: 1}, + {functionName: 'fn2', fileName: 'file.js', lineNumber: 543, columnNumber: 32}, + {functionName: 'fn3', fileName: 'file.js', lineNumber: 8, columnNumber: 1} + ] +} +``` + +* **stackframes: Array([StackFrame](https://github.com/stacktracejs/stackframe))** - Previously wrapped Function +* **url: String** - URL to POST stack JSON to ## Browser Support * Chrome 1+ diff --git a/spec/stacktrace-spec.js b/spec/stacktrace-spec.js index 697c12b..7ed7e2a 100755 --- a/spec/stacktrace-spec.js +++ b/spec/stacktrace-spec.js @@ -24,7 +24,7 @@ describe('StackTrace', function () { describe('#get', function () { it('gets stacktrace from current location', function () { runs(function testStackTraceGet() { - StackTrace.get().then(callback, errback)['catch'](debugErrback); + StackTrace.get().then(callback, errback)['catch'](errback); }); waits(100); runs(function () { @@ -60,7 +60,7 @@ describe('StackTrace', function () { runs(function () { server.respondWith('GET', 'http://path/to/file.js', [404, {'Content-Type': 'text/plain'}, '']); StackTrace.fromError(Errors.IE_11) - .then(callback, debugErrback)['catch'](debugErrback); + .then(callback, errback)['catch'](errback); server.respond(); }); waits(100); @@ -81,7 +81,7 @@ describe('StackTrace', function () { server.respondWith('GET', 'http://path/to/file.js', [404, {'Content-Type': 'text/plain'}, '']); StackTrace.fromError(Errors.IE_11, {filter: onlyFoos}) - .then(callback, debugErrback)['catch'](debugErrback); + .then(callback, errback)['catch'](errback); server.respond(); }); waits(100); @@ -103,7 +103,7 @@ describe('StackTrace', function () { server.respondWith('GET', 'test.js.map', [200, {'Content-Type': 'application/json'}, sourceMap]); var stack = 'TypeError: Unable to get property \'undef\' of undefined or null reference\n at foo (http://path/to/file.js:45:13)'; - StackTrace.fromError({stack: stack}).then(callback, errback)['catch'](debugErrback); + StackTrace.fromError({stack: stack}).then(callback, errback)['catch'](errback); server.respond(); }); waits(100); @@ -129,7 +129,7 @@ describe('StackTrace', function () { stackFrame.getFunctionName().indexOf('testGenerateArtificially') > -1; }; StackTrace.generateArtificially({filter: stackFrameFilter}) - .then(callback, errback)['catch'](debugErrback); + .then(callback, errback)['catch'](errback); }); waits(100); runs(function () { @@ -209,4 +209,47 @@ describe('StackTrace', function () { expect(unwrapped).toEqual(interestingFn); }); }); + + describe('#report', function () { + var server; + beforeEach(function () { + server = sinon.fakeServer.create(); + }); + afterEach(function () { + server.restore(); + }); + + it('sends POST request to given URL', function () { + var url = 'http://domain.ext/endpoint'; + var stackframes = [new StackFrame('fn', undefined, 'file.js', 32, 1)]; + + runs(function () { + server.respondWith('POST', url, [201, {'Content-Type': 'text/plain'}, 'OK']); + StackTrace.report(stackframes, url).then(callback, errback)['catch'](errback); + server.respond(); + }); + waits(100); + runs(function () { + expect(server.requests[0].requestBody).toEqual({stack: stackframes}); + expect(server.requests[0].url).toEqual(url); + expect(callback).toHaveBeenCalledWith('OK'); + expect(errback).not.toHaveBeenCalled(); + }); + }); + + it('rejects if POST request fails', function () { + runs(function () { + var url = 'http://domain.ext/endpoint'; + var stackframes = [new StackFrame('fn', undefined, 'file.js', 32, 1)]; + server.respondWith('POST', url, [404, {'Content-Type': 'text/plain'}, '']); + StackTrace.report(stackframes, url).then(callback, errback)['catch'](errback); + server.respond(); + }); + waits(100); + runs(function () { + expect(callback).not.toHaveBeenCalled(); + expect(errback).toHaveBeenCalled(); + }); + }); + }); }); diff --git a/stacktrace.js b/stacktrace.js index 214f2bf..fdfef70 100644 --- a/stacktrace.js +++ b/stacktrace.js @@ -155,6 +155,31 @@ // Function not instrumented, return original return fn; } + }, + + /** + * Given an Array of StackFrames, serialize and POST to given URL. + * + * @param stackframes - Array[StackFrame] + * @param url - URL as String + */ + report: function StackTrace$$report(stackframes, url) { + return new Promise(function (resolve, reject) { + var req = new XMLHttpRequest(); + req.onerror = reject; + req.onreadystatechange = function onreadystatechange() { + if (req.readyState === 4) { + if (req.status >= 200 && req.status < 400) { + resolve(req.responseText); + } else { + reject(new Error('POST to ' + url + ' failed with status: ' + req.status)); + } + } + }; + req.open('post', url); + req.setRequestHeader('Content-Type', 'application/json'); + req.send({stack: stackframes}); + }); } }; })); From 21569cab74765217d1a219526bab81388ad9c6b8 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 20 Sep 2015 07:41:39 -0700 Subject: [PATCH 003/110] Update karma usage with gulp. --- gulpfile.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 801e7f3..6f684ae 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -3,7 +3,7 @@ var coveralls = require('gulp-coveralls'); var del = require('del'); var gulp = require('gulp'); var jshint = require('gulp-jshint'); -var karma = require('karma').server; +var karma = require('karma'); var runSequence = require('run-sequence'); var sourcemaps = require('gulp-sourcemaps'); var uglify = require('gulp-uglify'); @@ -27,17 +27,19 @@ gulp.task('lint', function () { }); gulp.task('test', function (done) { - karma.start({ + var server = new karma.Server({ configFile: __dirname + '/karma.conf.js', singleRun: true }, done); + server.start(); }); gulp.task('test-ci', ['dist'], function (done) { - karma.start({ + var server = new karma.Server({ configFile: __dirname + '/karma.conf.ci.js', singleRun: true }, done); + server.start(); }); gulp.task('copy', function () { From ecfe3bb9ef0e21d6f522904d35917c55b42e2427 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 20 Sep 2015 07:42:57 -0700 Subject: [PATCH 004/110] Bump version to 1.0.0, update CHANGELOG and package for distribution --- CHANGELOG.md | 37 +++++++++++++++++++++++ bower.json | 3 +- component.json | 2 +- dist/stacktrace-with-polyfills.min.js | 3 +- dist/stacktrace-with-polyfills.min.js.map | 2 +- dist/stacktrace.js | 25 +++++++++++++++ dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- package.json | 16 +++++++--- 9 files changed, 82 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95722cd..34c4937 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,40 @@ +## v1.0.0 + +### stacktrace.js is reborn + +stacktrace.js is now modularized into 5 projects: + +* [stacktrace-gps](https://github.com/stacktracejs/stacktrace-gps) - turn partial code location into precise code location +* [error-stack-parser](https://github.com/stacktracejs/error-stack-parser) - extract meaning from JS Errors +* [stack-generator](https://github.com/stacktracejs/stack-generator) - generate artificial backtrace in old browsers +* [stackframe](https://github.com/stacktracejs/stackframe) - JS Object representation of a stack frame + +... and putting it all together: [stacktrace.js](stacktracejs/stacktrace.js) for instrumenting your code and generating stack traces! + +### Key Features + +* Fully asynchronous API, using [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). Use your own polyfill or use [our distribution with polyfills included](https://github.com/stacktracejs/stacktrace.js/blob/master/dist/stacktrace-with-polyfills.min.js). See the [Migration Guide](http://www.stacktracejs.com/docs/v0-migration-guide) +* [Source Maps](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/) support +* Forward-compatible: stacktrace.js no longer assumes a given browser formats Error stacks in a given way. This prevents new browser versions from breaking error parsing +* Stack entries are now fully parsed and returned as [StackFrame objects](https://github.com/stacktracejs/stackframe). Prefer the old format? - just call `.toString()`! +* Use only what you need. All 5 projects work independently as well as together! +* iOS 8+ Safari support + +### Available everywhere + +``` +npm install stacktrace-js +bower install stacktrace-js +component install stacktracejs/stacktrace.js +https://cdnjs.cloudflare.com/ajax/libs/stacktrace.js/1.0.0/stacktrace.min.js +``` + +### Better for contributors + +* gulp build +* TravisCI + Sauce for testing a bunch of browsers +* EditorConfig for style adherence + ## v0.6.2 * Ignore test/ dir in bower diff --git a/bower.json b/bower.json index 850da7a..2b6cf89 100644 --- a/bower.json +++ b/bower.json @@ -4,7 +4,8 @@ "homepage": "https://github.com/stacktracejs/stacktrace.js", "authors": [ "Eric Wendelin (http://www.eriwen.com)", - "Victor Homyakov (https://github.com/victor-homyakov)" + "Victor Homyakov (https://github.com/victor-homyakov)", + "Oliver Salzburg (https://github.com/oliversalzburg)" ], "description": "Turns partial code location into precise code location", "moduleType": [ diff --git a/component.json b/component.json index 11cf3f6..2cd9608 100644 --- a/component.json +++ b/component.json @@ -2,7 +2,7 @@ "name": "stacktrace.js", "repository": "stacktracejs/stacktrace.js", "description": "Framework-agnostic, micro-library for getting stack traces in all environments", - "version": "0.6.4", + "version": "1.0.0", "keywords": [ "stacktrace", "error", diff --git a/dist/stacktrace-with-polyfills.min.js b/dist/stacktrace-with-polyfills.min.js index dd9798f..c8b8fbf 100644 --- a/dist/stacktrace-with-polyfills.min.js +++ b/dist/stacktrace-with-polyfills.min.js @@ -1,2 +1,3 @@ -(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function r(e){B=e}function i(e){Z=e}function o(){return function(){process.nextTick(l)}}function a(){return function(){q(l)}}function s(){var e=0,t=new Y(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;U>e;e+=2){var t=K[e],n=K[e+1];t(n),K[e]=void 0,K[e+1]=void 0}U=0}function f(){try{var e=require,t=e("vertx");return q=t.runOnLoop||t.runOnContext,a()}catch(n){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return te.error=t,te}}function d(e,t,n,r){try{e.call(t,n,r)}catch(i){return i}}function v(e,t,n){Z(function(e){var r=!1,i=d(n,t,function(n){r||(r=!0,t!==n?b(e,n):A(e,n))},function(t){r||(r=!0,E(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&i&&(r=!0,E(e,i))},e)}function y(e,t){t._state===W?A(e,t._result):t._state===ee?E(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){E(e,t)})}function _(e,n){if(n.constructor===e.constructor)y(e,n);else{var r=m(n);r===te?E(e,te.error):void 0===r?A(e,n):t(r)?v(e,n,r):A(e,n)}}function b(t,n){t===n?E(t,h()):e(n)?_(t,n):A(t,n)}function w(e){e._onerror&&e._onerror(e._result),C(e)}function A(e,t){e._state===Q&&(e._result=t,e._state=W,0!==e._subscribers.length&&Z(C,e))}function E(e,t){e._state===Q&&(e._state=ee,e._result=t,Z(w,e))}function S(e,t,n,r){var i=e._subscribers,o=i.length;e._onerror=null,i[o]=t,i[o+W]=n,i[o+ee]=r,0===o&&e._state&&Z(C,e)}function C(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,i,o=e._result,a=0;aa;a++)S(r.resolve(e[a]),void 0,t,n);return i}function P(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(p);return b(n,e),n}function F(e){var t=this,n=new t(p);return E(n,e),n}function R(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function T(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function G(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||R(),this instanceof G||T(),x(this,e))}function $(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var I;I=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var q,B,D,z=I,U=0,Z=({}.toString,function(e,t){K[U]=e,K[U+1]=t,U+=2,2===U&&(B?B(l):D())}),V="undefined"!=typeof window?window:void 0,X=V||{},Y=X.MutationObserver||X.WebKitMutationObserver,H="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),J="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,K=new Array(1e3);D=H?o():Y?s():J?u():void 0===V&&"function"==typeof require?f():c();var Q=void 0,W=1,ee=2,te=new N,ne=new N;O.prototype._validateInput=function(e){return z(e)},O.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},O.prototype._init=function(){this._result=new Array(this.length)};var re=O;O.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,i=0;n._state===Q&&t>i;i++)e._eachEntry(r[i],i)},O.prototype._eachEntry=function(e,t){var r=this,i=r._instanceConstructor;n(e)?e.constructor===i&&e._state!==Q?(e._onerror=null,r._settledAt(e._state,t,e._result)):r._willSettleAt(i.resolve(e),t):(r._remaining--,r._result[t]=e)},O.prototype._settledAt=function(e,t,n){var r=this,i=r.promise;i._state===Q&&(r._remaining--,e===ee?E(i,n):r._result[t]=n),0===r._remaining&&A(i,r._result)},O.prototype._willSettleAt=function(e,t){var n=this;S(e,void 0,function(e){n._settledAt(W,t,e)},function(e){n._settledAt(ee,t,e)})};var ie=L,oe=j,ae=P,se=F,ue=0,ce=G;G.all=ie,G.race=oe,G.resolve=ae,G.reject=se,G._setScheduler=r,G._setAsap=i,G._asap=Z,G.prototype={constructor:G,then:function(e,t){var n=this,r=n._state;if(r===W&&!e||r===ee&&!t)return this;var i=new this.constructor(p),o=n._result;if(r){var a=arguments[r-1];Z(function(){k(r,i,a,o)})}else S(n,i,e,t);return i},"catch":function(e){return this.then(null,e)}};var le=$,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},i=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,i.prototype=new r,i}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),i=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var o=new Array(i),a=0;i>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),o[a]=u),a++}return o}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],i=arguments.length>=2?arguments[1]:void 0,o=0;n>o;o++)if(o in t){var a=t[o];e.call(i,a,o,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var i=Object(this),o=i.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;o>r;){var a;r in i&&(a=i[r],e.call(n,a,r,i)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+i+o}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){var r;r=function(e,t,r){function i(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=o.getArg(t,"version"),r=o.getArg(t,"sources"),i=o.getArg(t,"names",[]),a=o.getArg(t,"sourceRoot",null),u=o.getArg(t,"sourcesContent",null),c=o.getArg(t,"mappings"),l=o.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(o.normalize),this._names=s.fromArray(i,!0),this._sources=s.fromArray(r,!0),this.sourceRoot=a,this.sourcesContent=u,this._mappings=c,this.file=l}var o=n(1),a=n(2),s=n(3).ArraySet,u=n(4);i.fromSourceMap=function(e){var t=Object.create(i.prototype);return t._names=s.fromArray(e._names.toArray(),!0),t._sources=s.fromArray(e._sources.toArray(),!0),t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file,t.__generatedMappings=e._mappings.toArray().slice(),t.__originalMappings=e._mappings.toArray().slice().sort(o.compareByOriginalPositions),t},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?o.join(this.sourceRoot,e):e},this)}}),i.prototype.__generatedMappings=null,Object.defineProperty(i.prototype,"_generatedMappings",{get:function(){return this.__generatedMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__generatedMappings}}),i.prototype.__originalMappings=null,Object.defineProperty(i.prototype,"_originalMappings",{get:function(){return this.__originalMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__originalMappings}}),i.prototype._nextCharIsMappingSeparator=function(e){var t=e.charAt(0);return";"===t||","===t},i.prototype._parseMappings=function(e,t){for(var n,r=1,i=0,a=0,s=0,c=0,l=0,f=e,p={};f.length>0;)if(";"===f.charAt(0))r++,f=f.slice(1),i=0;else if(","===f.charAt(0))f=f.slice(1);else{if(n={},n.generatedLine=r,u.decode(f,p),n.generatedColumn=i+p.value,i=n.generatedColumn,f=p.rest,f.length>0&&!this._nextCharIsMappingSeparator(f)){if(u.decode(f,p),n.source=this._sources.at(c+p.value),c+=p.value,f=p.rest,0===f.length||this._nextCharIsMappingSeparator(f))throw new Error("Found a source, but no line and column");if(u.decode(f,p),n.originalLine=a+p.value,a=n.originalLine,n.originalLine+=1,f=p.rest,0===f.length||this._nextCharIsMappingSeparator(f))throw new Error("Found a source and line, but no column");u.decode(f,p),n.originalColumn=s+p.value,s=n.originalColumn,f=p.rest,f.length>0&&!this._nextCharIsMappingSeparator(f)&&(u.decode(f,p),n.name=this._names.at(l+p.value),l+=p.value,f=p.rest)}this.__generatedMappings.push(n),"number"==typeof n.originalLine&&this.__originalMappings.push(n)}this.__generatedMappings.sort(o.compareByGeneratedPositions),this.__originalMappings.sort(o.compareByOriginalPositions)},i.prototype._findMapping=function(e,t,n,r,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return a.search(e,t,i)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var r=this._generatedMappings[n];if(r.generatedLine===t.generatedLine){var i=o.getArg(r,"source",null);return null!=i&&null!=this.sourceRoot&&(i=o.join(this.sourceRoot,i)),{source:i,line:o.getArg(r,"originalLine",null),column:o.getArg(r,"originalColumn",null),name:o.getArg(r,"name",null)}}}return{source:null,line:null,column:null,name:null}},i.prototype.sourceContentFor=function(e){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=o.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=o.urlParse(this.sourceRoot))){var n=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(n))return this.sourcesContent[this._sources.indexOf(n)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var t={source:o.getArg(e,"source"),originalLine:o.getArg(e,"line"),originalColumn:o.getArg(e,"column")};null!=this.sourceRoot&&(t.source=o.relative(this.sourceRoot,t.source));var n=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions);if(n>=0){var r=this._originalMappings[n];return{line:o.getArg(r,"generatedLine",null),column:o.getArg(r,"generatedColumn",null),lastColumn:o.getArg(r,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},i.prototype.allGeneratedPositionsFor=function(e){var t={source:o.getArg(e,"source"),originalLine:o.getArg(e,"line"),originalColumn:1/0};null!=this.sourceRoot&&(t.source=o.relative(this.sourceRoot,t.source));var n=[],r=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions);if(r>=0)for(var i=this._originalMappings[r];i&&i.originalLine===t.originalLine;)n.push({line:o.getArg(i,"generatedLine",null),column:o.getArg(i,"generatedColumn",null),lastColumn:o.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[--r];return n.reverse()},i.GENERATED_ORDER=1,i.ORIGINAL_ORDER=2,i.prototype.eachMapping=function(e,t,n){var r,a=t||null,s=n||i.GENERATED_ORDER;switch(s){case i.GENERATED_ORDER:r=this._generatedMappings;break;case i.ORIGINAL_ORDER:r=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var u=this.sourceRoot;r.map(function(e){var t=e.source;return null!=t&&null!=u&&(t=o.join(u,t)),{source:t,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name}}).forEach(e,a)},t.SourceMapConsumer=i}.call(t,n,t,e),!(void 0!==r&&(e.exports=r))},function(e,t,n){var r;r=function(e,t,n){function r(e,t,n){if(t in e)return e[t];if(3===arguments.length)return n;throw new Error('"'+t+'" is a required argument.')}function i(e){var t=e.match(g);return t?{scheme:t[1],auth:t[2],host:t[3],port:t[4],path:t[5]}:null}function o(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth&&(t+=e.auth+"@"),e.host&&(t+=e.host),e.port&&(t+=":"+e.port),e.path&&(t+=e.path),t}function a(e){var t=e,n=i(e);if(n){if(!n.path)return e;t=n.path}for(var r,a="/"===t.charAt(0),s=t.split(/\/+/),u=0,c=s.length-1;c>=0;c--)r=s[c],"."===r?s.splice(c,1):".."===r?u++:u>0&&(""===r?(s.splice(c+1,u),u=0):(s.splice(c,2),u--));return t=s.join("/"),""===t&&(t=a?"/":"."),n?(n.path=t,o(n)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=i(t),r=i(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),o(n);if(n||t.match(m))return t;if(r&&!r.host&&!r.path)return r.host=t,o(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,o(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");var n=i(e);return"/"==t.charAt(0)&&n&&"/"==n.path?t.slice(1):0===t.indexOf(e+"/")?t.substr(e.length+1):t}function c(e){return"$"+e}function l(e){return e.substr(1)}function f(e,t){var n=e||"",r=t||"";return(n>r)-(r>n)}function p(e,t,n){var r;return(r=f(e.source,t.source))?r:(r=e.originalLine-t.originalLine)?r:(r=e.originalColumn-t.originalColumn,r||n?r:(r=f(e.name,t.name))?r:(r=e.generatedLine-t.generatedLine,r?r:e.generatedColumn-t.generatedColumn))}function h(e,t,n){var r;return(r=e.generatedLine-t.generatedLine)?r:(r=e.generatedColumn-t.generatedColumn,r||n?r:(r=f(e.source,t.source))?r:(r=e.originalLine-t.originalLine)?r:(r=e.originalColumn-t.originalColumn,r?r:f(e.name,t.name)))}t.getArg=r;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=i,t.urlGenerate=o,t.normalize=a,t.join=s,t.relative=u,t.toSetString=c,t.fromSetString=l,t.compareByOriginalPositions=p,t.compareByGeneratedPositions=h}.call(t,n,t,e),!(void 0!==r&&(e.exports=r))},function(e,t,n){var r;r=function(e,t,n){function r(e,t,n,i,o){var a=Math.floor((t-e)/2)+e,s=o(n,i[a],!0);return 0===s?a:s>0?t-a>1?r(a,t,n,i,o):a:a-e>1?r(e,a,n,i,o):0>e?-1:e}t.search=function(e,t,n){return 0===t.length?-1:r(-1,t.length,e,t,n)}}.call(t,n,t,e),!(void 0!==r&&(e.exports=r))},function(e,t,n){var r;r=function(e,t,r){function i(){this._array=[],this._set={}}var o=n(1);i.fromArray=function(e,t){for(var n=new i,r=0,o=e.length;o>r;r++)n.add(e[r],t);return n},i.prototype.add=function(e,t){var n=this.has(e),r=this._array.length;(!n||t)&&this._array.push(e),n||(this._set[o.toSetString(e)]=r)},i.prototype.has=function(e){return Object.prototype.hasOwnProperty.call(this._set,o.toSetString(e))},i.prototype.indexOf=function(e){if(this.has(e))return this._set[o.toSetString(e)];throw new Error('"'+e+'" is not in the set.')},i.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var a=n(5),s=5,u=1<>>=s,r>0&&(t|=l),n+=a.encode(t);while(r>0);return n},t.decode=function(e,t){var n,r,i=0,u=e.length,f=0,p=0;do{if(i>=u)throw new Error("Expected more digits in base 64 VLQ value.");r=a.decode(e.charAt(i++)),n=!!(r&l),r&=c,f+=r<=200&&i.status<400)return t(i.responseText);r(new Error("Unable to retrieve "+e))}},i.send()}function i(e,t,n){for(var r,i,o,a=/function\s+([^(]*?)\s*\(([^)]*)\)/,s=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=s.exec(l),i&&i[1])return i[1];if(i=a.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function u(n,r,i,o){var a=new e.SourceMapConsumer(n).originalPositionFor({line:i,column:o});return new t(a.name,r,a.source,a.line,a.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(n,r){var i="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(t.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var a="data:".length+o.length+",".length,s=t.substr(a),u=this._atob(s);this.sourceCache[t]=u,n(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,n(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){a(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),a(e);var r=e.fileName;this._get(r).then(function(i){var o=s(i);"/"!==o[0]&&(o=r.substring(0,r.lastIndexOf("/")+1)+o),this._get(o).then(function(n){var r=e.lineNumber,i=e.columnNumber;t(u(n,e.args,r,i))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new c(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var i=arguments.callee;i&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),i=[],o=2,a=r.length;a>o;o+=2){var s=n.exec(r[o]);s&&i.push(new e(void 0,void 0,s[2],s[1],void 0,r[o]))}return i},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),i=[],o=0,a=r.length;a>o;o+=2){var s=n.exec(r[o]);s&&i.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[o]))}return i},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",a=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(n=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,i[0],i[1],i[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return i(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,i){return i=r(o,i),new Promise(function(r){var o=e.parse(t);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(t){function r(n){t(e)}new n(i).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(t,n)["catch"](n),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e}}}); +(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function r(e){U=e}function o(e){W=e}function i(){return function(){process.nextTick(l)}}function s(){return function(){D(l)}}function a(){var e=0,t=new J(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;z>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}z=0}function f(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,s()}catch(n){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return te.error=t,te}}function d(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){W(function(e){var r=!1,o=d(n,t,function(n){r||(r=!0,t!==n?w(e,n):A(e,n))},function(t){r||(r=!0,E(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,E(e,o))},e)}function _(e,t){t._state===Q?A(e,t._result):t._state===ee?E(e,t._result):C(t,void 0,function(t){w(e,t)},function(t){E(e,t)})}function y(e,n){if(n.constructor===e.constructor)_(e,n);else{var r=m(n);r===te?E(e,te.error):void 0===r?A(e,n):t(r)?v(e,n,r):A(e,n)}}function w(t,n){t===n?E(t,h()):e(n)?y(t,n):A(t,n)}function b(e){e._onerror&&e._onerror(e._result),O(e)}function A(e,t){e._state===K&&(e._result=t,e._state=Q,0!==e._subscribers.length&&W(O,e))}function E(e,t){e._state===K&&(e._state=ee,e._result=t,W(b,e))}function C(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+Q]=n,o[i+ee]=r,0===i&&e._state&&W(O,e)}function O(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)C(r.resolve(e[s]),void 0,t,n);return o}function R(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(p);return w(n,e),n}function T(e){var t=this,n=new t(p);return E(n,e),n}function j(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function G(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||j(),this instanceof G||F(),M(this,e))}function B(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,U,q,I=$,z=0,W=({}.toString,function(e,t){X[z]=e,X[z+1]=t,z+=2,2===z&&(U?U(l):q())}),Z="undefined"!=typeof window?window:void 0,H=Z||{},J=H.MutationObserver||H.WebKitMutationObserver,V="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),Y="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=V?i():J?a():Y?u():void 0===Z&&"function"==typeof require?f():c();var K=void 0,Q=1,ee=2,te=new S,ne=new S;k.prototype._validateInput=function(e){return I(e)},k.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},k.prototype._init=function(){this._result=new Array(this.length)};var re=k;k.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===K&&t>o;o++)e._eachEntry(r[o],o)},k.prototype._eachEntry=function(e,t){var r=this,o=r._instanceConstructor;n(e)?e.constructor===o&&e._state!==K?(e._onerror=null,r._settledAt(e._state,t,e._result)):r._willSettleAt(o.resolve(e),t):(r._remaining--,r._result[t]=e)},k.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===K&&(r._remaining--,e===ee?E(o,n):r._result[t]=n),0===r._remaining&&A(o,r._result)},k.prototype._willSettleAt=function(e,t){var n=this;C(e,void 0,function(e){n._settledAt(Q,t,e)},function(e){n._settledAt(ee,t,e)})};var oe=P,ie=x,se=R,ae=T,ue=0,ce=G;G.all=oe,G.race=ie,G.resolve=se,G.reject=ae,G._setScheduler=r,G._setAsap=o,G._asap=W,G.prototype={constructor:G,then:function(e,t){var n=this,r=n._state;if(r===Q&&!e||r===ee&&!t)return this;var o=new this.constructor(p),i=n._result;if(r){var s=arguments[r-1];W(function(){N(r,o,s,i)})}else C(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=B,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),s=0;o>s;){var a,u;s in r&&(a=r[s],u=e.call(n,a,s,r),i[s]=u),s++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var s=t[i];e.call(o,s,i,t)&&r.push(s)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var s;r in o&&(s=o[r],e.call(n,s,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new s(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),r=a.getArg(t,"sources"),o=a.getArg(t,"names",[]),i=a.getArg(t,"sourceRoot",null),s=a.getArg(t,"sourcesContent",null),u=a.getArg(t,"mappings"),l=a.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),o=a.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=a.getArg(e,"offset"),n=a.getArg(t,"line"),o=a.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var s=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=s.length;h>p;p++){var g=s[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,a.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,s,u,c=1,p=0,h=0,g=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],A=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(n=new i,n.generatedLine=c,s=_;v>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(_,s),o=y[r])_+=r.length;else{for(o=[];s>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=a.getArg(e,"source");if(null!=this.sourceRoot&&(t=a.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=a?"/":"."),i?(i.path=n,o(i)):n}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),s=r(e);if(s&&(e=s.path||"/"),n&&!n.scheme)return s&&(n.scheme=s.scheme),o(n);if(n||t.match(m))return t;if(s&&!s.host&&!s.path)return s.host=t,o(s);var a="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return s?(s.path=a,o(s)):a}function a(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=s,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=a,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,s,a){var u=Math.floor((r-e)/2)+e,c=s(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,s,a):a==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,s,a):a==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var s=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(r[s],r[s-1],!0);)--s;return s}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),s=5,a=1<>>=s,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,a,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(t++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(a&c),a&=u,f+=a<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&s>=e?e-i+l:e==a?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,s){if(s>i){var a=r(i,s),u=i-1;n(e,a,s);for(var c=e[s],l=i;s>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,s)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e,t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return t(r.responseText);n(new Error("Unable to retrieve "+e))}},r.send()}function r(e,t,n){for(var r,o,i,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=a.exec(l),o&&o[1])return o[1];if(o=s.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function a(n,r,o,i,s){var a=new e.SourceMapConsumer(n),u=a.originalPositionFor({line:o,column:i}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+i.length+",".length,a=t.substr(s),u=this._atob(a);this.sourceCache[t]=u,n(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,n(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,o){i(e),this._get(e.fileName).then(function(o){var i=r(o,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),i(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),c="data:"===i.substr(0,5);"/"===i[0]||c||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(a(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new u(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",s=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0; +i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(s,a,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(n){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send({stack:e})})}}}); //# sourceMappingURL=stacktrace-with-polyfills.min.js.map \ No newline at end of file diff --git a/dist/stacktrace-with-polyfills.min.js.map b/dist/stacktrace-with-polyfills.min.js.map index a0ee213..2b23589 100644 --- a/dist/stacktrace-with-polyfills.min.js.map +++ b/dist/stacktrace-with-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","ES6Promise","bind","oThis","aArgs","slice","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","filter","t","res","val","push","forEach","n","amd","exports","StackFrame","isNaN","parseFloat","isFinite","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","getFunctionName","functionName","String","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","join","o","SourceMap","id","loaded","m","p","JSON","parse","replace","getArg","a","u","l","_version","normalize","_names","s","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","ArraySet","fromSourceMap","create","toArray","_sourceRoot","_generateSourcesContent","_file","__generatedMappings","__originalMappings","sort","compareByOriginalPositions","defineProperty","get","_parseMappings","_nextCharIsMappingSeparator","charAt","g","generatedLine","decode","generatedColumn","rest","source","at","originalLine","originalColumn","name","compareByGeneratedPositions","_findMapping","search","computeColumnSpans","_generatedMappings","lastGeneratedColumn","originalPositionFor","line","column","sourceContentFor","relative","has","indexOf","urlParse","scheme","path","generatedPositionFor","_originalMappings","lastColumn","allGeneratedPositionsFor","reverse","GENERATED_ORDER","ORIGINAL_ORDER","eachMapping","SourceMapConsumer","match","f","auth","host","port","split","splice","substr","h","urlGenerate","toSetString","fromSetString","Math","floor","_array","_set","add","hasOwnProperty","encode","StackTraceGPS","XMLHttpRequest","ActiveXObject","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","atob","Buffer","_get","offline","pinpoint","getMappedLocation","findFunctionName","substring","lastIndexOf","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","_","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument"],"mappings":"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","file":"stacktrace-with-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","if (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",t=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",r=this.getFileName()?\"@\"+this.getFileName():\"\",i=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",o=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p=\"\",n(0)}([function(e,n,t){var r;r=function(e,n,r){function i(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var t=o.getArg(n,\"version\"),r=o.getArg(n,\"sources\"),i=o.getArg(n,\"names\",[]),a=o.getArg(n,\"sourceRoot\",null),u=o.getArg(n,\"sourcesContent\",null),c=o.getArg(n,\"mappings\"),l=o.getArg(n,\"file\",null);if(t!=this._version)throw new Error(\"Unsupported version: \"+t);r=r.map(o.normalize),this._names=s.fromArray(i,!0),this._sources=s.fromArray(r,!0),this.sourceRoot=a,this.sourcesContent=u,this._mappings=c,this.file=l}var o=t(1),a=t(2),s=t(3).ArraySet,u=t(4);i.fromSourceMap=function(e){var n=Object.create(i.prototype);return n._names=s.fromArray(e._names.toArray(),!0),n._sources=s.fromArray(e._sources.toArray(),!0),n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file,n.__generatedMappings=e._mappings.toArray().slice(),n.__originalMappings=e._mappings.toArray().slice().sort(o.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?o.join(this.sourceRoot,e):e},this)}}),i.prototype.__generatedMappings=null,Object.defineProperty(i.prototype,\"_generatedMappings\",{get:function(){return this.__generatedMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__generatedMappings}}),i.prototype.__originalMappings=null,Object.defineProperty(i.prototype,\"_originalMappings\",{get:function(){return this.__originalMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__originalMappings}}),i.prototype._nextCharIsMappingSeparator=function(e){var n=e.charAt(0);return\";\"===n||\",\"===n},i.prototype._parseMappings=function(e,n){for(var t,r=1,i=0,a=0,s=0,c=0,l=0,g=e,p={};g.length>0;)if(\";\"===g.charAt(0))r++,g=g.slice(1),i=0;else if(\",\"===g.charAt(0))g=g.slice(1);else{if(t={},t.generatedLine=r,u.decode(g,p),t.generatedColumn=i+p.value,i=t.generatedColumn,g=p.rest,g.length>0&&!this._nextCharIsMappingSeparator(g)){if(u.decode(g,p),t.source=this._sources.at(c+p.value),c+=p.value,g=p.rest,0===g.length||this._nextCharIsMappingSeparator(g))throw new Error(\"Found a source, but no line and column\");if(u.decode(g,p),t.originalLine=a+p.value,a=t.originalLine,t.originalLine+=1,g=p.rest,0===g.length||this._nextCharIsMappingSeparator(g))throw new Error(\"Found a source and line, but no column\");u.decode(g,p),t.originalColumn=s+p.value,s=t.originalColumn,g=p.rest,g.length>0&&!this._nextCharIsMappingSeparator(g)&&(u.decode(g,p),t.name=this._names.at(l+p.value),l+=p.value,g=p.rest)}this.__generatedMappings.push(t),\"number\"==typeof t.originalLine&&this.__originalMappings.push(t)}this.__generatedMappings.sort(o.compareByGeneratedPositions),this.__originalMappings.sort(o.compareByOriginalPositions)},i.prototype._findMapping=function(e,n,t,r,i){if(e[t]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[t]);if(e[r]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[r]);return a.search(e,n,i)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var r=this._generatedMappings[t];if(r.generatedLine===n.generatedLine){var i=o.getArg(r,\"source\",null);return null!=i&&null!=this.sourceRoot&&(i=o.join(this.sourceRoot,i)),{source:i,line:o.getArg(r,\"originalLine\",null),column:o.getArg(r,\"originalColumn\",null),name:o.getArg(r,\"name\",null)}}}return{source:null,line:null,column:null,name:null}},i.prototype.sourceContentFor=function(e){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=o.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=o.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==n.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!n.path||\"/\"==n.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}throw new Error('\"'+e+'\" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n={source:o.getArg(e,\"source\"),originalLine:o.getArg(e,\"line\"),originalColumn:o.getArg(e,\"column\")};null!=this.sourceRoot&&(n.source=o.relative(this.sourceRoot,n.source));var t=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",o.compareByOriginalPositions);if(t>=0){var r=this._originalMappings[t];return{line:o.getArg(r,\"generatedLine\",null),column:o.getArg(r,\"generatedColumn\",null),lastColumn:o.getArg(r,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},i.prototype.allGeneratedPositionsFor=function(e){var n={source:o.getArg(e,\"source\"),originalLine:o.getArg(e,\"line\"),originalColumn:1/0};null!=this.sourceRoot&&(n.source=o.relative(this.sourceRoot,n.source));var t=[],r=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",o.compareByOriginalPositions);if(r>=0)for(var i=this._originalMappings[r];i&&i.originalLine===n.originalLine;)t.push({line:o.getArg(i,\"generatedLine\",null),column:o.getArg(i,\"generatedColumn\",null),lastColumn:o.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[--r];return t.reverse()},i.GENERATED_ORDER=1,i.ORIGINAL_ORDER=2,i.prototype.eachMapping=function(e,n,t){var r,a=n||null,s=t||i.GENERATED_ORDER;switch(s){case i.GENERATED_ORDER:r=this._generatedMappings;break;case i.ORIGINAL_ORDER:r=this._originalMappings;break;default:throw new Error(\"Unknown order of iteration.\")}var u=this.sourceRoot;r.map(function(e){var n=e.source;return null!=n&&null!=u&&(n=o.join(u,n)),{source:n,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name}}).forEach(e,a)},n.SourceMapConsumer=i}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,t){function r(e,n,t){if(n in e)return e[n];if(3===arguments.length)return t;throw new Error('\"'+n+'\" is a required argument.')}function i(e){var n=e.match(f);return n?{scheme:n[1],auth:n[2],host:n[3],port:n[4],path:n[5]}:null}function o(e){var n=\"\";return e.scheme&&(n+=e.scheme+\":\"),n+=\"//\",e.auth&&(n+=e.auth+\"@\"),e.host&&(n+=e.host),e.port&&(n+=\":\"+e.port),e.path&&(n+=e.path),n}function a(e){var n=e,t=i(e);if(t){if(!t.path)return e;n=t.path}for(var r,a=\"/\"===n.charAt(0),s=n.split(/\\/+/),u=0,c=s.length-1;c>=0;c--)r=s[c],\".\"===r?s.splice(c,1):\"..\"===r?u++:u>0&&(\"\"===r?(s.splice(c+1,u),u=0):(s.splice(c,2),u--));return n=s.join(\"/\"),\"\"===n&&(n=a?\"/\":\".\"),t?(t.path=n,o(t)):n}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var t=i(n),r=i(e);if(r&&(e=r.path||\"/\"),t&&!t.scheme)return r&&(t.scheme=r.scheme),o(t);if(t||n.match(m))return n;if(r&&!r.host&&!r.path)return r.host=n,o(r);var s=\"/\"===n.charAt(0)?n:a(e.replace(/\\/+$/,\"\")+\"/\"+n);return r?(r.path=s,o(r)):s}function u(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");var t=i(e);return\"/\"==n.charAt(0)&&t&&\"/\"==t.path?n.slice(1):0===n.indexOf(e+\"/\")?n.substr(e.length+1):n}function c(e){return\"$\"+e}function l(e){return e.substr(1)}function g(e,n){var t=e||\"\",r=n||\"\";return(t>r)-(r>t)}function p(e,n,t){var r;return(r=g(e.source,n.source))?r:(r=e.originalLine-n.originalLine)?r:(r=e.originalColumn-n.originalColumn,r||t?r:(r=g(e.name,n.name))?r:(r=e.generatedLine-n.generatedLine,r?r:e.generatedColumn-n.generatedColumn))}function h(e,n,t){var r;return(r=e.generatedLine-n.generatedLine)?r:(r=e.generatedColumn-n.generatedColumn,r||t?r:(r=g(e.source,n.source))?r:(r=e.originalLine-n.originalLine)?r:(r=e.originalColumn-n.originalColumn,r?r:g(e.name,n.name)))}n.getArg=r;var f=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=i,n.urlGenerate=o,n.normalize=a,n.join=s,n.relative=u,n.toSetString=c,n.fromSetString=l,n.compareByOriginalPositions=p,n.compareByGeneratedPositions=h}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,t){function r(e,n,t,i,o){var a=Math.floor((n-e)/2)+e,s=o(t,i[a],!0);return 0===s?a:s>0?n-a>1?r(a,n,t,i,o):a:a-e>1?r(e,a,t,i,o):0>e?-1:e}n.search=function(e,n,t){return 0===n.length?-1:r(-1,n.length,e,n,t)}}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,r){function i(){this._array=[],this._set={}}var o=t(1);i.fromArray=function(e,n){for(var t=new i,r=0,o=e.length;o>r;r++)t.add(e[r],n);return t},i.prototype.add=function(e,n){var t=this.has(e),r=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[o.toSetString(e)]=r)},i.prototype.has=function(e){return Object.prototype.hasOwnProperty.call(this._set,o.toSetString(e))},i.prototype.indexOf=function(e){if(this.has(e))return this._set[o.toSetString(e)];throw new Error('\"'+e+'\" is not in the set.')},i.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var a=t(5),s=5,u=1<>>=s,r>0&&(n|=l),t+=a.encode(n);while(r>0);return t},n.decode=function(e,n){var t,r,i=0,u=e.length,g=0,p=0;do{if(i>=u)throw new Error(\"Expected more digits in base 64 VLQ value.\");r=a.decode(e.charAt(i++)),t=!!(r&l),r&=c,g+=r<=200&&i.status<400)return n(i.responseText);r(new Error(\"Unable to retrieve \"+e))}},i.send()}function i(e,n,t){for(var r,i,o,a=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,s=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,c=e.split(\"\\n\"),l=\"\",g=Math.min(n,20),p=0;g>p;++p)if(r=c[n-p-1],o=r.indexOf(\"//\"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=s.exec(l),i&&i[1])return i[1];if(i=a.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function u(t,r,i,o){var a=new e.SourceMapConsumer(t).originalPositionFor({line:i,column:o});return new n(a.name,r,a.source,a.line,a.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(t,r){var i=\"data:\"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error(\"Cannot make network requests in offline mode\"));else if(i){var o=\"application/json;base64\";if(n.substr(5,o.length)!==o)r(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var a=\"data:\".length+o.length+\",\".length,s=n.substr(a),u=this._atob(s);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)[\"catch\"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){a(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){o(),a(e);var r=e.fileName;this._get(r).then(function(i){var o=s(i);\"/\"!==o[0]&&(o=r.substring(0,r.lastIndexOf(\"/\")+1)+o),this._get(o).then(function(t){var r=e.lineNumber,i=e.columnNumber;n(u(t,e.args,r,i))},t)[\"catch\"](t)}.bind(this),t)[\"catch\"](t)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n var args = [].slice.call(curr['arguments']);\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","ES6Promise","bind","oThis","aArgs","slice","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","filter","t","res","val","push","forEach","n","amd","exports","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","String","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","p","JSON","parse","replace","sections","s","a","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","split","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","atob","Buffer","_get","offline","pinpoint","getMappedLocation","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","if (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n var args = [].slice.call(curr['arguments']);\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send({stack: stackframes});\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.js b/dist/stacktrace.js index 214f2bf..fdfef70 100644 --- a/dist/stacktrace.js +++ b/dist/stacktrace.js @@ -155,6 +155,31 @@ // Function not instrumented, return original return fn; } + }, + + /** + * Given an Array of StackFrames, serialize and POST to given URL. + * + * @param stackframes - Array[StackFrame] + * @param url - URL as String + */ + report: function StackTrace$$report(stackframes, url) { + return new Promise(function (resolve, reject) { + var req = new XMLHttpRequest(); + req.onerror = reject; + req.onreadystatechange = function onreadystatechange() { + if (req.readyState === 4) { + if (req.status >= 200 && req.status < 400) { + resolve(req.responseText); + } else { + reject(new Error('POST to ' + url + ' failed with status: ' + req.status)); + } + } + }; + req.open('post', url); + req.setRequestHeader('Content-Type', 'application/json'); + req.send({stack: stackframes}); + }); } }; })); diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index 8894f23..5fccc23 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,r,n,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==r&&this.setFileName(r),void 0!==n&&this.setLineNumber(n),void 0!==i&&this.setColumnNumber(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},toString:function(){var t=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",n=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+r+n+i+o}},t});var SourceMap=function(e){function t(n){if(r[n])return r[n].exports;var i=r[n]={exports:{},id:n,loaded:!1};return e[n].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){var n;n=function(e,t,n){function i(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=o.getArg(t,"version"),n=o.getArg(t,"sources"),i=o.getArg(t,"names",[]),a=o.getArg(t,"sourceRoot",null),u=o.getArg(t,"sourcesContent",null),c=o.getArg(t,"mappings"),l=o.getArg(t,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);n=n.map(o.normalize),this._names=s.fromArray(i,!0),this._sources=s.fromArray(n,!0),this.sourceRoot=a,this.sourcesContent=u,this._mappings=c,this.file=l}var o=r(1),a=r(2),s=r(3).ArraySet,u=r(4);i.fromSourceMap=function(e){var t=Object.create(i.prototype);return t._names=s.fromArray(e._names.toArray(),!0),t._sources=s.fromArray(e._sources.toArray(),!0),t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file,t.__generatedMappings=e._mappings.toArray().slice(),t.__originalMappings=e._mappings.toArray().slice().sort(o.compareByOriginalPositions),t},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?o.join(this.sourceRoot,e):e},this)}}),i.prototype.__generatedMappings=null,Object.defineProperty(i.prototype,"_generatedMappings",{get:function(){return this.__generatedMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__generatedMappings}}),i.prototype.__originalMappings=null,Object.defineProperty(i.prototype,"_originalMappings",{get:function(){return this.__originalMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__originalMappings}}),i.prototype._nextCharIsMappingSeparator=function(e){var t=e.charAt(0);return";"===t||","===t},i.prototype._parseMappings=function(e,t){for(var r,n=1,i=0,a=0,s=0,c=0,l=0,p=e,f={};p.length>0;)if(";"===p.charAt(0))n++,p=p.slice(1),i=0;else if(","===p.charAt(0))p=p.slice(1);else{if(r={},r.generatedLine=n,u.decode(p,f),r.generatedColumn=i+f.value,i=r.generatedColumn,p=f.rest,p.length>0&&!this._nextCharIsMappingSeparator(p)){if(u.decode(p,f),r.source=this._sources.at(c+f.value),c+=f.value,p=f.rest,0===p.length||this._nextCharIsMappingSeparator(p))throw new Error("Found a source, but no line and column");if(u.decode(p,f),r.originalLine=a+f.value,a=r.originalLine,r.originalLine+=1,p=f.rest,0===p.length||this._nextCharIsMappingSeparator(p))throw new Error("Found a source and line, but no column");u.decode(p,f),r.originalColumn=s+f.value,s=r.originalColumn,p=f.rest,p.length>0&&!this._nextCharIsMappingSeparator(p)&&(u.decode(p,f),r.name=this._names.at(l+f.value),l+=f.value,p=f.rest)}this.__generatedMappings.push(r),"number"==typeof r.originalLine&&this.__originalMappings.push(r)}this.__generatedMappings.sort(o.compareByGeneratedPositions),this.__originalMappings.sort(o.compareByOriginalPositions)},i.prototype._findMapping=function(e,t,r,n,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[n]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[n]);return a.search(e,t,i)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var n=this._generatedMappings[r];if(n.generatedLine===t.generatedLine){var i=o.getArg(n,"source",null);return null!=i&&null!=this.sourceRoot&&(i=o.join(this.sourceRoot,i)),{source:i,line:o.getArg(n,"originalLine",null),column:o.getArg(n,"originalColumn",null),name:o.getArg(n,"name",null)}}}return{source:null,line:null,column:null,name:null}},i.prototype.sourceContentFor=function(e){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=o.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=o.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var t={source:o.getArg(e,"source"),originalLine:o.getArg(e,"line"),originalColumn:o.getArg(e,"column")};null!=this.sourceRoot&&(t.source=o.relative(this.sourceRoot,t.source));var r=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions);if(r>=0){var n=this._originalMappings[r];return{line:o.getArg(n,"generatedLine",null),column:o.getArg(n,"generatedColumn",null),lastColumn:o.getArg(n,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},i.prototype.allGeneratedPositionsFor=function(e){var t={source:o.getArg(e,"source"),originalLine:o.getArg(e,"line"),originalColumn:1/0};null!=this.sourceRoot&&(t.source=o.relative(this.sourceRoot,t.source));var r=[],n=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions);if(n>=0)for(var i=this._originalMappings[n];i&&i.originalLine===t.originalLine;)r.push({line:o.getArg(i,"generatedLine",null),column:o.getArg(i,"generatedColumn",null),lastColumn:o.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[--n];return r.reverse()},i.GENERATED_ORDER=1,i.ORIGINAL_ORDER=2,i.prototype.eachMapping=function(e,t,r){var n,a=t||null,s=r||i.GENERATED_ORDER;switch(s){case i.GENERATED_ORDER:n=this._generatedMappings;break;case i.ORIGINAL_ORDER:n=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var u=this.sourceRoot;n.map(function(e){var t=e.source;return null!=t&&null!=u&&(t=o.join(u,t)),{source:t,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name}}).forEach(e,a)},t.SourceMapConsumer=i}.call(t,r,t,e),!(void 0!==n&&(e.exports=n))},function(e,t,r){var n;n=function(e,t,r){function n(e,t,r){if(t in e)return e[t];if(3===arguments.length)return r;throw new Error('"'+t+'" is a required argument.')}function i(e){var t=e.match(g);return t?{scheme:t[1],auth:t[2],host:t[3],port:t[4],path:t[5]}:null}function o(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth&&(t+=e.auth+"@"),e.host&&(t+=e.host),e.port&&(t+=":"+e.port),e.path&&(t+=e.path),t}function a(e){var t=e,r=i(e);if(r){if(!r.path)return e;t=r.path}for(var n,a="/"===t.charAt(0),s=t.split(/\/+/),u=0,c=s.length-1;c>=0;c--)n=s[c],"."===n?s.splice(c,1):".."===n?u++:u>0&&(""===n?(s.splice(c+1,u),u=0):(s.splice(c,2),u--));return t=s.join("/"),""===t&&(t=a?"/":"."),r?(r.path=t,o(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var r=i(t),n=i(e);if(n&&(e=n.path||"/"),r&&!r.scheme)return n&&(r.scheme=n.scheme),o(r);if(r||t.match(m))return t;if(n&&!n.host&&!n.path)return n.host=t,o(n);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return n?(n.path=s,o(n)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");var r=i(e);return"/"==t.charAt(0)&&r&&"/"==r.path?t.slice(1):0===t.indexOf(e+"/")?t.substr(e.length+1):t}function c(e){return"$"+e}function l(e){return e.substr(1)}function p(e,t){var r=e||"",n=t||"";return(r>n)-(n>r)}function f(e,t,r){var n;return(n=p(e.source,t.source))?n:(n=e.originalLine-t.originalLine)?n:(n=e.originalColumn-t.originalColumn,n||r?n:(n=p(e.name,t.name))?n:(n=e.generatedLine-t.generatedLine,n?n:e.generatedColumn-t.generatedColumn))}function h(e,t,r){var n;return(n=e.generatedLine-t.generatedLine)?n:(n=e.generatedColumn-t.generatedColumn,n||r?n:(n=p(e.source,t.source))?n:(n=e.originalLine-t.originalLine)?n:(n=e.originalColumn-t.originalColumn,n?n:p(e.name,t.name)))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=i,t.urlGenerate=o,t.normalize=a,t.join=s,t.relative=u,t.toSetString=c,t.fromSetString=l,t.compareByOriginalPositions=f,t.compareByGeneratedPositions=h}.call(t,r,t,e),!(void 0!==n&&(e.exports=n))},function(e,t,r){var n;n=function(e,t,r){function n(e,t,r,i,o){var a=Math.floor((t-e)/2)+e,s=o(r,i[a],!0);return 0===s?a:s>0?t-a>1?n(a,t,r,i,o):a:a-e>1?n(e,a,r,i,o):0>e?-1:e}t.search=function(e,t,r){return 0===t.length?-1:n(-1,t.length,e,t,r)}}.call(t,r,t,e),!(void 0!==n&&(e.exports=n))},function(e,t,r){var n;n=function(e,t,n){function i(){this._array=[],this._set={}}var o=r(1);i.fromArray=function(e,t){for(var r=new i,n=0,o=e.length;o>n;n++)r.add(e[n],t);return r},i.prototype.add=function(e,t){var r=this.has(e),n=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[o.toSetString(e)]=n)},i.prototype.has=function(e){return Object.prototype.hasOwnProperty.call(this._set,o.toSetString(e))},i.prototype.indexOf=function(e){if(this.has(e))return this._set[o.toSetString(e)];throw new Error('"'+e+'" is not in the set.')},i.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),r=e>>1;return t?-r:r}var a=r(5),s=5,u=1<>>=s,n>0&&(t|=l),r+=a.encode(t);while(n>0);return r},t.decode=function(e,t){var r,n,i=0,u=e.length,p=0,f=0;do{if(i>=u)throw new Error("Expected more digits in base 64 VLQ value.");n=a.decode(e.charAt(i++)),r=!!(n&l),n&=c,p+=n<=200&&i.status<400)return t(i.responseText);n(new Error("Unable to retrieve "+e))}},i.send()}function i(e,t,r){for(var n,i,o,a=/function\s+([^(]*?)\s*\(([^)]*)\)/,s=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",p=Math.min(t,20),f=0;p>f;++f)if(n=c[t-f-1],o=n.indexOf("//"),o>=0&&(n=n.substr(0,o)),n){if(l=n+l,i=s.exec(l),i&&i[1])return i[1];if(i=a.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function u(r,n,i,o){var a=new e.SourceMapConsumer(r).originalPositionFor({line:i,column:o});return new t(a.name,n,a.source,a.line,a.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(r,n){var i="data:"===t.substr(0,5);if(this.sourceCache[t])r(this.sourceCache[t]);else if(e.offline&&!i)n(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(t.substr(5,o.length)!==o)n(new Error("The encoding of the inline sourcemap is not supported"));else{var a="data:".length+o.length+",".length,s=t.substr(a),u=this._atob(s);this.sourceCache[t]=u,r(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,r(e)}.bind(this),n)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,r){this.getMappedLocation(e).then(function(e){function r(){t(e)}this.findFunctionName(e).then(t,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,n){a(e),this._get(e.fileName).then(function(n){var o=i(n,e.lineNumber,e.columnNumber);r(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},n)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,r){o(),a(e);var n=e.fileName;this._get(n).then(function(i){var o=s(i);"/"!==o[0]&&(o=n.substring(0,n.lastIndexOf("/")+1)+o),this._get(o).then(function(r){var n=e.lineNumber,i=e.columnNumber;t(u(r,e.args,n,i))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new c(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var r=[],n=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(n=t.maxStackSize);for(var i=arguments.callee;i&&r.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,n=t.message.split("\n"),i=[],o=2,a=n.length;a>o;o+=2){var s=r.exec(n[o]);s&&i.push(new e(void 0,void 0,s[2],s[1],void 0,n[o]))}return i},parseOpera10:function(t){for(var r=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,n=t.stacktrace.split("\n"),i=[],o=0,a=n.length;a>o;o+=2){var s=r.exec(n[o]);s&&i.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,n[o]))}return i},parseOpera11:function(r){return r.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var r,n=t.split("@"),i=this.extractLocation(n.pop()),o=n.shift()||"",a=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(r=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new e(a,s,i[0],i[1],i[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,r){function n(e,t){var r={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(r[t]=e[t]);return r}),r}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return i(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,i){return i=n(o,i),new Promise(function(n){var o=e.parse(t);"function"==typeof i.filter&&(o=o.filter(i.filter)),n(Promise.all(o.map(function(e){return new Promise(function(t){function n(r){t(e)}new r(i).pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=n(o,e);var r=t.backtrace(e);return"function"==typeof e.filter&&(r=r.filter(e.filter)),Promise.resolve(r)},instrument:function(e,t,r,n){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{this.get().then(t,r)["catch"](r),e.apply(n||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(t,r)["catch"](r),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e}}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i,o){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i),void 0!==o&&this.setSource(o)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new i(n)}function i(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),i=a.getArg(n,"names",[]),o=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return o&&a.isAbsolute(o)&&a.isAbsolute(e)?a.relative(o,e):e}),this._names=c.fromArray(i,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=s,this._mappings=u,this.file=l}function o(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),i=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var o={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),i=a.getArg(n,"column");if(t=0){var o=this._originalMappings[i];if(void 0===e.column)for(var s=o.originalLine;o&&o.originalLine===s;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i];else for(var c=o.originalColumn;o&&o.originalLine===n&&o.originalColumn==c;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var n=Object.create(i.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new o;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,n){for(var t,r,i,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new o,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),i=y[r])v+=r.length;else{for(i=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");y[r]=i}t.generatedColumn=p+i[0],p=t.generatedColumn,i.length>1&&(t.source=m+i[1],m+=i[1],t.originalLine=g+i[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+i[3],h=t.originalColumn,i.length>4&&(t.name=d+i[4],d+=i[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},i.prototype._findMapping=function(e,n,t,r,i,o){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,i,o)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[t];if(i.generatedLine===n.generatedLine){var o=a.getArg(i,"source",null);null!==o&&(o=this._sources.at(o),null!=this.sourceRoot&&(o=a.join(this.sourceRoot,o)));var s=a.getArg(i,"name",null);return null!==s&&(s=this._names.at(s)),{source:o,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},i.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===t.source)return{line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),o?(o.path=t,i(o)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),i(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,i(s);var a="/"===n.charAt(0)?n:o(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,i(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=i,n.normalize=o,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,i,o,s,a){var u=Math.floor((r-e)/2)+e,c=s(i,o[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,i,o,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,i,o,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,e,r,i,o||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var i=t(1);r.fromArray=function(e,n){for(var t=new r,i=0,o=e.length;o>i;i++)t.add(e[i],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=i.toSetString(e),r=this._set.hasOwnProperty(t),o=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=o)},r.prototype.has=function(e){var n=i.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=i.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var n=1===(1&e),t=e>>1;return n?-t:t}var o=t(5),s=5,a=1<>>=s,i>0&&(n|=c),t+=o.encode(n);while(i>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=o.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&i>=e?e-r+c:e>=o&&s>=e?e-o+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,o,s){if(s>o){var a=r(o,s),u=o-1;t(e,a,s);for(var c=e[s],l=o;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;i(e,n,o,f-1),i(e,n,f+1,s)}}n.quickSort=function(e,n){i(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e,n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return n(r.responseText);t(new Error("Unable to retrieve "+e))}},r.send()}function r(e,n,t){for(var r,i,o,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=a.exec(l),i&&i[1])return i[1];if(i=s.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function o(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(t,r,i,o,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:i,column:o}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=t,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(n){return new Promise(function(t,r){var i="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(n.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+o.length+",".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,i){o(e),this._get(e.fileName).then(function(i){var o=r(i,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},i)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),o(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(i){var o=s(i),c="data:"===o.substr(0,5);"/"===o[0]||c||(o=u.substring(0,u.lastIndexOf("/")+1)+o),this._get(o).then(function(t){var i=e.lineNumber,o=e.columnNumber;n(a(t,e.args,i,o,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new u(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var i=arguments.callee;i&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),i=[],o=2,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),i=[],o=0,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",s=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(t=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,i[0],i[1],i[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return i(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,i){return i=r(o,i),new Promise(function(r){var o=e.parse(n);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(n){function r(t){n(e)}new t(i).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(n,t)["catch"](t),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):r(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json"),i.send({stack:e})})}}}); //# sourceMappingURL=stacktrace.min.js.map \ No newline at end of file diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 38a0c87..fe5df35 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","t","r","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","join","o","SourceMap","id","loaded","m","c","p","JSON","parse","replace","getArg","a","u","l","_version","Error","map","normalize","_names","s","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","ArraySet","fromSourceMap","create","toArray","_sourceRoot","_generateSourcesContent","_file","__generatedMappings","slice","__originalMappings","sort","compareByOriginalPositions","defineProperty","get","_parseMappings","_nextCharIsMappingSeparator","charAt","g","length","generatedLine","decode","generatedColumn","value","rest","source","at","originalLine","originalColumn","name","push","compareByGeneratedPositions","_findMapping","search","computeColumnSpans","_generatedMappings","lastGeneratedColumn","originalPositionFor","line","column","sourceContentFor","relative","has","indexOf","urlParse","scheme","path","generatedPositionFor","_originalMappings","lastColumn","allGeneratedPositionsFor","reverse","GENERATED_ORDER","ORIGINAL_ORDER","eachMapping","forEach","SourceMapConsumer","arguments","match","f","auth","host","port","split","splice","substr","h","urlGenerate","toSetString","fromSetString","Math","floor","_array","_set","add","hasOwnProperty","encode","require","StackTraceGPS","XMLHttpRequest","ActiveXObject","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","window","atob","Buffer","_get","Promise","offline","bind","pinpoint","getMappedLocation","then","findFunctionName","substring","lastIndexOf","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","_","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",t=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",r=this.getFileName()?\"@\"+this.getFileName():\"\",i=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",o=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p=\"\",n(0)}([function(e,n,t){var r;r=function(e,n,r){function i(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var t=o.getArg(n,\"version\"),r=o.getArg(n,\"sources\"),i=o.getArg(n,\"names\",[]),a=o.getArg(n,\"sourceRoot\",null),u=o.getArg(n,\"sourcesContent\",null),c=o.getArg(n,\"mappings\"),l=o.getArg(n,\"file\",null);if(t!=this._version)throw new Error(\"Unsupported version: \"+t);r=r.map(o.normalize),this._names=s.fromArray(i,!0),this._sources=s.fromArray(r,!0),this.sourceRoot=a,this.sourcesContent=u,this._mappings=c,this.file=l}var o=t(1),a=t(2),s=t(3).ArraySet,u=t(4);i.fromSourceMap=function(e){var n=Object.create(i.prototype);return n._names=s.fromArray(e._names.toArray(),!0),n._sources=s.fromArray(e._sources.toArray(),!0),n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file,n.__generatedMappings=e._mappings.toArray().slice(),n.__originalMappings=e._mappings.toArray().slice().sort(o.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?o.join(this.sourceRoot,e):e},this)}}),i.prototype.__generatedMappings=null,Object.defineProperty(i.prototype,\"_generatedMappings\",{get:function(){return this.__generatedMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__generatedMappings}}),i.prototype.__originalMappings=null,Object.defineProperty(i.prototype,\"_originalMappings\",{get:function(){return this.__originalMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__originalMappings}}),i.prototype._nextCharIsMappingSeparator=function(e){var n=e.charAt(0);return\";\"===n||\",\"===n},i.prototype._parseMappings=function(e,n){for(var t,r=1,i=0,a=0,s=0,c=0,l=0,g=e,p={};g.length>0;)if(\";\"===g.charAt(0))r++,g=g.slice(1),i=0;else if(\",\"===g.charAt(0))g=g.slice(1);else{if(t={},t.generatedLine=r,u.decode(g,p),t.generatedColumn=i+p.value,i=t.generatedColumn,g=p.rest,g.length>0&&!this._nextCharIsMappingSeparator(g)){if(u.decode(g,p),t.source=this._sources.at(c+p.value),c+=p.value,g=p.rest,0===g.length||this._nextCharIsMappingSeparator(g))throw new Error(\"Found a source, but no line and column\");if(u.decode(g,p),t.originalLine=a+p.value,a=t.originalLine,t.originalLine+=1,g=p.rest,0===g.length||this._nextCharIsMappingSeparator(g))throw new Error(\"Found a source and line, but no column\");u.decode(g,p),t.originalColumn=s+p.value,s=t.originalColumn,g=p.rest,g.length>0&&!this._nextCharIsMappingSeparator(g)&&(u.decode(g,p),t.name=this._names.at(l+p.value),l+=p.value,g=p.rest)}this.__generatedMappings.push(t),\"number\"==typeof t.originalLine&&this.__originalMappings.push(t)}this.__generatedMappings.sort(o.compareByGeneratedPositions),this.__originalMappings.sort(o.compareByOriginalPositions)},i.prototype._findMapping=function(e,n,t,r,i){if(e[t]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[t]);if(e[r]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[r]);return a.search(e,n,i)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var r=this._generatedMappings[t];if(r.generatedLine===n.generatedLine){var i=o.getArg(r,\"source\",null);return null!=i&&null!=this.sourceRoot&&(i=o.join(this.sourceRoot,i)),{source:i,line:o.getArg(r,\"originalLine\",null),column:o.getArg(r,\"originalColumn\",null),name:o.getArg(r,\"name\",null)}}}return{source:null,line:null,column:null,name:null}},i.prototype.sourceContentFor=function(e){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=o.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=o.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==n.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!n.path||\"/\"==n.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}throw new Error('\"'+e+'\" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n={source:o.getArg(e,\"source\"),originalLine:o.getArg(e,\"line\"),originalColumn:o.getArg(e,\"column\")};null!=this.sourceRoot&&(n.source=o.relative(this.sourceRoot,n.source));var t=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",o.compareByOriginalPositions);if(t>=0){var r=this._originalMappings[t];return{line:o.getArg(r,\"generatedLine\",null),column:o.getArg(r,\"generatedColumn\",null),lastColumn:o.getArg(r,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},i.prototype.allGeneratedPositionsFor=function(e){var n={source:o.getArg(e,\"source\"),originalLine:o.getArg(e,\"line\"),originalColumn:1/0};null!=this.sourceRoot&&(n.source=o.relative(this.sourceRoot,n.source));var t=[],r=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",o.compareByOriginalPositions);if(r>=0)for(var i=this._originalMappings[r];i&&i.originalLine===n.originalLine;)t.push({line:o.getArg(i,\"generatedLine\",null),column:o.getArg(i,\"generatedColumn\",null),lastColumn:o.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[--r];return t.reverse()},i.GENERATED_ORDER=1,i.ORIGINAL_ORDER=2,i.prototype.eachMapping=function(e,n,t){var r,a=n||null,s=t||i.GENERATED_ORDER;switch(s){case i.GENERATED_ORDER:r=this._generatedMappings;break;case i.ORIGINAL_ORDER:r=this._originalMappings;break;default:throw new Error(\"Unknown order of iteration.\")}var u=this.sourceRoot;r.map(function(e){var n=e.source;return null!=n&&null!=u&&(n=o.join(u,n)),{source:n,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name}}).forEach(e,a)},n.SourceMapConsumer=i}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,t){function r(e,n,t){if(n in e)return e[n];if(3===arguments.length)return t;throw new Error('\"'+n+'\" is a required argument.')}function i(e){var n=e.match(f);return n?{scheme:n[1],auth:n[2],host:n[3],port:n[4],path:n[5]}:null}function o(e){var n=\"\";return e.scheme&&(n+=e.scheme+\":\"),n+=\"//\",e.auth&&(n+=e.auth+\"@\"),e.host&&(n+=e.host),e.port&&(n+=\":\"+e.port),e.path&&(n+=e.path),n}function a(e){var n=e,t=i(e);if(t){if(!t.path)return e;n=t.path}for(var r,a=\"/\"===n.charAt(0),s=n.split(/\\/+/),u=0,c=s.length-1;c>=0;c--)r=s[c],\".\"===r?s.splice(c,1):\"..\"===r?u++:u>0&&(\"\"===r?(s.splice(c+1,u),u=0):(s.splice(c,2),u--));return n=s.join(\"/\"),\"\"===n&&(n=a?\"/\":\".\"),t?(t.path=n,o(t)):n}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var t=i(n),r=i(e);if(r&&(e=r.path||\"/\"),t&&!t.scheme)return r&&(t.scheme=r.scheme),o(t);if(t||n.match(m))return n;if(r&&!r.host&&!r.path)return r.host=n,o(r);var s=\"/\"===n.charAt(0)?n:a(e.replace(/\\/+$/,\"\")+\"/\"+n);return r?(r.path=s,o(r)):s}function u(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");var t=i(e);return\"/\"==n.charAt(0)&&t&&\"/\"==t.path?n.slice(1):0===n.indexOf(e+\"/\")?n.substr(e.length+1):n}function c(e){return\"$\"+e}function l(e){return e.substr(1)}function g(e,n){var t=e||\"\",r=n||\"\";return(t>r)-(r>t)}function p(e,n,t){var r;return(r=g(e.source,n.source))?r:(r=e.originalLine-n.originalLine)?r:(r=e.originalColumn-n.originalColumn,r||t?r:(r=g(e.name,n.name))?r:(r=e.generatedLine-n.generatedLine,r?r:e.generatedColumn-n.generatedColumn))}function h(e,n,t){var r;return(r=e.generatedLine-n.generatedLine)?r:(r=e.generatedColumn-n.generatedColumn,r||t?r:(r=g(e.source,n.source))?r:(r=e.originalLine-n.originalLine)?r:(r=e.originalColumn-n.originalColumn,r?r:g(e.name,n.name)))}n.getArg=r;var f=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=i,n.urlGenerate=o,n.normalize=a,n.join=s,n.relative=u,n.toSetString=c,n.fromSetString=l,n.compareByOriginalPositions=p,n.compareByGeneratedPositions=h}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,t){function r(e,n,t,i,o){var a=Math.floor((n-e)/2)+e,s=o(t,i[a],!0);return 0===s?a:s>0?n-a>1?r(a,n,t,i,o):a:a-e>1?r(e,a,t,i,o):0>e?-1:e}n.search=function(e,n,t){return 0===n.length?-1:r(-1,n.length,e,n,t)}}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,r){function i(){this._array=[],this._set={}}var o=t(1);i.fromArray=function(e,n){for(var t=new i,r=0,o=e.length;o>r;r++)t.add(e[r],n);return t},i.prototype.add=function(e,n){var t=this.has(e),r=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[o.toSetString(e)]=r)},i.prototype.has=function(e){return Object.prototype.hasOwnProperty.call(this._set,o.toSetString(e))},i.prototype.indexOf=function(e){if(this.has(e))return this._set[o.toSetString(e)];throw new Error('\"'+e+'\" is not in the set.')},i.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var a=t(5),s=5,u=1<>>=s,r>0&&(n|=l),t+=a.encode(n);while(r>0);return t},n.decode=function(e,n){var t,r,i=0,u=e.length,g=0,p=0;do{if(i>=u)throw new Error(\"Expected more digits in base 64 VLQ value.\");r=a.decode(e.charAt(i++)),t=!!(r&l),r&=c,g+=r<=200&&i.status<400)return n(i.responseText);r(new Error(\"Unable to retrieve \"+e))}},i.send()}function i(e,n,t){for(var r,i,o,a=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,s=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,c=e.split(\"\\n\"),l=\"\",g=Math.min(n,20),p=0;g>p;++p)if(r=c[n-p-1],o=r.indexOf(\"//\"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=s.exec(l),i&&i[1])return i[1];if(i=a.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function u(t,r,i,o){var a=new e.SourceMapConsumer(t).originalPositionFor({line:i,column:o});return new n(a.name,r,a.source,a.line,a.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(t,r){var i=\"data:\"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error(\"Cannot make network requests in offline mode\"));else if(i){var o=\"application/json;base64\";if(n.substr(5,o.length)!==o)r(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var a=\"data:\".length+o.length+\",\".length,s=n.substr(a),u=this._atob(s);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)[\"catch\"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){a(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){o(),a(e);var r=e.fileName;this._get(r).then(function(i){var o=s(i);\"/\"!==o[0]&&(o=r.substring(0,r.lastIndexOf(\"/\")+1)+o),this._get(o).then(function(t){var r=e.lineNumber,i=e.columnNumber;n(u(t,e.args,r,i))},t)[\"catch\"](t)}.bind(this),t)[\"catch\"](t)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n var args = [].slice.call(curr['arguments']);\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","window","atob","Buffer","_get","Promise","offline","bind","pinpoint","getMappedLocation","then","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n var args = [].slice.call(curr['arguments']);\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send({stack: stackframes});\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/package.json b/package.json index 43bcd40..08cafc7 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "Victor Homyakov (https://github.com/victor-homyakov)", "Oliver Salzburg (https://github.com/oliversalzburg)" ], - "version": "0.6.4", + "version": "1.0.0", "license": "SEE LICENSE IN LICENSE", "keywords": [ "stacktrace", @@ -34,12 +34,12 @@ "gulp-coveralls": "^0.1.4", "gulp-jshint": "^1.11.2", "gulp-sourcemaps": "^1.5.2", - "gulp-uglify": "^1.2.0", + "gulp-uglify": "^1.4.1", "jasmine-node": "~1.14", "jasmine-sinon": "^0.4.0", "karma": "^0.13.9", "karma-chrome-launcher": "^0.2.0", - "karma-coverage": "^0.5.0", + "karma-coverage": "^0.5.2", "karma-firefox-launcher": "^0.1.6", "karma-ie-launcher": "^0.2.0", "karma-jasmine": "^0.1.5", @@ -48,12 +48,20 @@ "karma-safari-launcher": "^0.1.1", "karma-sauce-launcher": "^0.2.14", "karma-sinon": "^1.0.4", - "run-sequence": "^1.1.2" + "run-sequence": "^1.1.2", + "sinon": "^1.16.1" }, "bugs": { "url": "https://github.com/stacktracejs/stacktrace.js/issues" }, "main": "./stacktrace.js", + "files": [ + "LICENSE", + "CHANGELOG.md", + "README.md", + "stacktrace.js", + "dist/" + ], "scripts": { "test": "gulp test" } From e59fda3bd6f976308ad23f35ac988a23643b60f1 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Mon, 28 Sep 2015 08:19:56 -0700 Subject: [PATCH 005/110] Update Migration Guide link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 51070a2..b732e4d 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ stacktrace.js uses browsers' `Error.stack` mechanism to generate stack traces, p [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) to return an Array of [StackFrames](https://github.com/stacktracejs/stackframe). -#### Upgrading? Check the [0.x -> 1.x Migration Guide](http://www.stacktracejs.com/docs/v0-migration-guide) +#### Upgrading? Check the [0.x -> 1.x Migration Guide](http://www.stacktracejs.com/#!/docs/v0-migration-guide) ## Usage #### Get a stack trace from current location From 302e0bcb9a0322fc7579f17294d215361c65b8cf Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Wed, 30 Sep 2015 07:18:29 -0700 Subject: [PATCH 006/110] Update dependencies. --- dist/stacktrace-with-polyfills.min.js | 4 ++-- dist/stacktrace-with-polyfills.min.js.map | 2 +- dist/stacktrace.min.js | 4 ++-- dist/stacktrace.min.js.map | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dist/stacktrace-with-polyfills.min.js b/dist/stacktrace-with-polyfills.min.js index c8b8fbf..ee03a60 100644 --- a/dist/stacktrace-with-polyfills.min.js +++ b/dist/stacktrace-with-polyfills.min.js @@ -1,3 +1,3 @@ -(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function r(e){U=e}function o(e){W=e}function i(){return function(){process.nextTick(l)}}function s(){return function(){D(l)}}function a(){var e=0,t=new J(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;z>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}z=0}function f(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,s()}catch(n){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return te.error=t,te}}function d(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){W(function(e){var r=!1,o=d(n,t,function(n){r||(r=!0,t!==n?w(e,n):A(e,n))},function(t){r||(r=!0,E(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,E(e,o))},e)}function _(e,t){t._state===Q?A(e,t._result):t._state===ee?E(e,t._result):C(t,void 0,function(t){w(e,t)},function(t){E(e,t)})}function y(e,n){if(n.constructor===e.constructor)_(e,n);else{var r=m(n);r===te?E(e,te.error):void 0===r?A(e,n):t(r)?v(e,n,r):A(e,n)}}function w(t,n){t===n?E(t,h()):e(n)?y(t,n):A(t,n)}function b(e){e._onerror&&e._onerror(e._result),O(e)}function A(e,t){e._state===K&&(e._result=t,e._state=Q,0!==e._subscribers.length&&W(O,e))}function E(e,t){e._state===K&&(e._state=ee,e._result=t,W(b,e))}function C(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+Q]=n,o[i+ee]=r,0===i&&e._state&&W(O,e)}function O(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)C(r.resolve(e[s]),void 0,t,n);return o}function R(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(p);return w(n,e),n}function T(e){var t=this,n=new t(p);return E(n,e),n}function j(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function G(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||j(),this instanceof G||F(),M(this,e))}function B(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,U,q,I=$,z=0,W=({}.toString,function(e,t){X[z]=e,X[z+1]=t,z+=2,2===z&&(U?U(l):q())}),Z="undefined"!=typeof window?window:void 0,H=Z||{},J=H.MutationObserver||H.WebKitMutationObserver,V="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),Y="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=V?i():J?a():Y?u():void 0===Z&&"function"==typeof require?f():c();var K=void 0,Q=1,ee=2,te=new S,ne=new S;k.prototype._validateInput=function(e){return I(e)},k.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},k.prototype._init=function(){this._result=new Array(this.length)};var re=k;k.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===K&&t>o;o++)e._eachEntry(r[o],o)},k.prototype._eachEntry=function(e,t){var r=this,o=r._instanceConstructor;n(e)?e.constructor===o&&e._state!==K?(e._onerror=null,r._settledAt(e._state,t,e._result)):r._willSettleAt(o.resolve(e),t):(r._remaining--,r._result[t]=e)},k.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===K&&(r._remaining--,e===ee?E(o,n):r._result[t]=n),0===r._remaining&&A(o,r._result)},k.prototype._willSettleAt=function(e,t){var n=this;C(e,void 0,function(e){n._settledAt(Q,t,e)},function(e){n._settledAt(ee,t,e)})};var oe=P,ie=x,se=R,ae=T,ue=0,ce=G;G.all=oe,G.race=ie,G.resolve=se,G.reject=ae,G._setScheduler=r,G._setAsap=o,G._asap=W,G.prototype={constructor:G,then:function(e,t){var n=this,r=n._state;if(r===Q&&!e||r===ee&&!t)return this;var o=new this.constructor(p),i=n._result;if(r){var s=arguments[r-1];W(function(){N(r,o,s,i)})}else C(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=B,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),s=0;o>s;){var a,u;s in r&&(a=r[s],u=e.call(n,a,s,r),i[s]=u),s++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var s=t[i];e.call(o,s,i,t)&&r.push(s)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var s;r in o&&(s=o[r],e.call(n,s,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new s(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),r=a.getArg(t,"sources"),o=a.getArg(t,"names",[]),i=a.getArg(t,"sourceRoot",null),s=a.getArg(t,"sourcesContent",null),u=a.getArg(t,"mappings"),l=a.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),o=a.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=a.getArg(e,"offset"),n=a.getArg(t,"line"),o=a.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var s=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=s.length;h>p;p++){var g=s[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,a.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,s,u,c=1,p=0,h=0,g=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],A=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(n=new i,n.generatedLine=c,s=_;v>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(_,s),o=y[r])_+=r.length;else{for(o=[];s>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=a.getArg(e,"source");if(null!=this.sourceRoot&&(t=a.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=a?"/":"."),i?(i.path=n,o(i)):n}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),s=r(e);if(s&&(e=s.path||"/"),n&&!n.scheme)return s&&(n.scheme=s.scheme),o(n);if(n||t.match(m))return t;if(s&&!s.host&&!s.path)return s.host=t,o(s);var a="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return s?(s.path=a,o(s)):a}function a(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=s,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=a,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,s,a){var u=Math.floor((r-e)/2)+e,c=s(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,s,a):a==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,s,a):a==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var s=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(r[s],r[s-1],!0);)--s;return s}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),s=5,a=1<>>=s,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,a,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(t++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(a&c),a&=u,f+=a<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&s>=e?e-i+l:e==a?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,s){if(s>i){var a=r(i,s),u=i-1;n(e,a,s);for(var c=e[s],l=i;s>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,s)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e,t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return t(r.responseText);n(new Error("Unable to retrieve "+e))}},r.send()}function r(e,t,n){for(var r,o,i,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=a.exec(l),o&&o[1])return o[1];if(o=s.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function a(n,r,o,i,s){var a=new e.SourceMapConsumer(n),u=a.originalPositionFor({line:o,column:i}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+i.length+",".length,a=t.substr(s),u=this._atob(a);this.sourceCache[t]=u,n(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,n(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,o){i(e),this._get(e.fileName).then(function(o){var i=r(o,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),i(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),c="data:"===i.substr(0,5);"/"===i[0]||c||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(a(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new u(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",s=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0; +(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function r(e){U=e}function o(e){W=e}function i(){return function(){process.nextTick(l)}}function s(){return function(){D(l)}}function a(){var e=0,t=new J(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;z>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}z=0}function f(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,s()}catch(n){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return te.error=t,te}}function d(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){W(function(e){var r=!1,o=d(n,t,function(n){r||(r=!0,t!==n?w(e,n):A(e,n))},function(t){r||(r=!0,E(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,E(e,o))},e)}function _(e,t){t._state===Q?A(e,t._result):t._state===ee?E(e,t._result):C(t,void 0,function(t){w(e,t)},function(t){E(e,t)})}function y(e,n){if(n.constructor===e.constructor)_(e,n);else{var r=m(n);r===te?E(e,te.error):void 0===r?A(e,n):t(r)?v(e,n,r):A(e,n)}}function w(t,n){t===n?E(t,h()):e(n)?y(t,n):A(t,n)}function b(e){e._onerror&&e._onerror(e._result),O(e)}function A(e,t){e._state===K&&(e._result=t,e._state=Q,0!==e._subscribers.length&&W(O,e))}function E(e,t){e._state===K&&(e._state=ee,e._result=t,W(b,e))}function C(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+Q]=n,o[i+ee]=r,0===i&&e._state&&W(O,e)}function O(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)C(r.resolve(e[s]),void 0,t,n);return o}function R(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(p);return w(n,e),n}function T(e){var t=this,n=new t(p);return E(n,e),n}function j(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function G(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||j(),this instanceof G||F(),M(this,e))}function B(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,U,q,I=$,z=0,W=({}.toString,function(e,t){X[z]=e,X[z+1]=t,z+=2,2===z&&(U?U(l):q())}),Z="undefined"!=typeof window?window:void 0,H=Z||{},J=H.MutationObserver||H.WebKitMutationObserver,V="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),Y="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=V?i():J?a():Y?u():void 0===Z&&"function"==typeof require?f():c();var K=void 0,Q=1,ee=2,te=new S,ne=new S;k.prototype._validateInput=function(e){return I(e)},k.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},k.prototype._init=function(){this._result=new Array(this.length)};var re=k;k.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===K&&t>o;o++)e._eachEntry(r[o],o)},k.prototype._eachEntry=function(e,t){var r=this,o=r._instanceConstructor;n(e)?e.constructor===o&&e._state!==K?(e._onerror=null,r._settledAt(e._state,t,e._result)):r._willSettleAt(o.resolve(e),t):(r._remaining--,r._result[t]=e)},k.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===K&&(r._remaining--,e===ee?E(o,n):r._result[t]=n),0===r._remaining&&A(o,r._result)},k.prototype._willSettleAt=function(e,t){var n=this;C(e,void 0,function(e){n._settledAt(Q,t,e)},function(e){n._settledAt(ee,t,e)})};var oe=P,ie=x,se=R,ae=T,ue=0,ce=G;G.all=oe,G.race=ie,G.resolve=se,G.reject=ae,G._setScheduler=r,G._setAsap=o,G._asap=W,G.prototype={constructor:G,then:function(e,t){var n=this,r=n._state;if(r===Q&&!e||r===ee&&!t)return this;var o=new this.constructor(p),i=n._result;if(r){var s=arguments[r-1];W(function(){N(r,o,s,i)})}else C(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=B,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),s=0;o>s;){var a,u;s in r&&(a=r[s],u=e.call(n,a,s,r),i[s]=u),s++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var s=t[i];e.call(o,s,i,t)&&r.push(s)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var s;r in o&&(s=o[r],e.call(n,s,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new s(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),r=a.getArg(t,"sources"),o=a.getArg(t,"names",[]),i=a.getArg(t,"sourceRoot",null),s=a.getArg(t,"sourcesContent",null),u=a.getArg(t,"mappings"),l=a.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),o=a.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=a.getArg(e,"offset"),n=a.getArg(t,"line"),o=a.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var s=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=s.length;h>p;p++){var g=s[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,a.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,s,u,c=1,p=0,h=0,g=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],A=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(n=new i,n.generatedLine=c,s=_;v>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(_,s),o=y[r])_+=r.length;else{for(o=[];s>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=a.getArg(e,"source");if(null!=this.sourceRoot&&(t=a.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=a?"/":"."),i?(i.path=n,o(i)):n}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),s=r(e);if(s&&(e=s.path||"/"),n&&!n.scheme)return s&&(n.scheme=s.scheme),o(n);if(n||t.match(m))return t;if(s&&!s.host&&!s.path)return s.host=t,o(s);var a="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return s?(s.path=a,o(s)):a}function a(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=s,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=a,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,s,a){var u=Math.floor((r-e)/2)+e,c=s(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,s,a):a==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,s,a):a==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var s=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(r[s],r[s-1],!0);)--s;return s}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),s=5,a=1<>>=s,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,a,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(t++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(a&c),a&=u,f+=a<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&s>=e?e-i+l:e==a?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,s){if(s>i){var a=r(i,s),u=i-1;n(e,a,s);for(var c=e[s],l=i;s>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,s)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e,t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return t(r.responseText);n(new Error("Unable to retrieve "+e))}},r.send()}function r(e,t,n){for(var r,o,i,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=a.exec(l),o&&o[1])return o[1];if(o=s.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function a(n,r,o,i,s){var a=new e.SourceMapConsumer(n),u=a.originalPositionFor({line:o,column:i}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+i.length+",".length,a=t.substr(s),u=this._atob(a);this.sourceCache[t]=u,n(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,n(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,o){i(e),this._get(e.fileName).then(function(o){var i=r(o,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),i(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),c="data:"===i.substr(0,5);"/"===i[0]||c||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(a(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new u(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",s=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0; i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(s,a,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(n){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send({stack:e})})}}}); -//# sourceMappingURL=stacktrace-with-polyfills.min.js.map \ No newline at end of file +//# sourceMappingURL=stacktrace-with-polyfills.min.js.map diff --git a/dist/stacktrace-with-polyfills.min.js.map b/dist/stacktrace-with-polyfills.min.js.map index 2b23589..508f728 100644 --- a/dist/stacktrace-with-polyfills.min.js.map +++ b/dist/stacktrace-with-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","ES6Promise","bind","oThis","aArgs","slice","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","filter","t","res","val","push","forEach","n","amd","exports","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","String","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","p","JSON","parse","replace","sections","s","a","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","split","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","atob","Buffer","_get","offline","pinpoint","getMappedLocation","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","if (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n var args = [].slice.call(curr['arguments']);\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send({stack: stackframes});\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","ES6Promise","bind","oThis","aArgs","slice","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","filter","t","res","val","push","forEach","n","amd","exports","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","String","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","p","JSON","parse","replace","sections","s","a","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","split","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","atob","Buffer","_get","offline","pinpoint","getMappedLocation","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","if (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send({stack: stackframes});\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index 5fccc23..6cc98c1 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i,o){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i),void 0!==o&&this.setSource(o)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new i(n)}function i(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),i=a.getArg(n,"names",[]),o=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return o&&a.isAbsolute(o)&&a.isAbsolute(e)?a.relative(o,e):e}),this._names=c.fromArray(i,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=s,this._mappings=u,this.file=l}function o(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),i=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var o={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),i=a.getArg(n,"column");if(t=0){var o=this._originalMappings[i];if(void 0===e.column)for(var s=o.originalLine;o&&o.originalLine===s;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i];else for(var c=o.originalColumn;o&&o.originalLine===n&&o.originalColumn==c;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var n=Object.create(i.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new o;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,n){for(var t,r,i,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new o,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),i=y[r])v+=r.length;else{for(i=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");y[r]=i}t.generatedColumn=p+i[0],p=t.generatedColumn,i.length>1&&(t.source=m+i[1],m+=i[1],t.originalLine=g+i[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+i[3],h=t.originalColumn,i.length>4&&(t.name=d+i[4],d+=i[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},i.prototype._findMapping=function(e,n,t,r,i,o){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,i,o)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[t];if(i.generatedLine===n.generatedLine){var o=a.getArg(i,"source",null);null!==o&&(o=this._sources.at(o),null!=this.sourceRoot&&(o=a.join(this.sourceRoot,o)));var s=a.getArg(i,"name",null);return null!==s&&(s=this._names.at(s)),{source:o,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},i.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===t.source)return{line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),o?(o.path=t,i(o)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),i(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,i(s);var a="/"===n.charAt(0)?n:o(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,i(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=i,n.normalize=o,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,i,o,s,a){var u=Math.floor((r-e)/2)+e,c=s(i,o[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,i,o,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,i,o,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,e,r,i,o||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var i=t(1);r.fromArray=function(e,n){for(var t=new r,i=0,o=e.length;o>i;i++)t.add(e[i],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=i.toSetString(e),r=this._set.hasOwnProperty(t),o=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=o)},r.prototype.has=function(e){var n=i.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=i.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var n=1===(1&e),t=e>>1;return n?-t:t}var o=t(5),s=5,a=1<>>=s,i>0&&(n|=c),t+=o.encode(n);while(i>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=o.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&i>=e?e-r+c:e>=o&&s>=e?e-o+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,o,s){if(s>o){var a=r(o,s),u=o-1;t(e,a,s);for(var c=e[s],l=o;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;i(e,n,o,f-1),i(e,n,f+1,s)}}n.quickSort=function(e,n){i(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e,n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return n(r.responseText);t(new Error("Unable to retrieve "+e))}},r.send()}function r(e,n,t){for(var r,i,o,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=a.exec(l),i&&i[1])return i[1];if(i=s.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function o(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(t,r,i,o,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:i,column:o}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=t,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(n){return new Promise(function(t,r){var i="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(n.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+o.length+",".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,i){o(e),this._get(e.fileName).then(function(i){var o=r(i,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},i)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),o(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(i){var o=s(i),c="data:"===o.substr(0,5);"/"===o[0]||c||(o=u.substring(0,u.lastIndexOf("/")+1)+o),this._get(o).then(function(t){var i=e.lineNumber,o=e.columnNumber;n(a(t,e.args,i,o,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new u(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var i=arguments.callee;i&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),i=[],o=2,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),i=[],o=0,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",s=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(t=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,i[0],i[1],i[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return i(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,i){return i=r(o,i),new Promise(function(r){var o=e.parse(n);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(n){function r(t){n(e)}new t(i).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(n,t)["catch"](t),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):r(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json"),i.send({stack:e})})}}}); -//# sourceMappingURL=stacktrace.min.js.map \ No newline at end of file +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i,o){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i),void 0!==o&&this.setSource(o)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new i(n)}function i(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),i=a.getArg(n,"names",[]),o=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return o&&a.isAbsolute(o)&&a.isAbsolute(e)?a.relative(o,e):e}),this._names=c.fromArray(i,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=s,this._mappings=u,this.file=l}function o(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),i=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var o={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),i=a.getArg(n,"column");if(t=0){var o=this._originalMappings[i];if(void 0===e.column)for(var s=o.originalLine;o&&o.originalLine===s;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i];else for(var c=o.originalColumn;o&&o.originalLine===n&&o.originalColumn==c;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var n=Object.create(i.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new o;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,n){for(var t,r,i,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new o,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),i=y[r])v+=r.length;else{for(i=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");y[r]=i}t.generatedColumn=p+i[0],p=t.generatedColumn,i.length>1&&(t.source=m+i[1],m+=i[1],t.originalLine=g+i[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+i[3],h=t.originalColumn,i.length>4&&(t.name=d+i[4],d+=i[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},i.prototype._findMapping=function(e,n,t,r,i,o){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,i,o)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[t];if(i.generatedLine===n.generatedLine){var o=a.getArg(i,"source",null);null!==o&&(o=this._sources.at(o),null!=this.sourceRoot&&(o=a.join(this.sourceRoot,o)));var s=a.getArg(i,"name",null);return null!==s&&(s=this._names.at(s)),{source:o,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},i.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===t.source)return{line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),o?(o.path=t,i(o)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),i(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,i(s);var a="/"===n.charAt(0)?n:o(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,i(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=i,n.normalize=o,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,i,o,s,a){var u=Math.floor((r-e)/2)+e,c=s(i,o[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,i,o,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,i,o,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,e,r,i,o||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var i=t(1);r.fromArray=function(e,n){for(var t=new r,i=0,o=e.length;o>i;i++)t.add(e[i],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=i.toSetString(e),r=this._set.hasOwnProperty(t),o=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=o)},r.prototype.has=function(e){var n=i.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=i.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var n=1===(1&e),t=e>>1;return n?-t:t}var o=t(5),s=5,a=1<>>=s,i>0&&(n|=c),t+=o.encode(n);while(i>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=o.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&i>=e?e-r+c:e>=o&&s>=e?e-o+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,o,s){if(s>o){var a=r(o,s),u=o-1;t(e,a,s);for(var c=e[s],l=o;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;i(e,n,o,f-1),i(e,n,f+1,s)}}n.quickSort=function(e,n){i(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e,n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return n(r.responseText);t(new Error("Unable to retrieve "+e))}},r.send()}function r(e,n,t){for(var r,i,o,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=a.exec(l),i&&i[1])return i[1];if(i=s.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function o(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(t,r,i,o,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:i,column:o}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=t,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(n){return new Promise(function(t,r){var i="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(n.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+o.length+",".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,i){o(e),this._get(e.fileName).then(function(i){var o=r(i,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},i)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),o(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(i){var o=s(i),c="data:"===o.substr(0,5);"/"===o[0]||c||(o=u.substring(0,u.lastIndexOf("/")+1)+o),this._get(o).then(function(t){var i=e.lineNumber,o=e.columnNumber;n(a(t,e.args,i,o,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new u(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var i=arguments.callee;i&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),i=[],o=2,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),i=[],o=0,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",s=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(t=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,i[0],i[1],i[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return i(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,i){return i=r(o,i),new Promise(function(r){var o=e.parse(n);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(n){function r(t){n(e)}new t(i).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(n,t)["catch"](t),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):r(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json"),i.send({stack:e})})}}}); +//# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index fe5df35..274f512 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","window","atob","Buffer","_get","Promise","offline","bind","pinpoint","getMappedLocation","then","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n var args = [].slice.call(curr['arguments']);\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send({stack: stackframes});\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","window","atob","Buffer","_get","Promise","offline","bind","pinpoint","getMappedLocation","then","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send({stack: stackframes});\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file From 5aaaab3269aee9b421c9a7d558e391c652d5d018 Mon Sep 17 00:00:00 2001 From: Oliver Salzburg Date: Thu, 15 Oct 2015 18:37:27 +0200 Subject: [PATCH 007/110] Convert reports to JSON Includes JSON3 in the polyfill version Fixes #133 --- .jshintignore | 1 + .jshintrc | 3 ++- dist/stacktrace-with-polyfills.min.js | 4 ++-- dist/stacktrace-with-polyfills.min.js.map | 2 +- dist/stacktrace.js | 2 +- dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- gulpfile.js | 1 + package.json | 1 + spec/stacktrace-spec.js | 3 ++- stacktrace.js | 2 +- 11 files changed, 14 insertions(+), 9 deletions(-) create mode 100644 .jshintignore diff --git a/.jshintignore b/.jshintignore new file mode 100644 index 0000000..a261f29 --- /dev/null +++ b/.jshintignore @@ -0,0 +1 @@ +dist/* diff --git a/.jshintrc b/.jshintrc index b0f197a..f05a6c9 100644 --- a/.jshintrc +++ b/.jshintrc @@ -44,6 +44,7 @@ "JASMINE": true, "JASMINE_ADAPTER": true, "matchers": true, - "priv": true + "priv": true, + "JSON": true } } diff --git a/dist/stacktrace-with-polyfills.min.js b/dist/stacktrace-with-polyfills.min.js index ee03a60..525a614 100644 --- a/dist/stacktrace-with-polyfills.min.js +++ b/dist/stacktrace-with-polyfills.min.js @@ -1,3 +1,3 @@ -(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function r(e){U=e}function o(e){W=e}function i(){return function(){process.nextTick(l)}}function s(){return function(){D(l)}}function a(){var e=0,t=new J(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;z>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}z=0}function f(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,s()}catch(n){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return te.error=t,te}}function d(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){W(function(e){var r=!1,o=d(n,t,function(n){r||(r=!0,t!==n?w(e,n):A(e,n))},function(t){r||(r=!0,E(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,E(e,o))},e)}function _(e,t){t._state===Q?A(e,t._result):t._state===ee?E(e,t._result):C(t,void 0,function(t){w(e,t)},function(t){E(e,t)})}function y(e,n){if(n.constructor===e.constructor)_(e,n);else{var r=m(n);r===te?E(e,te.error):void 0===r?A(e,n):t(r)?v(e,n,r):A(e,n)}}function w(t,n){t===n?E(t,h()):e(n)?y(t,n):A(t,n)}function b(e){e._onerror&&e._onerror(e._result),O(e)}function A(e,t){e._state===K&&(e._result=t,e._state=Q,0!==e._subscribers.length&&W(O,e))}function E(e,t){e._state===K&&(e._state=ee,e._result=t,W(b,e))}function C(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+Q]=n,o[i+ee]=r,0===i&&e._state&&W(O,e)}function O(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)C(r.resolve(e[s]),void 0,t,n);return o}function R(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(p);return w(n,e),n}function T(e){var t=this,n=new t(p);return E(n,e),n}function j(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function G(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||j(),this instanceof G||F(),M(this,e))}function B(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,U,q,I=$,z=0,W=({}.toString,function(e,t){X[z]=e,X[z+1]=t,z+=2,2===z&&(U?U(l):q())}),Z="undefined"!=typeof window?window:void 0,H=Z||{},J=H.MutationObserver||H.WebKitMutationObserver,V="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),Y="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=V?i():J?a():Y?u():void 0===Z&&"function"==typeof require?f():c();var K=void 0,Q=1,ee=2,te=new S,ne=new S;k.prototype._validateInput=function(e){return I(e)},k.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},k.prototype._init=function(){this._result=new Array(this.length)};var re=k;k.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===K&&t>o;o++)e._eachEntry(r[o],o)},k.prototype._eachEntry=function(e,t){var r=this,o=r._instanceConstructor;n(e)?e.constructor===o&&e._state!==K?(e._onerror=null,r._settledAt(e._state,t,e._result)):r._willSettleAt(o.resolve(e),t):(r._remaining--,r._result[t]=e)},k.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===K&&(r._remaining--,e===ee?E(o,n):r._result[t]=n),0===r._remaining&&A(o,r._result)},k.prototype._willSettleAt=function(e,t){var n=this;C(e,void 0,function(e){n._settledAt(Q,t,e)},function(e){n._settledAt(ee,t,e)})};var oe=P,ie=x,se=R,ae=T,ue=0,ce=G;G.all=oe,G.race=ie,G.resolve=se,G.reject=ae,G._setScheduler=r,G._setAsap=o,G._asap=W,G.prototype={constructor:G,then:function(e,t){var n=this,r=n._state;if(r===Q&&!e||r===ee&&!t)return this;var o=new this.constructor(p),i=n._result;if(r){var s=arguments[r-1];W(function(){N(r,o,s,i)})}else C(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=B,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),s=0;o>s;){var a,u;s in r&&(a=r[s],u=e.call(n,a,s,r),i[s]=u),s++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var s=t[i];e.call(o,s,i,t)&&r.push(s)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var s;r in o&&(s=o[r],e.call(n,s,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new s(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),r=a.getArg(t,"sources"),o=a.getArg(t,"names",[]),i=a.getArg(t,"sourceRoot",null),s=a.getArg(t,"sourcesContent",null),u=a.getArg(t,"mappings"),l=a.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),o=a.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=a.getArg(e,"offset"),n=a.getArg(t,"line"),o=a.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var s=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=s.length;h>p;p++){var g=s[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,a.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,s,u,c=1,p=0,h=0,g=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],A=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(n=new i,n.generatedLine=c,s=_;v>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(_,s),o=y[r])_+=r.length;else{for(o=[];s>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=a.getArg(e,"source");if(null!=this.sourceRoot&&(t=a.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=a?"/":"."),i?(i.path=n,o(i)):n}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),s=r(e);if(s&&(e=s.path||"/"),n&&!n.scheme)return s&&(n.scheme=s.scheme),o(n);if(n||t.match(m))return t;if(s&&!s.host&&!s.path)return s.host=t,o(s);var a="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return s?(s.path=a,o(s)):a}function a(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=s,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=a,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,s,a){var u=Math.floor((r-e)/2)+e,c=s(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,s,a):a==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,s,a):a==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var s=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(r[s],r[s-1],!0);)--s;return s}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),s=5,a=1<>>=s,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,a,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(t++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(a&c),a&=u,f+=a<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&s>=e?e-i+l:e==a?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,s){if(s>i){var a=r(i,s),u=i-1;n(e,a,s);for(var c=e[s],l=i;s>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,s)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e,t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return t(r.responseText);n(new Error("Unable to retrieve "+e))}},r.send()}function r(e,t,n){for(var r,o,i,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=a.exec(l),o&&o[1])return o[1];if(o=s.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function a(n,r,o,i,s){var a=new e.SourceMapConsumer(n),u=a.originalPositionFor({line:o,column:i}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+i.length+",".length,a=t.substr(s),u=this._atob(a);this.sourceCache[t]=u,n(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,n(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,o){i(e),this._get(e.fileName).then(function(o){var i=r(o,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),i(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),c="data:"===i.substr(0,5);"/"===i[0]||c||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(a(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new u(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",s=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0; -i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(s,a,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(n){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send({stack:e})})}}}); +(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function r(e){B=e}function o(e){z=e}function i(){return function(){process.nextTick(l)}}function a(){return function(){$(l)}}function s(){var e=0,t=new H(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;J>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}J=0}function f(){try{var e=require,t=e("vertx");return $=t.runOnLoop||t.runOnContext,a()}catch(n){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return te.error=t,te}}function d(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function y(e,t,n){z(function(e){var r=!1,o=d(n,t,function(n){r||(r=!0,t!==n?b(e,n):A(e,n))},function(t){r||(r=!0,C(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,C(e,o))},e)}function v(e,t){t._state===Q?A(e,t._result):t._state===ee?C(e,t._result):O(t,void 0,function(t){b(e,t)},function(t){C(e,t)})}function _(e,n){if(n.constructor===e.constructor)v(e,n);else{var r=m(n);r===te?C(e,te.error):void 0===r?A(e,n):t(r)?y(e,n,r):A(e,n)}}function b(t,n){t===n?C(t,h()):e(n)?_(t,n):A(t,n)}function w(e){e._onerror&&e._onerror(e._result),S(e)}function A(e,t){e._state===K&&(e._result=t,e._state=Q,0!==e._subscribers.length&&z(S,e))}function C(e,t){e._state===K&&(e._state=ee,e._result=t,z(w,e))}function O(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+Q]=n,o[i+ee]=r,0===i&&e._state&&z(S,e)}function S(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)O(r.resolve(e[a]),void 0,t,n);return o}function k(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(p);return b(n,e),n}function P(e){var t=this,n=new t(p);return C(n,e),n}function R(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function U(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||R(),this instanceof U||F(),M(this,e))}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var D;D=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var $,B,q,I=D,J=0,z=({}.toString,function(e,t){X[J]=e,X[J+1]=t,J+=2,2===J&&(B?B(l):q())}),Z="undefined"!=typeof window?window:void 0,W=Z||{},H=W.MutationObserver||W.WebKitMutationObserver,Y="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=Y?i():H?s():V?u():void 0===Z&&"function"==typeof require?f():c();var K=void 0,Q=1,ee=2,te=new E,ne=new E;j.prototype._validateInput=function(e){return I(e)},j.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},j.prototype._init=function(){this._result=new Array(this.length)};var re=j;j.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===K&&t>o;o++)e._eachEntry(r[o],o)},j.prototype._eachEntry=function(e,t){var r=this,o=r._instanceConstructor;n(e)?e.constructor===o&&e._state!==K?(e._onerror=null,r._settledAt(e._state,t,e._result)):r._willSettleAt(o.resolve(e),t):(r._remaining--,r._result[t]=e)},j.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===K&&(r._remaining--,e===ee?C(o,n):r._result[t]=n),0===r._remaining&&A(o,r._result)},j.prototype._willSettleAt=function(e,t){var n=this;O(e,void 0,function(e){n._settledAt(Q,t,e)},function(e){n._settledAt(ee,t,e)})};var oe=T,ie=x,ae=k,se=P,ue=0,ce=U;U.all=oe,U.race=ie,U.resolve=ae,U.reject=se,U._setScheduler=r,U._setAsap=o,U._asap=z,U.prototype={constructor:U,then:function(e,t){var n=this,r=n._state;if(r===Q&&!e||r===ee&&!t)return this;var o=new this.constructor(p),i=n._result;if(r){var a=arguments[r-1];z(function(){L(r,o,a,i)})}else O(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=G,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==d)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===d&&u(d)===d&&u()===d&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([d])&&"null"==u(null)&&"[null,null,null]"==u([d,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,m,d,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(b){}if(!i("json")){var w="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return M[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?m=2==a?function(e,t){var n,r={},o=v.call(e)==w;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==w;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var r,i,a=v.call(e)==w,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),m(e,t)},!i("json-stringify")){var T={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},x="000000",k=function(e,t){return(x+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=T[a];break;default:if(32>a){t+=P+k(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,b,w,N,M,T,x,P,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=L((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,b=L(h/1e3)%60,w=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),b=s.getUTCSeconds(),w=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+k(6,0>c?-c:c):k(4,c))+"-"+k(2,l+1)+"-"+k(2,p)+"T"+k(2,y)+":"+k(2,_)+":"+k(2,b)+"."+k(3,w)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(x=a.length;x--;)if(a[x]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==S){for(T=0,x=s.length;x>T;T++)M=F(T,s,n,r,o,i,a),N.push(M===d?"null":M);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+P+"]":"["+N.join(",")+"]":"[]"}else m(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==d&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+P+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==w)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=$[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=D("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},I=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=q(),"]"!=e;n||(n=!0))n&&(","==e?(e=q(),"]"==e&&B()):B()),","==e&&B(),t.push(I(e));return t}if("{"==e){for(t={};e=q(),"}"!=e;n||(n=!0))n&&(","==e?(e=q(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=q())&&B(),t[e.slice(1)]=I(q());return t}B()}return e},J=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)J(o,r,n);else m(o,function(e){J(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=I(q()),"$"!=q()&&B(),U=G=null,t&&v.call(t)==w?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,m=0,d=0,y=e.length,v=0,_={},b={},w=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&w.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(w,s.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(m))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=s,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e,t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return t(r.responseText);n(new Error("Unable to retrieve "+e))}},r.send()}function r(e,t,n){for(var r,o,i,a=/function\s+([^(]*?)\s*\(([^)]*)\)/,s=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=s.exec(l),o&&o[1])return o[1];if(o=a.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function a(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function s(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)r(new Error("The encoding of the inline sourcemap is not supported"));else{var a="data:".length+i.length+",".length,s=t.substr(a),u=this._atob(s);this.sourceCache[t]=u,n(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,n(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,o){i(e),this._get(e.fileName).then(function(o){var i=r(o,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),i(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=a(o),c="data:"===i.substr(0,5);"/"===i[0]||c||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(s(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new u(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(n){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace-with-polyfills.min.js.map diff --git a/dist/stacktrace-with-polyfills.min.js.map b/dist/stacktrace-with-polyfills.min.js.map index 508f728..c5c0847 100644 --- a/dist/stacktrace-with-polyfills.min.js.map +++ b/dist/stacktrace-with-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","ES6Promise","bind","oThis","aArgs","slice","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","filter","t","res","val","push","forEach","n","amd","exports","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","String","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","p","JSON","parse","replace","sections","s","a","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","split","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","atob","Buffer","_get","offline","pinpoint","getMappedLocation","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","if (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send({stack: stackframes});\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","atob","Buffer","_get","offline","pinpoint","getMappedLocation","findFunctionName","substring","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","if (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.js b/dist/stacktrace.js index fdfef70..20bf2ff 100644 --- a/dist/stacktrace.js +++ b/dist/stacktrace.js @@ -178,7 +178,7 @@ }; req.open('post', url); req.setRequestHeader('Content-Type', 'application/json'); - req.send({stack: stackframes}); + req.send(JSON.stringify({stack: stackframes})); }); } }; diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index 6cc98c1..65f7d4f 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i,o){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i),void 0!==o&&this.setSource(o)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new i(n)}function i(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),i=a.getArg(n,"names",[]),o=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return o&&a.isAbsolute(o)&&a.isAbsolute(e)?a.relative(o,e):e}),this._names=c.fromArray(i,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=s,this._mappings=u,this.file=l}function o(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),i=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var o={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),i=a.getArg(n,"column");if(t=0){var o=this._originalMappings[i];if(void 0===e.column)for(var s=o.originalLine;o&&o.originalLine===s;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i];else for(var c=o.originalColumn;o&&o.originalLine===n&&o.originalColumn==c;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var n=Object.create(i.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new o;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,n){for(var t,r,i,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new o,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),i=y[r])v+=r.length;else{for(i=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");y[r]=i}t.generatedColumn=p+i[0],p=t.generatedColumn,i.length>1&&(t.source=m+i[1],m+=i[1],t.originalLine=g+i[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+i[3],h=t.originalColumn,i.length>4&&(t.name=d+i[4],d+=i[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},i.prototype._findMapping=function(e,n,t,r,i,o){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,i,o)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[t];if(i.generatedLine===n.generatedLine){var o=a.getArg(i,"source",null);null!==o&&(o=this._sources.at(o),null!=this.sourceRoot&&(o=a.join(this.sourceRoot,o)));var s=a.getArg(i,"name",null);return null!==s&&(s=this._names.at(s)),{source:o,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},i.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===t.source)return{line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),o?(o.path=t,i(o)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),i(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,i(s);var a="/"===n.charAt(0)?n:o(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,i(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=i,n.normalize=o,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,i,o,s,a){var u=Math.floor((r-e)/2)+e,c=s(i,o[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,i,o,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,i,o,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,e,r,i,o||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var i=t(1);r.fromArray=function(e,n){for(var t=new r,i=0,o=e.length;o>i;i++)t.add(e[i],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=i.toSetString(e),r=this._set.hasOwnProperty(t),o=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=o)},r.prototype.has=function(e){var n=i.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=i.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var n=1===(1&e),t=e>>1;return n?-t:t}var o=t(5),s=5,a=1<>>=s,i>0&&(n|=c),t+=o.encode(n);while(i>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=o.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&i>=e?e-r+c:e>=o&&s>=e?e-o+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,o,s){if(s>o){var a=r(o,s),u=o-1;t(e,a,s);for(var c=e[s],l=o;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;i(e,n,o,f-1),i(e,n,f+1,s)}}n.quickSort=function(e,n){i(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e,n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return n(r.responseText);t(new Error("Unable to retrieve "+e))}},r.send()}function r(e,n,t){for(var r,i,o,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=a.exec(l),i&&i[1])return i[1];if(i=s.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function o(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(t,r,i,o,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:i,column:o}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=t,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(n){return new Promise(function(t,r){var i="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(n.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+o.length+",".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,i){o(e),this._get(e.fileName).then(function(i){var o=r(i,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},i)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),o(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(i){var o=s(i),c="data:"===o.substr(0,5);"/"===o[0]||c||(o=u.substring(0,u.lastIndexOf("/")+1)+o),this._get(o).then(function(t){var i=e.lineNumber,o=e.columnNumber;n(a(t,e.args,i,o,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new u(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var i=arguments.callee;i&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),i=[],o=2,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),i=[],o=0,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",s=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(t=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,i[0],i[1],i[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return i(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,i){return i=r(o,i),new Promise(function(r){var o=e.parse(n);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(n){function r(t){n(e)}new t(i).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(n,t)["catch"](t),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):r(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json"),i.send({stack:e})})}}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i,o){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i),void 0!==o&&this.setSource(o)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new i(n)}function i(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),i=a.getArg(n,"names",[]),o=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return o&&a.isAbsolute(o)&&a.isAbsolute(e)?a.relative(o,e):e}),this._names=c.fromArray(i,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=s,this._mappings=u,this.file=l}function o(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),i=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var o={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),i=a.getArg(n,"column");if(t=0){var o=this._originalMappings[i];if(void 0===e.column)for(var s=o.originalLine;o&&o.originalLine===s;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i];else for(var c=o.originalColumn;o&&o.originalLine===n&&o.originalColumn==c;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var n=Object.create(i.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new o;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,n){for(var t,r,i,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new o,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),i=y[r])v+=r.length;else{for(i=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");y[r]=i}t.generatedColumn=p+i[0],p=t.generatedColumn,i.length>1&&(t.source=m+i[1],m+=i[1],t.originalLine=g+i[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+i[3],h=t.originalColumn,i.length>4&&(t.name=d+i[4],d+=i[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},i.prototype._findMapping=function(e,n,t,r,i,o){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,i,o)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[t];if(i.generatedLine===n.generatedLine){var o=a.getArg(i,"source",null);null!==o&&(o=this._sources.at(o),null!=this.sourceRoot&&(o=a.join(this.sourceRoot,o)));var s=a.getArg(i,"name",null);return null!==s&&(s=this._names.at(s)),{source:o,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},i.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===t.source)return{line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),o?(o.path=t,i(o)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),i(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,i(s);var a="/"===n.charAt(0)?n:o(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,i(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=i,n.normalize=o,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,i,o,s,a){var u=Math.floor((r-e)/2)+e,c=s(i,o[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,i,o,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,i,o,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,e,r,i,o||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var i=t(1);r.fromArray=function(e,n){for(var t=new r,i=0,o=e.length;o>i;i++)t.add(e[i],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=i.toSetString(e),r=this._set.hasOwnProperty(t),o=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=o)},r.prototype.has=function(e){var n=i.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=i.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var n=1===(1&e),t=e>>1;return n?-t:t}var o=t(5),s=5,a=1<>>=s,i>0&&(n|=c),t+=o.encode(n);while(i>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=o.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&i>=e?e-r+c:e>=o&&s>=e?e-o+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,o,s){if(s>o){var a=r(o,s),u=o-1;t(e,a,s);for(var c=e[s],l=o;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;i(e,n,o,f-1),i(e,n,f+1,s)}}n.quickSort=function(e,n){i(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e,n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return n(r.responseText);t(new Error("Unable to retrieve "+e))}},r.send()}function r(e,n,t){for(var r,i,o,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=a.exec(l),i&&i[1])return i[1];if(i=s.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function o(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(t,r,i,o,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:i,column:o}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=t,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(n){return new Promise(function(t,r){var i="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(n.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+o.length+",".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,i){o(e),this._get(e.fileName).then(function(i){var o=r(i,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},i)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),o(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(i){var o=s(i),c="data:"===o.substr(0,5);"/"===o[0]||c||(o=u.substring(0,u.lastIndexOf("/")+1)+o),this._get(o).then(function(t){var i=e.lineNumber,o=e.columnNumber;n(a(t,e.args,i,o,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new u(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var i=arguments.callee;i&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),i=[],o=2,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),i=[],o=0,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",s=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(t=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,i[0],i[1],i[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return i(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,i){return i=r(o,i),new Promise(function(r){var o=e.parse(n);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(n){function r(t){n(e)}new t(i).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(n,t)["catch"](t),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):r(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json"),i.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 274f512..35e631a 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","window","atob","Buffer","_get","Promise","offline","bind","pinpoint","getMappedLocation","then","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send({stack: stackframes});\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","window","atob","Buffer","_get","Promise","offline","bind","pinpoint","getMappedLocation","then","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 6f684ae..eddceb7 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -10,6 +10,7 @@ var uglify = require('gulp-uglify'); var polyfills = [ './node_modules/es6-promise/dist/es6-promise.js', + './node_modules/json3/lib/json3.js', './polyfills.js' ]; var dependencies = [ diff --git a/package.json b/package.json index 08cafc7..2d7e450 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "gulp-uglify": "^1.4.1", "jasmine-node": "~1.14", "jasmine-sinon": "^0.4.0", + "json3": "^3.3.2", "karma": "^0.13.9", "karma-chrome-launcher": "^0.2.0", "karma-coverage": "^0.5.2", diff --git a/spec/stacktrace-spec.js b/spec/stacktrace-spec.js index 7ed7e2a..64f4892 100755 --- a/spec/stacktrace-spec.js +++ b/spec/stacktrace-spec.js @@ -230,7 +230,8 @@ describe('StackTrace', function () { }); waits(100); runs(function () { - expect(server.requests[0].requestBody).toEqual({stack: stackframes}); + var expectedResponse = JSON.stringify({stack: stackframes}); + expect(server.requests[0].requestBody).toEqual(expectedResponse); expect(server.requests[0].url).toEqual(url); expect(callback).toHaveBeenCalledWith('OK'); expect(errback).not.toHaveBeenCalled(); diff --git a/stacktrace.js b/stacktrace.js index fdfef70..20bf2ff 100644 --- a/stacktrace.js +++ b/stacktrace.js @@ -178,7 +178,7 @@ }; req.open('post', url); req.setRequestHeader('Content-Type', 'application/json'); - req.send({stack: stackframes}); + req.send(JSON.stringify({stack: stackframes})); }); } }; From bf1eec754c9ccfff9e5db2205b977c4a74ba55e4 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 18 Oct 2015 19:27:34 -0700 Subject: [PATCH 008/110] Improve sourcemaps test based on feedback from @TwitchBronBron. Fixes #137 --- spec/stacktrace-spec.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/spec/stacktrace-spec.js b/spec/stacktrace-spec.js index 64f4892..079ea9e 100755 --- a/spec/stacktrace-spec.js +++ b/spec/stacktrace-spec.js @@ -97,13 +97,17 @@ describe('StackTrace', function () { it('uses source maps to enhance stack frames', function () { runs(function () { - var sourceMin = 'var foo=function(){};function bar(){}var baz=eval("XXX");\n//@ sourceMappingURL=test.js.map'; - var sourceMap = '{"version":3,"sources":["./test.js"],"names":["foo","bar","baz","eval"],"mappings":"AAAA,GAAIA,KAAM,YACV,SAASC,QACT,GAAIC,KAAMC,KAAK","file":"test.min.js"}'; - server.respondWith('GET', 'http://path/to/file.js', [200, {'Content-Type': 'application/x-javascript'}, sourceMin]); - server.respondWith('GET', 'test.js.map', [200, {'Content-Type': 'application/json'}, sourceMap]); + var sourceMin = 'function increment(){someVariable+=2;null.x()}var someVariable=2;increment();\n//# sourceMappingURL=file.min.js.map'; + var sourceMap = '{"version":3,"file":"file.min.js","sources":["file.js"],"names":["increment","someVariable","x"],"mappings":"AAAA,QAASA,aACLC,cAAgB,CAChB,MAAKC,IAET,GAAID,cAAe,CACnBD"}'; + server.respondWith('GET', 'http://path/to/file.min.js', [200, {'Content-Type': 'application/x-javascript'}, sourceMin]); + server.respondWith('GET', 'http://path/to/file.min.js.map', [200, {'Content-Type': 'application/json'}, sourceMap]); - var stack = 'TypeError: Unable to get property \'undef\' of undefined or null reference\n at foo (http://path/to/file.js:45:13)'; - StackTrace.fromError({stack: stack}).then(callback, errback)['catch'](errback); + var stack = 'TypeError: Cannot read property \'x\' of null\n at increment (http://path/to/file.min.js:1:38)'; + StackTrace.fromError({stack: stack}).then(callback, debugErrback)['catch'](debugErrback); + server.respond(); + }); + waits(100); + runs(function () { server.respond(); }); waits(100); @@ -115,7 +119,7 @@ describe('StackTrace', function () { expect(callback).toHaveBeenCalled(); var stackFrames = callback.mostRecentCall.args[0]; expect(stackFrames.length).toEqual(1); - expect(stackFrames[0]).toMatchStackFrame(['foo', undefined, 'http://path/to/file.js', 45, 13]); + expect(stackFrames[0]).toMatchStackFrame(['null', undefined, 'file.js', 3, 4]); expect(errback).not.toHaveBeenCalled(); }); }); From d2dbcf30c35ba340d2bb96aa567ca10b18b254b1 Mon Sep 17 00:00:00 2001 From: Oliver Salzburg Date: Thu, 15 Oct 2015 19:03:15 +0200 Subject: [PATCH 009/110] Add bower dependencies --- .gitignore | 1 + bower.json | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 7f83109..cf8dc59 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ pids logs results +bower_components node_modules build coverage diff --git a/bower.json b/bower.json index 2b6cf89..3d8a9a1 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "stacktrace-js", - "main": "./stacktrace.js", + "main": "./dist/stacktrace.js", "homepage": "https://github.com/stacktracejs/stacktrace.js", "authors": [ "Eric Wendelin (http://www.eriwen.com)", @@ -27,5 +27,10 @@ "**/.*", "node_modules", "spec" - ] + ], + "dependencies": { + "error-stack-parser": "~1.2.3", + "stack-generator": "~1.0.7", + "stacktrace-gps": "~2.3.0" + } } From 94027430984d1dd33a927188d8b39fbd918ee566 Mon Sep 17 00:00:00 2001 From: Oliver Salzburg Date: Mon, 19 Oct 2015 20:51:42 +0200 Subject: [PATCH 010/110] 1.0.1 --- dist/stacktrace-with-polyfills.min.js | 6 +++--- dist/stacktrace-with-polyfills.min.js.map | 2 +- dist/stacktrace.min.js | 4 ++-- dist/stacktrace.min.js.map | 2 +- package.json | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dist/stacktrace-with-polyfills.min.js b/dist/stacktrace-with-polyfills.min.js index 525a614..bb39c14 100644 --- a/dist/stacktrace-with-polyfills.min.js +++ b/dist/stacktrace-with-polyfills.min.js @@ -1,3 +1,3 @@ -(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function r(e){B=e}function o(e){z=e}function i(){return function(){process.nextTick(l)}}function a(){return function(){$(l)}}function s(){var e=0,t=new H(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;J>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}J=0}function f(){try{var e=require,t=e("vertx");return $=t.runOnLoop||t.runOnContext,a()}catch(n){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return te.error=t,te}}function d(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function y(e,t,n){z(function(e){var r=!1,o=d(n,t,function(n){r||(r=!0,t!==n?b(e,n):A(e,n))},function(t){r||(r=!0,C(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,C(e,o))},e)}function v(e,t){t._state===Q?A(e,t._result):t._state===ee?C(e,t._result):O(t,void 0,function(t){b(e,t)},function(t){C(e,t)})}function _(e,n){if(n.constructor===e.constructor)v(e,n);else{var r=m(n);r===te?C(e,te.error):void 0===r?A(e,n):t(r)?y(e,n,r):A(e,n)}}function b(t,n){t===n?C(t,h()):e(n)?_(t,n):A(t,n)}function w(e){e._onerror&&e._onerror(e._result),S(e)}function A(e,t){e._state===K&&(e._result=t,e._state=Q,0!==e._subscribers.length&&z(S,e))}function C(e,t){e._state===K&&(e._state=ee,e._result=t,z(w,e))}function O(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+Q]=n,o[i+ee]=r,0===i&&e._state&&z(S,e)}function S(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)O(r.resolve(e[a]),void 0,t,n);return o}function k(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(p);return b(n,e),n}function P(e){var t=this,n=new t(p);return C(n,e),n}function R(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function U(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||R(),this instanceof U||F(),M(this,e))}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var D;D=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var $,B,q,I=D,J=0,z=({}.toString,function(e,t){X[J]=e,X[J+1]=t,J+=2,2===J&&(B?B(l):q())}),Z="undefined"!=typeof window?window:void 0,W=Z||{},H=W.MutationObserver||W.WebKitMutationObserver,Y="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=Y?i():H?s():V?u():void 0===Z&&"function"==typeof require?f():c();var K=void 0,Q=1,ee=2,te=new E,ne=new E;j.prototype._validateInput=function(e){return I(e)},j.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},j.prototype._init=function(){this._result=new Array(this.length)};var re=j;j.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===K&&t>o;o++)e._eachEntry(r[o],o)},j.prototype._eachEntry=function(e,t){var r=this,o=r._instanceConstructor;n(e)?e.constructor===o&&e._state!==K?(e._onerror=null,r._settledAt(e._state,t,e._result)):r._willSettleAt(o.resolve(e),t):(r._remaining--,r._result[t]=e)},j.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===K&&(r._remaining--,e===ee?C(o,n):r._result[t]=n),0===r._remaining&&A(o,r._result)},j.prototype._willSettleAt=function(e,t){var n=this;O(e,void 0,function(e){n._settledAt(Q,t,e)},function(e){n._settledAt(ee,t,e)})};var oe=T,ie=x,ae=k,se=P,ue=0,ce=U;U.all=oe,U.race=ie,U.resolve=ae,U.reject=se,U._setScheduler=r,U._setAsap=o,U._asap=z,U.prototype={constructor:U,then:function(e,t){var n=this,r=n._state;if(r===Q&&!e||r===ee&&!t)return this;var o=new this.constructor(p),i=n._result;if(r){var a=arguments[r-1];z(function(){L(r,o,a,i)})}else O(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=G,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==d)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===d&&u(d)===d&&u()===d&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([d])&&"null"==u(null)&&"[null,null,null]"==u([d,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,m,d,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(b){}if(!i("json")){var w="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return M[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?m=2==a?function(e,t){var n,r={},o=v.call(e)==w;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==w;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var r,i,a=v.call(e)==w,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),m(e,t)},!i("json-stringify")){var T={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},x="000000",k=function(e,t){return(x+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=T[a];break;default:if(32>a){t+=P+k(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,b,w,N,M,T,x,P,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=L((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,b=L(h/1e3)%60,w=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),b=s.getUTCSeconds(),w=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+k(6,0>c?-c:c):k(4,c))+"-"+k(2,l+1)+"-"+k(2,p)+"T"+k(2,y)+":"+k(2,_)+":"+k(2,b)+"."+k(3,w)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(x=a.length;x--;)if(a[x]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==S){for(T=0,x=s.length;x>T;T++)M=F(T,s,n,r,o,i,a),N.push(M===d?"null":M);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+P+"]":"["+N.join(",")+"]":"[]"}else m(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==d&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+P+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==w)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=$[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=D("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},I=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=q(),"]"!=e;n||(n=!0))n&&(","==e?(e=q(),"]"==e&&B()):B()),","==e&&B(),t.push(I(e));return t}if("{"==e){for(t={};e=q(),"}"!=e;n||(n=!0))n&&(","==e?(e=q(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=q())&&B(),t[e.slice(1)]=I(q());return t}B()}return e},J=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)J(o,r,n);else m(o,function(e){J(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=I(q()),"$"!=q()&&B(),U=G=null,t&&v.call(t)==w?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,m=0,d=0,y=e.length,v=0,_={},b={},w=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&w.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(w,s.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(m))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=s,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e,t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return t(r.responseText);n(new Error("Unable to retrieve "+e))}},r.send()}function r(e,t,n){for(var r,o,i,a=/function\s+([^(]*?)\s*\(([^)]*)\)/,s=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=s.exec(l),o&&o[1])return o[1];if(o=a.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function a(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function s(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)r(new Error("The encoding of the inline sourcemap is not supported"));else{var a="data:".length+i.length+",".length,s=t.substr(a),u=this._atob(s);this.sourceCache[t]=u,n(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,n(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,o){i(e),this._get(e.fileName).then(function(o){var i=r(o,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),i(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=a(o),c="data:"===i.substr(0,5);"/"===i[0]||c||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(s(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new u(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(n){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); -//# sourceMappingURL=stacktrace-with-polyfills.min.js.map +(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function r(e){return"object"==typeof e&&null!==e}function n(e){q=e}function o(e){Z=e}function i(){return function(){process.nextTick(l)}}function a(){return function(){I(l)}}function s(){var e=0,t=new Y(l),r=document.createTextNode("");return t.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;B>e;e+=2){var t=K[e],r=K[e+1];t(r),K[e]=void 0,K[e+1]=void 0}B=0}function f(){try{var e=require,t=e("vertx");return I=t.runOnLoop||t.runOnContext,a()}catch(r){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function d(e){try{return e.then}catch(t){return te.error=t,te}}function m(e,t,r,n){try{e.call(t,r,n)}catch(o){return o}}function y(e,t,r){Z(function(e){var n=!1,o=m(r,t,function(r){n||(n=!0,t!==r?b(e,r):A(e,r))},function(t){n||(n=!0,C(e,t))},"Settle: "+(e._label||" unknown promise"));!n&&o&&(n=!0,C(e,o))},e)}function v(e,t){t._state===W?A(e,t._result):t._state===ee?C(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){C(e,t)})}function _(e,r){if(r.constructor===e.constructor)v(e,r);else{var n=d(r);n===te?C(e,te.error):void 0===n?A(e,r):t(n)?y(e,r,n):A(e,r)}}function b(t,r){t===r?C(t,h()):e(r)?_(t,r):A(t,r)}function w(e){e._onerror&&e._onerror(e._result),O(e)}function A(e,t){e._state===Q&&(e._result=t,e._state=W,0!==e._subscribers.length&&Z(O,e))}function C(e,t){e._state===Q&&(e._state=ee,e._result=t,Z(w,e))}function S(e,t,r,n){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+W]=r,o[i+ee]=n,0===i&&e._state&&Z(O,e)}function O(e){var t=e._subscribers,r=e._state;if(0!==t.length){for(var n,o,i=e._result,a=0;aa;a++)S(n.resolve(e[a]),void 0,t,r);return o}function L(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var r=new t(p);return b(r,e),r}function P(e){var t=this,r=new t(p);return C(r,e),r}function F(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function $(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||F(),this instanceof $||R(),j(this,e))}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var r=e.Promise;(!r||"[object Promise]"!==Object.prototype.toString.call(r.resolve())||r.cast)&&(e.Promise=ce)}var U;U=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var I,q,J,D=U,B=0,Z=({}.toString,function(e,t){K[B]=e,K[B+1]=t,B+=2,2===B&&(q?q(l):J())}),z="undefined"!=typeof window?window:void 0,H=z||{},Y=H.MutationObserver||H.WebKitMutationObserver,X="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,K=new Array(1e3);J=X?i():Y?s():V?u():void 0===z&&"function"==typeof require?f():c();var Q=void 0,W=1,ee=2,te=new E,re=new E;M.prototype._validateInput=function(e){return D(e)},M.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},M.prototype._init=function(){this._result=new Array(this.length)};var ne=M;M.prototype._enumerate=function(){for(var e=this,t=e.length,r=e.promise,n=e._input,o=0;r._state===Q&&t>o;o++)e._eachEntry(n[o],o)},M.prototype._eachEntry=function(e,t){var n=this,o=n._instanceConstructor;r(e)?e.constructor===o&&e._state!==Q?(e._onerror=null,n._settledAt(e._state,t,e._result)):n._willSettleAt(o.resolve(e),t):(n._remaining--,n._result[t]=e)},M.prototype._settledAt=function(e,t,r){var n=this,o=n.promise;o._state===Q&&(n._remaining--,e===ee?C(o,r):n._result[t]=r),0===n._remaining&&A(o,n._result)},M.prototype._willSettleAt=function(e,t){var r=this;S(e,void 0,function(e){r._settledAt(W,t,e)},function(e){r._settledAt(ee,t,e)})};var oe=k,ie=T,ae=L,se=P,ue=0,ce=$;$.all=oe,$.race=ie,$.resolve=ae,$.reject=se,$._setScheduler=n,$._setAsap=o,$._asap=Z,$.prototype={constructor:$,then:function(e,t){var r=this,n=r._state;if(n===W&&!e||n===ee&&!t)return this;var o=new this.constructor(p),i=r._result;if(n){var a=arguments[n-1];Z(function(){x(n,o,a,i)})}else S(r,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=G,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),function(){function e(t,n){function i(e){if(i[e]!==m)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var r,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=n.stringify,l="function"==typeof u&&_;if(l){(r=function(){return 1}).toJSON=r;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===m&&u(m)===m&&u()===m&&"1"===u(r)&&"[1]"==u([r])&&"[null]"==u([m])&&"null"==u(null)&&"[null,null,null]"==u([m,v,null])&&u({a:[r,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,r)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=n.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){r=p(o);var h=5==r.a.length&&1===r.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),n||(n=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(n.stringify=h.stringify,n.parse=h.parse);var g,d,m,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(b){}if(!i("json")){var w="[object Function]",A="[object Date]",C="[object Number]",S="[object String]",O="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var x=p.floor,j=[0,31,59,90,120,151,181,212,243,273,304,334],M=function(e,t){return j[t]+365*(e-1970)+x((e-1969+(t=+(t>1)))/4)-x((e-1901+t)/100)+x((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,r={};return(r.__proto__=null,r.__proto__={toString:1},r).toString!=v?g=function(e){var t=this.__proto__,r=e in(this.__proto__=null,this);return this.__proto__=t,r}:(t=r.constructor,g=function(e){var r=(this.constructor||t).prototype;return e in this&&!(e in r&&this[e]===r[e])}),r=null,g.call(this,e)}),d=function(e,t){var n,o,i,a=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,o=new n;for(i in o)g.call(o,i)&&a++;return n=o=null,a?d=2==a?function(e,t){var r,n={},o=v.call(e)==w;for(r in e)o&&"prototype"==r||g.call(n,r)||!(n[r]=1)||!g.call(e,r)||t(r)}:function(e,t){var r,n,o=v.call(e)==w;for(r in e)o&&"prototype"==r||!g.call(e,r)||(n="constructor"===r)||t(r);(n||g.call(e,r="constructor"))&&t(r)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var n,i,a=v.call(e)==w,s=!a&&"function"!=typeof e.constructor&&r[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)a&&"prototype"==n||!s.call(e,n)||t(n);for(i=o.length;n=o[--i];s.call(e,n)&&t(n));}),d(e,t)},!i("json-stringify")){var k={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},T="000000",L=function(e,t){return(T+(t||0)).slice(-e)},P="\\u00",F=function(e){for(var t='"',r=0,n=e.length,o=!N||n>10,i=o&&(N?e.split(""):e);n>r;r++){var a=e.charCodeAt(r);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=k[a];break;default:if(32>a){t+=P+L(2,a.toString(16));break}t+=o?i[r]:e.charAt(r)}}return t+'"'},R=function(e,t,r,n,o,i,a){var s,u,c,l,p,h,y,_,b,w,N,j,k,T,P,$;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=S&&u!=O||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(M){for(p=x(s/864e5),c=x(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=x((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,y=x(h/36e5)%24,_=x(h/6e4)%60,b=x(h/1e3)%60,w=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),b=s.getUTCSeconds(),w=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+L(6,0>c?-c:c):L(4,c))+"-"+L(2,l+1)+"-"+L(2,p)+"T"+L(2,y)+":"+L(2,_)+":"+L(2,b)+"."+L(3,w)+"Z"}else s=null;if(r&&(s=r.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==S)return F(""+s);if("object"==typeof s){for(T=a.length;T--;)if(a[T]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==O){for(k=0,T=s.length;T>k;k++)j=R(k,s,r,n,o,i,a),N.push(j===m?"null":j);$=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+P+"]":"["+N.join(",")+"]":"[]"}else d(n||s,function(e){var t=R(e,s,r,n,o,i,a);t!==m&&N.push(F(e)+":"+(o?" ":"")+t)}),$=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+P+"}":"{"+N.join(",")+"}":"{}";return a.pop(),$}};n.stringify=function(e,t,n){var o,i,a,s;if(r[typeof t]&&t)if((s=v.call(t))==w)i=t;else if(s==O){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==S||s==C)&&(a[u]=1));}if(n)if((s=v.call(n))==C){if((n-=n%1)>0)for(o="",n>10&&(n=10);o.length$;)switch(o=i.charCodeAt($)){case 9:case 10:case 13:case 32:$++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt($):i[$],$++,e;case 34:for(e="@",$++;a>$;)if(o=i.charCodeAt($),32>o)q();else if(92==o)switch(o=i.charCodeAt(++$)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=I[o],$++;break;case 117:for(t=++$,r=$+4;r>$;$++)o=i.charCodeAt($),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||q();e+=U("0x"+i.slice(t,$));break;default:q()}else{if(34==o)break;for(o=i.charCodeAt($),t=$;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++$);e+=i.slice(t,$)}if(34==i.charCodeAt($))return $++,e;q();default:if(t=$,45==o&&(n=!0,o=i.charCodeAt(++$)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt($+1),o>=48&&57>=o)&&q(),n=!1;a>$&&(o=i.charCodeAt($),o>=48&&57>=o);$++);if(46==i.charCodeAt($)){for(r=++$;a>r&&(o=i.charCodeAt(r),o>=48&&57>=o);r++);r==$&&q(),$=r}if(o=i.charCodeAt($),101==o||69==o){for(o=i.charCodeAt(++$),(43==o||45==o)&&$++,r=$;a>r&&(o=i.charCodeAt(r),o>=48&&57>=o);r++);r==$&&q(),$=r}return+i.slice(t,$)}if(n&&q(),"true"==i.slice($,$+4))return $+=4,!0;if("false"==i.slice($,$+5))return $+=5,!1;if("null"==i.slice($,$+4))return $+=4,null;q()}return"$"},D=function(e){var t,r;if("$"==e&&q(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;r||(r=!0))r&&(","==e?(e=J(),"]"==e&&q()):q()),","==e&&q(),t.push(D(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;r||(r=!0))r&&(","==e?(e=J(),"}"==e&&q()):q()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=J())&&q(),t[e.slice(1)]=D(J());return t}q()}return e},B=function(e,t,r){var n=Z(e,t,r);n===m?delete e[t]:e[t]=n},Z=function(e,t,r){var n,o=e[t];if("object"==typeof o&&o)if(v.call(o)==O)for(n=o.length;n--;)B(o,n,r);else d(o,function(e){B(o,e,r)});return r.call(e,t,o)};n.parse=function(e,t){var r,n;return $=0,G=""+e,r=D(J()),"$"!=J()&&q(),$=G=null,t&&v.call(t)==w?Z((n={},n[""]=r,n),"",t):r}}}return n.runInContext=e,n}var t="function"==typeof define&&define.amd,r={"function":!0,object:!0},n=r[typeof exports]&&exports&&!exports.nodeType&&exports,o=r[typeof window]&&window||this,i=n&&r[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),n&&!t)e(o,n);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),r=this,n=function(){},o=function(){return r.apply(this instanceof n&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return n.prototype=this.prototype,o.prototype=new n,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var r,n=Object(this),o=n.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(r=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in n&&(s=n[a],u=e.call(r,s,a,n),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),r=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var n=[],o=arguments.length>=2?arguments[1]:void 0,i=0;r>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&n.push(a)}return n}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var r,n;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(r=t),n=0;i>n;){var a;n in o&&(a=o[n],e.call(r,a,n,o)),n++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,r,n,o){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==r&&this.setFileName(r),void 0!==n&&this.setLineNumber(n),void 0!==o&&this.setColumnNumber(o)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},toString:function(){var t=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",n=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+r+n+o+i}},t});var SourceMap=function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){var n;n=function(e,t,n){function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=i.getArg(t,"version"),n=i.getArg(t,"sources"),o=i.getArg(t,"names",[]),a=i.getArg(t,"sourceRoot",null),u=i.getArg(t,"sourcesContent",null),c=i.getArg(t,"mappings"),l=i.getArg(t,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);n=n.map(i.normalize),this._names=s.fromArray(o,!0),this._sources=s.fromArray(n,!0),this.sourceRoot=a,this.sourcesContent=u,this._mappings=c,this.file=l}var i=r(1),a=r(2),s=r(3).ArraySet,u=r(4);o.fromSourceMap=function(e){var t=Object.create(o.prototype);return t._names=s.fromArray(e._names.toArray(),!0),t._sources=s.fromArray(e._sources.toArray(),!0),t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file,t.__generatedMappings=e._mappings.toArray().slice(),t.__originalMappings=e._mappings.toArray().slice().sort(i.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?i.join(this.sourceRoot,e):e},this)}}),o.prototype.__generatedMappings=null,Object.defineProperty(o.prototype,"_generatedMappings",{get:function(){return this.__generatedMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__generatedMappings}}),o.prototype.__originalMappings=null,Object.defineProperty(o.prototype,"_originalMappings",{get:function(){return this.__originalMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__originalMappings}}),o.prototype._nextCharIsMappingSeparator=function(e){var t=e.charAt(0);return";"===t||","===t},o.prototype._parseMappings=function(e,t){for(var r,n=1,o=0,a=0,s=0,c=0,l=0,f=e,p={};f.length>0;)if(";"===f.charAt(0))n++,f=f.slice(1),o=0;else if(","===f.charAt(0))f=f.slice(1);else{if(r={},r.generatedLine=n,u.decode(f,p),r.generatedColumn=o+p.value,o=r.generatedColumn,f=p.rest,f.length>0&&!this._nextCharIsMappingSeparator(f)){if(u.decode(f,p),r.source=this._sources.at(c+p.value),c+=p.value,f=p.rest,0===f.length||this._nextCharIsMappingSeparator(f))throw new Error("Found a source, but no line and column");if(u.decode(f,p),r.originalLine=a+p.value,a=r.originalLine,r.originalLine+=1,f=p.rest,0===f.length||this._nextCharIsMappingSeparator(f))throw new Error("Found a source and line, but no column");u.decode(f,p),r.originalColumn=s+p.value,s=r.originalColumn,f=p.rest,f.length>0&&!this._nextCharIsMappingSeparator(f)&&(u.decode(f,p),r.name=this._names.at(l+p.value),l+=p.value,f=p.rest)}this.__generatedMappings.push(r),"number"==typeof r.originalLine&&this.__originalMappings.push(r)}this.__generatedMappings.sort(i.compareByGeneratedPositions),this.__originalMappings.sort(i.compareByOriginalPositions)},o.prototype._findMapping=function(e,t,r,n,o){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[n]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[n]);return a.search(e,t,o)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var n=this._generatedMappings[r];if(n.generatedLine===t.generatedLine){var o=i.getArg(n,"source",null);return null!=o&&null!=this.sourceRoot&&(o=i.join(this.sourceRoot,o)),{source:o,line:i.getArg(n,"originalLine",null),column:i.getArg(n,"originalColumn",null),name:i.getArg(n,"name",null)}}}return{source:null,line:null,column:null,name:null}},o.prototype.sourceContentFor=function(e){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=i.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=i.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t={source:i.getArg(e,"source"),originalLine:i.getArg(e,"line"),originalColumn:i.getArg(e,"column")};null!=this.sourceRoot&&(t.source=i.relative(this.sourceRoot,t.source));var r=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",i.compareByOriginalPositions);if(r>=0){var n=this._originalMappings[r];return{line:i.getArg(n,"generatedLine",null),column:i.getArg(n,"generatedColumn",null),lastColumn:i.getArg(n,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},o.prototype.allGeneratedPositionsFor=function(e){var t={source:i.getArg(e,"source"),originalLine:i.getArg(e,"line"),originalColumn:1/0};null!=this.sourceRoot&&(t.source=i.relative(this.sourceRoot,t.source));var r=[],n=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",i.compareByOriginalPositions);if(n>=0)for(var o=this._originalMappings[n];o&&o.originalLine===t.originalLine;)r.push({line:i.getArg(o,"generatedLine",null),column:i.getArg(o,"generatedColumn",null),lastColumn:i.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[--n];return r.reverse()},o.GENERATED_ORDER=1,o.ORIGINAL_ORDER=2,o.prototype.eachMapping=function(e,t,r){var n,a=t||null,s=r||o.GENERATED_ORDER;switch(s){case o.GENERATED_ORDER:n=this._generatedMappings;break;case o.ORIGINAL_ORDER:n=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var u=this.sourceRoot;n.map(function(e){var t=e.source;return null!=t&&null!=u&&(t=i.join(u,t)),{source:t,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name}}).forEach(e,a)},t.SourceMapConsumer=o}.call(t,r,t,e),!(void 0!==n&&(e.exports=n))},function(e,t,r){var n;n=function(e,t,r){function n(e,t,r){if(t in e)return e[t];if(3===arguments.length)return r;throw new Error('"'+t+'" is a required argument.')}function o(e){var t=e.match(g);return t?{scheme:t[1],auth:t[2],host:t[3],port:t[4],path:t[5]}:null}function i(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth&&(t+=e.auth+"@"),e.host&&(t+=e.host),e.port&&(t+=":"+e.port),e.path&&(t+=e.path),t}function a(e){var t=e,r=o(e);if(r){if(!r.path)return e;t=r.path}for(var n,a="/"===t.charAt(0),s=t.split(/\/+/),u=0,c=s.length-1;c>=0;c--)n=s[c],"."===n?s.splice(c,1):".."===n?u++:u>0&&(""===n?(s.splice(c+1,u),u=0):(s.splice(c,2),u--));return t=s.join("/"),""===t&&(t=a?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var r=o(t),n=o(e);if(n&&(e=n.path||"/"),r&&!r.scheme)return n&&(r.scheme=n.scheme),i(r);if(r||t.match(d))return t;if(n&&!n.host&&!n.path)return n.host=t,i(n);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return n?(n.path=s,i(n)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");var r=o(e);return"/"==t.charAt(0)&&r&&"/"==r.path?t.slice(1):0===t.indexOf(e+"/")?t.substr(e.length+1):t}function c(e){return"$"+e}function l(e){return e.substr(1)}function f(e,t){var r=e||"",n=t||"";return(r>n)-(n>r)}function p(e,t,r){var n;return(n=f(e.source,t.source))?n:(n=e.originalLine-t.originalLine)?n:(n=e.originalColumn-t.originalColumn,n||r?n:(n=f(e.name,t.name))?n:(n=e.generatedLine-t.generatedLine,n?n:e.generatedColumn-t.generatedColumn))}function h(e,t,r){var n;return(n=e.generatedLine-t.generatedLine)?n:(n=e.generatedColumn-t.generatedColumn,n||r?n:(n=f(e.source,t.source))?n:(n=e.originalLine-t.originalLine)?n:(n=e.originalColumn-t.originalColumn,n?n:f(e.name,t.name)))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,d=/^data:.+\,.+$/;t.urlParse=o,t.urlGenerate=i,t.normalize=a,t.join=s,t.relative=u,t.toSetString=c,t.fromSetString=l,t.compareByOriginalPositions=p,t.compareByGeneratedPositions=h}.call(t,r,t,e),!(void 0!==n&&(e.exports=n))},function(e,t,r){var n;n=function(e,t,r){function n(e,t,r,o,i){var a=Math.floor((t-e)/2)+e,s=i(r,o[a],!0);return 0===s?a:s>0?t-a>1?n(a,t,r,o,i):a:a-e>1?n(e,a,r,o,i):0>e?-1:e}t.search=function(e,t,r){return 0===t.length?-1:n(-1,t.length,e,t,r)}}.call(t,r,t,e),!(void 0!==n&&(e.exports=n))},function(e,t,r){var n;n=function(e,t,n){function o(){this._array=[],this._set={}}var i=r(1);o.fromArray=function(e,t){for(var r=new o,n=0,i=e.length;i>n;n++)r.add(e[n],t);return r},o.prototype.add=function(e,t){var r=this.has(e),n=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[i.toSetString(e)]=n)},o.prototype.has=function(e){return Object.prototype.hasOwnProperty.call(this._set,i.toSetString(e))},o.prototype.indexOf=function(e){if(this.has(e))return this._set[i.toSetString(e)];throw new Error('"'+e+'" is not in the set.')},o.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var t=1===(1&e),r=e>>1;return t?-r:r}var a=r(5),s=5,u=1<>>=s,n>0&&(t|=l),r+=a.encode(t);while(n>0);return r},t.decode=function(e,t){var r,n,o=0,u=e.length,f=0,p=0;do{if(o>=u)throw new Error("Expected more digits in base 64 VLQ value.");n=a.decode(e.charAt(o++)),r=!!(n&l),n&=c,f+=n<=200&&o.status<400)return t(o.responseText);n(new Error("Unable to retrieve "+e))}},o.send()}function o(e,t,r){for(var n,o,i,a=/function\s+([^(]*?)\s*\(([^)]*)\)/,s=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(n=c[t-p-1],i=n.indexOf("//"),i>=0&&(n=n.substr(0,i)),n){if(l=n+l,o=s.exec(l),o&&o[1])return o[1];if(o=a.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}return void 0}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function u(r,n,o,i){var a=new e.SourceMapConsumer(r).originalPositionFor({line:o,column:i});return new t(a.name,n,a.source,a.line,a.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(r,n){var o="data:"===t.substr(0,5);if(this.sourceCache[t])r(this.sourceCache[t]);else if(e.offline&&!o)n(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)n(new Error("The encoding of the inline sourcemap is not supported"));else{var a="data:".length+i.length+",".length,s=t.substr(a),u=this._atob(s);this.sourceCache[t]=u,r(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,r(e)}.bind(this),n)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,r){this.getMappedLocation(e).then(function(e){function r(){t(e)}this.findFunctionName(e).then(t,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,n){a(e),this._get(e.fileName).then(function(n){var i=o(n,e.lineNumber,e.columnNumber);r(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},n)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,r){i(),a(e);var n=e.fileName;this._get(n).then(function(o){var i=s(o);"/"!==i[0]&&(i=n.substring(0,n.lastIndexOf("/")+1)+i),this._get(i).then(function(r){var n=e.lineNumber,o=e.columnNumber;t(u(r,e.args,n,o))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new c(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var r=[],n=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(n=t.maxStackSize);for(var o=arguments.callee;o&&r.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,n=t.message.split("\n"),o=[],i=2,a=n.length;a>i;i+=2){var s=r.exec(n[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,n[i]))}return o},parseOpera10:function(t){for(var r=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,n=t.stacktrace.split("\n"),o=[],i=0,a=n.length;a>i;i+=2){var s=r.exec(n[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,n[i]))}return o},parseOpera11:function(r){return r.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var r,n=t.split("@"),o=this.extractLocation(n.pop()),i=n.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,r){function n(e,t){var r={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(r[t]=e[t]);return r}),r}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=n(i,o),new Promise(function(n){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),n(Promise.all(i.map(function(e){return new Promise(function(t){function n(r){t(e)}new r(o).pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=n(i,e);var r=t.backtrace(e);return"function"==typeof e.filter&&(r=r.filter(e.filter)),Promise.resolve(r)},instrument:function(e,t,r,n){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{this.get().then(t,r)["catch"](r),e.apply(n||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,r)["catch"](r),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(r,n){var o=new XMLHttpRequest;o.onerror=n,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?r(o.responseText):n(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +//# sourceMappingURL=stacktrace-with-polyfills.min.js.map \ No newline at end of file diff --git a/dist/stacktrace-with-polyfills.min.js.map b/dist/stacktrace-with-polyfills.min.js.map index c5c0847..e8899c1 100644 --- a/dist/stacktrace-with-polyfills.min.js.map +++ b/dist/stacktrace-with-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","atob","Buffer","_get","offline","pinpoint","getMappedLocation","findFunctionName","substring","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","if (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","o","SourceMap","id","loaded","m","p","replace","getArg","u","l","_version","normalize","_names","s","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","ArraySet","fromSourceMap","create","toArray","_sourceRoot","_generateSourcesContent","_file","__generatedMappings","__originalMappings","sort","compareByOriginalPositions","defineProperty","_parseMappings","_nextCharIsMappingSeparator","g","generatedLine","decode","generatedColumn","rest","at","originalLine","originalColumn","compareByGeneratedPositions","_findMapping","search","computeColumnSpans","_generatedMappings","lastGeneratedColumn","originalPositionFor","line","column","sourceContentFor","relative","indexOf","urlParse","scheme","path","generatedPositionFor","_originalMappings","lastColumn","allGeneratedPositionsFor","reverse","GENERATED_ORDER","ORIGINAL_ORDER","eachMapping","SourceMapConsumer","match","f","auth","host","port","splice","substr","h","urlGenerate","toSetString","fromSetString","_array","_set","add","encode","StackTraceGPS","XMLHttpRequest","ActiveXObject","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","atob","Buffer","_get","offline","pinpoint","getMappedLocation","findFunctionName","substring","lastIndexOf","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","_","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","url","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","if (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",t=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",r=this.getFileName()?\"@\"+this.getFileName():\"\",i=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",o=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p=\"\",n(0)}([function(e,n,t){var r;r=function(e,n,r){function i(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var t=o.getArg(n,\"version\"),r=o.getArg(n,\"sources\"),i=o.getArg(n,\"names\",[]),a=o.getArg(n,\"sourceRoot\",null),u=o.getArg(n,\"sourcesContent\",null),c=o.getArg(n,\"mappings\"),l=o.getArg(n,\"file\",null);if(t!=this._version)throw new Error(\"Unsupported version: \"+t);r=r.map(o.normalize),this._names=s.fromArray(i,!0),this._sources=s.fromArray(r,!0),this.sourceRoot=a,this.sourcesContent=u,this._mappings=c,this.file=l}var o=t(1),a=t(2),s=t(3).ArraySet,u=t(4);i.fromSourceMap=function(e){var n=Object.create(i.prototype);return n._names=s.fromArray(e._names.toArray(),!0),n._sources=s.fromArray(e._sources.toArray(),!0),n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file,n.__generatedMappings=e._mappings.toArray().slice(),n.__originalMappings=e._mappings.toArray().slice().sort(o.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?o.join(this.sourceRoot,e):e},this)}}),i.prototype.__generatedMappings=null,Object.defineProperty(i.prototype,\"_generatedMappings\",{get:function(){return this.__generatedMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__generatedMappings}}),i.prototype.__originalMappings=null,Object.defineProperty(i.prototype,\"_originalMappings\",{get:function(){return this.__originalMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__originalMappings}}),i.prototype._nextCharIsMappingSeparator=function(e){var n=e.charAt(0);return\";\"===n||\",\"===n},i.prototype._parseMappings=function(e,n){for(var t,r=1,i=0,a=0,s=0,c=0,l=0,g=e,p={};g.length>0;)if(\";\"===g.charAt(0))r++,g=g.slice(1),i=0;else if(\",\"===g.charAt(0))g=g.slice(1);else{if(t={},t.generatedLine=r,u.decode(g,p),t.generatedColumn=i+p.value,i=t.generatedColumn,g=p.rest,g.length>0&&!this._nextCharIsMappingSeparator(g)){if(u.decode(g,p),t.source=this._sources.at(c+p.value),c+=p.value,g=p.rest,0===g.length||this._nextCharIsMappingSeparator(g))throw new Error(\"Found a source, but no line and column\");if(u.decode(g,p),t.originalLine=a+p.value,a=t.originalLine,t.originalLine+=1,g=p.rest,0===g.length||this._nextCharIsMappingSeparator(g))throw new Error(\"Found a source and line, but no column\");u.decode(g,p),t.originalColumn=s+p.value,s=t.originalColumn,g=p.rest,g.length>0&&!this._nextCharIsMappingSeparator(g)&&(u.decode(g,p),t.name=this._names.at(l+p.value),l+=p.value,g=p.rest)}this.__generatedMappings.push(t),\"number\"==typeof t.originalLine&&this.__originalMappings.push(t)}this.__generatedMappings.sort(o.compareByGeneratedPositions),this.__originalMappings.sort(o.compareByOriginalPositions)},i.prototype._findMapping=function(e,n,t,r,i){if(e[t]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[t]);if(e[r]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[r]);return a.search(e,n,i)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var r=this._generatedMappings[t];if(r.generatedLine===n.generatedLine){var i=o.getArg(r,\"source\",null);return null!=i&&null!=this.sourceRoot&&(i=o.join(this.sourceRoot,i)),{source:i,line:o.getArg(r,\"originalLine\",null),column:o.getArg(r,\"originalColumn\",null),name:o.getArg(r,\"name\",null)}}}return{source:null,line:null,column:null,name:null}},i.prototype.sourceContentFor=function(e){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=o.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=o.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==n.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!n.path||\"/\"==n.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}throw new Error('\"'+e+'\" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n={source:o.getArg(e,\"source\"),originalLine:o.getArg(e,\"line\"),originalColumn:o.getArg(e,\"column\")};null!=this.sourceRoot&&(n.source=o.relative(this.sourceRoot,n.source));var t=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",o.compareByOriginalPositions);if(t>=0){var r=this._originalMappings[t];return{line:o.getArg(r,\"generatedLine\",null),column:o.getArg(r,\"generatedColumn\",null),lastColumn:o.getArg(r,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},i.prototype.allGeneratedPositionsFor=function(e){var n={source:o.getArg(e,\"source\"),originalLine:o.getArg(e,\"line\"),originalColumn:1/0};null!=this.sourceRoot&&(n.source=o.relative(this.sourceRoot,n.source));var t=[],r=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",o.compareByOriginalPositions);if(r>=0)for(var i=this._originalMappings[r];i&&i.originalLine===n.originalLine;)t.push({line:o.getArg(i,\"generatedLine\",null),column:o.getArg(i,\"generatedColumn\",null),lastColumn:o.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[--r];return t.reverse()},i.GENERATED_ORDER=1,i.ORIGINAL_ORDER=2,i.prototype.eachMapping=function(e,n,t){var r,a=n||null,s=t||i.GENERATED_ORDER;switch(s){case i.GENERATED_ORDER:r=this._generatedMappings;break;case i.ORIGINAL_ORDER:r=this._originalMappings;break;default:throw new Error(\"Unknown order of iteration.\")}var u=this.sourceRoot;r.map(function(e){var n=e.source;return null!=n&&null!=u&&(n=o.join(u,n)),{source:n,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name}}).forEach(e,a)},n.SourceMapConsumer=i}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,t){function r(e,n,t){if(n in e)return e[n];if(3===arguments.length)return t;throw new Error('\"'+n+'\" is a required argument.')}function i(e){var n=e.match(f);return n?{scheme:n[1],auth:n[2],host:n[3],port:n[4],path:n[5]}:null}function o(e){var n=\"\";return e.scheme&&(n+=e.scheme+\":\"),n+=\"//\",e.auth&&(n+=e.auth+\"@\"),e.host&&(n+=e.host),e.port&&(n+=\":\"+e.port),e.path&&(n+=e.path),n}function a(e){var n=e,t=i(e);if(t){if(!t.path)return e;n=t.path}for(var r,a=\"/\"===n.charAt(0),s=n.split(/\\/+/),u=0,c=s.length-1;c>=0;c--)r=s[c],\".\"===r?s.splice(c,1):\"..\"===r?u++:u>0&&(\"\"===r?(s.splice(c+1,u),u=0):(s.splice(c,2),u--));return n=s.join(\"/\"),\"\"===n&&(n=a?\"/\":\".\"),t?(t.path=n,o(t)):n}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var t=i(n),r=i(e);if(r&&(e=r.path||\"/\"),t&&!t.scheme)return r&&(t.scheme=r.scheme),o(t);if(t||n.match(m))return n;if(r&&!r.host&&!r.path)return r.host=n,o(r);var s=\"/\"===n.charAt(0)?n:a(e.replace(/\\/+$/,\"\")+\"/\"+n);return r?(r.path=s,o(r)):s}function u(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");var t=i(e);return\"/\"==n.charAt(0)&&t&&\"/\"==t.path?n.slice(1):0===n.indexOf(e+\"/\")?n.substr(e.length+1):n}function c(e){return\"$\"+e}function l(e){return e.substr(1)}function g(e,n){var t=e||\"\",r=n||\"\";return(t>r)-(r>t)}function p(e,n,t){var r;return(r=g(e.source,n.source))?r:(r=e.originalLine-n.originalLine)?r:(r=e.originalColumn-n.originalColumn,r||t?r:(r=g(e.name,n.name))?r:(r=e.generatedLine-n.generatedLine,r?r:e.generatedColumn-n.generatedColumn))}function h(e,n,t){var r;return(r=e.generatedLine-n.generatedLine)?r:(r=e.generatedColumn-n.generatedColumn,r||t?r:(r=g(e.source,n.source))?r:(r=e.originalLine-n.originalLine)?r:(r=e.originalColumn-n.originalColumn,r?r:g(e.name,n.name)))}n.getArg=r;var f=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=i,n.urlGenerate=o,n.normalize=a,n.join=s,n.relative=u,n.toSetString=c,n.fromSetString=l,n.compareByOriginalPositions=p,n.compareByGeneratedPositions=h}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,t){function r(e,n,t,i,o){var a=Math.floor((n-e)/2)+e,s=o(t,i[a],!0);return 0===s?a:s>0?n-a>1?r(a,n,t,i,o):a:a-e>1?r(e,a,t,i,o):0>e?-1:e}n.search=function(e,n,t){return 0===n.length?-1:r(-1,n.length,e,n,t)}}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,r){function i(){this._array=[],this._set={}}var o=t(1);i.fromArray=function(e,n){for(var t=new i,r=0,o=e.length;o>r;r++)t.add(e[r],n);return t},i.prototype.add=function(e,n){var t=this.has(e),r=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[o.toSetString(e)]=r)},i.prototype.has=function(e){return Object.prototype.hasOwnProperty.call(this._set,o.toSetString(e))},i.prototype.indexOf=function(e){if(this.has(e))return this._set[o.toSetString(e)];throw new Error('\"'+e+'\" is not in the set.')},i.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var a=t(5),s=5,u=1<>>=s,r>0&&(n|=l),t+=a.encode(n);while(r>0);return t},n.decode=function(e,n){var t,r,i=0,u=e.length,g=0,p=0;do{if(i>=u)throw new Error(\"Expected more digits in base 64 VLQ value.\");r=a.decode(e.charAt(i++)),t=!!(r&l),r&=c,g+=r<=200&&i.status<400)return n(i.responseText);r(new Error(\"Unable to retrieve \"+e))}},i.send()}function i(e,n,t){for(var r,i,o,a=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,s=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,c=e.split(\"\\n\"),l=\"\",g=Math.min(n,20),p=0;g>p;++p)if(r=c[n-p-1],o=r.indexOf(\"//\"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=s.exec(l),i&&i[1])return i[1];if(i=a.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function u(t,r,i,o){var a=new e.SourceMapConsumer(t).originalPositionFor({line:i,column:o});return new n(a.name,r,a.source,a.line,a.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(t,r){var i=\"data:\"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error(\"Cannot make network requests in offline mode\"));else if(i){var o=\"application/json;base64\";if(n.substr(5,o.length)!==o)r(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var a=\"data:\".length+o.length+\",\".length,s=n.substr(a),u=this._atob(s);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)[\"catch\"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){a(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){o(),a(e);var r=e.fileName;this._get(r).then(function(i){var o=s(i);\"/\"!==o[0]&&(o=r.substring(0,r.lastIndexOf(\"/\")+1)+o),this._get(o).then(function(t){var r=e.lineNumber,i=e.columnNumber;n(u(t,e.args,r,i))},t)[\"catch\"](t)}.bind(this),t)[\"catch\"](t)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n var args = [].slice.call(curr['arguments']);\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index 65f7d4f..a911a7f 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i,o){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i),void 0!==o&&this.setSource(o)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new i(n)}function i(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),i=a.getArg(n,"names",[]),o=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return o&&a.isAbsolute(o)&&a.isAbsolute(e)?a.relative(o,e):e}),this._names=c.fromArray(i,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=s,this._mappings=u,this.file=l}function o(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),i=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var o={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),i=a.getArg(n,"column");if(t=0){var o=this._originalMappings[i];if(void 0===e.column)for(var s=o.originalLine;o&&o.originalLine===s;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i];else for(var c=o.originalColumn;o&&o.originalLine===n&&o.originalColumn==c;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var n=Object.create(i.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new o;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,n){for(var t,r,i,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new o,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),i=y[r])v+=r.length;else{for(i=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");y[r]=i}t.generatedColumn=p+i[0],p=t.generatedColumn,i.length>1&&(t.source=m+i[1],m+=i[1],t.originalLine=g+i[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+i[3],h=t.originalColumn,i.length>4&&(t.name=d+i[4],d+=i[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},i.prototype._findMapping=function(e,n,t,r,i,o){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,i,o)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[t];if(i.generatedLine===n.generatedLine){var o=a.getArg(i,"source",null);null!==o&&(o=this._sources.at(o),null!=this.sourceRoot&&(o=a.join(this.sourceRoot,o)));var s=a.getArg(i,"name",null);return null!==s&&(s=this._names.at(s)),{source:o,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},i.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===t.source)return{line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),o?(o.path=t,i(o)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),i(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,i(s);var a="/"===n.charAt(0)?n:o(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,i(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=i,n.normalize=o,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,i,o,s,a){var u=Math.floor((r-e)/2)+e,c=s(i,o[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,i,o,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,i,o,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,e,r,i,o||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var i=t(1);r.fromArray=function(e,n){for(var t=new r,i=0,o=e.length;o>i;i++)t.add(e[i],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=i.toSetString(e),r=this._set.hasOwnProperty(t),o=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=o)},r.prototype.has=function(e){var n=i.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=i.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var n=1===(1&e),t=e>>1;return n?-t:t}var o=t(5),s=5,a=1<>>=s,i>0&&(n|=c),t+=o.encode(n);while(i>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=o.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&i>=e?e-r+c:e>=o&&s>=e?e-o+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,o,s){if(s>o){var a=r(o,s),u=o-1;t(e,a,s);for(var c=e[s],l=o;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;i(e,n,o,f-1),i(e,n,f+1,s)}}n.quickSort=function(e,n){i(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e,n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return n(r.responseText);t(new Error("Unable to retrieve "+e))}},r.send()}function r(e,n,t){for(var r,i,o,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=a.exec(l),i&&i[1])return i[1];if(i=s.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function o(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(t,r,i,o,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:i,column:o}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=t,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(n){return new Promise(function(t,r){var i="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(n.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+o.length+",".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,i){o(e),this._get(e.fileName).then(function(i){var o=r(i,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},i)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),o(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(i){var o=s(i),c="data:"===o.substr(0,5);"/"===o[0]||c||(o=u.substring(0,u.lastIndexOf("/")+1)+o),this._get(o).then(function(t){var i=e.lineNumber,o=e.columnNumber;n(a(t,e.args,i,o,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new u(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var i=arguments.callee;i&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),i=[],o=2,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),i=[],o=0,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",s=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(t=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,i[0],i[1],i[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return i(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,i){return i=r(o,i),new Promise(function(r){var o=e.parse(n);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(n){function r(t){n(e)}new t(i).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(n,t)["catch"](t),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):r(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json"),i.send(JSON.stringify({stack:e}))})}}}); -//# sourceMappingURL=stacktrace.min.js.map +!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+i+o}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){var r;r=function(e,t,r){function i(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=o.getArg(t,"version"),r=o.getArg(t,"sources"),i=o.getArg(t,"names",[]),a=o.getArg(t,"sourceRoot",null),u=o.getArg(t,"sourcesContent",null),c=o.getArg(t,"mappings"),l=o.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(o.normalize),this._names=s.fromArray(i,!0),this._sources=s.fromArray(r,!0),this.sourceRoot=a,this.sourcesContent=u,this._mappings=c,this.file=l}var o=n(1),a=n(2),s=n(3).ArraySet,u=n(4);i.fromSourceMap=function(e){var t=Object.create(i.prototype);return t._names=s.fromArray(e._names.toArray(),!0),t._sources=s.fromArray(e._sources.toArray(),!0),t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file,t.__generatedMappings=e._mappings.toArray().slice(),t.__originalMappings=e._mappings.toArray().slice().sort(o.compareByOriginalPositions),t},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?o.join(this.sourceRoot,e):e},this)}}),i.prototype.__generatedMappings=null,Object.defineProperty(i.prototype,"_generatedMappings",{get:function(){return this.__generatedMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__generatedMappings}}),i.prototype.__originalMappings=null,Object.defineProperty(i.prototype,"_originalMappings",{get:function(){return this.__originalMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__originalMappings}}),i.prototype._nextCharIsMappingSeparator=function(e){var t=e.charAt(0);return";"===t||","===t},i.prototype._parseMappings=function(e,t){for(var n,r=1,i=0,a=0,s=0,c=0,l=0,p=e,f={};p.length>0;)if(";"===p.charAt(0))r++,p=p.slice(1),i=0;else if(","===p.charAt(0))p=p.slice(1);else{if(n={},n.generatedLine=r,u.decode(p,f),n.generatedColumn=i+f.value,i=n.generatedColumn,p=f.rest,p.length>0&&!this._nextCharIsMappingSeparator(p)){if(u.decode(p,f),n.source=this._sources.at(c+f.value),c+=f.value,p=f.rest,0===p.length||this._nextCharIsMappingSeparator(p))throw new Error("Found a source, but no line and column");if(u.decode(p,f),n.originalLine=a+f.value,a=n.originalLine,n.originalLine+=1,p=f.rest,0===p.length||this._nextCharIsMappingSeparator(p))throw new Error("Found a source and line, but no column");u.decode(p,f),n.originalColumn=s+f.value,s=n.originalColumn,p=f.rest,p.length>0&&!this._nextCharIsMappingSeparator(p)&&(u.decode(p,f),n.name=this._names.at(l+f.value),l+=f.value,p=f.rest)}this.__generatedMappings.push(n),"number"==typeof n.originalLine&&this.__originalMappings.push(n)}this.__generatedMappings.sort(o.compareByGeneratedPositions),this.__originalMappings.sort(o.compareByOriginalPositions)},i.prototype._findMapping=function(e,t,n,r,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return a.search(e,t,i)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var r=this._generatedMappings[n];if(r.generatedLine===t.generatedLine){var i=o.getArg(r,"source",null);return null!=i&&null!=this.sourceRoot&&(i=o.join(this.sourceRoot,i)),{source:i,line:o.getArg(r,"originalLine",null),column:o.getArg(r,"originalColumn",null),name:o.getArg(r,"name",null)}}}return{source:null,line:null,column:null,name:null}},i.prototype.sourceContentFor=function(e){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=o.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=o.urlParse(this.sourceRoot))){var n=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(n))return this.sourcesContent[this._sources.indexOf(n)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var t={source:o.getArg(e,"source"),originalLine:o.getArg(e,"line"),originalColumn:o.getArg(e,"column")};null!=this.sourceRoot&&(t.source=o.relative(this.sourceRoot,t.source));var n=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions);if(n>=0){var r=this._originalMappings[n];return{line:o.getArg(r,"generatedLine",null),column:o.getArg(r,"generatedColumn",null),lastColumn:o.getArg(r,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},i.prototype.allGeneratedPositionsFor=function(e){var t={source:o.getArg(e,"source"),originalLine:o.getArg(e,"line"),originalColumn:1/0};null!=this.sourceRoot&&(t.source=o.relative(this.sourceRoot,t.source));var n=[],r=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions);if(r>=0)for(var i=this._originalMappings[r];i&&i.originalLine===t.originalLine;)n.push({line:o.getArg(i,"generatedLine",null),column:o.getArg(i,"generatedColumn",null),lastColumn:o.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[--r];return n.reverse()},i.GENERATED_ORDER=1,i.ORIGINAL_ORDER=2,i.prototype.eachMapping=function(e,t,n){var r,a=t||null,s=n||i.GENERATED_ORDER;switch(s){case i.GENERATED_ORDER:r=this._generatedMappings;break;case i.ORIGINAL_ORDER:r=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var u=this.sourceRoot;r.map(function(e){var t=e.source;return null!=t&&null!=u&&(t=o.join(u,t)),{source:t,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name}}).forEach(e,a)},t.SourceMapConsumer=i}.call(t,n,t,e),!(void 0!==r&&(e.exports=r))},function(e,t,n){var r;r=function(e,t,n){function r(e,t,n){if(t in e)return e[t];if(3===arguments.length)return n;throw new Error('"'+t+'" is a required argument.')}function i(e){var t=e.match(g);return t?{scheme:t[1],auth:t[2],host:t[3],port:t[4],path:t[5]}:null}function o(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth&&(t+=e.auth+"@"),e.host&&(t+=e.host),e.port&&(t+=":"+e.port),e.path&&(t+=e.path),t}function a(e){var t=e,n=i(e);if(n){if(!n.path)return e;t=n.path}for(var r,a="/"===t.charAt(0),s=t.split(/\/+/),u=0,c=s.length-1;c>=0;c--)r=s[c],"."===r?s.splice(c,1):".."===r?u++:u>0&&(""===r?(s.splice(c+1,u),u=0):(s.splice(c,2),u--));return t=s.join("/"),""===t&&(t=a?"/":"."),n?(n.path=t,o(n)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=i(t),r=i(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),o(n);if(n||t.match(m))return t;if(r&&!r.host&&!r.path)return r.host=t,o(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,o(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");var n=i(e);return"/"==t.charAt(0)&&n&&"/"==n.path?t.slice(1):0===t.indexOf(e+"/")?t.substr(e.length+1):t}function c(e){return"$"+e}function l(e){return e.substr(1)}function p(e,t){var n=e||"",r=t||"";return(n>r)-(r>n)}function f(e,t,n){var r;return(r=p(e.source,t.source))?r:(r=e.originalLine-t.originalLine)?r:(r=e.originalColumn-t.originalColumn,r||n?r:(r=p(e.name,t.name))?r:(r=e.generatedLine-t.generatedLine,r?r:e.generatedColumn-t.generatedColumn))}function h(e,t,n){var r;return(r=e.generatedLine-t.generatedLine)?r:(r=e.generatedColumn-t.generatedColumn,r||n?r:(r=p(e.source,t.source))?r:(r=e.originalLine-t.originalLine)?r:(r=e.originalColumn-t.originalColumn,r?r:p(e.name,t.name)))}t.getArg=r;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=i,t.urlGenerate=o,t.normalize=a,t.join=s,t.relative=u,t.toSetString=c,t.fromSetString=l,t.compareByOriginalPositions=f,t.compareByGeneratedPositions=h}.call(t,n,t,e),!(void 0!==r&&(e.exports=r))},function(e,t,n){var r;r=function(e,t,n){function r(e,t,n,i,o){var a=Math.floor((t-e)/2)+e,s=o(n,i[a],!0);return 0===s?a:s>0?t-a>1?r(a,t,n,i,o):a:a-e>1?r(e,a,n,i,o):0>e?-1:e}t.search=function(e,t,n){return 0===t.length?-1:r(-1,t.length,e,t,n)}}.call(t,n,t,e),!(void 0!==r&&(e.exports=r))},function(e,t,n){var r;r=function(e,t,r){function i(){this._array=[],this._set={}}var o=n(1);i.fromArray=function(e,t){for(var n=new i,r=0,o=e.length;o>r;r++)n.add(e[r],t);return n},i.prototype.add=function(e,t){var n=this.has(e),r=this._array.length;(!n||t)&&this._array.push(e),n||(this._set[o.toSetString(e)]=r)},i.prototype.has=function(e){return Object.prototype.hasOwnProperty.call(this._set,o.toSetString(e))},i.prototype.indexOf=function(e){if(this.has(e))return this._set[o.toSetString(e)];throw new Error('"'+e+'" is not in the set.')},i.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var a=n(5),s=5,u=1<>>=s,r>0&&(t|=l),n+=a.encode(t);while(r>0);return n},t.decode=function(e,t){var n,r,i=0,u=e.length,p=0,f=0;do{if(i>=u)throw new Error("Expected more digits in base 64 VLQ value.");r=a.decode(e.charAt(i++)),n=!!(r&l),r&=c,p+=r<=200&&i.status<400)return t(i.responseText);r(new Error("Unable to retrieve "+e))}},i.send()}function i(e,t,n){for(var r,i,o,a=/function\s+([^(]*?)\s*\(([^)]*)\)/,s=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",p=Math.min(t,20),f=0;p>f;++f)if(r=c[t-f-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=s.exec(l),i&&i[1])return i[1];if(i=a.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function u(n,r,i,o){var a=new e.SourceMapConsumer(n).originalPositionFor({line:i,column:o});return new t(a.name,r,a.source,a.line,a.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(n,r){var i="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(t.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var a="data:".length+o.length+",".length,s=t.substr(a),u=this._atob(s);this.sourceCache[t]=u,n(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,n(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){a(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),a(e);var r=e.fileName;this._get(r).then(function(i){var o=s(i);"/"!==o[0]&&(o=r.substring(0,r.lastIndexOf("/")+1)+o),this._get(o).then(function(n){var r=e.lineNumber,i=e.columnNumber;t(u(n,e.args,r,i))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new c(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var i=arguments.callee;i&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),i=[],o=2,a=r.length;a>o;o+=2){var s=n.exec(r[o]);s&&i.push(new e(void 0,void 0,s[2],s[1],void 0,r[o]))}return i},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),i=[],o=0,a=r.length;a>o;o+=2){var s=n.exec(r[o]);s&&i.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[o]))}return i},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",a=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(n=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,i[0],i[1],i[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return i(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,i){return i=r(o,i),new Promise(function(r){var o=e.parse(t);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(t){function r(n){t(e)}new n(i).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(t,n)["catch"](n),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?n(i.responseText):r(new Error("POST to "+t+" failed with status: "+i.status)))},i.open("post",t),i.setRequestHeader("Content-Type","application/json"),i.send(JSON.stringify({stack:e}))})}}}); +//# sourceMappingURL=stacktrace.min.js.map \ No newline at end of file diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 35e631a..311145e 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","window","atob","Buffer","_get","Promise","offline","bind","pinpoint","getMappedLocation","then","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","t","r","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","join","o","SourceMap","id","loaded","m","c","p","JSON","parse","replace","getArg","a","u","l","_version","Error","map","normalize","_names","s","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","ArraySet","fromSourceMap","create","toArray","_sourceRoot","_generateSourcesContent","_file","__generatedMappings","slice","__originalMappings","sort","compareByOriginalPositions","defineProperty","get","_parseMappings","_nextCharIsMappingSeparator","charAt","g","length","generatedLine","decode","generatedColumn","value","rest","source","at","originalLine","originalColumn","name","push","compareByGeneratedPositions","_findMapping","search","computeColumnSpans","_generatedMappings","lastGeneratedColumn","originalPositionFor","line","column","sourceContentFor","relative","has","indexOf","urlParse","scheme","path","generatedPositionFor","_originalMappings","lastColumn","allGeneratedPositionsFor","reverse","GENERATED_ORDER","ORIGINAL_ORDER","eachMapping","forEach","SourceMapConsumer","arguments","match","f","auth","host","port","split","splice","substr","h","urlGenerate","toSetString","fromSetString","Math","floor","_array","_set","add","hasOwnProperty","encode","require","StackTraceGPS","XMLHttpRequest","ActiveXObject","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","window","atob","Buffer","_get","Promise","offline","bind","pinpoint","getMappedLocation","then","findFunctionName","substring","lastIndexOf","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","_","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","url","reject","req","setRequestHeader","stringify"],"mappings":"CAAA,SAAAA,EAAAC,GAAA,YAAA,mBAAAC,SAAAA,OAAAC,IAAAD,OAAA,gBAAAD,GAAA,gBAAAG,SAAAC,OAAAD,QAAAH,IAAAD,EAAAM,WAAAL,KAAAM,KAAA,WAAA,YAAA,SAAAP,GAAAA,GAAA,OAAAQ,MAAAC,WAAAT,KAAAU,SAAAV,GAAA,QAAAC,GAAAD,EAAAC,EAAAU,EAAAC,EAAAC,GAAA,SAAAb,GAAAO,KAAAO,gBAAAd,GAAA,SAAAC,GAAAM,KAAAQ,QAAAd,GAAA,SAAAU,GAAAJ,KAAAS,YAAAL,GAAA,SAAAC,GAAAL,KAAAU,cAAAL,GAAA,SAAAC,GAAAN,KAAAW,gBAAAL,GAAA,MAAAZ,GAAAkB,WAAAC,gBAAA,WAAA,MAAAb,MAAAc,cAAAP,gBAAA,SAAAd,GAAAO,KAAAc,aAAAC,OAAAtB,IAAAuB,QAAA,WAAA,MAAAhB,MAAAiB,MAAAT,QAAA,SAAAf,GAAA,GAAA,mBAAAyB,OAAAN,UAAAO,SAAAC,KAAA3B,GAAA,KAAA,IAAA4B,WAAA,wBAAArB,MAAAiB,KAAAxB,GAAA6B,YAAA,WAAA,MAAAtB,MAAAuB,UAAAd,YAAA,SAAAhB,GAAAO,KAAAuB,SAAAR,OAAAtB,IAAA+B,cAAA,WAAA,MAAAxB,MAAAyB,YAAAf,cAAA,SAAAhB,GAAA,IAAAD,EAAAC,GAAA,KAAA,IAAA2B,WAAA,+BAAArB,MAAAyB,WAAAC,OAAAhC,IAAAiC,gBAAA,WAAA,MAAA3B,MAAA4B,cAAAjB,gBAAA,SAAAjB,GAAA,IAAAD,EAAAC,GAAA,KAAA,IAAA2B,WAAA,iCAAArB,MAAA4B,aAAAF,OAAAhC,IAAAyB,SAAA,WAAA,GAAAzB,GAAAM,KAAAa,mBAAA,cAAAT,EAAA,KAAAJ,KAAAgB,eAAAa,KAAA,KAAA,IAAAxB,EAAAL,KAAAsB,cAAA,IAAAtB,KAAAsB,cAAA,GAAAhB,EAAAb,EAAAO,KAAAwB,iBAAA,IAAAxB,KAAAwB,gBAAA,GAAAM,EAAArC,EAAAO,KAAA2B,mBAAA,IAAA3B,KAAA2B,kBAAA,EAAA,OAAAjC,GAAAU,EAAAC,EAAAC,EAAAwB,IAAApC,GAAA,IAAAqC,WAAA,SAAAtC,GAAA,QAAAC,GAAAW,GAAA,GAAAD,EAAAC,GAAA,MAAAD,GAAAC,GAAAR,OAAA,IAAAS,GAAAF,EAAAC,IAAAR,WAAAmC,GAAA3B,EAAA4B,QAAA,EAAA,OAAAxC,GAAAY,GAAAe,KAAAd,EAAAT,QAAAS,EAAAA,EAAAT,QAAAH,GAAAY,EAAA2B,QAAA,EAAA3B,EAAAT,QAAA,GAAAO,KAAA,OAAAV,GAAAwC,EAAAzC,EAAAC,EAAAyC,EAAA/B,EAAAV,EAAA0C,EAAA,GAAA1C,EAAA,KAAA,SAAAD,EAAAC,EAAAU,GAAA,GAAAC,EAAAA,GAAA,SAAAZ,EAAAC,EAAAW,GAAA,QAAAC,GAAAb,GAAA,GAAAC,GAAAD,CAAA,iBAAAA,KAAAC,EAAA2C,KAAAC,MAAA7C,EAAA8C,QAAA,WAAA,KAAA,IAAAnC,GAAA0B,EAAAU,OAAA9C,EAAA,WAAAW,EAAAyB,EAAAU,OAAA9C,EAAA,WAAAY,EAAAwB,EAAAU,OAAA9C,EAAA,YAAA+C,EAAAX,EAAAU,OAAA9C,EAAA,aAAA,MAAAgD,EAAAZ,EAAAU,OAAA9C,EAAA,iBAAA,MAAAyC,EAAAL,EAAAU,OAAA9C,EAAA,YAAAiD,EAAAb,EAAAU,OAAA9C,EAAA,OAAA,KAAA,IAAAU,GAAAJ,KAAA4C,SAAA,KAAA,IAAAC,OAAA,wBAAAzC,EAAAC,GAAAA,EAAAyC,IAAAhB,EAAAiB,WAAA/C,KAAAgD,OAAAC,EAAAC,UAAA5C,GAAA,GAAAN,KAAAmD,SAAAF,EAAAC,UAAA7C,GAAA,GAAAL,KAAAoD,WAAAX,EAAAzC,KAAAqD,eAAAX,EAAA1C,KAAAsD,UAAAnB,EAAAnC,KAAAuD,KAAAZ,EAAA,GAAAb,GAAA1B,EAAA,GAAAqC,EAAArC,EAAA,GAAA6C,EAAA7C,EAAA,GAAAoD,SAAAd,EAAAtC,EAAA,EAAAE,GAAAmD,cAAA,SAAAhE,GAAA,GAAAC,GAAAwB,OAAAwC,OAAApD,EAAAM,UAAA,OAAAlB,GAAAsD,OAAAC,EAAAC,UAAAzD,EAAAuD,OAAAW,WAAA,GAAAjE,EAAAyD,SAAAF,EAAAC,UAAAzD,EAAA0D,SAAAQ,WAAA,GAAAjE,EAAA0D,WAAA3D,EAAAmE,YAAAlE,EAAA2D,eAAA5D,EAAAoE,wBAAAnE,EAAAyD,SAAAQ,UAAAjE,EAAA0D,YAAA1D,EAAA6D,KAAA9D,EAAAqE,MAAApE,EAAAqE,oBAAAtE,EAAA6D,UAAAK,UAAAK,QAAAtE,EAAAuE,mBAAAxE,EAAA6D,UAAAK,UAAAK,QAAAE,KAAApC,EAAAqC,4BAAAzE,GAAAY,EAAAM,UAAAgC,SAAA,EAAA1B,OAAAkD,eAAA9D,EAAAM,UAAA,WAAAyD,IAAA,WAAA,MAAArE,MAAAmD,SAAAQ,UAAAb,IAAA,SAAArD,GAAA,MAAA,OAAAO,KAAAoD,WAAAtB,EAAAD,KAAA7B,KAAAoD,WAAA3D,GAAAA,GAAAO,SAAAM,EAAAM,UAAAmD,oBAAA,KAAA7C,OAAAkD,eAAA9D,EAAAM,UAAA,sBAAAyD,IAAA,WAAA,MAAArE,MAAA+D,sBAAA/D,KAAA+D,uBAAA/D,KAAAiE,sBAAAjE,KAAAsE,eAAAtE,KAAAsD,UAAAtD,KAAAoD,aAAApD,KAAA+D,uBAAAzD,EAAAM,UAAAqD,mBAAA,KAAA/C,OAAAkD,eAAA9D,EAAAM,UAAA,qBAAAyD,IAAA,WAAA,MAAArE,MAAAiE,qBAAAjE,KAAA+D,uBAAA/D,KAAAiE,sBAAAjE,KAAAsE,eAAAtE,KAAAsD,UAAAtD,KAAAoD,aAAApD,KAAAiE,sBAAA3D,EAAAM,UAAA2D,4BAAA,SAAA9E,GAAA,GAAAC,GAAAD,EAAA+E,OAAA,EAAA,OAAA,MAAA9E,GAAA,MAAAA,GAAAY,EAAAM,UAAA0D,eAAA,SAAA7E,EAAAC,GAAA,IAAA,GAAAU,GAAAC,EAAA,EAAAC,EAAA,EAAAmC,EAAA,EAAAQ,EAAA,EAAAd,EAAA,EAAAQ,EAAA,EAAA8B,EAAAhF,EAAA2C,KAAAqC,EAAAC,OAAA,GAAA,GAAA,MAAAD,EAAAD,OAAA,GAAAnE,IAAAoE,EAAAA,EAAAT,MAAA,GAAA1D,EAAA,MAAA,IAAA,MAAAmE,EAAAD,OAAA,GAAAC,EAAAA,EAAAT,MAAA,OAAA,CAAA,GAAA5D,KAAAA,EAAAuE,cAAAtE,EAAAqC,EAAAkC,OAAAH,EAAArC,GAAAhC,EAAAyE,gBAAAvE,EAAA8B,EAAA0C,MAAAxE,EAAAF,EAAAyE,gBAAAJ,EAAArC,EAAA2C,KAAAN,EAAAC,OAAA,IAAA1E,KAAAuE,4BAAAE,GAAA,CAAA,GAAA/B,EAAAkC,OAAAH,EAAArC,GAAAhC,EAAA4E,OAAAhF,KAAAmD,SAAA8B,GAAA9C,EAAAC,EAAA0C,OAAA3C,GAAAC,EAAA0C,MAAAL,EAAArC,EAAA2C,KAAA,IAAAN,EAAAC,QAAA1E,KAAAuE,4BAAAE,GAAA,KAAA,IAAA5B,OAAA,yCAAA,IAAAH,EAAAkC,OAAAH,EAAArC,GAAAhC,EAAA8E,aAAAzC,EAAAL,EAAA0C,MAAArC,EAAArC,EAAA8E,aAAA9E,EAAA8E,cAAA,EAAAT,EAAArC,EAAA2C,KAAA,IAAAN,EAAAC,QAAA1E,KAAAuE,4BAAAE,GAAA,KAAA,IAAA5B,OAAA,yCAAAH,GAAAkC,OAAAH,EAAArC,GAAAhC,EAAA+E,eAAAlC,EAAAb,EAAA0C,MAAA7B,EAAA7C,EAAA+E,eAAAV,EAAArC,EAAA2C,KAAAN,EAAAC,OAAA,IAAA1E,KAAAuE,4BAAAE,KAAA/B,EAAAkC,OAAAH,EAAArC,GAAAhC,EAAAgF,KAAApF,KAAAgD,OAAAiC,GAAAtC,EAAAP,EAAA0C,OAAAnC,GAAAP,EAAA0C,MAAAL,EAAArC,EAAA2C,MAAA/E,KAAA+D,oBAAAsB,KAAAjF,GAAA,gBAAAA,GAAA8E,cAAAlF,KAAAiE,mBAAAoB,KAAAjF,GAAAJ,KAAA+D,oBAAAG,KAAApC,EAAAwD,6BAAAtF,KAAAiE,mBAAAC,KAAApC,EAAAqC,6BAAA7D,EAAAM,UAAA2E,aAAA,SAAA9F,EAAAC,EAAAU,EAAAC,EAAAC,GAAA,GAAAb,EAAAW,IAAA,EAAA,KAAA,IAAAiB,WAAA,gDAAA5B,EAAAW,GAAA,IAAAX,EAAAY,GAAA,EAAA,KAAA,IAAAgB,WAAA,kDAAA5B,EAAAY,GAAA,OAAAoC,GAAA+C,OAAA/F,EAAAC,EAAAY,IAAAA,EAAAM,UAAA6E,mBAAA,WAAA,IAAA,GAAAhG,GAAA,EAAAA,EAAAO,KAAA0F,mBAAAhB,SAAAjF,EAAA,CAAA,GAAAC,GAAAM,KAAA0F,mBAAAjG,EAAA,IAAAA,EAAA,EAAAO,KAAA0F,mBAAAhB,OAAA,CAAA,GAAAtE,GAAAJ,KAAA0F,mBAAAjG,EAAA,EAAA,IAAAC,EAAAiF,gBAAAvE,EAAAuE,cAAA,CAAAjF,EAAAiG,oBAAAvF,EAAAyE,gBAAA,CAAA,WAAAnF,EAAAiG,oBAAA,EAAA,IAAArF,EAAAM,UAAAgF,oBAAA,SAAAnG,GAAA,GAAAC,IAAAiF,cAAA7C,EAAAU,OAAA/C,EAAA,QAAAoF,gBAAA/C,EAAAU,OAAA/C,EAAA,WAAAW,EAAAJ,KAAAuF,aAAA7F,EAAAM,KAAA0F,mBAAA,gBAAA,kBAAA5D,EAAAwD,4BAAA,IAAAlF,GAAA,EAAA,CAAA,GAAAC,GAAAL,KAAA0F,mBAAAtF,EAAA,IAAAC,EAAAsE,gBAAAjF,EAAAiF,cAAA,CAAA,GAAArE,GAAAwB,EAAAU,OAAAnC,EAAA,SAAA,KAAA,OAAA,OAAAC,GAAA,MAAAN,KAAAoD,aAAA9C,EAAAwB,EAAAD,KAAA7B,KAAAoD,WAAA9C,KAAA0E,OAAA1E,EAAAuF,KAAA/D,EAAAU,OAAAnC,EAAA,eAAA,MAAAyF,OAAAhE,EAAAU,OAAAnC,EAAA,iBAAA,MAAA+E,KAAAtD,EAAAU,OAAAnC,EAAA,OAAA,QAAA,OAAA2E,OAAA,KAAAa,KAAA,KAAAC,OAAA,KAAAV,KAAA,OAAA9E,EAAAM,UAAAmF,iBAAA,SAAAtG,GAAA,IAAAO,KAAAqD,eAAA,MAAA,KAAA,IAAA,MAAArD,KAAAoD,aAAA3D,EAAAqC,EAAAkE,SAAAhG,KAAAoD,WAAA3D,IAAAO,KAAAmD,SAAA8C,IAAAxG,GAAA,MAAAO,MAAAqD,eAAArD,KAAAmD,SAAA+C,QAAAzG,GAAA,IAAAC,EAAA,IAAA,MAAAM,KAAAoD,aAAA1D,EAAAoC,EAAAqE,SAAAnG,KAAAoD,aAAA,CAAA,GAAAhD,GAAAX,EAAA8C,QAAA,aAAA,GAAA,IAAA,QAAA7C,EAAA0G,QAAApG,KAAAmD,SAAA8C,IAAA7F,GAAA,MAAAJ,MAAAqD,eAAArD,KAAAmD,SAAA+C,QAAA9F,GAAA,MAAAV,EAAA2G,MAAA,KAAA3G,EAAA2G,OAAArG,KAAAmD,SAAA8C,IAAA,IAAAxG,GAAA,MAAAO,MAAAqD,eAAArD,KAAAmD,SAAA+C,QAAA,IAAAzG,IAAA,KAAA,IAAAoD,OAAA,IAAApD,EAAA,+BAAAa,EAAAM,UAAA0F,qBAAA,SAAA7G,GAAA,GAAAC,IAAAsF,OAAAlD,EAAAU,OAAA/C,EAAA,UAAAyF,aAAApD,EAAAU,OAAA/C,EAAA,QAAA0F,eAAArD,EAAAU,OAAA/C,EAAA,UAAA,OAAAO,KAAAoD,aAAA1D,EAAAsF,OAAAlD,EAAAkE,SAAAhG,KAAAoD,WAAA1D,EAAAsF,QAAA,IAAA5E,GAAAJ,KAAAuF,aAAA7F,EAAAM,KAAAuG,kBAAA,eAAA,iBAAAzE,EAAAqC,2BAAA,IAAA/D,GAAA,EAAA,CAAA,GAAAC,GAAAL,KAAAuG,kBAAAnG,EAAA,QAAAyF,KAAA/D,EAAAU,OAAAnC,EAAA,gBAAA,MAAAyF,OAAAhE,EAAAU,OAAAnC,EAAA,kBAAA,MAAAmG,WAAA1E,EAAAU,OAAAnC,EAAA,sBAAA,OAAA,OAAAwF,KAAA,KAAAC,OAAA,KAAAU,WAAA,OAAAlG,EAAAM,UAAA6F,yBAAA,SAAAhH,GAAA,GAAAC,IAAAsF,OAAAlD,EAAAU,OAAA/C,EAAA,UAAAyF,aAAApD,EAAAU,OAAA/C,EAAA,QAAA0F,eAAA,EAAA,EAAA,OAAAnF,KAAAoD,aAAA1D,EAAAsF,OAAAlD,EAAAkE,SAAAhG,KAAAoD,WAAA1D,EAAAsF,QAAA,IAAA5E,MAAAC,EAAAL,KAAAuF,aAAA7F,EAAAM,KAAAuG,kBAAA,eAAA,iBAAAzE,EAAAqC,2BAAA,IAAA9D,GAAA,EAAA,IAAA,GAAAC,GAAAN,KAAAuG,kBAAAlG,GAAAC,GAAAA,EAAA4E,eAAAxF,EAAAwF,cAAA9E,EAAAiF,MAAAQ,KAAA/D,EAAAU,OAAAlC,EAAA,gBAAA,MAAAwF,OAAAhE,EAAAU,OAAAlC,EAAA,kBAAA,MAAAkG,WAAA1E,EAAAU,OAAAlC,EAAA,sBAAA,QAAAA,EAAAN,KAAAuG,oBAAAlG,EAAA,OAAAD,GAAAsG,WAAApG,EAAAqG,gBAAA,EAAArG,EAAAsG,eAAA,EAAAtG,EAAAM,UAAAiG,YAAA,SAAApH,EAAAC,EAAAU,GAAA,GAAAC,GAAAoC,EAAA/C,GAAA,KAAAuD,EAAA7C,GAAAE,EAAAqG,eAAA,QAAA1D,GAAA,IAAA3C,GAAAqG,gBAAAtG,EAAAL,KAAA0F,kBAAA,MAAA,KAAApF,GAAAsG,eAAAvG,EAAAL,KAAAuG,iBAAA,MAAA,SAAA,KAAA,IAAA1D,OAAA,+BAAA,GAAAH,GAAA1C,KAAAoD,UAAA/C,GAAAyC,IAAA,SAAArD,GAAA,GAAAC,GAAAD,EAAAuF,MAAA,OAAA,OAAAtF,GAAA,MAAAgD,IAAAhD,EAAAoC,EAAAD,KAAAa,EAAAhD,KAAAsF,OAAAtF,EAAAiF,cAAAlF,EAAAkF,cAAAE,gBAAApF,EAAAoF,gBAAAK,aAAAzF,EAAAyF,aAAAC,eAAA1F,EAAA0F,eAAAC,KAAA3F,EAAA2F,QAAA0B,QAAArH,EAAAgD,IAAA/C,EAAAqH,kBAAAzG,GAAAc,KAAA1B,EAAAU,EAAAV,EAAAD,KAAA,SAAAY,IAAAZ,EAAAI,QAAAQ,KAAA,SAAAZ,EAAAC,EAAAU,GAAA,GAAAC,EAAAA,GAAA,SAAAZ,EAAAC,EAAAU,GAAA,QAAAC,GAAAZ,EAAAC,EAAAU,GAAA,GAAAV,IAAAD,GAAA,MAAAA,GAAAC,EAAA,IAAA,IAAAsH,UAAAtC,OAAA,MAAAtE,EAAA,MAAA,IAAAyC,OAAA,IAAAnD,EAAA,6BAAA,QAAAY,GAAAb,GAAA,GAAAC,GAAAD,EAAAwH,MAAAC,EAAA,OAAAxH,IAAA0G,OAAA1G,EAAA,GAAAyH,KAAAzH,EAAA,GAAA0H,KAAA1H,EAAA,GAAA2H,KAAA3H,EAAA,GAAA2G,KAAA3G,EAAA,IAAA,KAAA,QAAAoC,GAAArC,GAAA,GAAAC,GAAA,EAAA,OAAAD,GAAA2G,SAAA1G,GAAAD,EAAA2G,OAAA,KAAA1G,GAAA,KAAAD,EAAA0H,OAAAzH,GAAAD,EAAA0H,KAAA,KAAA1H,EAAA2H,OAAA1H,GAAAD,EAAA2H,MAAA3H,EAAA4H,OAAA3H,GAAA,IAAAD,EAAA4H,MAAA5H,EAAA4G,OAAA3G,GAAAD,EAAA4G,MAAA3G,EAAA,QAAA+C,GAAAhD,GAAA,GAAAC,GAAAD,EAAAW,EAAAE,EAAAb,EAAA,IAAAW,EAAA,CAAA,IAAAA,EAAAiG,KAAA,MAAA5G,EAAAC,GAAAU,EAAAiG,KAAA,IAAA,GAAAhG,GAAAoC,EAAA,MAAA/C,EAAA8E,OAAA,GAAAvB,EAAAvD,EAAA4H,MAAA,OAAA5E,EAAA,EAAAP,EAAAc,EAAAyB,OAAA,EAAAvC,GAAA,EAAAA,IAAA9B,EAAA4C,EAAAd,GAAA,MAAA9B,EAAA4C,EAAAsE,OAAApF,EAAA,GAAA,OAAA9B,EAAAqC,IAAAA,EAAA,IAAA,KAAArC,GAAA4C,EAAAsE,OAAApF,EAAA,EAAAO,GAAAA,EAAA,IAAAO,EAAAsE,OAAApF,EAAA,GAAAO,KAAA,OAAAhD,GAAAuD,EAAApB,KAAA,KAAA,KAAAnC,IAAAA,EAAA+C,EAAA,IAAA,KAAArC,GAAAA,EAAAiG,KAAA3G,EAAAoC,EAAA1B,IAAAV,EAAA,QAAAuD,GAAAxD,EAAAC,GAAA,KAAAD,IAAAA,EAAA,KAAA,KAAAC,IAAAA,EAAA,IAAA,IAAAU,GAAAE,EAAAZ,GAAAW,EAAAC,EAAAb,EAAA,IAAAY,IAAAZ,EAAAY,EAAAgG,MAAA,KAAAjG,IAAAA,EAAAgG,OAAA,MAAA/F,KAAAD,EAAAgG,OAAA/F,EAAA+F,QAAAtE,EAAA1B,EAAA,IAAAA,GAAAV,EAAAuH,MAAA/E,GAAA,MAAAxC,EAAA,IAAAW,IAAAA,EAAA+G,OAAA/G,EAAAgG,KAAA,MAAAhG,GAAA+G,KAAA1H,EAAAoC,EAAAzB,EAAA,IAAA4C,GAAA,MAAAvD,EAAA8E,OAAA,GAAA9E,EAAA+C,EAAAhD,EAAA8C,QAAA,OAAA,IAAA,IAAA7C,EAAA,OAAAW,IAAAA,EAAAgG,KAAApD,EAAAnB,EAAAzB,IAAA4C,EAAA,QAAAP,GAAAjD,EAAAC,GAAA,KAAAD,IAAAA,EAAA,KAAAA,EAAAA,EAAA8C,QAAA,MAAA,GAAA,IAAAnC,GAAAE,EAAAb,EAAA,OAAA,KAAAC,EAAA8E,OAAA,IAAApE,GAAA,KAAAA,EAAAiG,KAAA3G,EAAAsE,MAAA,GAAA,IAAAtE,EAAAwG,QAAAzG,EAAA,KAAAC,EAAA8H,OAAA/H,EAAAiF,OAAA,GAAAhF,EAAA,QAAAyC,GAAA1C,GAAA,MAAA,IAAAA,EAAA,QAAAkD,GAAAlD,GAAA,MAAAA,GAAA+H,OAAA,GAAA,QAAA/C,GAAAhF,EAAAC,GAAA,GAAAU,GAAAX,GAAA,GAAAY,EAAAX,GAAA,EAAA,QAAAU,EAAAC,IAAAA,EAAAD,GAAA,QAAAgC,GAAA3C,EAAAC,EAAAU,GAAA,GAAAC,EAAA,QAAAA,EAAAoE,EAAAhF,EAAAuF,OAAAtF,EAAAsF,SAAA3E,GAAAA,EAAAZ,EAAAyF,aAAAxF,EAAAwF,cAAA7E,GAAAA,EAAAZ,EAAA0F,eAAAzF,EAAAyF,eAAA9E,GAAAD,EAAAC,GAAAA,EAAAoE,EAAAhF,EAAA2F,KAAA1F,EAAA0F,OAAA/E,GAAAA,EAAAZ,EAAAkF,cAAAjF,EAAAiF,cAAAtE,EAAAA,EAAAZ,EAAAoF,gBAAAnF,EAAAmF,kBAAA,QAAA4C,GAAAhI,EAAAC,EAAAU,GAAA,GAAAC,EAAA,QAAAA,EAAAZ,EAAAkF,cAAAjF,EAAAiF,eAAAtE,GAAAA,EAAAZ,EAAAoF,gBAAAnF,EAAAmF,gBAAAxE,GAAAD,EAAAC,GAAAA,EAAAoE,EAAAhF,EAAAuF,OAAAtF,EAAAsF,SAAA3E,GAAAA,EAAAZ,EAAAyF,aAAAxF,EAAAwF,cAAA7E,GAAAA,EAAAZ,EAAA0F,eAAAzF,EAAAyF,eAAA9E,EAAAA,EAAAoE,EAAAhF,EAAA2F,KAAA1F,EAAA0F,QAAA1F,EAAA8C,OAAAnC,CAAA,IAAA6G,GAAA,iEAAAhF,EAAA,eAAAxC,GAAAyG,SAAA7F,EAAAZ,EAAAgI,YAAA5F,EAAApC,EAAAqD,UAAAN,EAAA/C,EAAAmC,KAAAoB,EAAAvD,EAAAsG,SAAAtD,EAAAhD,EAAAiI,YAAAxF,EAAAzC,EAAAkI,cAAAjF,EAAAjD,EAAAyE,2BAAA/B,EAAA1C,EAAA4F,4BAAAmC,GAAArG,KAAA1B,EAAAU,EAAAV,EAAAD,KAAA,SAAAY,IAAAZ,EAAAI,QAAAQ,KAAA,SAAAZ,EAAAC,EAAAU,GAAA,GAAAC,EAAAA,GAAA,SAAAZ,EAAAC,EAAAU,GAAA,QAAAC,GAAAZ,EAAAC,EAAAU,EAAAE,EAAAwB,GAAA,GAAAW,GAAAoF,KAAAC,OAAApI,EAAAD,GAAA,GAAAA,EAAAwD,EAAAnB,EAAA1B,EAAAE,EAAAmC,IAAA,EAAA,OAAA,KAAAQ,EAAAR,EAAAQ,EAAA,EAAAvD,EAAA+C,EAAA,EAAApC,EAAAoC,EAAA/C,EAAAU,EAAAE,EAAAwB,GAAAW,EAAAA,EAAAhD,EAAA,EAAAY,EAAAZ,EAAAgD,EAAArC,EAAAE,EAAAwB,GAAA,EAAArC,EAAA,GAAAA,EAAAC,EAAA8F,OAAA,SAAA/F,EAAAC,EAAAU,GAAA,MAAA,KAAAV,EAAAgF,OAAA,GAAArE,EAAA,GAAAX,EAAAgF,OAAAjF,EAAAC,EAAAU,KAAAgB,KAAA1B,EAAAU,EAAAV,EAAAD,KAAA,SAAAY,IAAAZ,EAAAI,QAAAQ,KAAA,SAAAZ,EAAAC,EAAAU,GAAA,GAAAC,EAAAA,GAAA,SAAAZ,EAAAC,EAAAW,GAAA,QAAAC,KAAAN,KAAA+H,UAAA/H,KAAAgI,QAAA,GAAAlG,GAAA1B,EAAA,EAAAE,GAAA4C,UAAA,SAAAzD,EAAAC,GAAA,IAAA,GAAAU,GAAA,GAAAE,GAAAD,EAAA,EAAAyB,EAAArC,EAAAiF,OAAA5C,EAAAzB,EAAAA,IAAAD,EAAA6H,IAAAxI,EAAAY,GAAAX,EAAA,OAAAU,IAAAE,EAAAM,UAAAqH,IAAA,SAAAxI,EAAAC,GAAA,GAAAU,GAAAJ,KAAAiG,IAAAxG,GAAAY,EAAAL,KAAA+H,OAAArD,SAAAtE,GAAAV,IAAAM,KAAA+H,OAAA1C,KAAA5F,GAAAW,IAAAJ,KAAAgI,KAAAlG,EAAA6F,YAAAlI,IAAAY,IAAAC,EAAAM,UAAAqF,IAAA,SAAAxG,GAAA,MAAAyB,QAAAN,UAAAsH,eAAA9G,KAAApB,KAAAgI,KAAAlG,EAAA6F,YAAAlI,KAAAa,EAAAM,UAAAsF,QAAA,SAAAzG,GAAA,GAAAO,KAAAiG,IAAAxG,GAAA,MAAAO,MAAAgI,KAAAlG,EAAA6F,YAAAlI,GAAA,MAAA,IAAAoD,OAAA,IAAApD,EAAA,yBAAAa,EAAAM,UAAAqE,GAAA,SAAAxF,GAAA,GAAAA,GAAA,GAAAA,EAAAO,KAAA+H,OAAArD,OAAA,MAAA1E,MAAA+H,OAAAtI,EAAA,MAAA,IAAAoD,OAAA,yBAAApD,IAAAa,EAAAM,UAAA+C,QAAA,WAAA,MAAA3D,MAAA+H,OAAA/D,SAAAtE,EAAA8D,SAAAlD,GAAAc,KAAA1B,EAAAU,EAAAV,EAAAD,KAAA,SAAAY,IAAAZ,EAAAI,QAAAQ,KAAA,SAAAZ,EAAAC,EAAAU,GAAA,GAAAC,EAAAA,GAAA,SAAAZ,EAAAC,EAAAW,GAAA,QAAAC,GAAAb,GAAA,MAAA,GAAAA,IAAAA,GAAA,GAAA,GAAAA,GAAA,GAAA,EAAA,QAAAqC,GAAArC,GAAA,GAAAC,GAAA,KAAA,EAAAD,GAAAW,EAAAX,GAAA,CAAA,OAAAC,IAAAU,EAAAA,EAAA,GAAAqC,GAAArC,EAAA,GAAA6C,EAAA,EAAAP,EAAA,GAAAO,EAAAd,EAAAO,EAAA,EAAAC,EAAAD,CAAAhD,GAAAyI,OAAA,SAAA1I,GAAA,GAAAC,GAAAU,EAAA,GAAAC,EAAAC,EAAAb,EAAA,GAAAC,GAAAW,EAAA8B,EAAA9B,KAAA4C,EAAA5C,EAAA,IAAAX,GAAAiD,GAAAvC,GAAAqC,EAAA0F,OAAAzI,SAAAW,EAAA,EAAA,OAAAD,IAAAV,EAAAkF,OAAA,SAAAnF,EAAAC,GAAA,GAAAU,GAAAC,EAAAC,EAAA,EAAAoC,EAAAjD,EAAAiF,OAAAD,EAAA,EAAArC,EAAA,CAAA,GAAA,CAAA,GAAA9B,GAAAoC,EAAA,KAAA,IAAAG,OAAA,6CAAAxC,GAAAoC,EAAAmC,OAAAnF,EAAA+E,OAAAlE,MAAAF,KAAAC,EAAAsC,GAAAtC,GAAA8B,EAAAsC,GAAApE,GAAA+B,EAAAA,GAAAa,QAAA7C,EAAAV,GAAAoF,MAAAhD,EAAA2C,GAAA/E,EAAAqF,KAAAtF,EAAAuE,MAAA1D,KAAAc,KAAA1B,EAAAU,EAAAV,EAAAD,KAAA,SAAAY,IAAAZ,EAAAI,QAAAQ,KAAA,SAAAZ,EAAAC,EAAAU,GAAA,GAAAC,EAAAA,GAAA,SAAAZ,EAAAC,EAAAU,GAAA,GAAAC,MAAAC,IAAA,oEAAAgH,MAAA,IAAAR,QAAA,SAAArH,EAAAC,GAAAW,EAAAZ,GAAAC,EAAAY,EAAAZ,GAAAD,IAAAC,EAAAyI,OAAA,SAAA1I,GAAA,GAAAA,IAAAa,GAAA,MAAAA,GAAAb,EAAA,MAAA,IAAA4B,WAAA,6BAAA5B,IAAAC,EAAAkF,OAAA,SAAAnF,GAAA,GAAAA,IAAAY,GAAA,MAAAA,GAAAZ,EAAA,MAAA,IAAA4B,WAAA,8BAAA5B,KAAA2B,KAAA1B,EAAAU,EAAAV,EAAAD,KAAA,SAAAY,IAAAZ,EAAAI,QAAAQ,QAAA,SAAAZ,EAAAC,GAAA,YAAA,mBAAAC,SAAAA,OAAAC,IAAAD,OAAA,kBAAA,aAAA,cAAAD,GAAA,gBAAAG,SAAAC,OAAAD,QAAAH,EAAA0I,QAAA,iDAAAA,QAAA,eAAA3I,EAAA4I,cAAA3I,EAAAD,EAAAsC,UAAAtC,EAAAM,aAAAC,KAAA,SAAAP,EAAAC,GAAA,YAAA,SAAAU,KAAA,IAAA,GAAAX,GAAAC,GAAA,WAAA,MAAA,IAAA4I,iBAAA,WAAA,MAAA,IAAAC,eAAA,uBAAAlI,EAAA,EAAAA,EAAAX,EAAAgF,OAAArE,IAAA,IAAA,MAAAZ,GAAAC,EAAAW,KAAAD,EAAAV,EAAAW,GAAAZ,EAAA,MAAAa,KAAA,QAAAD,GAAAZ,EAAAC,EAAAW,GAAA,GAAAC,GAAAF,GAAAE,GAAAkI,KAAA,MAAA/I,GAAAa,EAAAmI,QAAApI,EAAAC,EAAAoI,mBAAA,WAAA,GAAA,IAAApI,EAAAqI,WAAA,CAAA,GAAArI,EAAAsI,QAAA,KAAAtI,EAAAsI,OAAA,IAAA,MAAAlJ,GAAAY,EAAAuI,aAAAxI,GAAA,GAAAwC,OAAA,sBAAApD,MAAAa,EAAAwI,OAAA,QAAAxI,GAAAb,EAAAC,EAAAU,GAAA,IAAA,GAAAC,GAAAC,EAAAwB,EAAAW,EAAA,oCAAAQ,EAAA,2DAAAP,EAAA,wEAAAP,EAAA1C,EAAA6H,MAAA,MAAA3E,EAAA,GAAA8B,EAAAoD,KAAAkB,IAAArJ,EAAA,IAAA0C,EAAA,EAAAqC,EAAArC,IAAAA,EAAA,GAAA/B,EAAA8B,EAAAzC,EAAA0C,EAAA,GAAAN,EAAAzB,EAAA6F,QAAA,MAAApE,GAAA,IAAAzB,EAAAA,EAAAmH,OAAA,EAAA1F,IAAAzB,EAAA,CAAA,GAAAsC,EAAAtC,EAAAsC,EAAArC,EAAA2C,EAAA+F,KAAArG,GAAArC,GAAAA,EAAA,GAAA,MAAAA,GAAA,EAAA,IAAAA,EAAAmC,EAAAuG,KAAArG,GAAArC,GAAAA,EAAA,GAAA,MAAAA,GAAA,EAAA,IAAAA,EAAAoC,EAAAsG,KAAArG,GAAArC,GAAAA,EAAA,GAAA,MAAAA,GAAA,GAAA,MAAA,QAAA,QAAAwB,KAAA,GAAA,kBAAAZ,QAAAkD,gBAAA,kBAAAlD,QAAAwC,OAAA,KAAA,IAAAb,OAAA,mDAAA,QAAAJ,GAAAhD,GAAA,GAAA,gBAAAA,GAAA,KAAA,IAAA4B,WAAA,oCAAA,IAAA,gBAAA5B,GAAA8B,SAAA,KAAA,IAAAF,WAAA,kCAAA,IAAA,gBAAA5B,GAAAgC,YAAAhC,EAAAgC,WAAA,IAAA,GAAAhC,EAAAgC,WAAA,EAAA,KAAA,IAAAJ,WAAA,+CAAA,IAAA,gBAAA5B,GAAAmC,cAAAnC,EAAAmC,aAAA,IAAA,GAAAnC,EAAAmC,aAAA,EAAA,KAAA,IAAAP,WAAA,qDAAA,QAAA,EAAA,QAAA4B,GAAAxD,GAAA,GAAAC,GAAA,yCAAAsJ,KAAAvJ,EAAA,IAAAC,GAAAA,EAAA,GAAA,MAAAA,GAAA,EAAA,MAAA,IAAAmD,OAAA,8BAAA,QAAAH,GAAAtC,EAAAC,EAAAC,EAAAwB,GAAA,GAAAW,GAAA,GAAAhD,GAAAsH,kBAAA3G,GAAAwF,qBAAAC,KAAAvF,EAAAwF,OAAAhE,GAAA,OAAA,IAAApC,GAAA+C,EAAA2C,KAAA/E,EAAAoC,EAAAuC,OAAAvC,EAAAoD,KAAApD,EAAAqD,QAAA,MAAA,SAAA3D,GAAA1C,GAAA,MAAAO,gBAAAmC,IAAA1C,EAAAA,MAAAO,KAAAiJ,YAAAxJ,EAAAwJ,gBAAAjJ,KAAAkJ,KAAA7I,EAAAL,KAAAmJ,MAAA,SAAA1J,GAAA,GAAA2J,QAAAA,OAAAC,KAAA,MAAAD,QAAAC,KAAA5J,EAAA,IAAA,mBAAA6J,QAAA,MAAA,IAAAA,QAAA7J,EAAA,UAAA0B,SAAA,QAAA,MAAA,IAAA0B,OAAA,gCAAA7C,KAAAuJ,KAAA,SAAA7J,GAAA,MAAA,IAAA8J,SAAA,SAAApJ,EAAAC,GAAA,GAAAC,GAAA,UAAAZ,EAAA8H,OAAA,EAAA,EAAA,IAAAxH,KAAAiJ,YAAAvJ,GAAAU,EAAAJ,KAAAiJ,YAAAvJ,QAAA,IAAAD,EAAAgK,UAAAnJ,EAAAD,EAAA,GAAAwC,OAAA,qDAAA,IAAAvC,EAAA,CAAA,GAAAwB,GAAA,yBAAA,IAAApC,EAAA8H,OAAA,EAAA1F,EAAA4C,UAAA5C,EAAAzB,EAAA,GAAAwC,OAAA,8DAAA,CAAA,GAAAJ,GAAA,QAAAiC,OAAA5C,EAAA4C,OAAA,IAAAA,OAAAzB,EAAAvD,EAAA8H,OAAA/E,GAAAC,EAAA1C,KAAAmJ,MAAAlG,EAAAjD,MAAAiJ,YAAAvJ,GAAAgD,EAAAtC,EAAAsC,QAAA1C,MAAAkJ,KAAAxJ,EAAA,SAAAD,GAAAO,KAAAiJ,YAAAvJ,GAAAD,EAAAW,EAAAX,IAAAiK,KAAA1J,MAAAK,IAAAqJ,KAAA1J,QAAAA,KAAA2J,SAAA,SAAAlK,GAAA,MAAA,IAAA+J,SAAA,SAAA9J,EAAAU,GAAAJ,KAAA4J,kBAAAnK,GAAAoK,KAAA,SAAApK,GAAA,QAAAW,KAAAV,EAAAD,GAAAO,KAAA8J,iBAAArK,GAAAoK,KAAAnK,EAAAU,GAAA,SAAAA,IAAAsJ,KAAA1J,MAAAI,IAAAsJ,KAAA1J,QAAAA,KAAA8J,iBAAA,SAAArK,GAAA,MAAA,IAAA+J,SAAA,SAAApJ,EAAAC,GAAAoC,EAAAhD,GAAAO,KAAAuJ,KAAA9J,EAAA8B,UAAAsI,KAAA,SAAAxJ,GAAA,GAAAyB,GAAAxB,EAAAD,EAAAZ,EAAAgC,WAAAhC,EAAAmC,aAAAxB,GAAA,GAAAV,GAAAoC,EAAArC,EAAAwB,KAAAxB,EAAA8B,SAAA9B,EAAAgC,WAAAhC,EAAAmC,gBAAAvB,IAAAqJ,KAAA1J,aAAAA,KAAA4J,kBAAA,SAAAnK,GAAA,MAAA,IAAA+J,SAAA,SAAA9J,EAAAU,GAAA0B,IAAAW,EAAAhD,EAAA,IAAAY,GAAAZ,EAAA8B,QAAAvB,MAAAuJ,KAAAlJ,GAAAwJ,KAAA,SAAAvJ,GAAA,GAAAwB,GAAAmB,EAAA3C,EAAA,OAAAwB,EAAA,KAAAA,EAAAzB,EAAA0J,UAAA,EAAA1J,EAAA2J,YAAA,KAAA,GAAAlI,GAAA9B,KAAAuJ,KAAAzH,GAAA+H,KAAA,SAAAzJ,GAAA,GAAAC,GAAAZ,EAAAgC,WAAAnB,EAAAb,EAAAmC,YAAAlC,GAAAgD,EAAAtC,EAAAX,EAAAwB,KAAAZ,EAAAC,KAAAF,GAAA,SAAAA,IAAAsJ,KAAA1J,MAAAI,GAAA,SAAAA,IAAAsJ,KAAA1J,UAAA,GAAAmC,GAAA1C,MCAA,SAAAwK,EAAAC,GACA,YAIA,mBAAAvK,SAAAA,OAAAC,IACAD,OAAA,mBAAA,cAAAuK,GACA,gBAAArK,SACAC,OAAAD,QAAAqK,EAAA9B,QAAA,eAEA6B,EAAAE,eAAAD,EAAAD,EAAAlK,aAEAC,KAAA,SAAAD,GACA,OACAqK,UAAA,SAAAC,GACA,GAAAC,MACAC,EAAA,EAEA,iBAAAF,IAAA,gBAAAA,GAAAE,eACAA,EAAAF,EAAAE,aAIA,KADA,GAAAC,GAAAxD,UAAAyD,OACAD,GAAAF,EAAA5F,OAAA6F,GAAA,CACA,GAAAtJ,MAAA+C,MAAA5C,KAAAoJ,EAAA,UACA,iCAAAE,KAAAF,EAAArJ,YACAmJ,EAAAjF,KAAA,GAAAtF,GAAA4K,OAAAC,IAAAC,OAAA5J,IAEAqJ,EAAAjF,KAAA,GAAAtF,GAAA8K,OAAA5J,GAGA,KACAuJ,EAAAA,EAAAM,OACA,MAAArL,GACA,OAGA,MAAA6K,OCrCA,SAAAL,EAAAC,GACA,YAIA,mBAAAvK,SAAAA,OAAAC,IACAD,OAAA,sBAAA,cAAAuK,GACA,gBAAArK,SACAC,OAAAD,QAAAqK,EAAA9B,QAAA,eAEA6B,EAAAc,iBAAAb,EAAAD,EAAAlK,aAEAC,KAAA,SAAAD,GACA,YAEA,IAAAiL,GAAA,gBACAC,EAAA,+BAEA,QAMA3I,MAAA,SAAA4I,GACA,GAAA,mBAAAA,GAAAC,YAAA,mBAAAD,GAAA,mBACA,MAAAlL,MAAAoL,WAAAF,EACA,IAAAA,EAAAZ,OAAAY,EAAAZ,MAAArD,MAAAgE,GACA,MAAAjL,MAAAqL,YAAAH,EACA,IAAAA,EAAAZ,OAAAY,EAAAZ,MAAArD,MAAA+D,GACA,MAAAhL,MAAAsL,gBAAAJ,EAEA,MAAA,IAAArI,OAAA,oCASA0I,gBAAA,SAAAC,GAEA,GAAA,KAAAA,EAAAtF,QAAA,KACA,OAAAsF,EAGA,IAAAC,GAAAD,EAAAjJ,QAAA,YAAA,IAAA+E,MAAA,KACAoE,EAAAD,EAAAE,MACAC,EAAAH,EAAAA,EAAA/G,OAAA,EACA,KAAAzE,MAAAC,WAAA0L,KAAAzL,SAAAyL,GAAA,CACA,GAAAnK,GAAAgK,EAAAE,KACA,QAAAF,EAAA5J,KAAA,KAAAJ,EAAAiK,GAEA,OAAAD,EAAA5J,KAAA,KAAA6J,EAAAb,SAIAQ,YAAA,SAAAH,GACA,MAAAA,GAAAZ,MAAAhD,MAAA,MAAAuE,OAAA,SAAAhG,GACA,QAAAA,EAAAoB,MAAAgE,IACAjL,MAAA8C,IAAA,SAAA+C,GACA,GAAAiG,GAAAjG,EAAAtD,QAAA,OAAA,IAAA+E,MAAA,OAAAtD,MAAA,GACAyH,EAAAzL,KAAAuL,gBAAAO,EAAAH,OACA7K,EAAAgL,EAAA,IAAA,cAAAA,EAAA,GAAAA,EAAA,GAAAjB,MACA,OAAA,IAAA9K,GAAAe,EAAA+J,OAAAY,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAA5F,IACA7F,OAGAsL,gBAAA,SAAAJ,GACA,MAAAA,GAAAZ,MAAAhD,MAAA,MAAAuE,OAAA,SAAAhG,GACA,QAAAA,EAAAoB,MAAA+D,IACAhL,MAAA8C,IAAA,SAAA+C,GACA,GAAAiG,GAAAjG,EAAAyB,MAAA,KACAmE,EAAAzL,KAAAuL,gBAAAO,EAAAH,OACA7K,EAAAgL,EAAAC,SAAAlB,MACA,OAAA,IAAA9K,GAAAe,EAAA+J,OAAAY,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAA5F,IACA7F,OAGAoL,WAAA,SAAA3L,GACA,OAAAA,EAAA0L,YAAA1L,EAAAuM,QAAA9F,QAAA,MAAA,IACAzG,EAAAuM,QAAA1E,MAAA,MAAA5C,OAAAjF,EAAA0L,WAAA7D,MAAA,MAAA5C,OACA1E,KAAAiM,YAAAxM,GACAA,EAAA6K,MAGAtK,KAAAkM,aAAAzM,GAFAO,KAAAmM,aAAA1M,IAMAwM,YAAA,SAAAxM,GAKA,IAAA,GAJA2M,GAAA,oCACAC,EAAA5M,EAAAuM,QAAA1E,MAAA,MACAgF,KAEAhM,EAAA,EAAAiM,EAAAF,EAAA3H,OAAA6H,EAAAjM,EAAAA,GAAA,EAAA,CACA,GAAA2G,GAAAmF,EAAApD,KAAAqD,EAAA/L,GACA2G,IACAqF,EAAAjH,KAAA,GAAAtF,GAAA8K,OAAAA,OAAA5D,EAAA,GAAAA,EAAA,GAAA4D,OAAAwB,EAAA/L,KAIA,MAAAgM,IAGAH,aAAA,SAAA1M,GAKA,IAAA,GAJA2M,GAAA,6DACAC,EAAA5M,EAAA0L,WAAA7D,MAAA,MACAgF,KAEAhM,EAAA,EAAAiM,EAAAF,EAAA3H,OAAA6H,EAAAjM,EAAAA,GAAA,EAAA,CACA,GAAA2G,GAAAmF,EAAApD,KAAAqD,EAAA/L,GACA2G,IACAqF,EAAAjH,KAAA,GAAAtF,GAAAkH,EAAA,IAAA4D,OAAAA,OAAA5D,EAAA,GAAAA,EAAA,GAAA4D,OAAAwB,EAAA/L,KAIA,MAAAgM,IAIAJ,aAAA,SAAAhB,GACA,MAAAA,GAAAZ,MAAAhD,MAAA,MAAAuE,OAAA,SAAAhG,GACA,QAAAA,EAAAoB,MAAA+D,KACAnF,EAAAoB,MAAA,sBACAjH,MAAA8C,IAAA,SAAA+C,GACA,GAMA2G,GANAV,EAAAjG,EAAAyB,MAAA,KACAmE,EAAAzL,KAAAuL,gBAAAO,EAAAH,OACAc,EAAAX,EAAAC,SAAA,GACAjL,EAAA2L,EACAlK,QAAA,iCAAA,MACAA,QAAA,cAAA,KAAAsI,MAEA4B,GAAAxF,MAAA,kBACAuF,EAAAC,EAAAlK,QAAA,uBAAA,MAEA,IAAAtB,GAAA4J,SAAA2B,GAAA,8BAAAA,EAAA3B,OAAA2B,EAAAlF,MAAA,IACA,OAAA,IAAAvH,GAAAe,EAAAG,EAAAwK,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAA5F,IACA7F,UC3IA,SAAAiK,EAAAC,GACA,YAIA,mBAAAvK,SAAAA,OAAAC,IACAD,OAAA,cAAA,qBAAA,kBAAA,kBAAAuK,GACA,gBAAArK,SACAC,OAAAD,QAAAqK,EAAA9B,QAAA,sBAAAA,QAAA,mBAAAA,QAAA,mBAEA6B,EAAAyC,WAAAxC,EAAAD,EAAAc,iBAAAd,EAAAE,eAAAF,EAAA5B,gBAEArI,KAAA,SAAA+K,EAAAZ,EAAA9B,GAmBA,QAAAsE,GAAAC,EAAAC,GACA,GAAAC,KAWA,QATAF,EAAAC,GAAA/F,QAAA,SAAAiG,GACA,IAAA,GAAAC,KAAAD,GACAA,EAAA7E,eAAA8E,KACAF,EAAAE,GAAAD,EAAAC,GAGA,OAAAF,KAGAA,EAGA,QAAAG,GAAAC,GACA,MAAAA,GAAA5C,OAAA4C,EAAA,mBAlCA,GAAAC,IACAtB,OAAA,SAAAuB,GAEA,MAAA,MAAAA,EAAAtM,cAAA,IAAAoF,QAAA,iBACA,MAAAkH,EAAAtM,cAAA,IAAAoF,QAAA,uBACA,MAAAkH,EAAAtM,cAAA,IAAAoF,QAAA,oBACA,MAAAkH,EAAAtM,cAAA,IAAAoF,QAAA,qBA+BA,QAMA7B,IAAA,SAAAgG,GACA,IAEA,KAAA,IAAAxH,OACA,MAAAqK,GACA,MAAAD,GAAAC,GACAlN,KAAAqN,UAAAH,EAAA7C,GAEArK,KAAAsN,qBAAAjD,KAWAgD,UAAA,SAAAnC,EAAAb,GAEA,MADAA,GAAAsC,EAAAQ,EAAA9C,GACA,GAAAb,SAAA,SAAA+D,GACA,GAAAC,GAAAzC,EAAAzI,MAAA4I,EACA,mBAAAb,GAAAwB,SACA2B,EAAAA,EAAA3B,OAAAxB,EAAAwB,SAEA0B,EAAA/D,QAAAiE,IAAAD,EAAA1K,IAAA,SAAA4K,GACA,MAAA,IAAAlE,SAAA,SAAA+D,GACA,QAAAI,GAAAC,GACAL,EAAAG,GAGA,GAAArF,GAAAgC,GAAAV,SAAA+D,GACA7D,KAAA0D,EAAAI,GAAA,SAAAA,UAGAjE,KAAA1J,QAQAsN,qBAAA,SAAAjD,GACAA,EAAAsC,EAAAQ,EAAA9C,EACA,IAAAwD,GAAA1D,EAAAC,UAAAC,EAIA,OAHA,kBAAAA,GAAAwB,SACAgC,EAAAA,EAAAhC,OAAAxB,EAAAwB,SAEArC,QAAA+D,QAAAM,IAYAC,WAAA,SAAAC,EAAAC,EAAAC,EAAAC,GACA,GAAA,kBAAAH,GACA,KAAA,IAAAlL,OAAA,wCACA,IAAA,kBAAAkL,GAAAI,uBAEA,MAAAJ,EAGA,IAAAK,GAAA,WACA,IACApO,KAAAqE,MAAAwF,KAAAmE,EAAAC,GAAA,SAAAA,GACAF,EAAAM,MAAAH,GAAAlO,KAAAgH,WACA,MAAAvH,GAIA,KAHAwN,GAAAxN,IACAO,KAAAqN,UAAA5N,GAAAoK,KAAAmE,EAAAC,GAAA,SAAAA,GAEAxO,IAEAiK,KAAA1J,KAGA,OAFAoO,GAAAD,uBAAAJ,EAEAK,GASAE,aAAA,SAAAP,GACA,GAAA,kBAAAA,GACA,KAAA,IAAAlL,OAAA,2CACA,OAAA,kBAAAkL,GAAAI,uBACAJ,EAAAI,uBAGAJ,GAUAQ,OAAA,SAAAf,EAAAgB,GACA,MAAA,IAAAhF,SAAA,SAAA+D,EAAAkB,GACA,GAAAC,GAAA,GAAApG,eACAoG,GAAAjG,QAAAgG,EACAC,EAAAhG,mBAAA,WACA,IAAAgG,EAAA/F,aACA+F,EAAA9F,QAAA,KAAA8F,EAAA9F,OAAA,IACA2E,EAAAmB,EAAA7F,cAEA4F,EAAA,GAAA5L,OAAA,WAAA2L,EAAA,wBAAAE,EAAA9F,WAIA8F,EAAAlG,KAAA,OAAAgG,GACAE,EAAAC,iBAAA,eAAA,oBACAD,EAAA5F,KAAAzG,KAAAuM,WAAAtE,MAAAkD","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",t=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",r=this.getFileName()?\"@\"+this.getFileName():\"\",i=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",o=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p=\"\",n(0)}([function(e,n,t){var r;r=function(e,n,r){function i(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var t=o.getArg(n,\"version\"),r=o.getArg(n,\"sources\"),i=o.getArg(n,\"names\",[]),a=o.getArg(n,\"sourceRoot\",null),u=o.getArg(n,\"sourcesContent\",null),c=o.getArg(n,\"mappings\"),l=o.getArg(n,\"file\",null);if(t!=this._version)throw new Error(\"Unsupported version: \"+t);r=r.map(o.normalize),this._names=s.fromArray(i,!0),this._sources=s.fromArray(r,!0),this.sourceRoot=a,this.sourcesContent=u,this._mappings=c,this.file=l}var o=t(1),a=t(2),s=t(3).ArraySet,u=t(4);i.fromSourceMap=function(e){var n=Object.create(i.prototype);return n._names=s.fromArray(e._names.toArray(),!0),n._sources=s.fromArray(e._sources.toArray(),!0),n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file,n.__generatedMappings=e._mappings.toArray().slice(),n.__originalMappings=e._mappings.toArray().slice().sort(o.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?o.join(this.sourceRoot,e):e},this)}}),i.prototype.__generatedMappings=null,Object.defineProperty(i.prototype,\"_generatedMappings\",{get:function(){return this.__generatedMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__generatedMappings}}),i.prototype.__originalMappings=null,Object.defineProperty(i.prototype,\"_originalMappings\",{get:function(){return this.__originalMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__originalMappings}}),i.prototype._nextCharIsMappingSeparator=function(e){var n=e.charAt(0);return\";\"===n||\",\"===n},i.prototype._parseMappings=function(e,n){for(var t,r=1,i=0,a=0,s=0,c=0,l=0,g=e,p={};g.length>0;)if(\";\"===g.charAt(0))r++,g=g.slice(1),i=0;else if(\",\"===g.charAt(0))g=g.slice(1);else{if(t={},t.generatedLine=r,u.decode(g,p),t.generatedColumn=i+p.value,i=t.generatedColumn,g=p.rest,g.length>0&&!this._nextCharIsMappingSeparator(g)){if(u.decode(g,p),t.source=this._sources.at(c+p.value),c+=p.value,g=p.rest,0===g.length||this._nextCharIsMappingSeparator(g))throw new Error(\"Found a source, but no line and column\");if(u.decode(g,p),t.originalLine=a+p.value,a=t.originalLine,t.originalLine+=1,g=p.rest,0===g.length||this._nextCharIsMappingSeparator(g))throw new Error(\"Found a source and line, but no column\");u.decode(g,p),t.originalColumn=s+p.value,s=t.originalColumn,g=p.rest,g.length>0&&!this._nextCharIsMappingSeparator(g)&&(u.decode(g,p),t.name=this._names.at(l+p.value),l+=p.value,g=p.rest)}this.__generatedMappings.push(t),\"number\"==typeof t.originalLine&&this.__originalMappings.push(t)}this.__generatedMappings.sort(o.compareByGeneratedPositions),this.__originalMappings.sort(o.compareByOriginalPositions)},i.prototype._findMapping=function(e,n,t,r,i){if(e[t]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[t]);if(e[r]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[r]);return a.search(e,n,i)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var r=this._generatedMappings[t];if(r.generatedLine===n.generatedLine){var i=o.getArg(r,\"source\",null);return null!=i&&null!=this.sourceRoot&&(i=o.join(this.sourceRoot,i)),{source:i,line:o.getArg(r,\"originalLine\",null),column:o.getArg(r,\"originalColumn\",null),name:o.getArg(r,\"name\",null)}}}return{source:null,line:null,column:null,name:null}},i.prototype.sourceContentFor=function(e){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=o.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=o.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==n.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!n.path||\"/\"==n.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}throw new Error('\"'+e+'\" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n={source:o.getArg(e,\"source\"),originalLine:o.getArg(e,\"line\"),originalColumn:o.getArg(e,\"column\")};null!=this.sourceRoot&&(n.source=o.relative(this.sourceRoot,n.source));var t=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",o.compareByOriginalPositions);if(t>=0){var r=this._originalMappings[t];return{line:o.getArg(r,\"generatedLine\",null),column:o.getArg(r,\"generatedColumn\",null),lastColumn:o.getArg(r,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},i.prototype.allGeneratedPositionsFor=function(e){var n={source:o.getArg(e,\"source\"),originalLine:o.getArg(e,\"line\"),originalColumn:1/0};null!=this.sourceRoot&&(n.source=o.relative(this.sourceRoot,n.source));var t=[],r=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",o.compareByOriginalPositions);if(r>=0)for(var i=this._originalMappings[r];i&&i.originalLine===n.originalLine;)t.push({line:o.getArg(i,\"generatedLine\",null),column:o.getArg(i,\"generatedColumn\",null),lastColumn:o.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[--r];return t.reverse()},i.GENERATED_ORDER=1,i.ORIGINAL_ORDER=2,i.prototype.eachMapping=function(e,n,t){var r,a=n||null,s=t||i.GENERATED_ORDER;switch(s){case i.GENERATED_ORDER:r=this._generatedMappings;break;case i.ORIGINAL_ORDER:r=this._originalMappings;break;default:throw new Error(\"Unknown order of iteration.\")}var u=this.sourceRoot;r.map(function(e){var n=e.source;return null!=n&&null!=u&&(n=o.join(u,n)),{source:n,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name}}).forEach(e,a)},n.SourceMapConsumer=i}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,t){function r(e,n,t){if(n in e)return e[n];if(3===arguments.length)return t;throw new Error('\"'+n+'\" is a required argument.')}function i(e){var n=e.match(f);return n?{scheme:n[1],auth:n[2],host:n[3],port:n[4],path:n[5]}:null}function o(e){var n=\"\";return e.scheme&&(n+=e.scheme+\":\"),n+=\"//\",e.auth&&(n+=e.auth+\"@\"),e.host&&(n+=e.host),e.port&&(n+=\":\"+e.port),e.path&&(n+=e.path),n}function a(e){var n=e,t=i(e);if(t){if(!t.path)return e;n=t.path}for(var r,a=\"/\"===n.charAt(0),s=n.split(/\\/+/),u=0,c=s.length-1;c>=0;c--)r=s[c],\".\"===r?s.splice(c,1):\"..\"===r?u++:u>0&&(\"\"===r?(s.splice(c+1,u),u=0):(s.splice(c,2),u--));return n=s.join(\"/\"),\"\"===n&&(n=a?\"/\":\".\"),t?(t.path=n,o(t)):n}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var t=i(n),r=i(e);if(r&&(e=r.path||\"/\"),t&&!t.scheme)return r&&(t.scheme=r.scheme),o(t);if(t||n.match(m))return n;if(r&&!r.host&&!r.path)return r.host=n,o(r);var s=\"/\"===n.charAt(0)?n:a(e.replace(/\\/+$/,\"\")+\"/\"+n);return r?(r.path=s,o(r)):s}function u(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");var t=i(e);return\"/\"==n.charAt(0)&&t&&\"/\"==t.path?n.slice(1):0===n.indexOf(e+\"/\")?n.substr(e.length+1):n}function c(e){return\"$\"+e}function l(e){return e.substr(1)}function g(e,n){var t=e||\"\",r=n||\"\";return(t>r)-(r>t)}function p(e,n,t){var r;return(r=g(e.source,n.source))?r:(r=e.originalLine-n.originalLine)?r:(r=e.originalColumn-n.originalColumn,r||t?r:(r=g(e.name,n.name))?r:(r=e.generatedLine-n.generatedLine,r?r:e.generatedColumn-n.generatedColumn))}function h(e,n,t){var r;return(r=e.generatedLine-n.generatedLine)?r:(r=e.generatedColumn-n.generatedColumn,r||t?r:(r=g(e.source,n.source))?r:(r=e.originalLine-n.originalLine)?r:(r=e.originalColumn-n.originalColumn,r?r:g(e.name,n.name)))}n.getArg=r;var f=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=i,n.urlGenerate=o,n.normalize=a,n.join=s,n.relative=u,n.toSetString=c,n.fromSetString=l,n.compareByOriginalPositions=p,n.compareByGeneratedPositions=h}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,t){function r(e,n,t,i,o){var a=Math.floor((n-e)/2)+e,s=o(t,i[a],!0);return 0===s?a:s>0?n-a>1?r(a,n,t,i,o):a:a-e>1?r(e,a,t,i,o):0>e?-1:e}n.search=function(e,n,t){return 0===n.length?-1:r(-1,n.length,e,n,t)}}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,r){function i(){this._array=[],this._set={}}var o=t(1);i.fromArray=function(e,n){for(var t=new i,r=0,o=e.length;o>r;r++)t.add(e[r],n);return t},i.prototype.add=function(e,n){var t=this.has(e),r=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[o.toSetString(e)]=r)},i.prototype.has=function(e){return Object.prototype.hasOwnProperty.call(this._set,o.toSetString(e))},i.prototype.indexOf=function(e){if(this.has(e))return this._set[o.toSetString(e)];throw new Error('\"'+e+'\" is not in the set.')},i.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var a=t(5),s=5,u=1<>>=s,r>0&&(n|=l),t+=a.encode(n);while(r>0);return t},n.decode=function(e,n){var t,r,i=0,u=e.length,g=0,p=0;do{if(i>=u)throw new Error(\"Expected more digits in base 64 VLQ value.\");r=a.decode(e.charAt(i++)),t=!!(r&l),r&=c,g+=r<=200&&i.status<400)return n(i.responseText);r(new Error(\"Unable to retrieve \"+e))}},i.send()}function i(e,n,t){for(var r,i,o,a=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,s=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,c=e.split(\"\\n\"),l=\"\",g=Math.min(n,20),p=0;g>p;++p)if(r=c[n-p-1],o=r.indexOf(\"//\"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=s.exec(l),i&&i[1])return i[1];if(i=a.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function u(t,r,i,o){var a=new e.SourceMapConsumer(t).originalPositionFor({line:i,column:o});return new n(a.name,r,a.source,a.line,a.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(t,r){var i=\"data:\"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error(\"Cannot make network requests in offline mode\"));else if(i){var o=\"application/json;base64\";if(n.substr(5,o.length)!==o)r(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var a=\"data:\".length+o.length+\",\".length,s=n.substr(a),u=this._atob(s);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)[\"catch\"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){a(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){o(),a(e);var r=e.fileName;this._get(r).then(function(i){var o=s(i);\"/\"!==o[0]&&(o=r.substring(0,r.lastIndexOf(\"/\")+1)+o),this._get(o).then(function(t){var r=e.lineNumber,i=e.columnNumber;n(u(t,e.args,r,i))},t)[\"catch\"](t)}.bind(this),t)[\"catch\"](t)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n var args = [].slice.call(curr['arguments']);\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/package.json b/package.json index 2d7e450..0811973 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "Victor Homyakov (https://github.com/victor-homyakov)", "Oliver Salzburg (https://github.com/oliversalzburg)" ], - "version": "1.0.0", + "version": "1.0.1", "license": "SEE LICENSE IN LICENSE", "keywords": [ "stacktrace", From af2fd1ce3eff24753fbca5f5937ac13d40772677 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 15 Nov 2015 11:18:46 -0800 Subject: [PATCH 011/110] Remove no-dep stacktrace.js from dist/. Fixes #140 --- bower.json | 2 +- dist/stacktrace-with-polyfills.min.js | 6 +- dist/stacktrace-with-polyfills.min.js.map | 2 +- dist/stacktrace.js | 185 ---------------------- dist/stacktrace.min.js | 4 +- dist/stacktrace.min.js.map | 2 +- gulpfile.js | 7 +- 7 files changed, 9 insertions(+), 199 deletions(-) delete mode 100644 dist/stacktrace.js diff --git a/bower.json b/bower.json index 3d8a9a1..428e5ca 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "stacktrace-js", - "main": "./dist/stacktrace.js", + "main": "./stacktrace.js", "homepage": "https://github.com/stacktracejs/stacktrace.js", "authors": [ "Eric Wendelin (http://www.eriwen.com)", diff --git a/dist/stacktrace-with-polyfills.min.js b/dist/stacktrace-with-polyfills.min.js index bb39c14..2fdefd3 100644 --- a/dist/stacktrace-with-polyfills.min.js +++ b/dist/stacktrace-with-polyfills.min.js @@ -1,3 +1,3 @@ -(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function r(e){return"object"==typeof e&&null!==e}function n(e){q=e}function o(e){Z=e}function i(){return function(){process.nextTick(l)}}function a(){return function(){I(l)}}function s(){var e=0,t=new Y(l),r=document.createTextNode("");return t.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;B>e;e+=2){var t=K[e],r=K[e+1];t(r),K[e]=void 0,K[e+1]=void 0}B=0}function f(){try{var e=require,t=e("vertx");return I=t.runOnLoop||t.runOnContext,a()}catch(r){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function d(e){try{return e.then}catch(t){return te.error=t,te}}function m(e,t,r,n){try{e.call(t,r,n)}catch(o){return o}}function y(e,t,r){Z(function(e){var n=!1,o=m(r,t,function(r){n||(n=!0,t!==r?b(e,r):A(e,r))},function(t){n||(n=!0,C(e,t))},"Settle: "+(e._label||" unknown promise"));!n&&o&&(n=!0,C(e,o))},e)}function v(e,t){t._state===W?A(e,t._result):t._state===ee?C(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){C(e,t)})}function _(e,r){if(r.constructor===e.constructor)v(e,r);else{var n=d(r);n===te?C(e,te.error):void 0===n?A(e,r):t(n)?y(e,r,n):A(e,r)}}function b(t,r){t===r?C(t,h()):e(r)?_(t,r):A(t,r)}function w(e){e._onerror&&e._onerror(e._result),O(e)}function A(e,t){e._state===Q&&(e._result=t,e._state=W,0!==e._subscribers.length&&Z(O,e))}function C(e,t){e._state===Q&&(e._state=ee,e._result=t,Z(w,e))}function S(e,t,r,n){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+W]=r,o[i+ee]=n,0===i&&e._state&&Z(O,e)}function O(e){var t=e._subscribers,r=e._state;if(0!==t.length){for(var n,o,i=e._result,a=0;aa;a++)S(n.resolve(e[a]),void 0,t,r);return o}function L(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var r=new t(p);return b(r,e),r}function P(e){var t=this,r=new t(p);return C(r,e),r}function F(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function $(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||F(),this instanceof $||R(),j(this,e))}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var r=e.Promise;(!r||"[object Promise]"!==Object.prototype.toString.call(r.resolve())||r.cast)&&(e.Promise=ce)}var U;U=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var I,q,J,D=U,B=0,Z=({}.toString,function(e,t){K[B]=e,K[B+1]=t,B+=2,2===B&&(q?q(l):J())}),z="undefined"!=typeof window?window:void 0,H=z||{},Y=H.MutationObserver||H.WebKitMutationObserver,X="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,K=new Array(1e3);J=X?i():Y?s():V?u():void 0===z&&"function"==typeof require?f():c();var Q=void 0,W=1,ee=2,te=new E,re=new E;M.prototype._validateInput=function(e){return D(e)},M.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},M.prototype._init=function(){this._result=new Array(this.length)};var ne=M;M.prototype._enumerate=function(){for(var e=this,t=e.length,r=e.promise,n=e._input,o=0;r._state===Q&&t>o;o++)e._eachEntry(n[o],o)},M.prototype._eachEntry=function(e,t){var n=this,o=n._instanceConstructor;r(e)?e.constructor===o&&e._state!==Q?(e._onerror=null,n._settledAt(e._state,t,e._result)):n._willSettleAt(o.resolve(e),t):(n._remaining--,n._result[t]=e)},M.prototype._settledAt=function(e,t,r){var n=this,o=n.promise;o._state===Q&&(n._remaining--,e===ee?C(o,r):n._result[t]=r),0===n._remaining&&A(o,n._result)},M.prototype._willSettleAt=function(e,t){var r=this;S(e,void 0,function(e){r._settledAt(W,t,e)},function(e){r._settledAt(ee,t,e)})};var oe=k,ie=T,ae=L,se=P,ue=0,ce=$;$.all=oe,$.race=ie,$.resolve=ae,$.reject=se,$._setScheduler=n,$._setAsap=o,$._asap=Z,$.prototype={constructor:$,then:function(e,t){var r=this,n=r._state;if(n===W&&!e||n===ee&&!t)return this;var o=new this.constructor(p),i=r._result;if(n){var a=arguments[n-1];Z(function(){x(n,o,a,i)})}else S(r,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=G,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),function(){function e(t,n){function i(e){if(i[e]!==m)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var r,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=n.stringify,l="function"==typeof u&&_;if(l){(r=function(){return 1}).toJSON=r;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===m&&u(m)===m&&u()===m&&"1"===u(r)&&"[1]"==u([r])&&"[null]"==u([m])&&"null"==u(null)&&"[null,null,null]"==u([m,v,null])&&u({a:[r,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,r)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=n.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){r=p(o);var h=5==r.a.length&&1===r.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),n||(n=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(n.stringify=h.stringify,n.parse=h.parse);var g,d,m,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(b){}if(!i("json")){var w="[object Function]",A="[object Date]",C="[object Number]",S="[object String]",O="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var x=p.floor,j=[0,31,59,90,120,151,181,212,243,273,304,334],M=function(e,t){return j[t]+365*(e-1970)+x((e-1969+(t=+(t>1)))/4)-x((e-1901+t)/100)+x((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,r={};return(r.__proto__=null,r.__proto__={toString:1},r).toString!=v?g=function(e){var t=this.__proto__,r=e in(this.__proto__=null,this);return this.__proto__=t,r}:(t=r.constructor,g=function(e){var r=(this.constructor||t).prototype;return e in this&&!(e in r&&this[e]===r[e])}),r=null,g.call(this,e)}),d=function(e,t){var n,o,i,a=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,o=new n;for(i in o)g.call(o,i)&&a++;return n=o=null,a?d=2==a?function(e,t){var r,n={},o=v.call(e)==w;for(r in e)o&&"prototype"==r||g.call(n,r)||!(n[r]=1)||!g.call(e,r)||t(r)}:function(e,t){var r,n,o=v.call(e)==w;for(r in e)o&&"prototype"==r||!g.call(e,r)||(n="constructor"===r)||t(r);(n||g.call(e,r="constructor"))&&t(r)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var n,i,a=v.call(e)==w,s=!a&&"function"!=typeof e.constructor&&r[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)a&&"prototype"==n||!s.call(e,n)||t(n);for(i=o.length;n=o[--i];s.call(e,n)&&t(n));}),d(e,t)},!i("json-stringify")){var k={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},T="000000",L=function(e,t){return(T+(t||0)).slice(-e)},P="\\u00",F=function(e){for(var t='"',r=0,n=e.length,o=!N||n>10,i=o&&(N?e.split(""):e);n>r;r++){var a=e.charCodeAt(r);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=k[a];break;default:if(32>a){t+=P+L(2,a.toString(16));break}t+=o?i[r]:e.charAt(r)}}return t+'"'},R=function(e,t,r,n,o,i,a){var s,u,c,l,p,h,y,_,b,w,N,j,k,T,P,$;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=S&&u!=O||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(M){for(p=x(s/864e5),c=x(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=x((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,y=x(h/36e5)%24,_=x(h/6e4)%60,b=x(h/1e3)%60,w=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),b=s.getUTCSeconds(),w=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+L(6,0>c?-c:c):L(4,c))+"-"+L(2,l+1)+"-"+L(2,p)+"T"+L(2,y)+":"+L(2,_)+":"+L(2,b)+"."+L(3,w)+"Z"}else s=null;if(r&&(s=r.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==S)return F(""+s);if("object"==typeof s){for(T=a.length;T--;)if(a[T]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==O){for(k=0,T=s.length;T>k;k++)j=R(k,s,r,n,o,i,a),N.push(j===m?"null":j);$=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+P+"]":"["+N.join(",")+"]":"[]"}else d(n||s,function(e){var t=R(e,s,r,n,o,i,a);t!==m&&N.push(F(e)+":"+(o?" ":"")+t)}),$=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+P+"}":"{"+N.join(",")+"}":"{}";return a.pop(),$}};n.stringify=function(e,t,n){var o,i,a,s;if(r[typeof t]&&t)if((s=v.call(t))==w)i=t;else if(s==O){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==S||s==C)&&(a[u]=1));}if(n)if((s=v.call(n))==C){if((n-=n%1)>0)for(o="",n>10&&(n=10);o.length$;)switch(o=i.charCodeAt($)){case 9:case 10:case 13:case 32:$++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt($):i[$],$++,e;case 34:for(e="@",$++;a>$;)if(o=i.charCodeAt($),32>o)q();else if(92==o)switch(o=i.charCodeAt(++$)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=I[o],$++;break;case 117:for(t=++$,r=$+4;r>$;$++)o=i.charCodeAt($),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||q();e+=U("0x"+i.slice(t,$));break;default:q()}else{if(34==o)break;for(o=i.charCodeAt($),t=$;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++$);e+=i.slice(t,$)}if(34==i.charCodeAt($))return $++,e;q();default:if(t=$,45==o&&(n=!0,o=i.charCodeAt(++$)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt($+1),o>=48&&57>=o)&&q(),n=!1;a>$&&(o=i.charCodeAt($),o>=48&&57>=o);$++);if(46==i.charCodeAt($)){for(r=++$;a>r&&(o=i.charCodeAt(r),o>=48&&57>=o);r++);r==$&&q(),$=r}if(o=i.charCodeAt($),101==o||69==o){for(o=i.charCodeAt(++$),(43==o||45==o)&&$++,r=$;a>r&&(o=i.charCodeAt(r),o>=48&&57>=o);r++);r==$&&q(),$=r}return+i.slice(t,$)}if(n&&q(),"true"==i.slice($,$+4))return $+=4,!0;if("false"==i.slice($,$+5))return $+=5,!1;if("null"==i.slice($,$+4))return $+=4,null;q()}return"$"},D=function(e){var t,r;if("$"==e&&q(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;r||(r=!0))r&&(","==e?(e=J(),"]"==e&&q()):q()),","==e&&q(),t.push(D(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;r||(r=!0))r&&(","==e?(e=J(),"}"==e&&q()):q()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=J())&&q(),t[e.slice(1)]=D(J());return t}q()}return e},B=function(e,t,r){var n=Z(e,t,r);n===m?delete e[t]:e[t]=n},Z=function(e,t,r){var n,o=e[t];if("object"==typeof o&&o)if(v.call(o)==O)for(n=o.length;n--;)B(o,n,r);else d(o,function(e){B(o,e,r)});return r.call(e,t,o)};n.parse=function(e,t){var r,n;return $=0,G=""+e,r=D(J()),"$"!=J()&&q(),$=G=null,t&&v.call(t)==w?Z((n={},n[""]=r,n),"",t):r}}}return n.runInContext=e,n}var t="function"==typeof define&&define.amd,r={"function":!0,object:!0},n=r[typeof exports]&&exports&&!exports.nodeType&&exports,o=r[typeof window]&&window||this,i=n&&r[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),n&&!t)e(o,n);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),r=this,n=function(){},o=function(){return r.apply(this instanceof n&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return n.prototype=this.prototype,o.prototype=new n,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var r,n=Object(this),o=n.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(r=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in n&&(s=n[a],u=e.call(r,s,a,n),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),r=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var n=[],o=arguments.length>=2?arguments[1]:void 0,i=0;r>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&n.push(a)}return n}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var r,n;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(r=t),n=0;i>n;){var a;n in o&&(a=o[n],e.call(r,a,n,o)),n++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,r,n,o){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==r&&this.setFileName(r),void 0!==n&&this.setLineNumber(n),void 0!==o&&this.setColumnNumber(o)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},toString:function(){var t=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",n=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+r+n+o+i}},t});var SourceMap=function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){var n;n=function(e,t,n){function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=i.getArg(t,"version"),n=i.getArg(t,"sources"),o=i.getArg(t,"names",[]),a=i.getArg(t,"sourceRoot",null),u=i.getArg(t,"sourcesContent",null),c=i.getArg(t,"mappings"),l=i.getArg(t,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);n=n.map(i.normalize),this._names=s.fromArray(o,!0),this._sources=s.fromArray(n,!0),this.sourceRoot=a,this.sourcesContent=u,this._mappings=c,this.file=l}var i=r(1),a=r(2),s=r(3).ArraySet,u=r(4);o.fromSourceMap=function(e){var t=Object.create(o.prototype);return t._names=s.fromArray(e._names.toArray(),!0),t._sources=s.fromArray(e._sources.toArray(),!0),t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file,t.__generatedMappings=e._mappings.toArray().slice(),t.__originalMappings=e._mappings.toArray().slice().sort(i.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?i.join(this.sourceRoot,e):e},this)}}),o.prototype.__generatedMappings=null,Object.defineProperty(o.prototype,"_generatedMappings",{get:function(){return this.__generatedMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__generatedMappings}}),o.prototype.__originalMappings=null,Object.defineProperty(o.prototype,"_originalMappings",{get:function(){return this.__originalMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__originalMappings}}),o.prototype._nextCharIsMappingSeparator=function(e){var t=e.charAt(0);return";"===t||","===t},o.prototype._parseMappings=function(e,t){for(var r,n=1,o=0,a=0,s=0,c=0,l=0,f=e,p={};f.length>0;)if(";"===f.charAt(0))n++,f=f.slice(1),o=0;else if(","===f.charAt(0))f=f.slice(1);else{if(r={},r.generatedLine=n,u.decode(f,p),r.generatedColumn=o+p.value,o=r.generatedColumn,f=p.rest,f.length>0&&!this._nextCharIsMappingSeparator(f)){if(u.decode(f,p),r.source=this._sources.at(c+p.value),c+=p.value,f=p.rest,0===f.length||this._nextCharIsMappingSeparator(f))throw new Error("Found a source, but no line and column");if(u.decode(f,p),r.originalLine=a+p.value,a=r.originalLine,r.originalLine+=1,f=p.rest,0===f.length||this._nextCharIsMappingSeparator(f))throw new Error("Found a source and line, but no column");u.decode(f,p),r.originalColumn=s+p.value,s=r.originalColumn,f=p.rest,f.length>0&&!this._nextCharIsMappingSeparator(f)&&(u.decode(f,p),r.name=this._names.at(l+p.value),l+=p.value,f=p.rest)}this.__generatedMappings.push(r),"number"==typeof r.originalLine&&this.__originalMappings.push(r)}this.__generatedMappings.sort(i.compareByGeneratedPositions),this.__originalMappings.sort(i.compareByOriginalPositions)},o.prototype._findMapping=function(e,t,r,n,o){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[n]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[n]);return a.search(e,t,o)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var n=this._generatedMappings[r];if(n.generatedLine===t.generatedLine){var o=i.getArg(n,"source",null);return null!=o&&null!=this.sourceRoot&&(o=i.join(this.sourceRoot,o)),{source:o,line:i.getArg(n,"originalLine",null),column:i.getArg(n,"originalColumn",null),name:i.getArg(n,"name",null)}}}return{source:null,line:null,column:null,name:null}},o.prototype.sourceContentFor=function(e){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=i.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=i.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t={source:i.getArg(e,"source"),originalLine:i.getArg(e,"line"),originalColumn:i.getArg(e,"column")};null!=this.sourceRoot&&(t.source=i.relative(this.sourceRoot,t.source));var r=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",i.compareByOriginalPositions);if(r>=0){var n=this._originalMappings[r];return{line:i.getArg(n,"generatedLine",null),column:i.getArg(n,"generatedColumn",null),lastColumn:i.getArg(n,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},o.prototype.allGeneratedPositionsFor=function(e){var t={source:i.getArg(e,"source"),originalLine:i.getArg(e,"line"),originalColumn:1/0};null!=this.sourceRoot&&(t.source=i.relative(this.sourceRoot,t.source));var r=[],n=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",i.compareByOriginalPositions);if(n>=0)for(var o=this._originalMappings[n];o&&o.originalLine===t.originalLine;)r.push({line:i.getArg(o,"generatedLine",null),column:i.getArg(o,"generatedColumn",null),lastColumn:i.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[--n];return r.reverse()},o.GENERATED_ORDER=1,o.ORIGINAL_ORDER=2,o.prototype.eachMapping=function(e,t,r){var n,a=t||null,s=r||o.GENERATED_ORDER;switch(s){case o.GENERATED_ORDER:n=this._generatedMappings;break;case o.ORIGINAL_ORDER:n=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var u=this.sourceRoot;n.map(function(e){var t=e.source;return null!=t&&null!=u&&(t=i.join(u,t)),{source:t,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name}}).forEach(e,a)},t.SourceMapConsumer=o}.call(t,r,t,e),!(void 0!==n&&(e.exports=n))},function(e,t,r){var n;n=function(e,t,r){function n(e,t,r){if(t in e)return e[t];if(3===arguments.length)return r;throw new Error('"'+t+'" is a required argument.')}function o(e){var t=e.match(g);return t?{scheme:t[1],auth:t[2],host:t[3],port:t[4],path:t[5]}:null}function i(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth&&(t+=e.auth+"@"),e.host&&(t+=e.host),e.port&&(t+=":"+e.port),e.path&&(t+=e.path),t}function a(e){var t=e,r=o(e);if(r){if(!r.path)return e;t=r.path}for(var n,a="/"===t.charAt(0),s=t.split(/\/+/),u=0,c=s.length-1;c>=0;c--)n=s[c],"."===n?s.splice(c,1):".."===n?u++:u>0&&(""===n?(s.splice(c+1,u),u=0):(s.splice(c,2),u--));return t=s.join("/"),""===t&&(t=a?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var r=o(t),n=o(e);if(n&&(e=n.path||"/"),r&&!r.scheme)return n&&(r.scheme=n.scheme),i(r);if(r||t.match(d))return t;if(n&&!n.host&&!n.path)return n.host=t,i(n);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return n?(n.path=s,i(n)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");var r=o(e);return"/"==t.charAt(0)&&r&&"/"==r.path?t.slice(1):0===t.indexOf(e+"/")?t.substr(e.length+1):t}function c(e){return"$"+e}function l(e){return e.substr(1)}function f(e,t){var r=e||"",n=t||"";return(r>n)-(n>r)}function p(e,t,r){var n;return(n=f(e.source,t.source))?n:(n=e.originalLine-t.originalLine)?n:(n=e.originalColumn-t.originalColumn,n||r?n:(n=f(e.name,t.name))?n:(n=e.generatedLine-t.generatedLine,n?n:e.generatedColumn-t.generatedColumn))}function h(e,t,r){var n;return(n=e.generatedLine-t.generatedLine)?n:(n=e.generatedColumn-t.generatedColumn,n||r?n:(n=f(e.source,t.source))?n:(n=e.originalLine-t.originalLine)?n:(n=e.originalColumn-t.originalColumn,n?n:f(e.name,t.name)))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,d=/^data:.+\,.+$/;t.urlParse=o,t.urlGenerate=i,t.normalize=a,t.join=s,t.relative=u,t.toSetString=c,t.fromSetString=l,t.compareByOriginalPositions=p,t.compareByGeneratedPositions=h}.call(t,r,t,e),!(void 0!==n&&(e.exports=n))},function(e,t,r){var n;n=function(e,t,r){function n(e,t,r,o,i){var a=Math.floor((t-e)/2)+e,s=i(r,o[a],!0);return 0===s?a:s>0?t-a>1?n(a,t,r,o,i):a:a-e>1?n(e,a,r,o,i):0>e?-1:e}t.search=function(e,t,r){return 0===t.length?-1:n(-1,t.length,e,t,r)}}.call(t,r,t,e),!(void 0!==n&&(e.exports=n))},function(e,t,r){var n;n=function(e,t,n){function o(){this._array=[],this._set={}}var i=r(1);o.fromArray=function(e,t){for(var r=new o,n=0,i=e.length;i>n;n++)r.add(e[n],t);return r},o.prototype.add=function(e,t){var r=this.has(e),n=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[i.toSetString(e)]=n)},o.prototype.has=function(e){return Object.prototype.hasOwnProperty.call(this._set,i.toSetString(e))},o.prototype.indexOf=function(e){if(this.has(e))return this._set[i.toSetString(e)];throw new Error('"'+e+'" is not in the set.')},o.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var t=1===(1&e),r=e>>1;return t?-r:r}var a=r(5),s=5,u=1<>>=s,n>0&&(t|=l),r+=a.encode(t);while(n>0);return r},t.decode=function(e,t){var r,n,o=0,u=e.length,f=0,p=0;do{if(o>=u)throw new Error("Expected more digits in base 64 VLQ value.");n=a.decode(e.charAt(o++)),r=!!(n&l),n&=c,f+=n<=200&&o.status<400)return t(o.responseText);n(new Error("Unable to retrieve "+e))}},o.send()}function o(e,t,r){for(var n,o,i,a=/function\s+([^(]*?)\s*\(([^)]*)\)/,s=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(n=c[t-p-1],i=n.indexOf("//"),i>=0&&(n=n.substr(0,i)),n){if(l=n+l,o=s.exec(l),o&&o[1])return o[1];if(o=a.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}return void 0}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function u(r,n,o,i){var a=new e.SourceMapConsumer(r).originalPositionFor({line:o,column:i});return new t(a.name,n,a.source,a.line,a.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(r,n){var o="data:"===t.substr(0,5);if(this.sourceCache[t])r(this.sourceCache[t]);else if(e.offline&&!o)n(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)n(new Error("The encoding of the inline sourcemap is not supported"));else{var a="data:".length+i.length+",".length,s=t.substr(a),u=this._atob(s);this.sourceCache[t]=u,r(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,r(e)}.bind(this),n)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,r){this.getMappedLocation(e).then(function(e){function r(){t(e)}this.findFunctionName(e).then(t,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,n){a(e),this._get(e.fileName).then(function(n){var i=o(n,e.lineNumber,e.columnNumber);r(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},n)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,r){i(),a(e);var n=e.fileName;this._get(n).then(function(o){var i=s(o);"/"!==i[0]&&(i=n.substring(0,n.lastIndexOf("/")+1)+i),this._get(i).then(function(r){var n=e.lineNumber,o=e.columnNumber;t(u(r,e.args,n,o))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new c(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var r=[],n=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(n=t.maxStackSize);for(var o=arguments.callee;o&&r.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,n=t.message.split("\n"),o=[],i=2,a=n.length;a>i;i+=2){var s=r.exec(n[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,n[i]))}return o},parseOpera10:function(t){for(var r=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,n=t.stacktrace.split("\n"),o=[],i=0,a=n.length;a>i;i+=2){var s=r.exec(n[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,n[i]))}return o},parseOpera11:function(r){return r.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var r,n=t.split("@"),o=this.extractLocation(n.pop()),i=n.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,r){function n(e,t){var r={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(r[t]=e[t]);return r}),r}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=n(i,o),new Promise(function(n){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),n(Promise.all(i.map(function(e){return new Promise(function(t){function n(r){t(e)}new r(o).pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=n(i,e);var r=t.backtrace(e);return"function"==typeof e.filter&&(r=r.filter(e.filter)),Promise.resolve(r)},instrument:function(e,t,r,n){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{this.get().then(t,r)["catch"](r),e.apply(n||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,r)["catch"](r),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(r,n){var o=new XMLHttpRequest;o.onerror=n,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?r(o.responseText):n(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); -//# sourceMappingURL=stacktrace-with-polyfills.min.js.map \ No newline at end of file +(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function r(e){B=e}function o(e){z=e}function i(){return function(){process.nextTick(l)}}function a(){return function(){$(l)}}function s(){var e=0,t=new W(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;J>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}J=0}function f(){try{var e=require,t=e("vertx");return $=t.runOnLoop||t.runOnContext,a()}catch(n){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return te.error=t,te}}function d(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function y(e,t,n){z(function(e){var r=!1,o=d(n,t,function(n){r||(r=!0,t!==n?b(e,n):A(e,n))},function(t){r||(r=!0,C(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,C(e,o))},e)}function v(e,t){t._state===Q?A(e,t._result):t._state===ee?C(e,t._result):O(t,void 0,function(t){b(e,t)},function(t){C(e,t)})}function _(e,n){if(n.constructor===e.constructor)v(e,n);else{var r=m(n);r===te?C(e,te.error):void 0===r?A(e,n):t(r)?y(e,n,r):A(e,n)}}function b(t,n){t===n?C(t,h()):e(n)?_(t,n):A(t,n)}function w(e){e._onerror&&e._onerror(e._result),S(e)}function A(e,t){e._state===K&&(e._result=t,e._state=Q,0!==e._subscribers.length&&z(S,e))}function C(e,t){e._state===K&&(e._state=ee,e._result=t,z(w,e))}function O(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+Q]=n,o[i+ee]=r,0===i&&e._state&&z(S,e)}function S(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)O(r.resolve(e[a]),void 0,t,n);return o}function P(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(p);return b(n,e),n}function k(e){var t=this,n=new t(p);return C(n,e),n}function R(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function U(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||R(),this instanceof U||F(),M(this,e))}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var D;D=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var $,B,q,I=D,J=0,z=({}.toString,function(e,t){X[J]=e,X[J+1]=t,J+=2,2===J&&(B?B(l):q())}),Z="undefined"!=typeof window?window:void 0,H=Z||{},W=H.MutationObserver||H.WebKitMutationObserver,Y="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=Y?i():W?s():V?u():void 0===Z&&"function"==typeof require?f():c();var K=void 0,Q=1,ee=2,te=new E,ne=new E;j.prototype._validateInput=function(e){return I(e)},j.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},j.prototype._init=function(){this._result=new Array(this.length)};var re=j;j.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===K&&t>o;o++)e._eachEntry(r[o],o)},j.prototype._eachEntry=function(e,t){var r=this,o=r._instanceConstructor;n(e)?e.constructor===o&&e._state!==K?(e._onerror=null,r._settledAt(e._state,t,e._result)):r._willSettleAt(o.resolve(e),t):(r._remaining--,r._result[t]=e)},j.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===K&&(r._remaining--,e===ee?C(o,n):r._result[t]=n),0===r._remaining&&A(o,r._result)},j.prototype._willSettleAt=function(e,t){var n=this;O(e,void 0,function(e){n._settledAt(Q,t,e)},function(e){n._settledAt(ee,t,e)})};var oe=T,ie=x,ae=P,se=k,ue=0,ce=U;U.all=oe,U.race=ie,U.resolve=ae,U.reject=se,U._setScheduler=r,U._setAsap=o,U._asap=z,U.prototype={constructor:U,then:function(e,t){var n=this,r=n._state;if(r===Q&&!e||r===ee&&!t)return this;var o=new this.constructor(p),i=n._result;if(r){var a=arguments[r-1];z(function(){L(r,o,a,i)})}else O(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=G,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==d)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===d&&u(d)===d&&u()===d&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([d])&&"null"==u(null)&&"[null,null,null]"==u([d,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,m,d,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(b){}if(!i("json")){var w="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return M[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?m=2==a?function(e,t){var n,r={},o=v.call(e)==w;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==w;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var r,i,a=v.call(e)==w,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),m(e,t)},!i("json-stringify")){var T={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},x="000000",P=function(e,t){return(x+(t||0)).slice(-e)},k="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=T[a];break;default:if(32>a){t+=k+P(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,b,w,N,M,T,x,k,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=L((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,b=L(h/1e3)%60,w=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),b=s.getUTCSeconds(),w=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+P(6,0>c?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,y)+":"+P(2,_)+":"+P(2,b)+"."+P(3,w)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(x=a.length;x--;)if(a[x]===s)throw f();if(a.push(s),N=[],k=i,i+=o,u==S){for(T=0,x=s.length;x>T;T++)M=F(T,s,n,r,o,i,a),N.push(M===d?"null":M);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+k+"]":"["+N.join(",")+"]":"[]"}else m(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==d&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+k+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==w)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=$[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=D("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},I=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=q(),"]"!=e;n||(n=!0))n&&(","==e?(e=q(),"]"==e&&B()):B()),","==e&&B(),t.push(I(e));return t}if("{"==e){for(t={};e=q(),"}"!=e;n||(n=!0))n&&(","==e?(e=q(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=q())&&B(),t[e.slice(1)]=I(q());return t}B()}return e},J=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)J(o,r,n);else m(o,function(e){J(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=I(q()),"$"!=q()&&B(),U=G=null,t&&v.call(t)==w?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,m=0,d=0,y=e.length,v=0,_={},b={},w=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&w.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(w,s.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(m))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=s,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e,t,n){for(var r,o,i,a=/function\s+([^(]*?)\s*\(([^)]*)\)/,s=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=s.exec(l),o&&o[1])return o[1];if(o=a.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function a(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function s(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)r(new Error("The encoding of the inline sourcemap is not supported"));else{var a="data:".length+i.length+",".length,s=t.substr(a),u=window.atob(s);this.sourceCache[t]=u,n(u)}}else{var c=this.ajax(t,{method:"get"});this.sourceCache[t]=c,c.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,o){i(e),this._get(e.fileName).then(function(o){var i=r(o,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)["catch"](o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),i(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=a(o),c="data:"===i.substr(0,5);"/"===i[0]||c||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(s(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new u(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(n){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +//# sourceMappingURL=stacktrace-with-polyfills.min.js.map diff --git a/dist/stacktrace-with-polyfills.min.js.map b/dist/stacktrace-with-polyfills.min.js.map index e8899c1..749b13b 100644 --- a/dist/stacktrace-with-polyfills.min.js.map +++ b/dist/stacktrace-with-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","o","SourceMap","id","loaded","m","p","replace","getArg","u","l","_version","normalize","_names","s","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","ArraySet","fromSourceMap","create","toArray","_sourceRoot","_generateSourcesContent","_file","__generatedMappings","__originalMappings","sort","compareByOriginalPositions","defineProperty","_parseMappings","_nextCharIsMappingSeparator","g","generatedLine","decode","generatedColumn","rest","at","originalLine","originalColumn","compareByGeneratedPositions","_findMapping","search","computeColumnSpans","_generatedMappings","lastGeneratedColumn","originalPositionFor","line","column","sourceContentFor","relative","indexOf","urlParse","scheme","path","generatedPositionFor","_originalMappings","lastColumn","allGeneratedPositionsFor","reverse","GENERATED_ORDER","ORIGINAL_ORDER","eachMapping","SourceMapConsumer","match","f","auth","host","port","splice","substr","h","urlGenerate","toSetString","fromSetString","_array","_set","add","encode","StackTraceGPS","XMLHttpRequest","ActiveXObject","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","atob","Buffer","_get","offline","pinpoint","getMappedLocation","findFunctionName","substring","lastIndexOf","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","_","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","url","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","if (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",t=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",r=this.getFileName()?\"@\"+this.getFileName():\"\",i=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",o=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p=\"\",n(0)}([function(e,n,t){var r;r=function(e,n,r){function i(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var t=o.getArg(n,\"version\"),r=o.getArg(n,\"sources\"),i=o.getArg(n,\"names\",[]),a=o.getArg(n,\"sourceRoot\",null),u=o.getArg(n,\"sourcesContent\",null),c=o.getArg(n,\"mappings\"),l=o.getArg(n,\"file\",null);if(t!=this._version)throw new Error(\"Unsupported version: \"+t);r=r.map(o.normalize),this._names=s.fromArray(i,!0),this._sources=s.fromArray(r,!0),this.sourceRoot=a,this.sourcesContent=u,this._mappings=c,this.file=l}var o=t(1),a=t(2),s=t(3).ArraySet,u=t(4);i.fromSourceMap=function(e){var n=Object.create(i.prototype);return n._names=s.fromArray(e._names.toArray(),!0),n._sources=s.fromArray(e._sources.toArray(),!0),n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file,n.__generatedMappings=e._mappings.toArray().slice(),n.__originalMappings=e._mappings.toArray().slice().sort(o.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?o.join(this.sourceRoot,e):e},this)}}),i.prototype.__generatedMappings=null,Object.defineProperty(i.prototype,\"_generatedMappings\",{get:function(){return this.__generatedMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__generatedMappings}}),i.prototype.__originalMappings=null,Object.defineProperty(i.prototype,\"_originalMappings\",{get:function(){return this.__originalMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__originalMappings}}),i.prototype._nextCharIsMappingSeparator=function(e){var n=e.charAt(0);return\";\"===n||\",\"===n},i.prototype._parseMappings=function(e,n){for(var t,r=1,i=0,a=0,s=0,c=0,l=0,g=e,p={};g.length>0;)if(\";\"===g.charAt(0))r++,g=g.slice(1),i=0;else if(\",\"===g.charAt(0))g=g.slice(1);else{if(t={},t.generatedLine=r,u.decode(g,p),t.generatedColumn=i+p.value,i=t.generatedColumn,g=p.rest,g.length>0&&!this._nextCharIsMappingSeparator(g)){if(u.decode(g,p),t.source=this._sources.at(c+p.value),c+=p.value,g=p.rest,0===g.length||this._nextCharIsMappingSeparator(g))throw new Error(\"Found a source, but no line and column\");if(u.decode(g,p),t.originalLine=a+p.value,a=t.originalLine,t.originalLine+=1,g=p.rest,0===g.length||this._nextCharIsMappingSeparator(g))throw new Error(\"Found a source and line, but no column\");u.decode(g,p),t.originalColumn=s+p.value,s=t.originalColumn,g=p.rest,g.length>0&&!this._nextCharIsMappingSeparator(g)&&(u.decode(g,p),t.name=this._names.at(l+p.value),l+=p.value,g=p.rest)}this.__generatedMappings.push(t),\"number\"==typeof t.originalLine&&this.__originalMappings.push(t)}this.__generatedMappings.sort(o.compareByGeneratedPositions),this.__originalMappings.sort(o.compareByOriginalPositions)},i.prototype._findMapping=function(e,n,t,r,i){if(e[t]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[t]);if(e[r]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[r]);return a.search(e,n,i)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var r=this._generatedMappings[t];if(r.generatedLine===n.generatedLine){var i=o.getArg(r,\"source\",null);return null!=i&&null!=this.sourceRoot&&(i=o.join(this.sourceRoot,i)),{source:i,line:o.getArg(r,\"originalLine\",null),column:o.getArg(r,\"originalColumn\",null),name:o.getArg(r,\"name\",null)}}}return{source:null,line:null,column:null,name:null}},i.prototype.sourceContentFor=function(e){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=o.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=o.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==n.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!n.path||\"/\"==n.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}throw new Error('\"'+e+'\" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n={source:o.getArg(e,\"source\"),originalLine:o.getArg(e,\"line\"),originalColumn:o.getArg(e,\"column\")};null!=this.sourceRoot&&(n.source=o.relative(this.sourceRoot,n.source));var t=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",o.compareByOriginalPositions);if(t>=0){var r=this._originalMappings[t];return{line:o.getArg(r,\"generatedLine\",null),column:o.getArg(r,\"generatedColumn\",null),lastColumn:o.getArg(r,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},i.prototype.allGeneratedPositionsFor=function(e){var n={source:o.getArg(e,\"source\"),originalLine:o.getArg(e,\"line\"),originalColumn:1/0};null!=this.sourceRoot&&(n.source=o.relative(this.sourceRoot,n.source));var t=[],r=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",o.compareByOriginalPositions);if(r>=0)for(var i=this._originalMappings[r];i&&i.originalLine===n.originalLine;)t.push({line:o.getArg(i,\"generatedLine\",null),column:o.getArg(i,\"generatedColumn\",null),lastColumn:o.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[--r];return t.reverse()},i.GENERATED_ORDER=1,i.ORIGINAL_ORDER=2,i.prototype.eachMapping=function(e,n,t){var r,a=n||null,s=t||i.GENERATED_ORDER;switch(s){case i.GENERATED_ORDER:r=this._generatedMappings;break;case i.ORIGINAL_ORDER:r=this._originalMappings;break;default:throw new Error(\"Unknown order of iteration.\")}var u=this.sourceRoot;r.map(function(e){var n=e.source;return null!=n&&null!=u&&(n=o.join(u,n)),{source:n,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name}}).forEach(e,a)},n.SourceMapConsumer=i}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,t){function r(e,n,t){if(n in e)return e[n];if(3===arguments.length)return t;throw new Error('\"'+n+'\" is a required argument.')}function i(e){var n=e.match(f);return n?{scheme:n[1],auth:n[2],host:n[3],port:n[4],path:n[5]}:null}function o(e){var n=\"\";return e.scheme&&(n+=e.scheme+\":\"),n+=\"//\",e.auth&&(n+=e.auth+\"@\"),e.host&&(n+=e.host),e.port&&(n+=\":\"+e.port),e.path&&(n+=e.path),n}function a(e){var n=e,t=i(e);if(t){if(!t.path)return e;n=t.path}for(var r,a=\"/\"===n.charAt(0),s=n.split(/\\/+/),u=0,c=s.length-1;c>=0;c--)r=s[c],\".\"===r?s.splice(c,1):\"..\"===r?u++:u>0&&(\"\"===r?(s.splice(c+1,u),u=0):(s.splice(c,2),u--));return n=s.join(\"/\"),\"\"===n&&(n=a?\"/\":\".\"),t?(t.path=n,o(t)):n}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var t=i(n),r=i(e);if(r&&(e=r.path||\"/\"),t&&!t.scheme)return r&&(t.scheme=r.scheme),o(t);if(t||n.match(m))return n;if(r&&!r.host&&!r.path)return r.host=n,o(r);var s=\"/\"===n.charAt(0)?n:a(e.replace(/\\/+$/,\"\")+\"/\"+n);return r?(r.path=s,o(r)):s}function u(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");var t=i(e);return\"/\"==n.charAt(0)&&t&&\"/\"==t.path?n.slice(1):0===n.indexOf(e+\"/\")?n.substr(e.length+1):n}function c(e){return\"$\"+e}function l(e){return e.substr(1)}function g(e,n){var t=e||\"\",r=n||\"\";return(t>r)-(r>t)}function p(e,n,t){var r;return(r=g(e.source,n.source))?r:(r=e.originalLine-n.originalLine)?r:(r=e.originalColumn-n.originalColumn,r||t?r:(r=g(e.name,n.name))?r:(r=e.generatedLine-n.generatedLine,r?r:e.generatedColumn-n.generatedColumn))}function h(e,n,t){var r;return(r=e.generatedLine-n.generatedLine)?r:(r=e.generatedColumn-n.generatedColumn,r||t?r:(r=g(e.source,n.source))?r:(r=e.originalLine-n.originalLine)?r:(r=e.originalColumn-n.originalColumn,r?r:g(e.name,n.name)))}n.getArg=r;var f=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=i,n.urlGenerate=o,n.normalize=a,n.join=s,n.relative=u,n.toSetString=c,n.fromSetString=l,n.compareByOriginalPositions=p,n.compareByGeneratedPositions=h}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,t){function r(e,n,t,i,o){var a=Math.floor((n-e)/2)+e,s=o(t,i[a],!0);return 0===s?a:s>0?n-a>1?r(a,n,t,i,o):a:a-e>1?r(e,a,t,i,o):0>e?-1:e}n.search=function(e,n,t){return 0===n.length?-1:r(-1,n.length,e,n,t)}}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,r){function i(){this._array=[],this._set={}}var o=t(1);i.fromArray=function(e,n){for(var t=new i,r=0,o=e.length;o>r;r++)t.add(e[r],n);return t},i.prototype.add=function(e,n){var t=this.has(e),r=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[o.toSetString(e)]=r)},i.prototype.has=function(e){return Object.prototype.hasOwnProperty.call(this._set,o.toSetString(e))},i.prototype.indexOf=function(e){if(this.has(e))return this._set[o.toSetString(e)];throw new Error('\"'+e+'\" is not in the set.')},i.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var a=t(5),s=5,u=1<>>=s,r>0&&(n|=l),t+=a.encode(n);while(r>0);return t},n.decode=function(e,n){var t,r,i=0,u=e.length,g=0,p=0;do{if(i>=u)throw new Error(\"Expected more digits in base 64 VLQ value.\");r=a.decode(e.charAt(i++)),t=!!(r&l),r&=c,g+=r<=200&&i.status<400)return n(i.responseText);r(new Error(\"Unable to retrieve \"+e))}},i.send()}function i(e,n,t){for(var r,i,o,a=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,s=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,c=e.split(\"\\n\"),l=\"\",g=Math.min(n,20),p=0;g>p;++p)if(r=c[n-p-1],o=r.indexOf(\"//\"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=s.exec(l),i&&i[1])return i[1];if(i=a.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function u(t,r,i,o){var a=new e.SourceMapConsumer(t).originalPositionFor({line:i,column:o});return new n(a.name,r,a.source,a.line,a.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(t,r){var i=\"data:\"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error(\"Cannot make network requests in offline mode\"));else if(i){var o=\"application/json;base64\";if(n.substr(5,o.length)!==o)r(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var a=\"data:\".length+o.length+\",\".length,s=n.substr(a),u=this._atob(s);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)[\"catch\"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){a(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){o(),a(e);var r=e.fileName;this._get(r).then(function(i){var o=s(i);\"/\"!==o[0]&&(o=r.substring(0,r.lastIndexOf(\"/\")+1)+o),this._get(o).then(function(t){var r=e.lineNumber,i=e.columnNumber;n(u(t,e.args,r,i))},t)[\"catch\"](t)}.bind(this),t)[\"catch\"](t)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n var args = [].slice.call(curr['arguments']);\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","h","f","d","_","v","y","b","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_get","offline","atob","method","pinpoint","getMappedLocation","findFunctionName","substring","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","if (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,h=s.length;h>p;p++){var f=s[p],m=new i;m.generatedLine=f.generatedLine,m.generatedColumn=f.generatedColumn,f.source&&(m.source=t.indexOf(f.source),m.originalLine=f.originalLine,m.originalColumn=f.originalColumn,f.name&&(m.name=r.indexOf(f.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,h=0,f=0,m=0,d=0,_=e.length,v=0,y={},b={},C=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&C.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(C,a.compareByOriginalPositions),this.__originalMappings=C},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function h(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var f=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(f)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=h},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=window.atob(a);this.sourceCache[n]=u,r(u)}}else{var l=this.ajax(n,{method:\"get\"});this.sourceCache[n]=l,l.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)[\"catch\"](o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.js b/dist/stacktrace.js deleted file mode 100644 index 20bf2ff..0000000 --- a/dist/stacktrace.js +++ /dev/null @@ -1,185 +0,0 @@ -(function (root, factory) { - 'use strict'; - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. - - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory); - } else if (typeof exports === 'object') { - module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps')); - } else { - root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS); - } -}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) { - var _options = { - filter: function (stackframe) { - // Filter out stackframes for this library by default - return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 && - (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 && - (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 && - (stackframe.functionName || '').indexOf('StackGenerator$$') === -1; - } - }; - - /** - * Merge 2 given Objects. If a conflict occurs the second object wins. - * Does not do deep merges. - * @param first Object - * @param second Object - * @returns new Object merged first and second - * @private - */ - function _merge(first, second) { - var target = {}; - - [first, second].forEach(function (obj) { - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - target[prop] = obj[prop]; - } - } - return target; - }); - - return target; - } - - function _isShapedLikeParsableError(err) { - return err.stack || err['opera#sourceloc']; - } - - return { - /** - * Get a backtrace from invocation point. - * @param opts Options Object - * @return Array[StackFrame] - */ - get: function StackTrace$$get(opts) { - try { - // Error must be thrown to get stack in IE - throw new Error(); - } catch (err) { - if (_isShapedLikeParsableError(err)) { - return this.fromError(err, opts); - } else { - return this.generateArtificially(opts); - } - } - }, - - /** - * Given an error object, parse it. - * @param error Error object - * @param opts Object for options - * @return Array[StackFrame] - */ - fromError: function StackTrace$$fromError(error, opts) { - opts = _merge(_options, opts); - return new Promise(function (resolve) { - var stackframes = ErrorStackParser.parse(error); - if (typeof opts.filter === 'function') { - stackframes = stackframes.filter(opts.filter); - } - resolve(Promise.all(stackframes.map(function (sf) { - return new Promise(function (resolve) { - function resolveOriginal(_) { - resolve(sf); - } - - new StackTraceGPS(opts).pinpoint(sf) - .then(resolve, resolveOriginal)['catch'](resolveOriginal); - }); - }))); - }.bind(this)); - }, - - /** - * Use StackGenerator to generate a backtrace. - * @param opts Object options - * @returns Array[StackFrame] - */ - generateArtificially: function StackTrace$$generateArtificially(opts) { - opts = _merge(_options, opts); - var stackFrames = StackGenerator.backtrace(opts); - if (typeof opts.filter === 'function') { - stackFrames = stackFrames.filter(opts.filter); - } - return Promise.resolve(stackFrames); - }, - - /** - * Given a function, wrap it such that invocations trigger a callback that - * is called with a stack trace. - * - * @param {Function} fn to be instrumented - * @param {Function} callback function to call with a stack trace on invocation - * @param {Function} errback optional function to call with error if unable to get stack trace. - * @param {Object} thisArg optional context object (e.g. window) - */ - instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) { - if (typeof fn !== 'function') { - throw new Error('Cannot instrument non-function object'); - } else if (typeof fn.__stacktraceOriginalFn === 'function') { - // Already instrumented, return given Function - return fn; - } - - var instrumented = function StackTrace$$instrumented() { - try { - this.get().then(callback, errback)['catch'](errback); - fn.apply(thisArg || this, arguments); - } catch (e) { - if (_isShapedLikeParsableError(e)) { - this.fromError(e).then(callback, errback)['catch'](errback); - } - throw e; - } - }.bind(this); - instrumented.__stacktraceOriginalFn = fn; - - return instrumented; - }, - - /** - * Given a function that has been instrumented, - * revert the function to it's original (non-instrumented) state. - * - * @param fn {Function} - */ - deinstrument: function StackTrace$$deinstrument(fn) { - if (typeof fn !== 'function') { - throw new Error('Cannot de-instrument non-function object'); - } else if (typeof fn.__stacktraceOriginalFn === 'function') { - return fn.__stacktraceOriginalFn; - } else { - // Function not instrumented, return original - return fn; - } - }, - - /** - * Given an Array of StackFrames, serialize and POST to given URL. - * - * @param stackframes - Array[StackFrame] - * @param url - URL as String - */ - report: function StackTrace$$report(stackframes, url) { - return new Promise(function (resolve, reject) { - var req = new XMLHttpRequest(); - req.onerror = reject; - req.onreadystatechange = function onreadystatechange() { - if (req.readyState === 4) { - if (req.status >= 200 && req.status < 400) { - resolve(req.responseText); - } else { - reject(new Error('POST to ' + url + ' failed with status: ' + req.status)); - } - } - }; - req.open('post', url); - req.setRequestHeader('Content-Type', 'application/json'); - req.send(JSON.stringify({stack: stackframes})); - }); - } - }; -})); diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index a911a7f..b3e6869 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+i+o}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){var r;r=function(e,t,r){function i(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=o.getArg(t,"version"),r=o.getArg(t,"sources"),i=o.getArg(t,"names",[]),a=o.getArg(t,"sourceRoot",null),u=o.getArg(t,"sourcesContent",null),c=o.getArg(t,"mappings"),l=o.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(o.normalize),this._names=s.fromArray(i,!0),this._sources=s.fromArray(r,!0),this.sourceRoot=a,this.sourcesContent=u,this._mappings=c,this.file=l}var o=n(1),a=n(2),s=n(3).ArraySet,u=n(4);i.fromSourceMap=function(e){var t=Object.create(i.prototype);return t._names=s.fromArray(e._names.toArray(),!0),t._sources=s.fromArray(e._sources.toArray(),!0),t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file,t.__generatedMappings=e._mappings.toArray().slice(),t.__originalMappings=e._mappings.toArray().slice().sort(o.compareByOriginalPositions),t},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?o.join(this.sourceRoot,e):e},this)}}),i.prototype.__generatedMappings=null,Object.defineProperty(i.prototype,"_generatedMappings",{get:function(){return this.__generatedMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__generatedMappings}}),i.prototype.__originalMappings=null,Object.defineProperty(i.prototype,"_originalMappings",{get:function(){return this.__originalMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__originalMappings}}),i.prototype._nextCharIsMappingSeparator=function(e){var t=e.charAt(0);return";"===t||","===t},i.prototype._parseMappings=function(e,t){for(var n,r=1,i=0,a=0,s=0,c=0,l=0,p=e,f={};p.length>0;)if(";"===p.charAt(0))r++,p=p.slice(1),i=0;else if(","===p.charAt(0))p=p.slice(1);else{if(n={},n.generatedLine=r,u.decode(p,f),n.generatedColumn=i+f.value,i=n.generatedColumn,p=f.rest,p.length>0&&!this._nextCharIsMappingSeparator(p)){if(u.decode(p,f),n.source=this._sources.at(c+f.value),c+=f.value,p=f.rest,0===p.length||this._nextCharIsMappingSeparator(p))throw new Error("Found a source, but no line and column");if(u.decode(p,f),n.originalLine=a+f.value,a=n.originalLine,n.originalLine+=1,p=f.rest,0===p.length||this._nextCharIsMappingSeparator(p))throw new Error("Found a source and line, but no column");u.decode(p,f),n.originalColumn=s+f.value,s=n.originalColumn,p=f.rest,p.length>0&&!this._nextCharIsMappingSeparator(p)&&(u.decode(p,f),n.name=this._names.at(l+f.value),l+=f.value,p=f.rest)}this.__generatedMappings.push(n),"number"==typeof n.originalLine&&this.__originalMappings.push(n)}this.__generatedMappings.sort(o.compareByGeneratedPositions),this.__originalMappings.sort(o.compareByOriginalPositions)},i.prototype._findMapping=function(e,t,n,r,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return a.search(e,t,i)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var r=this._generatedMappings[n];if(r.generatedLine===t.generatedLine){var i=o.getArg(r,"source",null);return null!=i&&null!=this.sourceRoot&&(i=o.join(this.sourceRoot,i)),{source:i,line:o.getArg(r,"originalLine",null),column:o.getArg(r,"originalColumn",null),name:o.getArg(r,"name",null)}}}return{source:null,line:null,column:null,name:null}},i.prototype.sourceContentFor=function(e){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=o.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=o.urlParse(this.sourceRoot))){var n=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(n))return this.sourcesContent[this._sources.indexOf(n)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var t={source:o.getArg(e,"source"),originalLine:o.getArg(e,"line"),originalColumn:o.getArg(e,"column")};null!=this.sourceRoot&&(t.source=o.relative(this.sourceRoot,t.source));var n=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions);if(n>=0){var r=this._originalMappings[n];return{line:o.getArg(r,"generatedLine",null),column:o.getArg(r,"generatedColumn",null),lastColumn:o.getArg(r,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},i.prototype.allGeneratedPositionsFor=function(e){var t={source:o.getArg(e,"source"),originalLine:o.getArg(e,"line"),originalColumn:1/0};null!=this.sourceRoot&&(t.source=o.relative(this.sourceRoot,t.source));var n=[],r=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions);if(r>=0)for(var i=this._originalMappings[r];i&&i.originalLine===t.originalLine;)n.push({line:o.getArg(i,"generatedLine",null),column:o.getArg(i,"generatedColumn",null),lastColumn:o.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[--r];return n.reverse()},i.GENERATED_ORDER=1,i.ORIGINAL_ORDER=2,i.prototype.eachMapping=function(e,t,n){var r,a=t||null,s=n||i.GENERATED_ORDER;switch(s){case i.GENERATED_ORDER:r=this._generatedMappings;break;case i.ORIGINAL_ORDER:r=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var u=this.sourceRoot;r.map(function(e){var t=e.source;return null!=t&&null!=u&&(t=o.join(u,t)),{source:t,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name}}).forEach(e,a)},t.SourceMapConsumer=i}.call(t,n,t,e),!(void 0!==r&&(e.exports=r))},function(e,t,n){var r;r=function(e,t,n){function r(e,t,n){if(t in e)return e[t];if(3===arguments.length)return n;throw new Error('"'+t+'" is a required argument.')}function i(e){var t=e.match(g);return t?{scheme:t[1],auth:t[2],host:t[3],port:t[4],path:t[5]}:null}function o(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth&&(t+=e.auth+"@"),e.host&&(t+=e.host),e.port&&(t+=":"+e.port),e.path&&(t+=e.path),t}function a(e){var t=e,n=i(e);if(n){if(!n.path)return e;t=n.path}for(var r,a="/"===t.charAt(0),s=t.split(/\/+/),u=0,c=s.length-1;c>=0;c--)r=s[c],"."===r?s.splice(c,1):".."===r?u++:u>0&&(""===r?(s.splice(c+1,u),u=0):(s.splice(c,2),u--));return t=s.join("/"),""===t&&(t=a?"/":"."),n?(n.path=t,o(n)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=i(t),r=i(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),o(n);if(n||t.match(m))return t;if(r&&!r.host&&!r.path)return r.host=t,o(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,o(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");var n=i(e);return"/"==t.charAt(0)&&n&&"/"==n.path?t.slice(1):0===t.indexOf(e+"/")?t.substr(e.length+1):t}function c(e){return"$"+e}function l(e){return e.substr(1)}function p(e,t){var n=e||"",r=t||"";return(n>r)-(r>n)}function f(e,t,n){var r;return(r=p(e.source,t.source))?r:(r=e.originalLine-t.originalLine)?r:(r=e.originalColumn-t.originalColumn,r||n?r:(r=p(e.name,t.name))?r:(r=e.generatedLine-t.generatedLine,r?r:e.generatedColumn-t.generatedColumn))}function h(e,t,n){var r;return(r=e.generatedLine-t.generatedLine)?r:(r=e.generatedColumn-t.generatedColumn,r||n?r:(r=p(e.source,t.source))?r:(r=e.originalLine-t.originalLine)?r:(r=e.originalColumn-t.originalColumn,r?r:p(e.name,t.name)))}t.getArg=r;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=i,t.urlGenerate=o,t.normalize=a,t.join=s,t.relative=u,t.toSetString=c,t.fromSetString=l,t.compareByOriginalPositions=f,t.compareByGeneratedPositions=h}.call(t,n,t,e),!(void 0!==r&&(e.exports=r))},function(e,t,n){var r;r=function(e,t,n){function r(e,t,n,i,o){var a=Math.floor((t-e)/2)+e,s=o(n,i[a],!0);return 0===s?a:s>0?t-a>1?r(a,t,n,i,o):a:a-e>1?r(e,a,n,i,o):0>e?-1:e}t.search=function(e,t,n){return 0===t.length?-1:r(-1,t.length,e,t,n)}}.call(t,n,t,e),!(void 0!==r&&(e.exports=r))},function(e,t,n){var r;r=function(e,t,r){function i(){this._array=[],this._set={}}var o=n(1);i.fromArray=function(e,t){for(var n=new i,r=0,o=e.length;o>r;r++)n.add(e[r],t);return n},i.prototype.add=function(e,t){var n=this.has(e),r=this._array.length;(!n||t)&&this._array.push(e),n||(this._set[o.toSetString(e)]=r)},i.prototype.has=function(e){return Object.prototype.hasOwnProperty.call(this._set,o.toSetString(e))},i.prototype.indexOf=function(e){if(this.has(e))return this._set[o.toSetString(e)];throw new Error('"'+e+'" is not in the set.')},i.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var a=n(5),s=5,u=1<>>=s,r>0&&(t|=l),n+=a.encode(t);while(r>0);return n},t.decode=function(e,t){var n,r,i=0,u=e.length,p=0,f=0;do{if(i>=u)throw new Error("Expected more digits in base 64 VLQ value.");r=a.decode(e.charAt(i++)),n=!!(r&l),r&=c,p+=r<=200&&i.status<400)return t(i.responseText);r(new Error("Unable to retrieve "+e))}},i.send()}function i(e,t,n){for(var r,i,o,a=/function\s+([^(]*?)\s*\(([^)]*)\)/,s=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",p=Math.min(t,20),f=0;p>f;++f)if(r=c[t-f-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=s.exec(l),i&&i[1])return i[1];if(i=a.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function u(n,r,i,o){var a=new e.SourceMapConsumer(n).originalPositionFor({line:i,column:o});return new t(a.name,r,a.source,a.line,a.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(n,r){var i="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(t.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var a="data:".length+o.length+",".length,s=t.substr(a),u=this._atob(s);this.sourceCache[t]=u,n(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,n(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){a(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),a(e);var r=e.fileName;this._get(r).then(function(i){var o=s(i);"/"!==o[0]&&(o=r.substring(0,r.lastIndexOf("/")+1)+o),this._get(o).then(function(n){var r=e.lineNumber,i=e.columnNumber;t(u(n,e.args,r,i))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new c(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var i=arguments.callee;i&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),i=[],o=2,a=r.length;a>o;o+=2){var s=n.exec(r[o]);s&&i.push(new e(void 0,void 0,s[2],s[1],void 0,r[o]))}return i},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),i=[],o=0,a=r.length;a>o;o+=2){var s=n.exec(r[o]);s&&i.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[o]))}return i},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",a=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(n=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,i[0],i[1],i[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return i(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,i){return i=r(o,i),new Promise(function(r){var o=e.parse(t);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(t){function r(n){t(e)}new n(i).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(t,n)["catch"](n),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?n(i.responseText):r(new Error("POST to "+t+" failed with status: "+i.status)))},i.open("post",t),i.setRequestHeader("Content-Type","application/json"),i.send(JSON.stringify({stack:e}))})}}}); -//# sourceMappingURL=stacktrace.min.js.map \ No newline at end of file +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i,o){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i),void 0!==o&&this.setSource(o)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new i(n)}function i(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),i=a.getArg(n,"names",[]),o=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return o&&a.isAbsolute(o)&&a.isAbsolute(e)?a.relative(o,e):e}),this._names=c.fromArray(i,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=s,this._mappings=u,this.file=l}function o(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),i=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var o={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),i=a.getArg(n,"column");if(t=0){var o=this._originalMappings[i];if(void 0===e.column)for(var s=o.originalLine;o&&o.originalLine===s;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i];else for(var c=o.originalColumn;o&&o.originalLine===n&&o.originalColumn==c;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var n=Object.create(i.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new o;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,n){for(var t,r,i,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new o,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),i=y[r])v+=r.length;else{for(i=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");y[r]=i}t.generatedColumn=p+i[0],p=t.generatedColumn,i.length>1&&(t.source=m+i[1],m+=i[1],t.originalLine=g+i[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+i[3],h=t.originalColumn,i.length>4&&(t.name=d+i[4],d+=i[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},i.prototype._findMapping=function(e,n,t,r,i,o){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,i,o)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[t];if(i.generatedLine===n.generatedLine){var o=a.getArg(i,"source",null);null!==o&&(o=this._sources.at(o),null!=this.sourceRoot&&(o=a.join(this.sourceRoot,o)));var s=a.getArg(i,"name",null);return null!==s&&(s=this._names.at(s)),{source:o,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},i.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===t.source)return{line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),o?(o.path=t,i(o)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),i(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,i(s);var a="/"===n.charAt(0)?n:o(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,i(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=i,n.normalize=o,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,i,o,s,a){var u=Math.floor((r-e)/2)+e,c=s(i,o[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,i,o,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,i,o,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,e,r,i,o||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var i=t(1);r.fromArray=function(e,n){for(var t=new r,i=0,o=e.length;o>i;i++)t.add(e[i],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=i.toSetString(e),r=this._set.hasOwnProperty(t),o=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=o)},r.prototype.has=function(e){var n=i.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=i.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var n=1===(1&e),t=e>>1;return n?-t:t}var o=t(5),s=5,a=1<>>=s,i>0&&(n|=c),t+=o.encode(n);while(i>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=o.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&i>=e?e-r+c:e>=o&&s>=e?e-o+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,o,s){if(s>o){var a=r(o,s),u=o-1;t(e,a,s);for(var c=e[s],l=o;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;i(e,n,o,f-1),i(e,n,f+1,s)}}n.quickSort=function(e,n){i(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e,n,t){for(var r,i,o,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=a.exec(l),i&&i[1])return i[1];if(i=s.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function o(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(t,r,i,o,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:i,column:o}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=t,this._get=function(n){return new Promise(function(t,r){var i="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(n.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+o.length+",".length,a=n.substr(s),u=window.atob(a);this.sourceCache[n]=u,t(u)}}else{var c=this.ajax(n,{method:"get"});this.sourceCache[n]=c,c.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,i){o(e),this._get(e.fileName).then(function(i){var o=r(i,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},i)["catch"](i)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),o(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(i){var o=s(i),c="data:"===o.substr(0,5);"/"===o[0]||c||(o=u.substring(0,u.lastIndexOf("/")+1)+o),this._get(o).then(function(t){var i=e.lineNumber,o=e.columnNumber;n(a(t,e.args,i,o,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new u(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var i=arguments.callee;i&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),i=[],o=2,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),i=[],o=0,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",s=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(t=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,i[0],i[1],i[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return i(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,i){return i=r(o,i),new Promise(function(r){var o=e.parse(n);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(n){function r(t){n(e)}new t(i).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(n,t)["catch"](t),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):r(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json"),i.send(JSON.stringify({stack:e}))})}}}); +//# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 311145e..37a7fc8 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","t","r","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","join","o","SourceMap","id","loaded","m","c","p","JSON","parse","replace","getArg","a","u","l","_version","Error","map","normalize","_names","s","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","ArraySet","fromSourceMap","create","toArray","_sourceRoot","_generateSourcesContent","_file","__generatedMappings","slice","__originalMappings","sort","compareByOriginalPositions","defineProperty","get","_parseMappings","_nextCharIsMappingSeparator","charAt","g","length","generatedLine","decode","generatedColumn","value","rest","source","at","originalLine","originalColumn","name","push","compareByGeneratedPositions","_findMapping","search","computeColumnSpans","_generatedMappings","lastGeneratedColumn","originalPositionFor","line","column","sourceContentFor","relative","has","indexOf","urlParse","scheme","path","generatedPositionFor","_originalMappings","lastColumn","allGeneratedPositionsFor","reverse","GENERATED_ORDER","ORIGINAL_ORDER","eachMapping","forEach","SourceMapConsumer","arguments","match","f","auth","host","port","split","splice","substr","h","urlGenerate","toSetString","fromSetString","Math","floor","_array","_set","add","hasOwnProperty","encode","require","StackTraceGPS","XMLHttpRequest","ActiveXObject","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","window","atob","Buffer","_get","Promise","offline","bind","pinpoint","getMappedLocation","then","findFunctionName","substring","lastIndexOf","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","_","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","url","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",t=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",r=this.getFileName()?\"@\"+this.getFileName():\"\",i=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",o=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p=\"\",n(0)}([function(e,n,t){var r;r=function(e,n,r){function i(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var t=o.getArg(n,\"version\"),r=o.getArg(n,\"sources\"),i=o.getArg(n,\"names\",[]),a=o.getArg(n,\"sourceRoot\",null),u=o.getArg(n,\"sourcesContent\",null),c=o.getArg(n,\"mappings\"),l=o.getArg(n,\"file\",null);if(t!=this._version)throw new Error(\"Unsupported version: \"+t);r=r.map(o.normalize),this._names=s.fromArray(i,!0),this._sources=s.fromArray(r,!0),this.sourceRoot=a,this.sourcesContent=u,this._mappings=c,this.file=l}var o=t(1),a=t(2),s=t(3).ArraySet,u=t(4);i.fromSourceMap=function(e){var n=Object.create(i.prototype);return n._names=s.fromArray(e._names.toArray(),!0),n._sources=s.fromArray(e._sources.toArray(),!0),n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file,n.__generatedMappings=e._mappings.toArray().slice(),n.__originalMappings=e._mappings.toArray().slice().sort(o.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?o.join(this.sourceRoot,e):e},this)}}),i.prototype.__generatedMappings=null,Object.defineProperty(i.prototype,\"_generatedMappings\",{get:function(){return this.__generatedMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__generatedMappings}}),i.prototype.__originalMappings=null,Object.defineProperty(i.prototype,\"_originalMappings\",{get:function(){return this.__originalMappings||(this.__generatedMappings=[],this.__originalMappings=[],this._parseMappings(this._mappings,this.sourceRoot)),this.__originalMappings}}),i.prototype._nextCharIsMappingSeparator=function(e){var n=e.charAt(0);return\";\"===n||\",\"===n},i.prototype._parseMappings=function(e,n){for(var t,r=1,i=0,a=0,s=0,c=0,l=0,g=e,p={};g.length>0;)if(\";\"===g.charAt(0))r++,g=g.slice(1),i=0;else if(\",\"===g.charAt(0))g=g.slice(1);else{if(t={},t.generatedLine=r,u.decode(g,p),t.generatedColumn=i+p.value,i=t.generatedColumn,g=p.rest,g.length>0&&!this._nextCharIsMappingSeparator(g)){if(u.decode(g,p),t.source=this._sources.at(c+p.value),c+=p.value,g=p.rest,0===g.length||this._nextCharIsMappingSeparator(g))throw new Error(\"Found a source, but no line and column\");if(u.decode(g,p),t.originalLine=a+p.value,a=t.originalLine,t.originalLine+=1,g=p.rest,0===g.length||this._nextCharIsMappingSeparator(g))throw new Error(\"Found a source and line, but no column\");u.decode(g,p),t.originalColumn=s+p.value,s=t.originalColumn,g=p.rest,g.length>0&&!this._nextCharIsMappingSeparator(g)&&(u.decode(g,p),t.name=this._names.at(l+p.value),l+=p.value,g=p.rest)}this.__generatedMappings.push(t),\"number\"==typeof t.originalLine&&this.__originalMappings.push(t)}this.__generatedMappings.sort(o.compareByGeneratedPositions),this.__originalMappings.sort(o.compareByOriginalPositions)},i.prototype._findMapping=function(e,n,t,r,i){if(e[t]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[t]);if(e[r]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[r]);return a.search(e,n,i)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var r=this._generatedMappings[t];if(r.generatedLine===n.generatedLine){var i=o.getArg(r,\"source\",null);return null!=i&&null!=this.sourceRoot&&(i=o.join(this.sourceRoot,i)),{source:i,line:o.getArg(r,\"originalLine\",null),column:o.getArg(r,\"originalColumn\",null),name:o.getArg(r,\"name\",null)}}}return{source:null,line:null,column:null,name:null}},i.prototype.sourceContentFor=function(e){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=o.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=o.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==n.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!n.path||\"/\"==n.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}throw new Error('\"'+e+'\" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n={source:o.getArg(e,\"source\"),originalLine:o.getArg(e,\"line\"),originalColumn:o.getArg(e,\"column\")};null!=this.sourceRoot&&(n.source=o.relative(this.sourceRoot,n.source));var t=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",o.compareByOriginalPositions);if(t>=0){var r=this._originalMappings[t];return{line:o.getArg(r,\"generatedLine\",null),column:o.getArg(r,\"generatedColumn\",null),lastColumn:o.getArg(r,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},i.prototype.allGeneratedPositionsFor=function(e){var n={source:o.getArg(e,\"source\"),originalLine:o.getArg(e,\"line\"),originalColumn:1/0};null!=this.sourceRoot&&(n.source=o.relative(this.sourceRoot,n.source));var t=[],r=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",o.compareByOriginalPositions);if(r>=0)for(var i=this._originalMappings[r];i&&i.originalLine===n.originalLine;)t.push({line:o.getArg(i,\"generatedLine\",null),column:o.getArg(i,\"generatedColumn\",null),lastColumn:o.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[--r];return t.reverse()},i.GENERATED_ORDER=1,i.ORIGINAL_ORDER=2,i.prototype.eachMapping=function(e,n,t){var r,a=n||null,s=t||i.GENERATED_ORDER;switch(s){case i.GENERATED_ORDER:r=this._generatedMappings;break;case i.ORIGINAL_ORDER:r=this._originalMappings;break;default:throw new Error(\"Unknown order of iteration.\")}var u=this.sourceRoot;r.map(function(e){var n=e.source;return null!=n&&null!=u&&(n=o.join(u,n)),{source:n,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name}}).forEach(e,a)},n.SourceMapConsumer=i}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,t){function r(e,n,t){if(n in e)return e[n];if(3===arguments.length)return t;throw new Error('\"'+n+'\" is a required argument.')}function i(e){var n=e.match(f);return n?{scheme:n[1],auth:n[2],host:n[3],port:n[4],path:n[5]}:null}function o(e){var n=\"\";return e.scheme&&(n+=e.scheme+\":\"),n+=\"//\",e.auth&&(n+=e.auth+\"@\"),e.host&&(n+=e.host),e.port&&(n+=\":\"+e.port),e.path&&(n+=e.path),n}function a(e){var n=e,t=i(e);if(t){if(!t.path)return e;n=t.path}for(var r,a=\"/\"===n.charAt(0),s=n.split(/\\/+/),u=0,c=s.length-1;c>=0;c--)r=s[c],\".\"===r?s.splice(c,1):\"..\"===r?u++:u>0&&(\"\"===r?(s.splice(c+1,u),u=0):(s.splice(c,2),u--));return n=s.join(\"/\"),\"\"===n&&(n=a?\"/\":\".\"),t?(t.path=n,o(t)):n}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var t=i(n),r=i(e);if(r&&(e=r.path||\"/\"),t&&!t.scheme)return r&&(t.scheme=r.scheme),o(t);if(t||n.match(m))return n;if(r&&!r.host&&!r.path)return r.host=n,o(r);var s=\"/\"===n.charAt(0)?n:a(e.replace(/\\/+$/,\"\")+\"/\"+n);return r?(r.path=s,o(r)):s}function u(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");var t=i(e);return\"/\"==n.charAt(0)&&t&&\"/\"==t.path?n.slice(1):0===n.indexOf(e+\"/\")?n.substr(e.length+1):n}function c(e){return\"$\"+e}function l(e){return e.substr(1)}function g(e,n){var t=e||\"\",r=n||\"\";return(t>r)-(r>t)}function p(e,n,t){var r;return(r=g(e.source,n.source))?r:(r=e.originalLine-n.originalLine)?r:(r=e.originalColumn-n.originalColumn,r||t?r:(r=g(e.name,n.name))?r:(r=e.generatedLine-n.generatedLine,r?r:e.generatedColumn-n.generatedColumn))}function h(e,n,t){var r;return(r=e.generatedLine-n.generatedLine)?r:(r=e.generatedColumn-n.generatedColumn,r||t?r:(r=g(e.source,n.source))?r:(r=e.originalLine-n.originalLine)?r:(r=e.originalColumn-n.originalColumn,r?r:g(e.name,n.name)))}n.getArg=r;var f=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=i,n.urlGenerate=o,n.normalize=a,n.join=s,n.relative=u,n.toSetString=c,n.fromSetString=l,n.compareByOriginalPositions=p,n.compareByGeneratedPositions=h}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,t){function r(e,n,t,i,o){var a=Math.floor((n-e)/2)+e,s=o(t,i[a],!0);return 0===s?a:s>0?n-a>1?r(a,n,t,i,o):a:a-e>1?r(e,a,t,i,o):0>e?-1:e}n.search=function(e,n,t){return 0===n.length?-1:r(-1,n.length,e,n,t)}}.call(n,t,n,e),!(void 0!==r&&(e.exports=r))},function(e,n,t){var r;r=function(e,n,r){function i(){this._array=[],this._set={}}var o=t(1);i.fromArray=function(e,n){for(var t=new i,r=0,o=e.length;o>r;r++)t.add(e[r],n);return t},i.prototype.add=function(e,n){var t=this.has(e),r=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[o.toSetString(e)]=r)},i.prototype.has=function(e){return Object.prototype.hasOwnProperty.call(this._set,o.toSetString(e))},i.prototype.indexOf=function(e){if(this.has(e))return this._set[o.toSetString(e)];throw new Error('\"'+e+'\" is not in the set.')},i.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var a=t(5),s=5,u=1<>>=s,r>0&&(n|=l),t+=a.encode(n);while(r>0);return t},n.decode=function(e,n){var t,r,i=0,u=e.length,g=0,p=0;do{if(i>=u)throw new Error(\"Expected more digits in base 64 VLQ value.\");r=a.decode(e.charAt(i++)),t=!!(r&l),r&=c,g+=r<=200&&i.status<400)return n(i.responseText);r(new Error(\"Unable to retrieve \"+e))}},i.send()}function i(e,n,t){for(var r,i,o,a=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,s=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,c=e.split(\"\\n\"),l=\"\",g=Math.min(n,20),p=0;g>p;++p)if(r=c[n-p-1],o=r.indexOf(\"//\"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=s.exec(l),i&&i[1])return i[1];if(i=a.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function u(t,r,i,o){var a=new e.SourceMapConsumer(t).originalPositionFor({line:i,column:o});return new n(a.name,r,a.source,a.line,a.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(t,r){var i=\"data:\"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error(\"Cannot make network requests in offline mode\"));else if(i){var o=\"application/json;base64\";if(n.substr(5,o.length)!==o)r(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var a=\"data:\".length+o.length+\",\".length,s=n.substr(a),u=this._atob(s);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)[\"catch\"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){a(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){o(),a(e);var r=e.fileName;this._get(r).then(function(i){var o=s(i);\"/\"!==o[0]&&(o=r.substring(0,r.lastIndexOf(\"/\")+1)+o),this._get(o).then(function(t){var r=e.lineNumber,i=e.columnNumber;n(u(t,e.args,r,i))},t)[\"catch\"](t)}.bind(this),t)[\"catch\"](t)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n var args = [].slice.call(curr['arguments']);\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","h","length","f","d","_","v","y","b","C","A","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_get","offline","window","atob","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,h=s.length;h>p;p++){var f=s[p],m=new i;m.generatedLine=f.generatedLine,m.generatedColumn=f.generatedColumn,f.source&&(m.source=t.indexOf(f.source),m.originalLine=f.originalLine,m.originalColumn=f.originalColumn,f.name&&(m.name=r.indexOf(f.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,h=0,f=0,m=0,d=0,_=e.length,v=0,y={},b={},C=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&C.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(C,a.compareByOriginalPositions),this.__originalMappings=C},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function h(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var f=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(f)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=h},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=window.atob(a);this.sourceCache[n]=u,r(u)}}else{var l=this.ajax(n,{method:\"get\"});this.sourceCache[n]=l,l.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)[\"catch\"](o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index eddceb7..e125df7 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -43,12 +43,7 @@ gulp.task('test-ci', ['dist'], function (done) { server.start(); }); -gulp.task('copy', function () { - return gulp.src(sources) - .pipe(gulp.dest('dist')); -}); - -gulp.task('dist', ['copy'], function () { +gulp.task('dist', function () { gulp.src(polyfills.concat(dependencies.concat(sources))) .pipe(sourcemaps.init()) .pipe(concat(sources.replace('.js', '-with-polyfills.min.js'))) From 3254e61caaf7d629939811b8e5e8b89c0253b760 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 21 Nov 2015 14:23:57 -0800 Subject: [PATCH 012/110] Switch to Jasmine 2 for testing. Fixes ajax testing in IE9 --- dist/stacktrace-with-polyfills.min.js | 4 +- dist/stacktrace-with-polyfills.min.js.map | 2 +- dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- karma.conf.ci.js | 114 +++++---- karma.conf.js | 2 +- package.json | 20 +- polyfills.js | 8 + spec/spec-helper.js | 58 ++--- spec/stacktrace-spec.js | 276 +++++++++------------- 10 files changed, 224 insertions(+), 264 deletions(-) diff --git a/dist/stacktrace-with-polyfills.min.js b/dist/stacktrace-with-polyfills.min.js index 2fdefd3..44cb7f1 100644 --- a/dist/stacktrace-with-polyfills.min.js +++ b/dist/stacktrace-with-polyfills.min.js @@ -1,3 +1,3 @@ -(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function r(e){B=e}function o(e){z=e}function i(){return function(){process.nextTick(l)}}function a(){return function(){$(l)}}function s(){var e=0,t=new W(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;J>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}J=0}function f(){try{var e=require,t=e("vertx");return $=t.runOnLoop||t.runOnContext,a()}catch(n){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return te.error=t,te}}function d(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function y(e,t,n){z(function(e){var r=!1,o=d(n,t,function(n){r||(r=!0,t!==n?b(e,n):A(e,n))},function(t){r||(r=!0,C(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,C(e,o))},e)}function v(e,t){t._state===Q?A(e,t._result):t._state===ee?C(e,t._result):O(t,void 0,function(t){b(e,t)},function(t){C(e,t)})}function _(e,n){if(n.constructor===e.constructor)v(e,n);else{var r=m(n);r===te?C(e,te.error):void 0===r?A(e,n):t(r)?y(e,n,r):A(e,n)}}function b(t,n){t===n?C(t,h()):e(n)?_(t,n):A(t,n)}function w(e){e._onerror&&e._onerror(e._result),S(e)}function A(e,t){e._state===K&&(e._result=t,e._state=Q,0!==e._subscribers.length&&z(S,e))}function C(e,t){e._state===K&&(e._state=ee,e._result=t,z(w,e))}function O(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+Q]=n,o[i+ee]=r,0===i&&e._state&&z(S,e)}function S(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)O(r.resolve(e[a]),void 0,t,n);return o}function P(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(p);return b(n,e),n}function k(e){var t=this,n=new t(p);return C(n,e),n}function R(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function U(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||R(),this instanceof U||F(),M(this,e))}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var D;D=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var $,B,q,I=D,J=0,z=({}.toString,function(e,t){X[J]=e,X[J+1]=t,J+=2,2===J&&(B?B(l):q())}),Z="undefined"!=typeof window?window:void 0,H=Z||{},W=H.MutationObserver||H.WebKitMutationObserver,Y="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=Y?i():W?s():V?u():void 0===Z&&"function"==typeof require?f():c();var K=void 0,Q=1,ee=2,te=new E,ne=new E;j.prototype._validateInput=function(e){return I(e)},j.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},j.prototype._init=function(){this._result=new Array(this.length)};var re=j;j.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===K&&t>o;o++)e._eachEntry(r[o],o)},j.prototype._eachEntry=function(e,t){var r=this,o=r._instanceConstructor;n(e)?e.constructor===o&&e._state!==K?(e._onerror=null,r._settledAt(e._state,t,e._result)):r._willSettleAt(o.resolve(e),t):(r._remaining--,r._result[t]=e)},j.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===K&&(r._remaining--,e===ee?C(o,n):r._result[t]=n),0===r._remaining&&A(o,r._result)},j.prototype._willSettleAt=function(e,t){var n=this;O(e,void 0,function(e){n._settledAt(Q,t,e)},function(e){n._settledAt(ee,t,e)})};var oe=T,ie=x,ae=P,se=k,ue=0,ce=U;U.all=oe,U.race=ie,U.resolve=ae,U.reject=se,U._setScheduler=r,U._setAsap=o,U._asap=z,U.prototype={constructor:U,then:function(e,t){var n=this,r=n._state;if(r===Q&&!e||r===ee&&!t)return this;var o=new this.constructor(p),i=n._result;if(r){var a=arguments[r-1];z(function(){L(r,o,a,i)})}else O(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=G,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==d)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===d&&u(d)===d&&u()===d&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([d])&&"null"==u(null)&&"[null,null,null]"==u([d,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,m,d,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(b){}if(!i("json")){var w="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return M[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?m=2==a?function(e,t){var n,r={},o=v.call(e)==w;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==w;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var r,i,a=v.call(e)==w,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),m(e,t)},!i("json-stringify")){var T={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},x="000000",P=function(e,t){return(x+(t||0)).slice(-e)},k="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=T[a];break;default:if(32>a){t+=k+P(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,b,w,N,M,T,x,k,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=L((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,b=L(h/1e3)%60,w=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),b=s.getUTCSeconds(),w=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+P(6,0>c?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,y)+":"+P(2,_)+":"+P(2,b)+"."+P(3,w)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(x=a.length;x--;)if(a[x]===s)throw f();if(a.push(s),N=[],k=i,i+=o,u==S){for(T=0,x=s.length;x>T;T++)M=F(T,s,n,r,o,i,a),N.push(M===d?"null":M);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+k+"]":"["+N.join(",")+"]":"[]"}else m(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==d&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+k+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==w)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=$[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=D("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},I=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=q(),"]"!=e;n||(n=!0))n&&(","==e?(e=q(),"]"==e&&B()):B()),","==e&&B(),t.push(I(e));return t}if("{"==e){for(t={};e=q(),"}"!=e;n||(n=!0))n&&(","==e?(e=q(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=q())&&B(),t[e.slice(1)]=I(q());return t}B()}return e},J=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)J(o,r,n);else m(o,function(e){J(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=I(q()),"$"!=q()&&B(),U=G=null,t&&v.call(t)==w?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,m=0,d=0,y=e.length,v=0,_={},b={},w=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&w.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(w,s.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(m))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=s,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e,t,n){for(var r,o,i,a=/function\s+([^(]*?)\s*\(([^)]*)\)/,s=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=s.exec(l),o&&o[1])return o[1];if(o=a.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function a(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function s(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)r(new Error("The encoding of the inline sourcemap is not supported"));else{var a="data:".length+i.length+",".length,s=t.substr(a),u=window.atob(s);this.sourceCache[t]=u,n(u)}}else{var c=this.ajax(t,{method:"get"});this.sourceCache[t]=c,c.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,o){i(e),this._get(e.fileName).then(function(o){var i=r(o,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)["catch"](o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),i(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=a(o),c="data:"===i.substr(0,5);"/"===i[0]||c||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(s(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new u(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(n){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function r(e){B=e}function o(e){z=e}function i(){return function(){process.nextTick(l)}}function a(){return function(){$(l)}}function s(){var e=0,t=new W(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;J>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}J=0}function f(){try{var e=require,t=e("vertx");return $=t.runOnLoop||t.runOnContext,a()}catch(n){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return te.error=t,te}}function d(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function y(e,t,n){z(function(e){var r=!1,o=d(n,t,function(n){r||(r=!0,t!==n?b(e,n):A(e,n))},function(t){r||(r=!0,C(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,C(e,o))},e)}function v(e,t){t._state===Q?A(e,t._result):t._state===ee?C(e,t._result):O(t,void 0,function(t){b(e,t)},function(t){C(e,t)})}function _(e,n){if(n.constructor===e.constructor)v(e,n);else{var r=m(n);r===te?C(e,te.error):void 0===r?A(e,n):t(r)?y(e,n,r):A(e,n)}}function b(t,n){t===n?C(t,h()):e(n)?_(t,n):A(t,n)}function w(e){e._onerror&&e._onerror(e._result),S(e)}function A(e,t){e._state===K&&(e._result=t,e._state=Q,0!==e._subscribers.length&&z(S,e))}function C(e,t){e._state===K&&(e._state=ee,e._result=t,z(w,e))}function O(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+Q]=n,o[i+ee]=r,0===i&&e._state&&z(S,e)}function S(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)O(r.resolve(e[a]),void 0,t,n);return o}function P(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(p);return b(n,e),n}function k(e){var t=this,n=new t(p);return C(n,e),n}function R(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function U(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||R(),this instanceof U||F(),M(this,e))}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var D;D=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var $,B,q,I=D,J=0,z=({}.toString,function(e,t){X[J]=e,X[J+1]=t,J+=2,2===J&&(B?B(l):q())}),Z="undefined"!=typeof window?window:void 0,H=Z||{},W=H.MutationObserver||H.WebKitMutationObserver,Y="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=Y?i():W?s():V?u():void 0===Z&&"function"==typeof require?f():c();var K=void 0,Q=1,ee=2,te=new E,ne=new E;j.prototype._validateInput=function(e){return I(e)},j.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},j.prototype._init=function(){this._result=new Array(this.length)};var re=j;j.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===K&&t>o;o++)e._eachEntry(r[o],o)},j.prototype._eachEntry=function(e,t){var r=this,o=r._instanceConstructor;n(e)?e.constructor===o&&e._state!==K?(e._onerror=null,r._settledAt(e._state,t,e._result)):r._willSettleAt(o.resolve(e),t):(r._remaining--,r._result[t]=e)},j.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===K&&(r._remaining--,e===ee?C(o,n):r._result[t]=n),0===r._remaining&&A(o,r._result)},j.prototype._willSettleAt=function(e,t){var n=this;O(e,void 0,function(e){n._settledAt(Q,t,e)},function(e){n._settledAt(ee,t,e)})};var oe=T,ie=x,ae=P,se=k,ue=0,ce=U;U.all=oe,U.race=ie,U.resolve=ae,U.reject=se,U._setScheduler=r,U._setAsap=o,U._asap=z,U.prototype={constructor:U,then:function(e,t){var n=this,r=n._state;if(r===Q&&!e||r===ee&&!t)return this;var o=new this.constructor(p),i=n._result;if(r){var a=arguments[r-1];z(function(){L(r,o,a,i)})}else O(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=G,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==d)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===d&&u(d)===d&&u()===d&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([d])&&"null"==u(null)&&"[null,null,null]"==u([d,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,m,d,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(b){}if(!i("json")){var w="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return M[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?m=2==a?function(e,t){var n,r={},o=v.call(e)==w;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==w;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var r,i,a=v.call(e)==w,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),m(e,t)},!i("json-stringify")){var T={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},x="000000",P=function(e,t){return(x+(t||0)).slice(-e)},k="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=T[a];break;default:if(32>a){t+=k+P(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,b,w,N,M,T,x,k,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=L((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,b=L(h/1e3)%60,w=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),b=s.getUTCSeconds(),w=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+P(6,0>c?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,y)+":"+P(2,_)+":"+P(2,b)+"."+P(3,w)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(x=a.length;x--;)if(a[x]===s)throw f();if(a.push(s),N=[],k=i,i+=o,u==S){for(T=0,x=s.length;x>T;T++)M=F(T,s,n,r,o,i,a),N.push(M===d?"null":M);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+k+"]":"["+N.join(",")+"]":"[]"}else m(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==d&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+k+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==w)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=$[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=D("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},I=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=q(),"]"!=e;n||(n=!0))n&&(","==e?(e=q(),"]"==e&&B()):B()),","==e&&B(),t.push(I(e));return t}if("{"==e){for(t={};e=q(),"}"!=e;n||(n=!0))n&&(","==e?(e=q(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=q())&&B(),t[e.slice(1)]=I(q());return t}B()}return e},J=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)J(o,r,n);else m(o,function(e){J(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=I(q()),"$"!=q()&&B(),U=G=null,t&&v.call(t)==w?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,m=0,d=0,y=e.length,v=0,_={},b={},w=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&w.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(w,s.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(m))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=s,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.'); +},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e,t,n){for(var r,o,i,a=/function\s+([^(]*?)\s*\(([^)]*)\)/,s=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=s.exec(l),o&&o[1])return o[1];if(o=a.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function a(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function s(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)r(new Error("The encoding of the inline sourcemap is not supported"));else{var a="data:".length+i.length+",".length,s=t.substr(a),u=window.atob(s);this.sourceCache[t]=u,n(u)}}else{var c=this.ajax(t,{method:"get"});this.sourceCache[t]=c,c.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,o){i(e),this._get(e.fileName).then(function(o){var i=r(o,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)["catch"](o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),i(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=a(o),c="data:"===i.substr(0,5);"/"===i[0]||c||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(s(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new u(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(n){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace-with-polyfills.min.js.map diff --git a/dist/stacktrace-with-polyfills.min.js.map b/dist/stacktrace-with-polyfills.min.js.map index 749b13b..061d389 100644 --- a/dist/stacktrace-with-polyfills.min.js.map +++ b/dist/stacktrace-with-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","h","f","d","_","v","y","b","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_get","offline","atob","method","pinpoint","getMappedLocation","findFunctionName","substring","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","if (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,h=s.length;h>p;p++){var f=s[p],m=new i;m.generatedLine=f.generatedLine,m.generatedColumn=f.generatedColumn,f.source&&(m.source=t.indexOf(f.source),m.originalLine=f.originalLine,m.originalColumn=f.originalColumn,f.name&&(m.name=r.indexOf(f.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,h=0,f=0,m=0,d=0,_=e.length,v=0,y={},b={},C=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&C.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(C,a.compareByOriginalPositions),this.__originalMappings=C},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function h(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var f=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(f)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=h},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=window.atob(a);this.sourceCache[n]=u,r(u)}}else{var l=this.ajax(n,{method:\"get\"});this.sourceCache[n]=l,l.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)[\"catch\"](o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","h","f","d","_","v","y","b","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_get","offline","atob","method","pinpoint","getMappedLocation","findFunctionName","substring","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,h=s.length;h>p;p++){var f=s[p],m=new i;m.generatedLine=f.generatedLine,m.generatedColumn=f.generatedColumn,f.source&&(m.source=t.indexOf(f.source),m.originalLine=f.originalLine,m.originalColumn=f.originalColumn,f.name&&(m.name=r.indexOf(f.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,h=0,f=0,m=0,d=0,_=e.length,v=0,y={},b={},C=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&C.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(C,a.compareByOriginalPositions),this.__originalMappings=C},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function h(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var f=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(f)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=h},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=window.atob(a);this.sourceCache[n]=u,r(u)}}else{var l=this.ajax(n,{method:\"get\"});this.sourceCache[n]=l,l.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)[\"catch\"](o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index b3e6869..4169161 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i,o){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i),void 0!==o&&this.setSource(o)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new i(n)}function i(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),i=a.getArg(n,"names",[]),o=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return o&&a.isAbsolute(o)&&a.isAbsolute(e)?a.relative(o,e):e}),this._names=c.fromArray(i,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=s,this._mappings=u,this.file=l}function o(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),i=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var o={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),i=a.getArg(n,"column");if(t=0){var o=this._originalMappings[i];if(void 0===e.column)for(var s=o.originalLine;o&&o.originalLine===s;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i];else for(var c=o.originalColumn;o&&o.originalLine===n&&o.originalColumn==c;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var n=Object.create(i.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new o;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,n){for(var t,r,i,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new o,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),i=y[r])v+=r.length;else{for(i=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");y[r]=i}t.generatedColumn=p+i[0],p=t.generatedColumn,i.length>1&&(t.source=m+i[1],m+=i[1],t.originalLine=g+i[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+i[3],h=t.originalColumn,i.length>4&&(t.name=d+i[4],d+=i[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},i.prototype._findMapping=function(e,n,t,r,i,o){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,i,o)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[t];if(i.generatedLine===n.generatedLine){var o=a.getArg(i,"source",null);null!==o&&(o=this._sources.at(o),null!=this.sourceRoot&&(o=a.join(this.sourceRoot,o)));var s=a.getArg(i,"name",null);return null!==s&&(s=this._names.at(s)),{source:o,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},i.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===t.source)return{line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),o?(o.path=t,i(o)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),i(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,i(s);var a="/"===n.charAt(0)?n:o(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,i(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=i,n.normalize=o,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,i,o,s,a){var u=Math.floor((r-e)/2)+e,c=s(i,o[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,i,o,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,i,o,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,e,r,i,o||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var i=t(1);r.fromArray=function(e,n){for(var t=new r,i=0,o=e.length;o>i;i++)t.add(e[i],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=i.toSetString(e),r=this._set.hasOwnProperty(t),o=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=o)},r.prototype.has=function(e){var n=i.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=i.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var n=1===(1&e),t=e>>1;return n?-t:t}var o=t(5),s=5,a=1<>>=s,i>0&&(n|=c),t+=o.encode(n);while(i>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=o.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&i>=e?e-r+c:e>=o&&s>=e?e-o+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,o,s){if(s>o){var a=r(o,s),u=o-1;t(e,a,s);for(var c=e[s],l=o;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;i(e,n,o,f-1),i(e,n,f+1,s)}}n.quickSort=function(e,n){i(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e,n,t){for(var r,i,o,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=a.exec(l),i&&i[1])return i[1];if(i=s.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function o(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(t,r,i,o,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:i,column:o}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=t,this._get=function(n){return new Promise(function(t,r){var i="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(n.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+o.length+",".length,a=n.substr(s),u=window.atob(a);this.sourceCache[n]=u,t(u)}}else{var c=this.ajax(n,{method:"get"});this.sourceCache[n]=c,c.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,i){o(e),this._get(e.fileName).then(function(i){var o=r(i,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},i)["catch"](i)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),o(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(i){var o=s(i),c="data:"===o.substr(0,5);"/"===o[0]||c||(o=u.substring(0,u.lastIndexOf("/")+1)+o),this._get(o).then(function(t){var i=e.lineNumber,o=e.columnNumber;n(a(t,e.args,i,o,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new u(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var i=arguments.callee;i&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),i=[],o=2,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),i=[],o=0,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",s=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(t=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,i[0],i[1],i[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return i(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,i){return i=r(o,i),new Promise(function(r){var o=e.parse(n);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(n){function r(t){n(e)}new t(i).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(n,t)["catch"](t),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):r(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json"),i.send(JSON.stringify({stack:e}))})}}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i,o){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i),void 0!==o&&this.setSource(o)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new i(n)}function i(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),i=a.getArg(n,"names",[]),o=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return o&&a.isAbsolute(o)&&a.isAbsolute(e)?a.relative(o,e):e}),this._names=c.fromArray(i,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=s,this._mappings=u,this.file=l}function o(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),i=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var o={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),i=a.getArg(n,"column");if(t=0){var o=this._originalMappings[i];if(void 0===e.column)for(var s=o.originalLine;o&&o.originalLine===s;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i];else for(var c=o.originalColumn;o&&o.originalLine===n&&o.originalColumn==c;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var n=Object.create(i.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new o;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,n){for(var t,r,i,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new o,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),i=y[r])v+=r.length;else{for(i=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");y[r]=i}t.generatedColumn=p+i[0],p=t.generatedColumn,i.length>1&&(t.source=m+i[1],m+=i[1],t.originalLine=g+i[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+i[3],h=t.originalColumn,i.length>4&&(t.name=d+i[4],d+=i[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},i.prototype._findMapping=function(e,n,t,r,i,o){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,i,o)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[t];if(i.generatedLine===n.generatedLine){var o=a.getArg(i,"source",null);null!==o&&(o=this._sources.at(o),null!=this.sourceRoot&&(o=a.join(this.sourceRoot,o)));var s=a.getArg(i,"name",null);return null!==s&&(s=this._names.at(s)),{source:o,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},i.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===t.source)return{line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),o?(o.path=t,i(o)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),i(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,i(s);var a="/"===n.charAt(0)?n:o(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,i(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=i,n.normalize=o,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,i,o,s,a){var u=Math.floor((r-e)/2)+e,c=s(i,o[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,i,o,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,i,o,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,e,r,i,o||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var i=t(1);r.fromArray=function(e,n){for(var t=new r,i=0,o=e.length;o>i;i++)t.add(e[i],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=i.toSetString(e),r=this._set.hasOwnProperty(t),o=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=o)},r.prototype.has=function(e){var n=i.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=i.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var n=1===(1&e),t=e>>1;return n?-t:t}var o=t(5),s=5,a=1<>>=s,i>0&&(n|=c),t+=o.encode(n);while(i>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=o.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&i>=e?e-r+c:e>=o&&s>=e?e-o+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,o,s){if(s>o){var a=r(o,s),u=o-1;t(e,a,s);for(var c=e[s],l=o;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;i(e,n,o,f-1),i(e,n,f+1,s)}}n.quickSort=function(e,n){i(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e,n,t){for(var r,i,o,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=a.exec(l),i&&i[1])return i[1];if(i=s.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function o(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(t,r,i,o,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:i,column:o}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=t,this._get=function(n){return new Promise(function(t,r){var i="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(n.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+o.length+",".length,a=n.substr(s),u=window.atob(a);this.sourceCache[n]=u,t(u)}}else{var c=this.ajax(n,{method:"get"});this.sourceCache[n]=c,c.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,i){o(e),this._get(e.fileName).then(function(i){var o=r(i,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},i)["catch"](i)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),o(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(i){var o=s(i),c="data:"===o.substr(0,5);"/"===o[0]||c||(o=u.substring(0,u.lastIndexOf("/")+1)+o),this._get(o).then(function(t){var i=e.lineNumber,o=e.columnNumber;n(a(t,e.args,i,o,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new u(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var i=arguments.callee;i&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),i=[],o=2,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),i=[],o=0,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",s=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(t=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,i[0],i[1],i[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return i(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,i){return i=r(o,i),new Promise(function(r){var o=e.parse(n);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(n){function r(t){n(e)}new t(i).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(n,t)["catch"](t),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):r(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json"),i.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 37a7fc8..9989aec 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","h","length","f","d","_","v","y","b","C","A","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_get","offline","window","atob","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,h=s.length;h>p;p++){var f=s[p],m=new i;m.generatedLine=f.generatedLine,m.generatedColumn=f.generatedColumn,f.source&&(m.source=t.indexOf(f.source),m.originalLine=f.originalLine,m.originalColumn=f.originalColumn,f.name&&(m.name=r.indexOf(f.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,h=0,f=0,m=0,d=0,_=e.length,v=0,y={},b={},C=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&C.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(C,a.compareByOriginalPositions),this.__originalMappings=C},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function h(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var f=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(f)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=h},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=window.atob(a);this.sourceCache[n]=u,r(u)}}else{var l=this.ajax(n,{method:\"get\"});this.sourceCache[n]=l,l.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)[\"catch\"](o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","h","length","f","d","_","v","y","b","C","A","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_get","offline","window","atob","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,h=s.length;h>p;p++){var f=s[p],m=new i;m.generatedLine=f.generatedLine,m.generatedColumn=f.generatedColumn,f.source&&(m.source=t.indexOf(f.source),m.originalLine=f.originalLine,m.originalColumn=f.originalColumn,f.name&&(m.name=r.indexOf(f.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,h=0,f=0,m=0,d=0,_=e.length,v=0,y={},b={},C=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&C.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(C,a.compareByOriginalPositions),this.__originalMappings=C},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function h(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var f=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(f)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=h},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=window.atob(a);this.sourceCache[n]=u,r(u)}}else{var l=this.ajax(n,{method:\"get\"});this.sourceCache[n]=l,l.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)[\"catch\"](o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/karma.conf.ci.js b/karma.conf.ci.js index 2e22133..400848f 100644 --- a/karma.conf.ci.js +++ b/karma.conf.ci.js @@ -8,54 +8,77 @@ module.exports = function (config) { // Commented some of these out just so CI doesn't take forever. // Check out https://saucelabs.com/platforms for all browser/platform combos var customLaunchers = { - //slIOS7: { - // base: 'SauceLabs', - // browserName: 'iPhone', - // platform: 'OS X 10.9', - // version: '7.1' - //}, slIOS8: { base: 'SauceLabs', browserName: 'iPhone', - platform: 'OS X 10.9', - version: '8.1' + platform: 'OS X 10.10', + version: '8.4' + }, + slIOS9: { + base: 'SauceLabs', + browserName: 'iPhone', + platform: 'OS X 10.11', + version: '9.1' + }, + slAndroid4: { + base: 'SauceLabs', + browserName: 'Android', + platform: 'Linux', + version: '4.4' + }, + slAndroid5: { + base: 'SauceLabs', + browserName: 'Android', + platform: 'Linux', + version: '5.1' }, - //slAndroid4: { - // base: 'SauceLabs', - // browserName: 'Android', - // platform: 'Linux', - // version: '4.4' - //}, slChrome: { base: 'SauceLabs', browserName: 'chrome' }, - slFirefox: { + slChromeBeta: { base: 'SauceLabs', - browserName: 'firefox' + browserName: 'chrome', + version: 'beta' + }, + slChromeCanary: { + base: 'SauceLabs', + browserName: 'chrome', + version: 'dev' + }, + slFirefox42: { + base: 'SauceLabs', + browserName: 'firefox', + platform: 'Windows 8.1', + version: '42.0' + }, + slFirefoxDev: { + base: 'SauceLabs', + browserName: 'firefox', + version: 'dev' + }, + slSafari8: { + base: 'SauceLabs', + browserName: 'safari', + platform: 'OS X 10.10', + version: '8' + }, + slSafari9: { + base: 'SauceLabs', + browserName: 'safari', + platform: 'OS X 10.11', + version: '9' }, - //slSafari6: { - // base: 'SauceLabs', - // browserName: 'safari', - // platform: 'OS X 10.8', - // version: '6' - //}, - //slSafari7: { - // base: 'SauceLabs', - // browserName: 'safari', - // platform: 'OS X 10.9', - // version: '7' - //}, - //slSafari8: { - // base: 'SauceLabs', - // browserName: 'safari', - // platform: 'OS X 10.10', - // version: '8' - //} slOpera: { base: 'SauceLabs', browserName: 'opera' }, + slEdge20: { + base: 'SauceLabs', + browserName: 'microsoftedge', + platform: 'Windows 10', + version: '20.10240' + }, slIE11: { base: 'SauceLabs', browserName: 'internet explorer', @@ -67,36 +90,31 @@ module.exports = function (config) { browserName: 'internet explorer', platform: 'Windows 8', version: '10' + }, + slIE9: { + base: 'SauceLabs', + browserName: 'internet explorer', + platform: 'Windows 7', + version: '9' } - //slIE9: { - // base: 'SauceLabs', - // browserName: 'internet explorer', - // platform: 'Windows 7', - // version: '9' - //}, + // Commented out due to lack of polyfills for SourceMapConsumer //slIE8: { // base: 'SauceLabs', // browserName: 'internet explorer', // platform: 'Windows XP', // version: '8' - //} + //}, //slIE7: { // base: 'SauceLabs', // browserName: 'internet explorer', // platform: 'Windows XP', // version: '7' //} - //slIE6: { - // base: 'SauceLabs', - // browserName: 'internet explorer', - // platform: 'Windows XP', - // version: '6' - //} }; config.set({ basePath: '', - frameworks: ['jasmine', 'sinon'], + frameworks: ['jasmine-ajax', 'jasmine'], files: [ 'node_modules/es6-promise/dist/es6-promise.js', 'polyfills.js', diff --git a/karma.conf.js b/karma.conf.js index fa5ed5a..1d07c80 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,7 +1,7 @@ module.exports = function (config) { config.set({ basePath: '', - frameworks: ['jasmine', 'sinon'], + frameworks: ['jasmine-ajax', 'jasmine'], files: [ 'node_modules/es6-promise/dist/es6-promise.js', 'node_modules/stacktrace-gps/dist/stacktrace-gps.min.js', diff --git a/package.json b/package.json index 0811973..9824ca7 100644 --- a/package.json +++ b/package.json @@ -32,25 +32,25 @@ "gulp": "^3.9.0", "gulp-concat": "^2.6.0", "gulp-coveralls": "^0.1.4", - "gulp-jshint": "^1.11.2", + "gulp-jshint": "^1.12.0", "gulp-sourcemaps": "^1.5.2", - "gulp-uglify": "^1.4.1", - "jasmine-node": "~1.14", - "jasmine-sinon": "^0.4.0", + "gulp-uglify": "^1.5.1", + "jasmine": "^2.3.2", + "jasmine-ajax": "^3.2.0", + "jasmine-core": "^2.3.4", "json3": "^3.3.2", "karma": "^0.13.9", - "karma-chrome-launcher": "^0.2.0", + "karma-chrome-launcher": "^0.2.1", "karma-coverage": "^0.5.2", - "karma-firefox-launcher": "^0.1.6", + "karma-firefox-launcher": "^0.1.7", "karma-ie-launcher": "^0.2.0", - "karma-jasmine": "^0.1.5", + "karma-jasmine": "^0.3.6", + "karma-jasmine-ajax": "^0.1.13", "karma-opera-launcher": "^0.3.0", "karma-phantomjs2-launcher": "^0.3.2", "karma-safari-launcher": "^0.1.1", "karma-sauce-launcher": "^0.2.14", - "karma-sinon": "^1.0.4", - "run-sequence": "^1.1.2", - "sinon": "^1.16.1" + "run-sequence": "^1.1.2" }, "bugs": { "url": "https://github.com/stacktracejs/stacktrace.js/issues" diff --git a/polyfills.js b/polyfills.js index 8958b3d..eb8a9d4 100644 --- a/polyfills.js +++ b/polyfills.js @@ -1,3 +1,11 @@ +// Polyfill for old browsers +// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray +if (!Array.isArray) { + Array.isArray = function(arg) { + return Object.prototype.toString.call(arg) === '[object Array]'; + }; +} + if (typeof Promise === 'undefined') { ES6Promise.polyfill(); } diff --git a/spec/spec-helper.js b/spec/spec-helper.js index 79a2795..1d9fffc 100644 --- a/spec/spec-helper.js +++ b/spec/spec-helper.js @@ -1,37 +1,31 @@ -// Polyfill for old browsers -// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray -if (!Array.isArray) { - Array.isArray = function(arg) { - return Object.prototype.toString.call(arg) === '[object Array]'; - }; -} - beforeEach(function() { - this.addMatchers({ - toMatchStackFrame: function(expected) { - var actual = this.actual; - var message = ''; - if (actual.getFunctionName() !== expected[0]) { - message += 'expected functionName: ' + actual.getFunctionName() + ' to equal ' + expected[0] + '\n'; - } - if (Array.isArray(actual.getArgs()) && Array.isArray(expected[1])) { - if (actual.getArgs().join() !== expected[1].join()) { - message += 'expected args: ' + actual.getArgs() + ' to equal ' + expected[1] + '\n'; + jasmine.addMatchers({ + toMatchStackFrame: function() { + return { + compare: function(actual, expected) { + var message = ''; + if (actual.getFunctionName() !== expected[0]) { + message += 'expected functionName: ' + actual.getFunctionName() + ' to equal ' + expected[0] + '\n'; + } + if (Array.isArray(actual.getArgs()) && Array.isArray(expected[1])) { + if (actual.getArgs().join() !== expected[1].join()) { + message += 'expected args: ' + actual.getArgs() + ' to equal ' + expected[1] + '\n'; + } + } else if (actual.getArgs() !== expected[1]) { + message += 'expected args: ' + actual.getArgs() + ' to equal ' + expected[1] + '\n'; + } + if (actual.getFileName() !== expected[2]) { + message += 'expected fileName: ' + actual.getFileName() + ' to equal ' + expected[2] + '\n'; + } + if (actual.getLineNumber() !== expected[3]) { + message += 'expected lineNumber: ' + actual.getLineNumber() + ' to equal ' + expected[3] + '\n'; + } + if (actual.getColumnNumber() !== expected[4]) { + message += 'expected columnNumber: ' + actual.getColumnNumber() + ' to equal ' + expected[4] + '\n'; + } + return {pass: message === '', message: message}; } - } else if (actual.getArgs() !== expected[1]) { - message += 'expected args: ' + actual.getArgs() + ' to equal ' + expected[1] + '\n'; - } - if (actual.getFileName() !== expected[2]) { - message += 'expected fileName: ' + actual.getFileName() + ' to equal ' + expected[2] + '\n'; - } - if (actual.getLineNumber() !== expected[3]) { - message += 'expected lineNumber: ' + actual.getLineNumber() + ' to equal ' + expected[3] + '\n'; - } - if (actual.getColumnNumber() !== expected[4]) { - message += 'expected columnNumber: ' + actual.getColumnNumber() + ' to equal ' + expected[4] + '\n'; - } - this.message = function() { return message }; - return message === ''; + }; } }); }); diff --git a/spec/stacktrace-spec.js b/spec/stacktrace-spec.js index 079ea9e..1fabc50 100755 --- a/spec/stacktrace-spec.js +++ b/spec/stacktrace-spec.js @@ -1,146 +1,102 @@ /* global Errors: false */ describe('StackTrace', function () { - var callback; - var debugCallback; - var errback; - var debugErrback; beforeEach(function () { if (typeof Promise === 'undefined') { ES6Promise.polyfill(); } - - callback = jasmine.createSpy('callback'); - errback = jasmine.createSpy('errback'); - debugCallback = function (stackframes) { - console.log(stackframes); - }; - debugErrback = function (e) { - console.log(e.message); - console.log(e.stack); - }; }); describe('#get', function () { - it('gets stacktrace from current location', function () { - runs(function testStackTraceGet() { - StackTrace.get().then(callback, errback)['catch'](errback); - }); - waits(100); - runs(function () { - expect(callback).toHaveBeenCalled(); - expect(callback.mostRecentCall.args[0][0].functionName).toEqual('testStackTraceGet'); - expect(errback).not.toHaveBeenCalled(); - }); + it('gets stacktrace from current location', function testStackTraceGet(done) { + StackTrace.get().then(callback, done.fail)['catch'](done.fail); + + function callback(stackFrames) { + expect(stackFrames[0].functionName).toMatch(/.*testStackTraceGet$/); + done(); + } }); }); describe('#fromError', function () { - var server; - beforeEach(function () { - server = sinon.fakeServer.create(); + beforeEach(function() { + jasmine.Ajax.install(); }); - afterEach(function () { - server.restore(); + afterEach(function() { + jasmine.Ajax.uninstall(); }); - it('rejects with Error given unparsable Error object', function () { - runs(function () { - StackTrace.fromError({message: 'ERROR_MESSAGE'}) - .then(callback, errback)['catch'](errback); - }); - waits(100); - runs(function () { - expect(callback).not.toHaveBeenCalled(); - expect(errback).toHaveBeenCalled(); - }); + it('rejects with Error given unparsable Error object', function (done) { + StackTrace.fromError({message: 'ERROR_MESSAGE'}) + .then(done.fail)['catch'](done); }); - it('parses stacktrace from given Error object', function () { - runs(function () { - server.respondWith('GET', 'http://path/to/file.js', [404, {'Content-Type': 'text/plain'}, '']); - StackTrace.fromError(Errors.IE_11) - .then(callback, errback)['catch'](errback); - server.respond(); - }); - waits(100); - runs(function () { - expect(callback).toHaveBeenCalled(); - var stackFrames = callback.mostRecentCall.args[0]; + it('parses stacktrace from given Error object', function (done) { + jasmine.Ajax.stubRequest('http://path/to/file.js').andError(); + + StackTrace.fromError(Errors.IE_11) + .then(callback, done.fail)['catch'](done.fail); + + function callback(stackFrames) { expect(stackFrames.length).toEqual(3); expect(stackFrames[0].fileName).toEqual('http://path/to/file.js'); - expect(errback).not.toHaveBeenCalled(); - }); + done(); + } }); - it('filters returned stack', function () { - runs(function () { - function onlyFoos(stackFrame) { - return stackFrame.functionName === 'foo'; - } + it('filters returned stack', function (done) { + function onlyFoos(stackFrame) { + return stackFrame.functionName === 'foo'; + } + + jasmine.Ajax.stubRequest('http://path/to/file.js').andError(); - server.respondWith('GET', 'http://path/to/file.js', [404, {'Content-Type': 'text/plain'}, '']); - StackTrace.fromError(Errors.IE_11, {filter: onlyFoos}) - .then(callback, errback)['catch'](errback); - server.respond(); - }); - waits(100); - runs(function () { - expect(callback).toHaveBeenCalled(); - var stackFrames = callback.mostRecentCall.args[0]; + StackTrace.fromError(Errors.IE_11, {filter: onlyFoos}) + .then(callback, done.fail)['catch'](done.fail); + + function callback(stackFrames) { expect(stackFrames.length).toEqual(1); expect(stackFrames[0].fileName).toEqual('http://path/to/file.js'); expect(stackFrames[0].functionName).toEqual('foo'); - expect(errback).not.toHaveBeenCalled(); - }); + done(); + } }); - it('uses source maps to enhance stack frames', function () { - runs(function () { - var sourceMin = 'function increment(){someVariable+=2;null.x()}var someVariable=2;increment();\n//# sourceMappingURL=file.min.js.map'; - var sourceMap = '{"version":3,"file":"file.min.js","sources":["file.js"],"names":["increment","someVariable","x"],"mappings":"AAAA,QAASA,aACLC,cAAgB,CAChB,MAAKC,IAET,GAAID,cAAe,CACnBD"}'; - server.respondWith('GET', 'http://path/to/file.min.js', [200, {'Content-Type': 'application/x-javascript'}, sourceMin]); - server.respondWith('GET', 'http://path/to/file.min.js.map', [200, {'Content-Type': 'application/json'}, sourceMap]); - - var stack = 'TypeError: Cannot read property \'x\' of null\n at increment (http://path/to/file.min.js:1:38)'; - StackTrace.fromError({stack: stack}).then(callback, debugErrback)['catch'](debugErrback); - server.respond(); - }); - waits(100); - runs(function () { - server.respond(); - }); - waits(100); - runs(function () { - server.respond(); - }); - waits(100); - runs(function () { - expect(callback).toHaveBeenCalled(); - var stackFrames = callback.mostRecentCall.args[0]; + it('uses source maps to enhance stack frames', function (done) { + var sourceCache = { + 'http://path/to/file.js': 'function increment(){\nsomeVariable+=2;\nnull.x()\n}\nvar someVariable=2;increment();', + 'http://path/to/file.min.js': 'function increment(){someVariable+=2;null.x()}var someVariable=2;increment();\n//# sourceMappingURL=file.min.js.map', + 'http://path/to/file.min.js.map': '{"version":3,"file":"file.min.js","sources":["file.js"],"names":["increment","someVariable","x"],"mappings":"AAAA,QAASA,aACLC,cAAgB,CAChB,MAAKC,IAET,GAAID,cAAe,CACnBD"}' + }; + + var stack = 'TypeError: Cannot read property \'x\' of null\n at increment (http://path/to/file.min.js:1:38)'; + StackTrace.fromError({stack: stack}, {offline: true, sourceCache: sourceCache}) + .then(callback, done.fail)['catch'](done.fail); + + function callback(stackFrames) { expect(stackFrames.length).toEqual(1); expect(stackFrames[0]).toMatchStackFrame(['null', undefined, 'file.js', 3, 4]); - expect(errback).not.toHaveBeenCalled(); - }); + done(); + } }); }); describe('#generateArtificially', function () { - it('gets stacktrace from current location', function () { - runs(function testGenerateArtificially() { - var stackFrameFilter = function (stackFrame) { - return stackFrame.getFunctionName() && - stackFrame.getFunctionName().indexOf('testGenerateArtificially') > -1; - }; + it('gets stacktrace from current location', function (done) { + var stackFrameFilter = function (stackFrame) { + return stackFrame.getFunctionName() && + stackFrame.getFunctionName().indexOf('testGenerateArtificially') > -1; + }; + + (function testGenerateArtificially() { StackTrace.generateArtificially({filter: stackFrameFilter}) - .then(callback, errback)['catch'](errback); - }); - waits(100); - runs(function () { - expect(callback).toHaveBeenCalled(); - expect(callback.mostRecentCall.args[0][0]).toMatchStackFrame(['testGenerateArtificially', []]); - expect(errback).not.toHaveBeenCalled(); - }); + .then(callback, done.fail)['catch'](done.fail); + })(); + + function callback(stackFrames) { + expect(stackFrames[0]).toMatchStackFrame(['testGenerateArtificially', []]); + done(); + } }); }); @@ -150,43 +106,37 @@ describe('StackTrace', function () { .toThrow(new Error('Cannot instrument non-function object')); }); - it('wraps given function and calls given callback when called', function() { - runs(function() { - function interestingFn() { return 'something'; } - var wrapped = StackTrace.instrument(interestingFn, callback, errback); - wrapped(); - }); - waits(100); - runs(function() { - expect(errback).not.toHaveBeenCalled(); - expect(callback).toHaveBeenCalled(); - if (callback.mostRecentCall.args[0][0].fileName) { // Work around IE9- - expect(callback.mostRecentCall.args[0][0].fileName).toMatch('stacktrace-spec.js'); + it('wraps given function and calls given callback when called', function(done) { + function interestingFn() { return 'something'; } + var wrapped = StackTrace.instrument(interestingFn, callback, done.fail); + wrapped(); + + function callback(stackFrames) { + if (stackFrames[0].fileName) { // Work around IE9- + expect(stackFrames[0].fileName).toMatch('stacktrace-spec.js'); } - }); + done(); + } }); - it('calls callback with stack trace when wrapped function throws an Error', function() { - runs(function() { - function interestingFn() { throw new Error('BOOM'); } - var wrapped = StackTrace.instrument(interestingFn, callback, errback); - - // Exception should be re-thrown from instrument - expect(function() { wrapped(); }).toThrow(new Error('BOOM')); - }); - waits(100); - runs(function() { - expect(errback).not.toHaveBeenCalled(); - expect(callback).toHaveBeenCalled(); - if (callback.mostRecentCall.args[0][0].fileName) { // Work around IE9- - expect(callback.mostRecentCall.args[0][0].fileName).toMatch('stacktrace-spec.js'); + it('calls callback with stack trace when wrapped function throws an Error', function(done) { + function interestingFn() { throw new Error('BOOM'); } + var wrapped = StackTrace.instrument(interestingFn, callback, done.fail); + + // Exception should be re-thrown from instrument + expect(function() { wrapped(); }).toThrow(new Error('BOOM')); + + function callback(stackFrames) { + if (stackFrames[0].fileName) { // Work around IE9- + expect(stackFrames[0].fileName).toMatch('stacktrace-spec.js'); } - }); + done(); + } }); it('does not re-instrument already instrumented function', function() { function interestingFn() { return 'something'; } - var wrapped = StackTrace.instrument(interestingFn, callback, errback); + var wrapped = StackTrace.instrument(interestingFn); expect(StackTrace.instrument(wrapped)).toEqual(wrapped); }); }); @@ -215,46 +165,36 @@ describe('StackTrace', function () { }); describe('#report', function () { - var server; - beforeEach(function () { - server = sinon.fakeServer.create(); + beforeEach(function() { + jasmine.Ajax.install(); }); - afterEach(function () { - server.restore(); + afterEach(function() { + jasmine.Ajax.uninstall(); }); - it('sends POST request to given URL', function () { + it('sends POST request to given URL', function (done) { var url = 'http://domain.ext/endpoint'; var stackframes = [new StackFrame('fn', undefined, 'file.js', 32, 1)]; - runs(function () { - server.respondWith('POST', url, [201, {'Content-Type': 'text/plain'}, 'OK']); - StackTrace.report(stackframes, url).then(callback, errback)['catch'](errback); - server.respond(); - }); - waits(100); - runs(function () { - var expectedResponse = JSON.stringify({stack: stackframes}); - expect(server.requests[0].requestBody).toEqual(expectedResponse); - expect(server.requests[0].url).toEqual(url); - expect(callback).toHaveBeenCalledWith('OK'); - expect(errback).not.toHaveBeenCalled(); - }); + StackTrace.report(stackframes, url).then(callback, done.fail)['catch'](done.fail); + + var postRequest = jasmine.Ajax.requests.mostRecent(); + postRequest.respondWith({status: 201, contentType: 'text/plain', responseText: 'OK'}); + + function callback() { + expect(postRequest.data()).toEqual({stack: stackframes}); + expect(postRequest.method).toBe('post'); + expect(postRequest.url).toBe(url); + done(); + } }); - it('rejects if POST request fails', function () { - runs(function () { - var url = 'http://domain.ext/endpoint'; - var stackframes = [new StackFrame('fn', undefined, 'file.js', 32, 1)]; - server.respondWith('POST', url, [404, {'Content-Type': 'text/plain'}, '']); - StackTrace.report(stackframes, url).then(callback, errback)['catch'](errback); - server.respond(); - }); - waits(100); - runs(function () { - expect(callback).not.toHaveBeenCalled(); - expect(errback).toHaveBeenCalled(); - }); + it('rejects if POST request fails', function (done) { + var url = 'http://domain.ext/endpoint'; + var stackframes = [new StackFrame('fn', undefined, 'file.js', 32, 1)]; + + jasmine.Ajax.stubRequest(url).andError(); + StackTrace.report(stackframes, url).then(done.fail, done)['catch'](done); }); }); }); From 414288ff78678fe6bf7128eb2ec671d44cca7a32 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Wed, 23 Dec 2015 09:39:41 -0800 Subject: [PATCH 013/110] Rename stacktrace-with-polyfills to indicate type of polyfills included. Should fix #146. --- dist/stacktrace-with-polyfills.min.js | 3 --- dist/stacktrace-with-polyfills.min.js.map | 1 - dist/stacktrace-with-promises-and-json-polyfills.min.js | 3 +++ dist/stacktrace-with-promises-and-json-polyfills.min.js.map | 1 + dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- gulpfile.js | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) delete mode 100644 dist/stacktrace-with-polyfills.min.js delete mode 100644 dist/stacktrace-with-polyfills.min.js.map create mode 100644 dist/stacktrace-with-promises-and-json-polyfills.min.js create mode 100644 dist/stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace-with-polyfills.min.js b/dist/stacktrace-with-polyfills.min.js deleted file mode 100644 index 44cb7f1..0000000 --- a/dist/stacktrace-with-polyfills.min.js +++ /dev/null @@ -1,3 +0,0 @@ -(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function r(e){B=e}function o(e){z=e}function i(){return function(){process.nextTick(l)}}function a(){return function(){$(l)}}function s(){var e=0,t=new W(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;J>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}J=0}function f(){try{var e=require,t=e("vertx");return $=t.runOnLoop||t.runOnContext,a()}catch(n){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return te.error=t,te}}function d(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function y(e,t,n){z(function(e){var r=!1,o=d(n,t,function(n){r||(r=!0,t!==n?b(e,n):A(e,n))},function(t){r||(r=!0,C(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,C(e,o))},e)}function v(e,t){t._state===Q?A(e,t._result):t._state===ee?C(e,t._result):O(t,void 0,function(t){b(e,t)},function(t){C(e,t)})}function _(e,n){if(n.constructor===e.constructor)v(e,n);else{var r=m(n);r===te?C(e,te.error):void 0===r?A(e,n):t(r)?y(e,n,r):A(e,n)}}function b(t,n){t===n?C(t,h()):e(n)?_(t,n):A(t,n)}function w(e){e._onerror&&e._onerror(e._result),S(e)}function A(e,t){e._state===K&&(e._result=t,e._state=Q,0!==e._subscribers.length&&z(S,e))}function C(e,t){e._state===K&&(e._state=ee,e._result=t,z(w,e))}function O(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+Q]=n,o[i+ee]=r,0===i&&e._state&&z(S,e)}function S(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)O(r.resolve(e[a]),void 0,t,n);return o}function P(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(p);return b(n,e),n}function k(e){var t=this,n=new t(p);return C(n,e),n}function R(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function U(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||R(),this instanceof U||F(),M(this,e))}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var D;D=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var $,B,q,I=D,J=0,z=({}.toString,function(e,t){X[J]=e,X[J+1]=t,J+=2,2===J&&(B?B(l):q())}),Z="undefined"!=typeof window?window:void 0,H=Z||{},W=H.MutationObserver||H.WebKitMutationObserver,Y="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=Y?i():W?s():V?u():void 0===Z&&"function"==typeof require?f():c();var K=void 0,Q=1,ee=2,te=new E,ne=new E;j.prototype._validateInput=function(e){return I(e)},j.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},j.prototype._init=function(){this._result=new Array(this.length)};var re=j;j.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===K&&t>o;o++)e._eachEntry(r[o],o)},j.prototype._eachEntry=function(e,t){var r=this,o=r._instanceConstructor;n(e)?e.constructor===o&&e._state!==K?(e._onerror=null,r._settledAt(e._state,t,e._result)):r._willSettleAt(o.resolve(e),t):(r._remaining--,r._result[t]=e)},j.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===K&&(r._remaining--,e===ee?C(o,n):r._result[t]=n),0===r._remaining&&A(o,r._result)},j.prototype._willSettleAt=function(e,t){var n=this;O(e,void 0,function(e){n._settledAt(Q,t,e)},function(e){n._settledAt(ee,t,e)})};var oe=T,ie=x,ae=P,se=k,ue=0,ce=U;U.all=oe,U.race=ie,U.resolve=ae,U.reject=se,U._setScheduler=r,U._setAsap=o,U._asap=z,U.prototype={constructor:U,then:function(e,t){var n=this,r=n._state;if(r===Q&&!e||r===ee&&!t)return this;var o=new this.constructor(p),i=n._result;if(r){var a=arguments[r-1];z(function(){L(r,o,a,i)})}else O(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=G,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==d)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===d&&u(d)===d&&u()===d&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([d])&&"null"==u(null)&&"[null,null,null]"==u([d,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,m,d,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(b){}if(!i("json")){var w="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return M[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?m=2==a?function(e,t){var n,r={},o=v.call(e)==w;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==w;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var r,i,a=v.call(e)==w,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),m(e,t)},!i("json-stringify")){var T={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},x="000000",P=function(e,t){return(x+(t||0)).slice(-e)},k="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=T[a];break;default:if(32>a){t+=k+P(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,b,w,N,M,T,x,k,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=L((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,b=L(h/1e3)%60,w=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),b=s.getUTCSeconds(),w=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+P(6,0>c?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,y)+":"+P(2,_)+":"+P(2,b)+"."+P(3,w)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(x=a.length;x--;)if(a[x]===s)throw f();if(a.push(s),N=[],k=i,i+=o,u==S){for(T=0,x=s.length;x>T;T++)M=F(T,s,n,r,o,i,a),N.push(M===d?"null":M);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+k+"]":"["+N.join(",")+"]":"[]"}else m(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==d&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+k+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==w)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=$[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=D("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},I=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=q(),"]"!=e;n||(n=!0))n&&(","==e?(e=q(),"]"==e&&B()):B()),","==e&&B(),t.push(I(e));return t}if("{"==e){for(t={};e=q(),"}"!=e;n||(n=!0))n&&(","==e?(e=q(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=q())&&B(),t[e.slice(1)]=I(q());return t}B()}return e},J=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)J(o,r,n);else m(o,function(e){J(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=I(q()),"$"!=q()&&B(),U=G=null,t&&v.call(t)==w?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,m=0,d=0,y=e.length,v=0,_={},b={},w=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&w.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(w,s.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(m))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=s,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.'); -},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e,t,n){for(var r,o,i,a=/function\s+([^(]*?)\s*\(([^)]*)\)/,s=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=s.exec(l),o&&o[1])return o[1];if(o=a.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function a(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function s(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)r(new Error("The encoding of the inline sourcemap is not supported"));else{var a="data:".length+i.length+",".length,s=t.substr(a),u=window.atob(s);this.sourceCache[t]=u,n(u)}}else{var c=this.ajax(t,{method:"get"});this.sourceCache[t]=c,c.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,o){i(e),this._get(e.fileName).then(function(o){var i=r(o,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)["catch"](o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),i(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=a(o),c="data:"===i.substr(0,5);"/"===i[0]||c||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(s(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new u(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(n){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); -//# sourceMappingURL=stacktrace-with-polyfills.min.js.map diff --git a/dist/stacktrace-with-polyfills.min.js.map b/dist/stacktrace-with-polyfills.min.js.map deleted file mode 100644 index 061d389..0000000 --- a/dist/stacktrace-with-polyfills.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","h","f","d","_","v","y","b","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_get","offline","atob","method","pinpoint","getMappedLocation","findFunctionName","substring","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,h=s.length;h>p;p++){var f=s[p],m=new i;m.generatedLine=f.generatedLine,m.generatedColumn=f.generatedColumn,f.source&&(m.source=t.indexOf(f.source),m.originalLine=f.originalLine,m.originalColumn=f.originalColumn,f.name&&(m.name=r.indexOf(f.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,h=0,f=0,m=0,d=0,_=e.length,v=0,y={},b={},C=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&C.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(C,a.compareByOriginalPositions),this.__originalMappings=C},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function h(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var f=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(f)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=h},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=window.atob(a);this.sourceCache[n]=u,r(u)}}else{var l=this.ajax(n,{method:\"get\"});this.sourceCache[n]=l,l.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)[\"catch\"](o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js new file mode 100644 index 0000000..9159c72 --- /dev/null +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -0,0 +1,3 @@ +(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function r(e){U=e}function o(e){W=e}function i(){return function(){process.nextTick(l)}}function s(){return function(){D(l)}}function a(){var e=0,t=new H(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;z>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}z=0}function f(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,s()}catch(n){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return te.error=t,te}}function d(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){W(function(e){var r=!1,o=d(n,t,function(n){r||(r=!0,t!==n?w(e,n):A(e,n))},function(t){r||(r=!0,E(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,E(e,o))},e)}function _(e,t){t._state===Q?A(e,t._result):t._state===ee?E(e,t._result):O(t,void 0,function(t){w(e,t)},function(t){E(e,t)})}function y(e,n){if(n.constructor===e.constructor)_(e,n);else{var r=m(n);r===te?E(e,te.error):void 0===r?A(e,n):t(r)?v(e,n,r):A(e,n)}}function w(t,n){t===n?E(t,h()):e(n)?y(t,n):A(t,n)}function b(e){e._onerror&&e._onerror(e._result),C(e)}function A(e,t){e._state===K&&(e._result=t,e._state=Q,0!==e._subscribers.length&&W(C,e))}function E(e,t){e._state===K&&(e._state=ee,e._result=t,W(b,e))}function O(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+Q]=n,o[i+ee]=r,0===i&&e._state&&W(C,e)}function C(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)O(r.resolve(e[s]),void 0,t,n);return o}function R(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(p);return w(n,e),n}function j(e){var t=this,n=new t(p);return E(n,e),n}function T(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function G(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||T(),this instanceof G||F(),M(this,e))}function B(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,U,q,I=$,z=0,W=({}.toString,function(e,t){X[z]=e,X[z+1]=t,z+=2,2===z&&(U?U(l):q())}),J="undefined"!=typeof window?window:void 0,Z=J||{},H=Z.MutationObserver||Z.WebKitMutationObserver,V="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),Y="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=V?i():H?a():Y?u():void 0===J&&"function"==typeof require?f():c();var K=void 0,Q=1,ee=2,te=new S,ne=new S;k.prototype._validateInput=function(e){return I(e)},k.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},k.prototype._init=function(){this._result=new Array(this.length)};var re=k;k.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===K&&t>o;o++)e._eachEntry(r[o],o)},k.prototype._eachEntry=function(e,t){var r=this,o=r._instanceConstructor;n(e)?e.constructor===o&&e._state!==K?(e._onerror=null,r._settledAt(e._state,t,e._result)):r._willSettleAt(o.resolve(e),t):(r._remaining--,r._result[t]=e)},k.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===K&&(r._remaining--,e===ee?E(o,n):r._result[t]=n),0===r._remaining&&A(o,r._result)},k.prototype._willSettleAt=function(e,t){var n=this;O(e,void 0,function(e){n._settledAt(Q,t,e)},function(e){n._settledAt(ee,t,e)})};var oe=P,ie=x,se=R,ae=j,ue=0,ce=G;G.all=oe,G.race=ie,G.resolve=se,G.reject=ae,G._setScheduler=r,G._setAsap=o,G._asap=W,G.prototype={constructor:G,then:function(e,t){var n=this,r=n._state;if(r===Q&&!e||r===ee&&!t)return this;var o=new this.constructor(p),i=n._result;if(r){var s=arguments[r-1];W(function(){N(r,o,s,i)})}else O(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=B,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),s=0;o>s;){var a,u;s in r&&(a=r[s],u=e.call(n,a,s,r),i[s]=u),s++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var s=t[i];e.call(o,s,i,t)&&r.push(s)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var s;r in o&&(s=o[r],e.call(n,s,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new s(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),r=a.getArg(t,"sources"),o=a.getArg(t,"names",[]),i=a.getArg(t,"sourceRoot",null),s=a.getArg(t,"sourcesContent",null),u=a.getArg(t,"mappings"),l=a.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),o=a.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=a.getArg(e,"offset"),n=a.getArg(t,"line"),o=a.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var s=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=s.length;h>p;p++){var g=s[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,a.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,s,u,c=1,p=0,h=0,g=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],A=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(n=new i,n.generatedLine=c,s=_;v>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(_,s),o=y[r])_+=r.length;else{for(o=[];s>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=a.getArg(e,"source");if(null!=this.sourceRoot&&(t=a.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=a?"/":"."),i?(i.path=n,o(i)):n}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),s=r(e);if(s&&(e=s.path||"/"),n&&!n.scheme)return s&&(n.scheme=s.scheme),o(n);if(n||t.match(m))return t;if(s&&!s.host&&!s.path)return s.host=t,o(s);var a="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return s?(s.path=a,o(s)):a}function a(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=s,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=a,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,s,a){var u=Math.floor((r-e)/2)+e,c=s(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,s,a):a==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,s,a):a==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var s=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(r[s],r[s-1],!0);)--s;return s}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),s=5,a=1<>>=s,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,a,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(t++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(a&c),a&=u,f+=a<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&s>=e?e-i+l:e==a?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,s){if(s>i){var a=r(i,s),u=i-1;n(e,a,s);for(var c=e[s],l=i;s>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,s)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e,t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return t(r.responseText);n(new Error("Unable to retrieve "+e))}},r.send()}function r(e,t,n){for(var r,o,i,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=a.exec(l),o&&o[1])return o[1];if(o=s.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function a(n,r,o,i,s){var a=new e.SourceMapConsumer(n),u=a.originalPositionFor({line:o,column:i}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+i.length+",".length,a=t.substr(s),u=this._atob(a);this.sourceCache[t]=u,n(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,n(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,o){i(e),this._get(e.fileName).then(function(o){var i=r(o,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),i(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),c="data:"===i.substr(0,5);"/"===i[0]||c||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(a(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new u(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){ +var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",s=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(s,a,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(n){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +//# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map new file mode 100644 index 0000000..15c953b --- /dev/null +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["es6-promise.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","ES6Promise","bind","oThis","aArgs","slice","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","filter","t","res","val","push","forEach","n","amd","exports","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","String","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","p","JSON","parse","replace","sections","s","a","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","split","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","atob","Buffer","_get","offline","pinpoint","getMappedLocation","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index 4169161..65f7d4f 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i,o){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i),void 0!==o&&this.setSource(o)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new i(n)}function i(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),i=a.getArg(n,"names",[]),o=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return o&&a.isAbsolute(o)&&a.isAbsolute(e)?a.relative(o,e):e}),this._names=c.fromArray(i,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=s,this._mappings=u,this.file=l}function o(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),i=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var o={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),i=a.getArg(n,"column");if(t=0){var o=this._originalMappings[i];if(void 0===e.column)for(var s=o.originalLine;o&&o.originalLine===s;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i];else for(var c=o.originalColumn;o&&o.originalLine===n&&o.originalColumn==c;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var n=Object.create(i.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new o;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,n){for(var t,r,i,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new o,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),i=y[r])v+=r.length;else{for(i=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");y[r]=i}t.generatedColumn=p+i[0],p=t.generatedColumn,i.length>1&&(t.source=m+i[1],m+=i[1],t.originalLine=g+i[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+i[3],h=t.originalColumn,i.length>4&&(t.name=d+i[4],d+=i[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},i.prototype._findMapping=function(e,n,t,r,i,o){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,i,o)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[t];if(i.generatedLine===n.generatedLine){var o=a.getArg(i,"source",null);null!==o&&(o=this._sources.at(o),null!=this.sourceRoot&&(o=a.join(this.sourceRoot,o)));var s=a.getArg(i,"name",null);return null!==s&&(s=this._names.at(s)),{source:o,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},i.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===t.source)return{line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),o?(o.path=t,i(o)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),i(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,i(s);var a="/"===n.charAt(0)?n:o(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,i(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=i,n.normalize=o,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,i,o,s,a){var u=Math.floor((r-e)/2)+e,c=s(i,o[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,i,o,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,i,o,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,e,r,i,o||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var i=t(1);r.fromArray=function(e,n){for(var t=new r,i=0,o=e.length;o>i;i++)t.add(e[i],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=i.toSetString(e),r=this._set.hasOwnProperty(t),o=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=o)},r.prototype.has=function(e){var n=i.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=i.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var n=1===(1&e),t=e>>1;return n?-t:t}var o=t(5),s=5,a=1<>>=s,i>0&&(n|=c),t+=o.encode(n);while(i>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=o.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&i>=e?e-r+c:e>=o&&s>=e?e-o+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,o,s){if(s>o){var a=r(o,s),u=o-1;t(e,a,s);for(var c=e[s],l=o;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;i(e,n,o,f-1),i(e,n,f+1,s)}}n.quickSort=function(e,n){i(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e,n,t){for(var r,i,o,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=a.exec(l),i&&i[1])return i[1];if(i=s.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function o(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(t,r,i,o,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:i,column:o}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=t,this._get=function(n){return new Promise(function(t,r){var i="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(n.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+o.length+",".length,a=n.substr(s),u=window.atob(a);this.sourceCache[n]=u,t(u)}}else{var c=this.ajax(n,{method:"get"});this.sourceCache[n]=c,c.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,i){o(e),this._get(e.fileName).then(function(i){var o=r(i,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},i)["catch"](i)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),o(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(i){var o=s(i),c="data:"===o.substr(0,5);"/"===o[0]||c||(o=u.substring(0,u.lastIndexOf("/")+1)+o),this._get(o).then(function(t){var i=e.lineNumber,o=e.columnNumber;n(a(t,e.args,i,o,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new u(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var i=arguments.callee;i&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),i=[],o=2,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),i=[],o=0,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",s=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(t=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,i[0],i[1],i[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return i(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,i){return i=r(o,i),new Promise(function(r){var o=e.parse(n);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(n){function r(t){n(e)}new t(i).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(n,t)["catch"](t),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):r(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json"),i.send(JSON.stringify({stack:e}))})}}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i,o){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i),void 0!==o&&this.setSource(o)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new i(n)}function i(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),i=a.getArg(n,"names",[]),o=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return o&&a.isAbsolute(o)&&a.isAbsolute(e)?a.relative(o,e):e}),this._names=c.fromArray(i,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=s,this._mappings=u,this.file=l}function o(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),i=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var o={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),i=a.getArg(n,"column");if(t=0){var o=this._originalMappings[i];if(void 0===e.column)for(var s=o.originalLine;o&&o.originalLine===s;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i];else for(var c=o.originalColumn;o&&o.originalLine===n&&o.originalColumn==c;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var n=Object.create(i.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new o;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,n){for(var t,r,i,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new o,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),i=y[r])v+=r.length;else{for(i=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");y[r]=i}t.generatedColumn=p+i[0],p=t.generatedColumn,i.length>1&&(t.source=m+i[1],m+=i[1],t.originalLine=g+i[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+i[3],h=t.originalColumn,i.length>4&&(t.name=d+i[4],d+=i[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},i.prototype._findMapping=function(e,n,t,r,i,o){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,i,o)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[t];if(i.generatedLine===n.generatedLine){var o=a.getArg(i,"source",null);null!==o&&(o=this._sources.at(o),null!=this.sourceRoot&&(o=a.join(this.sourceRoot,o)));var s=a.getArg(i,"name",null);return null!==s&&(s=this._names.at(s)),{source:o,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},i.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===t.source)return{line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),o?(o.path=t,i(o)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),i(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,i(s);var a="/"===n.charAt(0)?n:o(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,i(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=i,n.normalize=o,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,i,o,s,a){var u=Math.floor((r-e)/2)+e,c=s(i,o[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,i,o,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,i,o,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,e,r,i,o||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var i=t(1);r.fromArray=function(e,n){for(var t=new r,i=0,o=e.length;o>i;i++)t.add(e[i],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=i.toSetString(e),r=this._set.hasOwnProperty(t),o=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=o)},r.prototype.has=function(e){var n=i.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=i.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var n=1===(1&e),t=e>>1;return n?-t:t}var o=t(5),s=5,a=1<>>=s,i>0&&(n|=c),t+=o.encode(n);while(i>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=o.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&i>=e?e-r+c:e>=o&&s>=e?e-o+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,o,s){if(s>o){var a=r(o,s),u=o-1;t(e,a,s);for(var c=e[s],l=o;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;i(e,n,o,f-1),i(e,n,f+1,s)}}n.quickSort=function(e,n){i(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e,n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return n(r.responseText);t(new Error("Unable to retrieve "+e))}},r.send()}function r(e,n,t){for(var r,i,o,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=a.exec(l),i&&i[1])return i[1];if(i=s.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function o(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(t,r,i,o,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:i,column:o}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=t,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(n){return new Promise(function(t,r){var i="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(n.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+o.length+",".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,i){o(e),this._get(e.fileName).then(function(i){var o=r(i,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},i)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),o(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(i){var o=s(i),c="data:"===o.substr(0,5);"/"===o[0]||c||(o=u.substring(0,u.lastIndexOf("/")+1)+o),this._get(o).then(function(t){var i=e.lineNumber,o=e.columnNumber;n(a(t,e.args,i,o,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new u(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var i=arguments.callee;i&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),i=[],o=2,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),i=[],o=0,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",s=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(t=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,i[0],i[1],i[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return i(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,i){return i=r(o,i),new Promise(function(r){var o=e.parse(n);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(n){function r(t){n(e)}new t(i).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(n,t)["catch"](t),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):r(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json"),i.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 9989aec..35e631a 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","h","length","f","d","_","v","y","b","C","A","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_get","offline","window","atob","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,h=s.length;h>p;p++){var f=s[p],m=new i;m.generatedLine=f.generatedLine,m.generatedColumn=f.generatedColumn,f.source&&(m.source=t.indexOf(f.source),m.originalLine=f.originalLine,m.originalColumn=f.originalColumn,f.name&&(m.name=r.indexOf(f.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,h=0,f=0,m=0,d=0,_=e.length,v=0,y={},b={},C=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&C.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(C,a.compareByOriginalPositions),this.__originalMappings=C},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function h(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var f=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(f)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=h},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=window.atob(a);this.sourceCache[n]=u,r(u)}}else{var l=this.ajax(n,{method:\"get\"});this.sourceCache[n]=l,l.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)[\"catch\"](o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","window","atob","Buffer","_get","Promise","offline","bind","pinpoint","getMappedLocation","then","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index e125df7..b744ed1 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -46,7 +46,7 @@ gulp.task('test-ci', ['dist'], function (done) { gulp.task('dist', function () { gulp.src(polyfills.concat(dependencies.concat(sources))) .pipe(sourcemaps.init()) - .pipe(concat(sources.replace('.js', '-with-polyfills.min.js'))) + .pipe(concat(sources.replace('.js', '-with-promises-and-json-polyfills.min.js'))) .pipe(uglify()) .pipe(sourcemaps.write('./')) .pipe(gulp.dest('dist')); From 3ab302525112b2ef8d40da0c9dd627ebb5a4b3d5 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 7 Feb 2016 22:14:24 -0800 Subject: [PATCH 014/110] Fix instrument() --- spec/stacktrace-spec.js | 2 +- stacktrace.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/stacktrace-spec.js b/spec/stacktrace-spec.js index 1fabc50..803d87a 100755 --- a/spec/stacktrace-spec.js +++ b/spec/stacktrace-spec.js @@ -109,7 +109,7 @@ describe('StackTrace', function () { it('wraps given function and calls given callback when called', function(done) { function interestingFn() { return 'something'; } var wrapped = StackTrace.instrument(interestingFn, callback, done.fail); - wrapped(); + expect(wrapped()).toBe('something'); function callback(stackFrames) { if (stackFrames[0].fileName) { // Work around IE9- diff --git a/stacktrace.js b/stacktrace.js index 20bf2ff..6796de9 100644 --- a/stacktrace.js +++ b/stacktrace.js @@ -127,7 +127,7 @@ var instrumented = function StackTrace$$instrumented() { try { this.get().then(callback, errback)['catch'](errback); - fn.apply(thisArg || this, arguments); + return fn.apply(thisArg || this, arguments); } catch (e) { if (_isShapedLikeParsableError(e)) { this.fromError(e).then(callback, errback)['catch'](errback); From d5f4061bed756bda61d0351dda62f5dfe76746b3 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 7 Feb 2016 22:15:23 -0800 Subject: [PATCH 015/110] Improve CI for PRs. Upgrade dependencies. --- .travis.yml | 24 +++++++++++++++--------- gulpfile.js | 8 ++++++++ karma.conf.ci.js | 2 +- karma.conf.js | 16 +++++++--------- package.json | 9 +++++---- 5 files changed, 36 insertions(+), 23 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8bcc50c..334db3c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,19 @@ language: node_js -node_js: -- '0.12' -script: gulp ci -install: -- npm install sudo: false +node_js: stable addons: sauce_connect: true -env: - global: - - secure: cBNumaXdO6q+sXCyrD0c/z++mGs7PdQBSTIbdPGF4U/4FtaLNp/I/GNrKNsfejWNlqlqaxPS/SjUdlDSdpHOVC6tSKYI6YWBMY/0ov4OPZWgMoX7WvB287MDi+627amz6REt1Cp4oaxep9xolMEO9l+FQYE5Dyu1PuJsgA/niWA= - - secure: HEualrdtngTaAR85L8ZANYyFgOgmLINwEXXk9h5cOrnWPcxNkrIiSmWJ9xxrZNosIQXa8vMEyE7MoRFFRd6bEX5UuIWEM36zoGDtAJpTXybAtHB4c2NKAKC3PlpCyl1lIdHzJQdYORs5KZRSBkA0eT0g8r5fkG/nh0y7/rhv95I= + firefox: latest + apt: + sources: + - google-chrome + packages: + - google-chrome-stable +before_install: +- export CHROME_BIN=chromium-browser +- export DISPLAY=:99.0 +- sh -e /etc/init.d/xvfb start +before_script: +- npm install +script: +- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then gulp ci; else gulp pr; fi diff --git a/gulpfile.js b/gulpfile.js index b744ed1..25c266c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -35,6 +35,14 @@ gulp.task('test', function (done) { server.start(); }); +gulp.task('test-pr', ['dist'], function (done) { + new karma.Server({ + configFile: __dirname + '/karma.conf.js', + browsers: ['Firefox', 'Chrome_Travis'], + singleRun: true + }, done).start(); +}); + gulp.task('test-ci', ['dist'], function (done) { var server = new karma.Server({ configFile: __dirname + '/karma.conf.ci.js', diff --git a/karma.conf.ci.js b/karma.conf.ci.js index 400848f..7413f07 100644 --- a/karma.conf.ci.js +++ b/karma.conf.ci.js @@ -50,7 +50,7 @@ module.exports = function (config) { base: 'SauceLabs', browserName: 'firefox', platform: 'Windows 8.1', - version: '42.0' + version: '43.0' }, slFirefoxDev: { base: 'SauceLabs', diff --git a/karma.conf.js b/karma.conf.js index 1d07c80..c59df21 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -12,19 +12,17 @@ module.exports = function (config) { 'spec/spec-helper.js', 'spec/*-spec.js' ], - reporters: ['progress', 'coverage'], - preprocessors: { - '*.js': 'coverage' - }, - coverageReporter: { - type: 'lcov', - dir: 'coverage' - }, + reporters: ['spec'], port: 9876, colors: true, logLevel: config.LOG_INFO, autoWatch: true, - // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + customLaunchers: { + Chrome_Travis: { + base: 'Chrome', + flags: ['--no-sandbox'] + } + }, //browsers: ['ChromeCanary', 'Firefox'], browsers: ['PhantomJS2'], singleRun: false diff --git a/package.json b/package.json index 9824ca7..8053556 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "Oliver Salzburg (https://github.com/oliversalzburg)" ], "version": "1.0.1", - "license": "SEE LICENSE IN LICENSE", + "license": "Unlicense", "keywords": [ "stacktrace", "error", @@ -15,14 +15,14 @@ "client", "browser" ], - "homepage": "http://www.stacktracejs.com", + "homepage": "https://www.stacktracejs.com", "repository": { "type": "git", "url": "git://github.com/stacktracejs/stacktrace.js.git" }, "dependencies": { "error-stack-parser": "~1.2", - "stack-generator": "~1", + "stack-generator": "~1.0", "stacktrace-gps": "~2" }, "devDependencies": { @@ -39,7 +39,7 @@ "jasmine-ajax": "^3.2.0", "jasmine-core": "^2.3.4", "json3": "^3.3.2", - "karma": "^0.13.9", + "karma": "^0.13.15", "karma-chrome-launcher": "^0.2.1", "karma-coverage": "^0.5.2", "karma-firefox-launcher": "^0.1.7", @@ -50,6 +50,7 @@ "karma-phantomjs2-launcher": "^0.3.2", "karma-safari-launcher": "^0.1.1", "karma-sauce-launcher": "^0.2.14", + "karma-spec-reporter": "0.0.23", "run-sequence": "^1.1.2" }, "bugs": { From 2e4125a389474efa7fb145d14baee9963e7fce99 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 7 Feb 2016 22:15:48 -0800 Subject: [PATCH 016/110] Improve docs for instrument(). Fixes #151 --- README.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b732e4d..ebd859e 100644 --- a/README.md +++ b/README.md @@ -54,12 +54,15 @@ StackTrace.generateArtificially().then(callback).catch(errback) #### Trace every time a given function is invoked ```js -// callback is called with an Array[StackFrame] every time -// the wrapped interestingFn is called -StackTrace.instrument(interestingFn, callback, errback) +// callback is called with an Array[StackFrame] every time wrapped function is called +var myFunc = function(arg) { return 'Hello ' + arg; } +var myWrappedFunc = StackTrace.instrument(myFunc, callback, errback) => Instrumented Function +myWrappedFunc('world'); +=> 'Hello world' -StackTrace.deinstrument(interestingFn) +// Use this if you overwrote you original function +myFunc = StackTrace.deinstrument(myFunc) => De-instrumented Function ``` @@ -147,6 +150,8 @@ I recommend the [stack-trace node package](https://www.npmjs.com/package/stack-t It has a very similar API and also supports source maps. ## Contributing +This project adheres to the [Open Code of Conduct](http://todogroup.org/opencodeofconduct/#stacktrace.js/me@eriwen.com). By participating, you are expected to honor this code. + Want to be listed as a *Contributor*? Start with the [Contributing Guide](https://github.com/stacktracejs/stacktrace.js/blob/master/CONTRIBUTING.md)! This project is made possible due to the efforts of these fine people: From 24cc2e05e662b3409923885a65291ab990b92787 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 7 Feb 2016 22:19:53 -0800 Subject: [PATCH 017/110] Release v1.0.2 --- dist/stacktrace-with-promises-and-json-polyfills.min.js | 2 +- dist/stacktrace-with-promises-and-json-polyfills.min.js.map | 2 +- dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index 9159c72..2072e2d 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ (function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function r(e){U=e}function o(e){W=e}function i(){return function(){process.nextTick(l)}}function s(){return function(){D(l)}}function a(){var e=0,t=new H(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;z>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}z=0}function f(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,s()}catch(n){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return te.error=t,te}}function d(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){W(function(e){var r=!1,o=d(n,t,function(n){r||(r=!0,t!==n?w(e,n):A(e,n))},function(t){r||(r=!0,E(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,E(e,o))},e)}function _(e,t){t._state===Q?A(e,t._result):t._state===ee?E(e,t._result):O(t,void 0,function(t){w(e,t)},function(t){E(e,t)})}function y(e,n){if(n.constructor===e.constructor)_(e,n);else{var r=m(n);r===te?E(e,te.error):void 0===r?A(e,n):t(r)?v(e,n,r):A(e,n)}}function w(t,n){t===n?E(t,h()):e(n)?y(t,n):A(t,n)}function b(e){e._onerror&&e._onerror(e._result),C(e)}function A(e,t){e._state===K&&(e._result=t,e._state=Q,0!==e._subscribers.length&&W(C,e))}function E(e,t){e._state===K&&(e._state=ee,e._result=t,W(b,e))}function O(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+Q]=n,o[i+ee]=r,0===i&&e._state&&W(C,e)}function C(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)O(r.resolve(e[s]),void 0,t,n);return o}function R(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(p);return w(n,e),n}function j(e){var t=this,n=new t(p);return E(n,e),n}function T(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function G(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||T(),this instanceof G||F(),M(this,e))}function B(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,U,q,I=$,z=0,W=({}.toString,function(e,t){X[z]=e,X[z+1]=t,z+=2,2===z&&(U?U(l):q())}),J="undefined"!=typeof window?window:void 0,Z=J||{},H=Z.MutationObserver||Z.WebKitMutationObserver,V="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),Y="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=V?i():H?a():Y?u():void 0===J&&"function"==typeof require?f():c();var K=void 0,Q=1,ee=2,te=new S,ne=new S;k.prototype._validateInput=function(e){return I(e)},k.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},k.prototype._init=function(){this._result=new Array(this.length)};var re=k;k.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===K&&t>o;o++)e._eachEntry(r[o],o)},k.prototype._eachEntry=function(e,t){var r=this,o=r._instanceConstructor;n(e)?e.constructor===o&&e._state!==K?(e._onerror=null,r._settledAt(e._state,t,e._result)):r._willSettleAt(o.resolve(e),t):(r._remaining--,r._result[t]=e)},k.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===K&&(r._remaining--,e===ee?E(o,n):r._result[t]=n),0===r._remaining&&A(o,r._result)},k.prototype._willSettleAt=function(e,t){var n=this;O(e,void 0,function(e){n._settledAt(Q,t,e)},function(e){n._settledAt(ee,t,e)})};var oe=P,ie=x,se=R,ae=j,ue=0,ce=G;G.all=oe,G.race=ie,G.resolve=se,G.reject=ae,G._setScheduler=r,G._setAsap=o,G._asap=W,G.prototype={constructor:G,then:function(e,t){var n=this,r=n._state;if(r===Q&&!e||r===ee&&!t)return this;var o=new this.constructor(p),i=n._result;if(r){var s=arguments[r-1];W(function(){N(r,o,s,i)})}else O(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=B,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),s=0;o>s;){var a,u;s in r&&(a=r[s],u=e.call(n,a,s,r),i[s]=u),s++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var s=t[i];e.call(o,s,i,t)&&r.push(s)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var s;r in o&&(s=o[r],e.call(n,s,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new s(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),r=a.getArg(t,"sources"),o=a.getArg(t,"names",[]),i=a.getArg(t,"sourceRoot",null),s=a.getArg(t,"sourcesContent",null),u=a.getArg(t,"mappings"),l=a.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),o=a.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=a.getArg(e,"offset"),n=a.getArg(t,"line"),o=a.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var s=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=s.length;h>p;p++){var g=s[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,a.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,s,u,c=1,p=0,h=0,g=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],A=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(n=new i,n.generatedLine=c,s=_;v>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(_,s),o=y[r])_+=r.length;else{for(o=[];s>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=a.getArg(e,"source");if(null!=this.sourceRoot&&(t=a.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=a?"/":"."),i?(i.path=n,o(i)):n}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),s=r(e);if(s&&(e=s.path||"/"),n&&!n.scheme)return s&&(n.scheme=s.scheme),o(n);if(n||t.match(m))return t;if(s&&!s.host&&!s.path)return s.host=t,o(s);var a="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return s?(s.path=a,o(s)):a}function a(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=s,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=a,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,s,a){var u=Math.floor((r-e)/2)+e,c=s(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,s,a):a==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,s,a):a==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var s=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(r[s],r[s-1],!0);)--s;return s}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),s=5,a=1<>>=s,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,a,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(t++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(a&c),a&=u,f+=a<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&s>=e?e-i+l:e==a?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,s){if(s>i){var a=r(i,s),u=i-1;n(e,a,s);for(var c=e[s],l=i;s>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,s)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e,t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return t(r.responseText);n(new Error("Unable to retrieve "+e))}},r.send()}function r(e,t,n){for(var r,o,i,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=a.exec(l),o&&o[1])return o[1];if(o=s.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function a(n,r,o,i,s){var a=new e.SourceMapConsumer(n),u=a.originalPositionFor({line:o,column:i}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+i.length+",".length,a=t.substr(s),u=this._atob(a);this.sourceCache[t]=u,n(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,n(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,o){i(e),this._get(e.fileName).then(function(o){var i=r(o,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),i(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),c="data:"===i.substr(0,5);"/"===i[0]||c||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(a(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new u(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){ -var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",s=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(s,a,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(n){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",s=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(s,a,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(n){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map index 15c953b..c94310c 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","ES6Promise","bind","oThis","aArgs","slice","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","filter","t","res","val","push","forEach","n","amd","exports","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","String","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","p","JSON","parse","replace","sections","s","a","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","split","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","atob","Buffer","_get","offline","pinpoint","getMappedLocation","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","ES6Promise","bind","oThis","aArgs","slice","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","filter","t","res","val","push","forEach","n","amd","exports","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","String","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","p","JSON","parse","replace","sections","s","a","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","split","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","atob","Buffer","_get","offline","pinpoint","getMappedLocation","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index 65f7d4f..63899e7 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i,o){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i),void 0!==o&&this.setSource(o)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new i(n)}function i(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),i=a.getArg(n,"names",[]),o=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return o&&a.isAbsolute(o)&&a.isAbsolute(e)?a.relative(o,e):e}),this._names=c.fromArray(i,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=s,this._mappings=u,this.file=l}function o(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),i=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var o={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),i=a.getArg(n,"column");if(t=0){var o=this._originalMappings[i];if(void 0===e.column)for(var s=o.originalLine;o&&o.originalLine===s;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i];else for(var c=o.originalColumn;o&&o.originalLine===n&&o.originalColumn==c;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var n=Object.create(i.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new o;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,n){for(var t,r,i,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new o,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),i=y[r])v+=r.length;else{for(i=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");y[r]=i}t.generatedColumn=p+i[0],p=t.generatedColumn,i.length>1&&(t.source=m+i[1],m+=i[1],t.originalLine=g+i[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+i[3],h=t.originalColumn,i.length>4&&(t.name=d+i[4],d+=i[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},i.prototype._findMapping=function(e,n,t,r,i,o){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,i,o)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[t];if(i.generatedLine===n.generatedLine){var o=a.getArg(i,"source",null);null!==o&&(o=this._sources.at(o),null!=this.sourceRoot&&(o=a.join(this.sourceRoot,o)));var s=a.getArg(i,"name",null);return null!==s&&(s=this._names.at(s)),{source:o,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},i.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===t.source)return{line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),o?(o.path=t,i(o)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),i(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,i(s);var a="/"===n.charAt(0)?n:o(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,i(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=i,n.normalize=o,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,i,o,s,a){var u=Math.floor((r-e)/2)+e,c=s(i,o[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,i,o,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,i,o,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,e,r,i,o||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var i=t(1);r.fromArray=function(e,n){for(var t=new r,i=0,o=e.length;o>i;i++)t.add(e[i],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=i.toSetString(e),r=this._set.hasOwnProperty(t),o=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=o)},r.prototype.has=function(e){var n=i.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=i.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var n=1===(1&e),t=e>>1;return n?-t:t}var o=t(5),s=5,a=1<>>=s,i>0&&(n|=c),t+=o.encode(n);while(i>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=o.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&i>=e?e-r+c:e>=o&&s>=e?e-o+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,o,s){if(s>o){var a=r(o,s),u=o-1;t(e,a,s);for(var c=e[s],l=o;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;i(e,n,o,f-1),i(e,n,f+1,s)}}n.quickSort=function(e,n){i(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e,n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return n(r.responseText);t(new Error("Unable to retrieve "+e))}},r.send()}function r(e,n,t){for(var r,i,o,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=a.exec(l),i&&i[1])return i[1];if(i=s.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function o(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(t,r,i,o,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:i,column:o}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=t,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(n){return new Promise(function(t,r){var i="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(n.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+o.length+",".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,i){o(e),this._get(e.fileName).then(function(i){var o=r(i,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},i)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),o(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(i){var o=s(i),c="data:"===o.substr(0,5);"/"===o[0]||c||(o=u.substring(0,u.lastIndexOf("/")+1)+o),this._get(o).then(function(t){var i=e.lineNumber,o=e.columnNumber;n(a(t,e.args,i,o,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new u(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var i=arguments.callee;i&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),i=[],o=2,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),i=[],o=0,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",s=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(t=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,i[0],i[1],i[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return i(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,i){return i=r(o,i),new Promise(function(r){var o=e.parse(n);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(n){function r(t){n(e)}new t(i).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(n,t)["catch"](t),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):r(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json"),i.send(JSON.stringify({stack:e}))})}}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i,o){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i),void 0!==o&&this.setSource(o)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new i(n)}function i(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),i=a.getArg(n,"names",[]),o=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return o&&a.isAbsolute(o)&&a.isAbsolute(e)?a.relative(o,e):e}),this._names=c.fromArray(i,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=s,this._mappings=u,this.file=l}function o(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),i=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var o={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),i=a.getArg(n,"column");if(t=0){var o=this._originalMappings[i];if(void 0===e.column)for(var s=o.originalLine;o&&o.originalLine===s;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i];else for(var c=o.originalColumn;o&&o.originalLine===n&&o.originalColumn==c;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var n=Object.create(i.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new o;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,n){for(var t,r,i,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new o,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),i=y[r])v+=r.length;else{for(i=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");y[r]=i}t.generatedColumn=p+i[0],p=t.generatedColumn,i.length>1&&(t.source=m+i[1],m+=i[1],t.originalLine=g+i[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+i[3],h=t.originalColumn,i.length>4&&(t.name=d+i[4],d+=i[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},i.prototype._findMapping=function(e,n,t,r,i,o){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,i,o)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[t];if(i.generatedLine===n.generatedLine){var o=a.getArg(i,"source",null);null!==o&&(o=this._sources.at(o),null!=this.sourceRoot&&(o=a.join(this.sourceRoot,o)));var s=a.getArg(i,"name",null);return null!==s&&(s=this._names.at(s)),{source:o,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},i.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===t.source)return{line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),o?(o.path=t,i(o)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),i(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,i(s);var a="/"===n.charAt(0)?n:o(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,i(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=i,n.normalize=o,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,i,o,s,a){var u=Math.floor((r-e)/2)+e,c=s(i,o[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,i,o,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,i,o,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,e,r,i,o||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var i=t(1);r.fromArray=function(e,n){for(var t=new r,i=0,o=e.length;o>i;i++)t.add(e[i],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=i.toSetString(e),r=this._set.hasOwnProperty(t),o=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=o)},r.prototype.has=function(e){var n=i.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=i.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var n=1===(1&e),t=e>>1;return n?-t:t}var o=t(5),s=5,a=1<>>=s,i>0&&(n|=c),t+=o.encode(n);while(i>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=o.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&i>=e?e-r+c:e>=o&&s>=e?e-o+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,o,s){if(s>o){var a=r(o,s),u=o-1;t(e,a,s);for(var c=e[s],l=o;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;i(e,n,o,f-1),i(e,n,f+1,s)}}n.quickSort=function(e,n){i(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e,n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return n(r.responseText);t(new Error("Unable to retrieve "+e))}},r.send()}function r(e,n,t){for(var r,i,o,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=a.exec(l),i&&i[1])return i[1];if(i=s.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function o(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(t,r,i,o,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:i,column:o}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=t,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(n){return new Promise(function(t,r){var i="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(n.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+o.length+",".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,i){o(e),this._get(e.fileName).then(function(i){var o=r(i,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},i)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),o(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(i){var o=s(i),c="data:"===o.substr(0,5);"/"===o[0]||c||(o=u.substring(0,u.lastIndexOf("/")+1)+o),this._get(o).then(function(t){var i=e.lineNumber,o=e.columnNumber;n(a(t,e.args,i,o,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new u(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var i=arguments.callee;i&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),i=[],o=2,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),i=[],o=0,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",s=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(t=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,i[0],i[1],i[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return i(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,i){return i=r(o,i),new Promise(function(r){var o=e.parse(n);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(n){function r(t){n(e)}new t(i).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(n,t)["catch"](t),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):r(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json"),i.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 35e631a..85c6a48 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","window","atob","Buffer","_get","Promise","offline","bind","pinpoint","getMappedLocation","then","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","window","atob","Buffer","_get","Promise","offline","bind","pinpoint","getMappedLocation","then","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/package.json b/package.json index 8053556..d283ea9 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "Victor Homyakov (https://github.com/victor-homyakov)", "Oliver Salzburg (https://github.com/oliversalzburg)" ], - "version": "1.0.1", + "version": "1.0.2", "license": "Unlicense", "keywords": [ "stacktrace", From 4dd4e9338f67abe0f7e790b766d45166afd35bca Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 7 Feb 2016 22:44:02 -0800 Subject: [PATCH 018/110] Add jscs and fix all warnings. --- .editorconfig | 8 +++-- .jscsrc | 28 +++++++++++++++++ gulpfile.js | 14 ++++----- package.json | 1 + spec/stacktrace-spec.js | 70 ++++++++++++++++++++++++++--------------- stacktrace.js | 46 ++++++++++++++------------- 6 files changed, 112 insertions(+), 55 deletions(-) create mode 100644 .jscsrc diff --git a/.editorconfig b/.editorconfig index 93a20e5..f7d5bf6 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,13 +10,17 @@ charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true -[*.js] +[*.{js,json}] indent_style = space indent_size = 4 -[*.json] +[.{jshintrc,jscsrc}] indent_style = space indent_size = 4 +[*.{yml,yaml}] +indent_style = space +indent_size = 2 + [*.md] trim_trailing_whitespace = false diff --git a/.jscsrc b/.jscsrc new file mode 100644 index 0000000..21f8767 --- /dev/null +++ b/.jscsrc @@ -0,0 +1,28 @@ +{ + "preset": "google", + "fileExtensions": [ + ".js" + ], + "requireSemicolons": true, + "requireParenthesesAroundIIFE": true, + "maximumLineLength": 120, + "validateLineBreaks": "LF", + "validateIndentation": 4, + "disallowTrailingComma": true, + "disallowSpacesInsideObjectBrackets": null, + "disallowImplicitTypeConversion": [ + "string" + ], + "jsDoc": { + "checkAnnotations": "closurecompiler", + "checkParamNames": true, + "requireParamTypes": true, + "checkRedundantParams": true, + "checkReturnTypes": true, + "checkRedundantReturns": true, + "requireReturnTypes": true, + "checkTypes": "capitalizedNativeCase", + "checkRedundantAccess": true, + "requireNewlineAfterDescription": true + } +} diff --git a/gulpfile.js b/gulpfile.js index 25c266c..33d4f3e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -20,14 +20,14 @@ var dependencies = [ ]; var sources = 'stacktrace.js'; -gulp.task('lint', function () { +gulp.task('lint', function() { return gulp.src(sources) .pipe(jshint()) .pipe(jshint.reporter('default')) .pipe(jshint.reporter('fail')); }); -gulp.task('test', function (done) { +gulp.task('test', function(done) { var server = new karma.Server({ configFile: __dirname + '/karma.conf.js', singleRun: true @@ -35,7 +35,7 @@ gulp.task('test', function (done) { server.start(); }); -gulp.task('test-pr', ['dist'], function (done) { +gulp.task('test-pr', ['dist'], function(done) { new karma.Server({ configFile: __dirname + '/karma.conf.js', browsers: ['Firefox', 'Chrome_Travis'], @@ -43,7 +43,7 @@ gulp.task('test-pr', ['dist'], function (done) { }, done).start(); }); -gulp.task('test-ci', ['dist'], function (done) { +gulp.task('test-ci', ['dist'], function(done) { var server = new karma.Server({ configFile: __dirname + '/karma.conf.ci.js', singleRun: true @@ -51,7 +51,7 @@ gulp.task('test-ci', ['dist'], function (done) { server.start(); }); -gulp.task('dist', function () { +gulp.task('dist', function() { gulp.src(polyfills.concat(dependencies.concat(sources))) .pipe(sourcemaps.init()) .pipe(concat(sources.replace('.js', '-with-promises-and-json-polyfills.min.js'))) @@ -69,11 +69,11 @@ gulp.task('dist', function () { gulp.task('clean', del.bind(null, ['build', 'coverage', 'dist'])); -gulp.task('ci', ['lint', 'test-ci'], function () { +gulp.task('ci', ['lint', 'test-ci'], function() { gulp.src('./coverage/**/lcov.info') .pipe(coveralls()); }); -gulp.task('default', ['clean'], function (cb) { +gulp.task('default', ['clean'], function(cb) { runSequence('lint', 'dist', 'test', cb); }); diff --git a/package.json b/package.json index d283ea9..7fa0cfb 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "jasmine": "^2.3.2", "jasmine-ajax": "^3.2.0", "jasmine-core": "^2.3.4", + "jscs": "^2.9.0", "json3": "^3.3.2", "karma": "^0.13.15", "karma-chrome-launcher": "^0.2.1", diff --git a/spec/stacktrace-spec.js b/spec/stacktrace-spec.js index 803d87a..fe4b211 100755 --- a/spec/stacktrace-spec.js +++ b/spec/stacktrace-spec.js @@ -1,13 +1,14 @@ +// jscs:disable maximumLineLength /* global Errors: false */ -describe('StackTrace', function () { +describe('StackTrace', function() { - beforeEach(function () { + beforeEach(function() { if (typeof Promise === 'undefined') { ES6Promise.polyfill(); } }); - describe('#get', function () { + describe('#get', function() { it('gets stacktrace from current location', function testStackTraceGet(done) { StackTrace.get().then(callback, done.fail)['catch'](done.fail); @@ -18,7 +19,7 @@ describe('StackTrace', function () { }); }); - describe('#fromError', function () { + describe('#fromError', function() { beforeEach(function() { jasmine.Ajax.install(); }); @@ -26,12 +27,12 @@ describe('StackTrace', function () { jasmine.Ajax.uninstall(); }); - it('rejects with Error given unparsable Error object', function (done) { + it('rejects with Error given unparsable Error object', function(done) { StackTrace.fromError({message: 'ERROR_MESSAGE'}) .then(done.fail)['catch'](done); }); - it('parses stacktrace from given Error object', function (done) { + it('parses stacktrace from given Error object', function(done) { jasmine.Ajax.stubRequest('http://path/to/file.js').andError(); StackTrace.fromError(Errors.IE_11) @@ -44,7 +45,7 @@ describe('StackTrace', function () { } }); - it('filters returned stack', function (done) { + it('filters returned stack', function(done) { function onlyFoos(stackFrame) { return stackFrame.functionName === 'foo'; } @@ -62,7 +63,7 @@ describe('StackTrace', function () { } }); - it('uses source maps to enhance stack frames', function (done) { + it('uses source maps to enhance stack frames', function(done) { var sourceCache = { 'http://path/to/file.js': 'function increment(){\nsomeVariable+=2;\nnull.x()\n}\nvar someVariable=2;increment();', 'http://path/to/file.min.js': 'function increment(){someVariable+=2;null.x()}var someVariable=2;increment();\n//# sourceMappingURL=file.min.js.map', @@ -81,9 +82,9 @@ describe('StackTrace', function () { }); }); - describe('#generateArtificially', function () { - it('gets stacktrace from current location', function (done) { - var stackFrameFilter = function (stackFrame) { + describe('#generateArtificially', function() { + it('gets stacktrace from current location', function(done) { + var stackFrameFilter = function(stackFrame) { return stackFrame.getFunctionName() && stackFrame.getFunctionName().indexOf('testGenerateArtificially') > -1; }; @@ -100,14 +101,19 @@ describe('StackTrace', function () { }); }); - describe('#instrument', function () { + describe('#instrument', function() { it('throws Error given non-function input', function() { - expect(function() { StackTrace.instrument('BOGUS'); }) + expect(function() { + StackTrace.instrument('BOGUS'); + }) .toThrow(new Error('Cannot instrument non-function object')); }); it('wraps given function and calls given callback when called', function(done) { - function interestingFn() { return 'something'; } + function interestingFn() { + return 'something'; + } + var wrapped = StackTrace.instrument(interestingFn, callback, done.fail); expect(wrapped()).toBe('something'); @@ -120,11 +126,16 @@ describe('StackTrace', function () { }); it('calls callback with stack trace when wrapped function throws an Error', function(done) { - function interestingFn() { throw new Error('BOOM'); } + function interestingFn() { + throw new Error('BOOM'); + } + var wrapped = StackTrace.instrument(interestingFn, callback, done.fail); // Exception should be re-thrown from instrument - expect(function() { wrapped(); }).toThrow(new Error('BOOM')); + expect(function() { + wrapped(); + }).toThrow(new Error('BOOM')); function callback(stackFrames) { if (stackFrames[0].fileName) { // Work around IE9- @@ -135,26 +146,35 @@ describe('StackTrace', function () { }); it('does not re-instrument already instrumented function', function() { - function interestingFn() { return 'something'; } + function interestingFn() { + return 'something'; + } + var wrapped = StackTrace.instrument(interestingFn); expect(StackTrace.instrument(wrapped)).toEqual(wrapped); }); }); - describe('#deinstrument', function () { - it('throws Error given non-function input', function () { - expect(function () { + describe('#deinstrument', function() { + it('throws Error given non-function input', function() { + expect(function() { StackTrace.deinstrument('BOGUS'); }).toThrow(new Error('Cannot de-instrument non-function object')); }); it('given unwrapped input, returns input', function() { - function interestingFn() { return 'something'; } + function interestingFn() { + return 'something'; + } + expect(StackTrace.deinstrument(interestingFn)).toEqual(interestingFn); }); it('de-instruments instrumented function', function() { - function interestingFn() { return 'something'; } + function interestingFn() { + return 'something'; + } + var wrapped = StackTrace.instrument(interestingFn); expect(wrapped.__stacktraceOriginalFn).toEqual(interestingFn); @@ -164,7 +184,7 @@ describe('StackTrace', function () { }); }); - describe('#report', function () { + describe('#report', function() { beforeEach(function() { jasmine.Ajax.install(); }); @@ -172,7 +192,7 @@ describe('StackTrace', function () { jasmine.Ajax.uninstall(); }); - it('sends POST request to given URL', function (done) { + it('sends POST request to given URL', function(done) { var url = 'http://domain.ext/endpoint'; var stackframes = [new StackFrame('fn', undefined, 'file.js', 32, 1)]; @@ -189,7 +209,7 @@ describe('StackTrace', function () { } }); - it('rejects if POST request fails', function (done) { + it('rejects if POST request fails', function(done) { var url = 'http://domain.ext/endpoint'; var stackframes = [new StackFrame('fn', undefined, 'file.js', 32, 1)]; diff --git a/stacktrace.js b/stacktrace.js index 6796de9..29bd5b0 100644 --- a/stacktrace.js +++ b/stacktrace.js @@ -1,4 +1,4 @@ -(function (root, factory) { +(function(root, factory) { 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. @@ -12,7 +12,7 @@ } }(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) { var _options = { - filter: function (stackframe) { + filter: function(stackframe) { // Filter out stackframes for this library by default return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 && (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 && @@ -24,15 +24,16 @@ /** * Merge 2 given Objects. If a conflict occurs the second object wins. * Does not do deep merges. - * @param first Object - * @param second Object - * @returns new Object merged first and second + * + * @param {Object} first base object + * @param {Object} second overrides + * @returns {Object} merged first and second * @private */ function _merge(first, second) { var target = {}; - [first, second].forEach(function (obj) { + [first, second].forEach(function(obj) { for (var prop in obj) { if (obj.hasOwnProperty(prop)) { target[prop] = obj[prop]; @@ -51,8 +52,9 @@ return { /** * Get a backtrace from invocation point. - * @param opts Options Object - * @return Array[StackFrame] + * + * @param {Object} opts + * @returns {Array} of StackFrame */ get: function StackTrace$$get(opts) { try { @@ -69,20 +71,21 @@ /** * Given an error object, parse it. - * @param error Error object - * @param opts Object for options - * @return Array[StackFrame] + * + * @param {Error} error object + * @param {Object} opts + * @returns {Promise} for Array[StackFrame} */ fromError: function StackTrace$$fromError(error, opts) { opts = _merge(_options, opts); - return new Promise(function (resolve) { + return new Promise(function(resolve) { var stackframes = ErrorStackParser.parse(error); if (typeof opts.filter === 'function') { stackframes = stackframes.filter(opts.filter); } - resolve(Promise.all(stackframes.map(function (sf) { - return new Promise(function (resolve) { - function resolveOriginal(_) { + resolve(Promise.all(stackframes.map(function(sf) { + return new Promise(function(resolve) { + function resolveOriginal() { resolve(sf); } @@ -95,8 +98,9 @@ /** * Use StackGenerator to generate a backtrace. - * @param opts Object options - * @returns Array[StackFrame] + * + * @param {Object} opts + * @returns {Promise} of Array[StackFrame] */ generateArtificially: function StackTrace$$generateArtificially(opts) { opts = _merge(_options, opts); @@ -144,7 +148,7 @@ * Given a function that has been instrumented, * revert the function to it's original (non-instrumented) state. * - * @param fn {Function} + * @param {Function} fn to de-instrument */ deinstrument: function StackTrace$$deinstrument(fn) { if (typeof fn !== 'function') { @@ -160,11 +164,11 @@ /** * Given an Array of StackFrames, serialize and POST to given URL. * - * @param stackframes - Array[StackFrame] - * @param url - URL as String + * @param {Array} stackframes + * @param {String} url */ report: function StackTrace$$report(stackframes, url) { - return new Promise(function (resolve, reject) { + return new Promise(function(resolve, reject) { var req = new XMLHttpRequest(); req.onerror = reject; req.onreadystatechange = function onreadystatechange() { From 187972d94756a5ff19aa364e64a659b5454aa162 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 14 Feb 2016 12:27:58 -0800 Subject: [PATCH 019/110] Upgrade stacktrace-gps and other dependencies. --- dist/stacktrace-with-promises-and-json-polyfills.min.js | 4 ++-- ...stacktrace-with-promises-and-json-polyfills.min.js.map | 2 +- dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- package.json | 8 ++++---- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index 2072e2d..c073b0f 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ -(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function r(e){U=e}function o(e){W=e}function i(){return function(){process.nextTick(l)}}function s(){return function(){D(l)}}function a(){var e=0,t=new H(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;z>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}z=0}function f(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,s()}catch(n){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return te.error=t,te}}function d(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){W(function(e){var r=!1,o=d(n,t,function(n){r||(r=!0,t!==n?w(e,n):A(e,n))},function(t){r||(r=!0,E(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,E(e,o))},e)}function _(e,t){t._state===Q?A(e,t._result):t._state===ee?E(e,t._result):O(t,void 0,function(t){w(e,t)},function(t){E(e,t)})}function y(e,n){if(n.constructor===e.constructor)_(e,n);else{var r=m(n);r===te?E(e,te.error):void 0===r?A(e,n):t(r)?v(e,n,r):A(e,n)}}function w(t,n){t===n?E(t,h()):e(n)?y(t,n):A(t,n)}function b(e){e._onerror&&e._onerror(e._result),C(e)}function A(e,t){e._state===K&&(e._result=t,e._state=Q,0!==e._subscribers.length&&W(C,e))}function E(e,t){e._state===K&&(e._state=ee,e._result=t,W(b,e))}function O(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+Q]=n,o[i+ee]=r,0===i&&e._state&&W(C,e)}function C(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)O(r.resolve(e[s]),void 0,t,n);return o}function R(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(p);return w(n,e),n}function j(e){var t=this,n=new t(p);return E(n,e),n}function T(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function G(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||T(),this instanceof G||F(),M(this,e))}function B(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,U,q,I=$,z=0,W=({}.toString,function(e,t){X[z]=e,X[z+1]=t,z+=2,2===z&&(U?U(l):q())}),J="undefined"!=typeof window?window:void 0,Z=J||{},H=Z.MutationObserver||Z.WebKitMutationObserver,V="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),Y="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=V?i():H?a():Y?u():void 0===J&&"function"==typeof require?f():c();var K=void 0,Q=1,ee=2,te=new S,ne=new S;k.prototype._validateInput=function(e){return I(e)},k.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},k.prototype._init=function(){this._result=new Array(this.length)};var re=k;k.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===K&&t>o;o++)e._eachEntry(r[o],o)},k.prototype._eachEntry=function(e,t){var r=this,o=r._instanceConstructor;n(e)?e.constructor===o&&e._state!==K?(e._onerror=null,r._settledAt(e._state,t,e._result)):r._willSettleAt(o.resolve(e),t):(r._remaining--,r._result[t]=e)},k.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===K&&(r._remaining--,e===ee?E(o,n):r._result[t]=n),0===r._remaining&&A(o,r._result)},k.prototype._willSettleAt=function(e,t){var n=this;O(e,void 0,function(e){n._settledAt(Q,t,e)},function(e){n._settledAt(ee,t,e)})};var oe=P,ie=x,se=R,ae=j,ue=0,ce=G;G.all=oe,G.race=ie,G.resolve=se,G.reject=ae,G._setScheduler=r,G._setAsap=o,G._asap=W,G.prototype={constructor:G,then:function(e,t){var n=this,r=n._state;if(r===Q&&!e||r===ee&&!t)return this;var o=new this.constructor(p),i=n._result;if(r){var s=arguments[r-1];W(function(){N(r,o,s,i)})}else O(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=B,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),s=0;o>s;){var a,u;s in r&&(a=r[s],u=e.call(n,a,s,r),i[s]=u),s++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var s=t[i];e.call(o,s,i,t)&&r.push(s)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var s;r in o&&(s=o[r],e.call(n,s,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new s(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),r=a.getArg(t,"sources"),o=a.getArg(t,"names",[]),i=a.getArg(t,"sourceRoot",null),s=a.getArg(t,"sourcesContent",null),u=a.getArg(t,"mappings"),l=a.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),o=a.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=a.getArg(e,"offset"),n=a.getArg(t,"line"),o=a.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var s=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=s.length;h>p;p++){var g=s[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,a.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,s,u,c=1,p=0,h=0,g=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],A=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(n=new i,n.generatedLine=c,s=_;v>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(_,s),o=y[r])_+=r.length;else{for(o=[];s>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=a.getArg(e,"source");if(null!=this.sourceRoot&&(t=a.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=a?"/":"."),i?(i.path=n,o(i)):n}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),s=r(e);if(s&&(e=s.path||"/"),n&&!n.scheme)return s&&(n.scheme=s.scheme),o(n);if(n||t.match(m))return t;if(s&&!s.host&&!s.path)return s.host=t,o(s);var a="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return s?(s.path=a,o(s)):a}function a(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=s,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=a,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,s,a){var u=Math.floor((r-e)/2)+e,c=s(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,s,a):a==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,s,a):a==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var s=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(r[s],r[s-1],!0);)--s;return s}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),s=5,a=1<>>=s,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,a,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(t++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(a&c),a&=u,f+=a<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&s>=e?e-i+l:e==a?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,s){if(s>i){var a=r(i,s),u=i-1;n(e,a,s);for(var c=e[s],l=i;s>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,s)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e,t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return t(r.responseText);n(new Error("Unable to retrieve "+e))}},r.send()}function r(e,t,n){for(var r,o,i,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=a.exec(l),o&&o[1])return o[1];if(o=s.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function a(n,r,o,i,s){var a=new e.SourceMapConsumer(n),u=a.originalPositionFor({line:o,column:i}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+i.length+",".length,a=t.substr(s),u=this._atob(a);this.sourceCache[t]=u,n(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,n(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,o){i(e),this._get(e.fileName).then(function(o){var i=r(o,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),i(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),c="data:"===i.substr(0,5);"/"===i[0]||c||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(a(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new u(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){ -var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",s=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(s,a,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(n){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){B=e}function r(e){z=e}function o(){return function(){process.nextTick(c)}}function i(){return function(){$(c)}}function s(){var e=0,t=new W(c),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function a(){var e=new MessageChannel;return e.port1.onmessage=c,function(){e.port2.postMessage(0)}}function u(){return function(){setTimeout(c,1)}}function c(){for(var e=0;I>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}I=0}function l(){try{var e=require,t=e("vertx");return $=t.runOnLoop||t.runOnContext,i()}catch(n){return u()}}function f(e,t){var n=this,r=n._state;if(r===te&&!e||r===ne&&!t)return this;var o=new this.constructor(h),i=n._result;if(r){var s=arguments[r-1];z(function(){M(r,o,s,i)})}else S(n,o,e,t);return o}function p(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(h);return b(n,e),n}function h(){}function g(){return new TypeError("You cannot resolve a promise with itself")}function m(){return new TypeError("A promises callback cannot return that same promise.")}function d(e){try{return e.then}catch(t){return re.error=t,re}}function y(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){z(function(e){var r=!1,o=y(n,t,function(n){r||(r=!0,t!==n?b(e,n):C(e,n))},function(t){r||(r=!0,O(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,O(e,o))},e)}function _(e,t){t._state===te?C(e,t._result):t._state===ne?O(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){O(e,t)})}function w(e,n,r){n.constructor===e.constructor&&r===K&&constructor.resolve===Q?_(e,n):r===re?O(e,re.error):void 0===r?C(e,n):t(r)?v(e,n,r):C(e,n)}function b(t,n){t===n?O(t,g()):e(n)?w(t,n,d(n)):C(t,n)}function A(e){e._onerror&&e._onerror(e._result),E(e)}function C(e,t){e._state===ee&&(e._result=t,e._state=te,0!==e._subscribers.length&&z(E,e))}function O(e,t){e._state===ee&&(e._state=ne,e._result=t,z(A,e))}function S(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+te]=n,o[i+ne]=r,0===i&&e._state&&z(E,e)}function E(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)S(r.resolve(e[s]),void 0,t,n);return o}function P(e){var t=this,n=new t(h);return O(n,e),n}function k(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],h!==e&&("function"!=typeof e&&k(),this instanceof F?j(this,e):R())}function U(e,t){this._instanceConstructor=e,this.promise=new e(h),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?C(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&C(this.promise,this._result))):O(this.promise,this._validationError())}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var D;D=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var $,B,q,J=D,I=0,z=function(e,t){X[I]=e,X[I+1]=t,I+=2,2===I&&(B?B(c):q())},Z="undefined"!=typeof window?window:void 0,H=Z||{},W=H.MutationObserver||H.WebKitMutationObserver,Y="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=Y?o():W?s():V?a():void 0===Z&&"function"==typeof require?l():u();var K=f,Q=p,ee=void 0,te=1,ne=2,re=new N,oe=new N,ie=T,se=x,ae=P,ue=0,ce=F;F.all=ie,F.race=se,F.resolve=Q,F.reject=ae,F._setScheduler=n,F._setAsap=r,F._asap=z,F.prototype={constructor:F,then:K,"catch":function(e){return this.then(null,e)}};var le=U;U.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},U.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ee&&e>n;n++)this._eachEntry(t[n],n)},U.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===Q){var o=d(e);if(o===K&&e._state!==ee)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ce){var i=new n(h);w(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},U.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ee&&(this._remaining--,e===ne?O(r,n):this._result[t]=n),0===this._remaining&&C(r,this._result)},U.prototype._willSettleAt=function(e,t){var n=this;S(e,void 0,function(e){n._settledAt(te,t,e)},function(e){n._settledAt(ne,t,e)})};var fe=G,pe={Promise:ce,polyfill:fe};"function"==typeof define&&define.amd?define(function(){return pe}):"undefined"!=typeof module&&module.exports?module.exports=pe:"undefined"!=typeof this&&(this.ES6Promise=pe),fe()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==d)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new s)&&'""'==u(new a)&&u(v)===d&&u(d)===d&&u()===d&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([d])&&"null"==u(null)&&"[null,null,null]"==u([d,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var s=t.Number||o.Number,a=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,m,d,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!i("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return M[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var r,o,i,s=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&s++;return r=o=null,s?m=2==s?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var r,i,s=v.call(e)==b,a=!s&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)s&&"prototype"==r||!a.call(e,r)||t(r);for(i=o.length;r=o[--i];a.call(e,r)&&t(r));}),m(e,t)},!i("json-stringify")){var T={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},x="000000",P=function(e,t){return(x+(t||0)).slice(-e)},k="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var s=e.charCodeAt(n);switch(s){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=T[s];break;default:if(32>s){t+=k+P(2,s.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,s){var a,u,c,l,p,h,y,_,w,b,N,M,T,x,k,U;try{a=t[e]}catch(G){}if("object"==typeof a&&a)if(u=v.call(a),u!=A||g.call(a,"toJSON"))"function"==typeof a.toJSON&&(u!=C&&u!=O&&u!=S||g.call(a,"toJSON"))&&(a=a.toJSON(e));else if(a>-1/0&&1/0>a){if(j){for(p=L(a/864e5),c=L(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=L((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(a%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,w=L(h/1e3)%60,b=h%1e3}else c=a.getUTCFullYear(),l=a.getUTCMonth(),p=a.getUTCDate(),y=a.getUTCHours(),_=a.getUTCMinutes(),w=a.getUTCSeconds(),b=a.getUTCMilliseconds();a=(0>=c||c>=1e4?(0>c?"-":"+")+P(6,0>c?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,y)+":"+P(2,_)+":"+P(2,w)+"."+P(3,b)+"Z"}else a=null;if(n&&(a=n.call(t,e,a)),null===a)return"null";if(u=v.call(a),u==E)return""+a;if(u==C)return a>-1/0&&1/0>a?""+a:"null";if(u==O)return R(""+a);if("object"==typeof a){for(x=s.length;x--;)if(s[x]===a)throw f();if(s.push(a),N=[],k=i,i+=o,u==S){for(T=0,x=a.length;x>T;T++)M=F(T,a,n,r,o,i,s),N.push(M===d?"null":M);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+k+"]":"["+N.join(",")+"]":"[]"}else m(r||a,function(e){var t=F(e,a,n,r,o,i,s);t!==d&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+k+"}":"{"+N.join(",")+"}":"{}";return s.pop(),U}};r.stringify=function(e,t,r){var o,i,s,a;if(n[typeof t]&&t)if((a=v.call(t))==b)i=t;else if(a==S){s={};for(var u,c=0,l=t.length;l>c;u=t[c++],a=v.call(u),(a==O||a==C)&&(s[u]=1));}if(r)if((a=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;s>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=$[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=D("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;s>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;s>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;s>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},J=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=q(),"]"!=e;n||(n=!0))n&&(","==e?(e=q(),"]"==e&&B()):B()),","==e&&B(),t.push(J(e));return t}if("{"==e){for(t={};e=q(),"}"!=e;n||(n=!0))n&&(","==e?(e=q(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=q())&&B(),t[e.slice(1)]=J(q());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else m(o,function(e){I(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=J(q()),"$"!=q()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var s=o.JSON,a=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=s,o.JSON3=a,s=a=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),s=0;o>s;){var a,u;s in r&&(a=r[s],u=e.call(n,a,s,r),i[s]=u),s++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var s=t[i];e.call(o,s,i,t)&&r.push(s)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var s;r in o&&(s=o[r],e.call(n,s,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new s(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),r=a.getArg(t,"sources"),o=a.getArg(t,"names",[]),i=a.getArg(t,"sourceRoot",null),s=a.getArg(t,"sourcesContent",null),u=a.getArg(t,"mappings"),l=a.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),o=a.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=a.getArg(e,"offset"),n=a.getArg(t,"line"),o=a.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var s=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=s.length;h>p;p++){var g=s[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,a.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,s,u,c=1,p=0,h=0,g=0,m=0,d=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,s=v;y>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),o=_[r])v+=r.length;else{for(o=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=a.getArg(e,"source");if(null!=this.sourceRoot&&(t=a.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=a?"/":"."),i?(i.path=n,o(i)):n}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),s=r(e);if(s&&(e=s.path||"/"),n&&!n.scheme)return s&&(n.scheme=s.scheme),o(n);if(n||t.match(m))return t;if(s&&!s.host&&!s.path)return s.host=t,o(s);var a="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return s?(s.path=a,o(s)):a}function a(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=s,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=a,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,s,a){var u=Math.floor((r-e)/2)+e,c=s(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,s,a):a==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,s,a):a==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var s=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(r[s],r[s-1],!0);)--s;return s}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e); +if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),s=5,a=1<>>=s,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,a,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(t++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(a&c),a&=u,f+=a<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&s>=e?e-i+l:e==a?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,s){if(s>i){var a=r(i,s),u=i-1;n(e,a,s);for(var c=e[s],l=i;s>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,s)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e,t,n){for(var r,o,i,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=a.exec(l),o&&o[1])return o[1];if(o=s.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function a(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function u(n,r,o,i,s){var a=new e.SourceMapConsumer(n),u=a.originalPositionFor({line:o,column:i}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,s=t.match(i);if(s){var a=s[0].length,u=t.substr(a),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var i=o(r,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){i(),s(e);var r=this.sourceCache,o=e.fileName;this._get(o).then(function(i){var s=a(i),c="data:"===s.substr(0,5);"/"===s[0]||c||(s=o.substring(0,o.lastIndexOf("/")+1)+s),this._get(s).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(u(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new c(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",s=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(s,a,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map index c94310c..351e742 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","ES6Promise","bind","oThis","aArgs","slice","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","filter","t","res","val","push","forEach","n","amd","exports","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","String","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","p","JSON","parse","replace","sections","s","a","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","split","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","atob","Buffer","_get","offline","pinpoint","getMappedLocation","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}}function i(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function s(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function a(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function u(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){s(e),this._get(e.fileName).then(function(t){var i=o(t,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){i(),s(e);var t=this.sourceCache,o=e.fileName;this._get(o).then(function(i){var s=a(i),l=\"data:\"===s.substr(0,5);\"/\"===s[0]||l||(s=o.substring(0,o.lastIndexOf(\"/\")+1)+s),this._get(s).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(u(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new l(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index 63899e7..822055a 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i,o){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i),void 0!==o&&this.setSource(o)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new i(n)}function i(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),i=a.getArg(n,"names",[]),o=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return o&&a.isAbsolute(o)&&a.isAbsolute(e)?a.relative(o,e):e}),this._names=c.fromArray(i,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=s,this._mappings=u,this.file=l}function o(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),i=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var o={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),i=a.getArg(n,"column");if(t=0){var o=this._originalMappings[i];if(void 0===e.column)for(var s=o.originalLine;o&&o.originalLine===s;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i];else for(var c=o.originalColumn;o&&o.originalLine===n&&o.originalColumn==c;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var n=Object.create(i.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new o;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,n){for(var t,r,i,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new o,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),i=y[r])v+=r.length;else{for(i=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");y[r]=i}t.generatedColumn=p+i[0],p=t.generatedColumn,i.length>1&&(t.source=m+i[1],m+=i[1],t.originalLine=g+i[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+i[3],h=t.originalColumn,i.length>4&&(t.name=d+i[4],d+=i[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},i.prototype._findMapping=function(e,n,t,r,i,o){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,i,o)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[t];if(i.generatedLine===n.generatedLine){var o=a.getArg(i,"source",null);null!==o&&(o=this._sources.at(o),null!=this.sourceRoot&&(o=a.join(this.sourceRoot,o)));var s=a.getArg(i,"name",null);return null!==s&&(s=this._names.at(s)),{source:o,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},i.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===t.source)return{line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),o?(o.path=t,i(o)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),i(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,i(s);var a="/"===n.charAt(0)?n:o(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,i(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=i,n.normalize=o,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,i,o,s,a){var u=Math.floor((r-e)/2)+e,c=s(i,o[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,i,o,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,i,o,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,e,r,i,o||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var i=t(1);r.fromArray=function(e,n){for(var t=new r,i=0,o=e.length;o>i;i++)t.add(e[i],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=i.toSetString(e),r=this._set.hasOwnProperty(t),o=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=o)},r.prototype.has=function(e){var n=i.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=i.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var n=1===(1&e),t=e>>1;return n?-t:t}var o=t(5),s=5,a=1<>>=s,i>0&&(n|=c),t+=o.encode(n);while(i>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=o.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&i>=e?e-r+c:e>=o&&s>=e?e-o+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,o,s){if(s>o){var a=r(o,s),u=o-1;t(e,a,s);for(var c=e[s],l=o;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;i(e,n,o,f-1),i(e,n,f+1,s)}}n.quickSort=function(e,n){i(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e,n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return n(r.responseText);t(new Error("Unable to retrieve "+e))}},r.send()}function r(e,n,t){for(var r,i,o,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=a.exec(l),i&&i[1])return i[1];if(i=s.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function o(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(t,r,i,o,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:i,column:o}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=t,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(n){return new Promise(function(t,r){var i="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(n.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+o.length+",".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,i){o(e),this._get(e.fileName).then(function(i){var o=r(i,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},i)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),o(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(i){var o=s(i),c="data:"===o.substr(0,5);"/"===o[0]||c||(o=u.substring(0,u.lastIndexOf("/")+1)+o),this._get(o).then(function(t){var i=e.lineNumber,o=e.columnNumber;n(a(t,e.args,i,o,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new u(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var i=arguments.callee;i&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),i=[],o=2,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),i=[],o=0,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",s=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(t=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,i[0],i[1],i[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return i(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,i){return i=r(o,i),new Promise(function(r){var o=e.parse(n);"function"==typeof i.filter&&(o=o.filter(i.filter)),r(Promise.all(o.map(function(e){return new Promise(function(n){function r(t){n(e)}new t(i).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(n,t)["catch"](t),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):r(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json"),i.send(JSON.stringify({stack:e}))})}}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),o=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),o=a.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new i,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),o=y[r])v+=r.length;else{for(o=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),i?(i.path=t,o(i)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),o(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,o,i,s,a){var u=Math.floor((r-e)/2)+e,c=s(o,i[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,o,i,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,o,i){if(0===r.length)return-1;var s=t(-1,r.length,e,r,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var o=t(1);r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=this._set.hasOwnProperty(t),i=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=i)},r.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=t(5),s=5,a=1<>>=s,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&s>=e?e-i+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=r(i,s),u=i-1;t(e,a,s);for(var c=e[s],l=i;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e,n,t){for(var r,o,i,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=a.exec(l),o&&o[1])return o[1];if(o=s.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function a(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function u(t,r,o,i,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:o,column:i}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var i=o(r,e.lineNumber,e.columnNumber);t(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),s(e);var r=this.sourceCache,o=e.fileName;this._get(o).then(function(i){var s=a(i),c="data:"===s.substr(0,5);"/"===s[0]||c||(s=o.substring(0,o.lastIndexOf("/")+1)+s),this._get(s).then(function(t){var o=e.lineNumber,i=e.columnNumber;n(u(t,e.args,o,i,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new c(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,s=r.length;s>i;i+=2){var a=t.exec(r[i]);a&&o.push(new e(void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,s=r.length;s>i;i+=2){var a=t.exec(r[i]);a&&o.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",s=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return o(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,o){return o=r(i,o),new Promise(function(r){var i=e.parse(n);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(n){function r(){n(e)}new t(o).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?t(o.responseText):r(new Error("POST to "+n+" failed with status: "+o.status)))},o.open("post",n),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 85c6a48..978371b 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","window","atob","Buffer","_get","Promise","offline","bind","pinpoint","getMappedLocation","then","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n * @param first Object\n * @param second Object\n * @returns new Object merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n * @param opts Options Object\n * @return Array[StackFrame]\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n * @param error Error object\n * @param opts Object for options\n * @return Array[StackFrame]\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function (resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal(_) {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n * @param opts Object options\n * @returns Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param fn {Function}\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param stackframes - Array[StackFrame]\n * @param url - URL as String\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}}function i(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function s(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function a(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function u(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){s(e),this._get(e.fileName).then(function(t){var i=o(t,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){i(),s(e);var t=this.sourceCache,o=e.fileName;this._get(o).then(function(i){var s=a(i),l=\"data:\"===s.substr(0,5);\"/\"===s[0]||l||(s=o.substring(0,o.lastIndexOf(\"/\")+1)+s),this._get(s).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(u(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new l(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/package.json b/package.json index 7fa0cfb..5935670 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "Victor Homyakov (https://github.com/victor-homyakov)", "Oliver Salzburg (https://github.com/oliversalzburg)" ], - "version": "1.0.2", + "version": "1.0.3", "license": "Unlicense", "keywords": [ "stacktrace", @@ -23,13 +23,13 @@ "dependencies": { "error-stack-parser": "~1.2", "stack-generator": "~1.0", - "stacktrace-gps": "~2" + "stacktrace-gps": "~2.4" }, "devDependencies": { "colors": "^1.1.2", "del": "^1.2.0", - "es6-promise": "^3.0.2", - "gulp": "^3.9.0", + "es6-promise": "^3.1.2", + "gulp": "^3.9.1", "gulp-concat": "^2.6.0", "gulp-coveralls": "^0.1.4", "gulp-jshint": "^1.12.0", From 584da6e7667a8d715f8d630096789cc536d89ceb Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 21 Feb 2016 21:56:02 -0800 Subject: [PATCH 020/110] Update dist with stacktrace-gps v2.4.1. --- dist/stacktrace-with-promises-and-json-polyfills.min.js | 4 ++-- dist/stacktrace-with-promises-and-json-polyfills.min.js.map | 2 +- dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index c073b0f..5852a17 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ -(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){B=e}function r(e){z=e}function o(){return function(){process.nextTick(c)}}function i(){return function(){$(c)}}function s(){var e=0,t=new W(c),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function a(){var e=new MessageChannel;return e.port1.onmessage=c,function(){e.port2.postMessage(0)}}function u(){return function(){setTimeout(c,1)}}function c(){for(var e=0;I>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}I=0}function l(){try{var e=require,t=e("vertx");return $=t.runOnLoop||t.runOnContext,i()}catch(n){return u()}}function f(e,t){var n=this,r=n._state;if(r===te&&!e||r===ne&&!t)return this;var o=new this.constructor(h),i=n._result;if(r){var s=arguments[r-1];z(function(){M(r,o,s,i)})}else S(n,o,e,t);return o}function p(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(h);return b(n,e),n}function h(){}function g(){return new TypeError("You cannot resolve a promise with itself")}function m(){return new TypeError("A promises callback cannot return that same promise.")}function d(e){try{return e.then}catch(t){return re.error=t,re}}function y(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){z(function(e){var r=!1,o=y(n,t,function(n){r||(r=!0,t!==n?b(e,n):C(e,n))},function(t){r||(r=!0,O(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,O(e,o))},e)}function _(e,t){t._state===te?C(e,t._result):t._state===ne?O(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){O(e,t)})}function w(e,n,r){n.constructor===e.constructor&&r===K&&constructor.resolve===Q?_(e,n):r===re?O(e,re.error):void 0===r?C(e,n):t(r)?v(e,n,r):C(e,n)}function b(t,n){t===n?O(t,g()):e(n)?w(t,n,d(n)):C(t,n)}function A(e){e._onerror&&e._onerror(e._result),E(e)}function C(e,t){e._state===ee&&(e._result=t,e._state=te,0!==e._subscribers.length&&z(E,e))}function O(e,t){e._state===ee&&(e._state=ne,e._result=t,z(A,e))}function S(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+te]=n,o[i+ne]=r,0===i&&e._state&&z(E,e)}function E(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)S(r.resolve(e[s]),void 0,t,n);return o}function P(e){var t=this,n=new t(h);return O(n,e),n}function k(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],h!==e&&("function"!=typeof e&&k(),this instanceof F?j(this,e):R())}function U(e,t){this._instanceConstructor=e,this.promise=new e(h),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?C(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&C(this.promise,this._result))):O(this.promise,this._validationError())}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var D;D=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var $,B,q,J=D,I=0,z=function(e,t){X[I]=e,X[I+1]=t,I+=2,2===I&&(B?B(c):q())},Z="undefined"!=typeof window?window:void 0,H=Z||{},W=H.MutationObserver||H.WebKitMutationObserver,Y="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=Y?o():W?s():V?a():void 0===Z&&"function"==typeof require?l():u();var K=f,Q=p,ee=void 0,te=1,ne=2,re=new N,oe=new N,ie=T,se=x,ae=P,ue=0,ce=F;F.all=ie,F.race=se,F.resolve=Q,F.reject=ae,F._setScheduler=n,F._setAsap=r,F._asap=z,F.prototype={constructor:F,then:K,"catch":function(e){return this.then(null,e)}};var le=U;U.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},U.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ee&&e>n;n++)this._eachEntry(t[n],n)},U.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===Q){var o=d(e);if(o===K&&e._state!==ee)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ce){var i=new n(h);w(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},U.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ee&&(this._remaining--,e===ne?O(r,n):this._result[t]=n),0===this._remaining&&C(r,this._result)},U.prototype._willSettleAt=function(e,t){var n=this;S(e,void 0,function(e){n._settledAt(te,t,e)},function(e){n._settledAt(ne,t,e)})};var fe=G,pe={Promise:ce,polyfill:fe};"function"==typeof define&&define.amd?define(function(){return pe}):"undefined"!=typeof module&&module.exports?module.exports=pe:"undefined"!=typeof this&&(this.ES6Promise=pe),fe()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==d)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new s)&&'""'==u(new a)&&u(v)===d&&u(d)===d&&u()===d&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([d])&&"null"==u(null)&&"[null,null,null]"==u([d,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var s=t.Number||o.Number,a=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,m,d,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!i("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return M[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var r,o,i,s=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&s++;return r=o=null,s?m=2==s?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var r,i,s=v.call(e)==b,a=!s&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)s&&"prototype"==r||!a.call(e,r)||t(r);for(i=o.length;r=o[--i];a.call(e,r)&&t(r));}),m(e,t)},!i("json-stringify")){var T={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},x="000000",P=function(e,t){return(x+(t||0)).slice(-e)},k="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var s=e.charCodeAt(n);switch(s){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=T[s];break;default:if(32>s){t+=k+P(2,s.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,s){var a,u,c,l,p,h,y,_,w,b,N,M,T,x,k,U;try{a=t[e]}catch(G){}if("object"==typeof a&&a)if(u=v.call(a),u!=A||g.call(a,"toJSON"))"function"==typeof a.toJSON&&(u!=C&&u!=O&&u!=S||g.call(a,"toJSON"))&&(a=a.toJSON(e));else if(a>-1/0&&1/0>a){if(j){for(p=L(a/864e5),c=L(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=L((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(a%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,w=L(h/1e3)%60,b=h%1e3}else c=a.getUTCFullYear(),l=a.getUTCMonth(),p=a.getUTCDate(),y=a.getUTCHours(),_=a.getUTCMinutes(),w=a.getUTCSeconds(),b=a.getUTCMilliseconds();a=(0>=c||c>=1e4?(0>c?"-":"+")+P(6,0>c?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,y)+":"+P(2,_)+":"+P(2,w)+"."+P(3,b)+"Z"}else a=null;if(n&&(a=n.call(t,e,a)),null===a)return"null";if(u=v.call(a),u==E)return""+a;if(u==C)return a>-1/0&&1/0>a?""+a:"null";if(u==O)return R(""+a);if("object"==typeof a){for(x=s.length;x--;)if(s[x]===a)throw f();if(s.push(a),N=[],k=i,i+=o,u==S){for(T=0,x=a.length;x>T;T++)M=F(T,a,n,r,o,i,s),N.push(M===d?"null":M);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+k+"]":"["+N.join(",")+"]":"[]"}else m(r||a,function(e){var t=F(e,a,n,r,o,i,s);t!==d&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+k+"}":"{"+N.join(",")+"}":"{}";return s.pop(),U}};r.stringify=function(e,t,r){var o,i,s,a;if(n[typeof t]&&t)if((a=v.call(t))==b)i=t;else if(a==S){s={};for(var u,c=0,l=t.length;l>c;u=t[c++],a=v.call(u),(a==O||a==C)&&(s[u]=1));}if(r)if((a=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;s>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=$[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=D("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;s>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;s>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;s>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},J=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=q(),"]"!=e;n||(n=!0))n&&(","==e?(e=q(),"]"==e&&B()):B()),","==e&&B(),t.push(J(e));return t}if("{"==e){for(t={};e=q(),"}"!=e;n||(n=!0))n&&(","==e?(e=q(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=q())&&B(),t[e.slice(1)]=J(q());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else m(o,function(e){I(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=J(q()),"$"!=q()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var s=o.JSON,a=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=s,o.JSON3=a,s=a=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),s=0;o>s;){var a,u;s in r&&(a=r[s],u=e.call(n,a,s,r),i[s]=u),s++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var s=t[i];e.call(o,s,i,t)&&r.push(s)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var s;r in o&&(s=o[r],e.call(n,s,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new s(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),r=a.getArg(t,"sources"),o=a.getArg(t,"names",[]),i=a.getArg(t,"sourceRoot",null),s=a.getArg(t,"sourcesContent",null),u=a.getArg(t,"mappings"),l=a.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),o=a.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=a.getArg(e,"offset"),n=a.getArg(t,"line"),o=a.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var s=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=s.length;h>p;p++){var g=s[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,a.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,s,u,c=1,p=0,h=0,g=0,m=0,d=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,s=v;y>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),o=_[r])v+=r.length;else{for(o=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=a.getArg(e,"source");if(null!=this.sourceRoot&&(t=a.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=a?"/":"."),i?(i.path=n,o(i)):n}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),s=r(e);if(s&&(e=s.path||"/"),n&&!n.scheme)return s&&(n.scheme=s.scheme),o(n);if(n||t.match(m))return t;if(s&&!s.host&&!s.path)return s.host=t,o(s);var a="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return s?(s.path=a,o(s)):a}function a(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=s,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=a,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,s,a){var u=Math.floor((r-e)/2)+e,c=s(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,s,a):a==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,s,a):a==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var s=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(r[s],r[s-1],!0);)--s;return s}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e); -if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),s=5,a=1<>>=s,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,a,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(t++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(a&c),a&=u,f+=a<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&s>=e?e-i+l:e==a?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,s){if(s>i){var a=r(i,s),u=i-1;n(e,a,s);for(var c=e[s],l=i;s>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,s)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e,t,n){for(var r,o,i,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=a.exec(l),o&&o[1])return o[1];if(o=s.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function a(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function u(n,r,o,i,s){var a=new e.SourceMapConsumer(n),u=a.originalPositionFor({line:o,column:i}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,s=t.match(i);if(s){var a=s[0].length,u=t.substr(a),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var i=o(r,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){i(),s(e);var r=this.sourceCache,o=e.fileName;this._get(o).then(function(i){var s=a(i),c="data:"===s.substr(0,5);"/"===s[0]||c||(s=o.substring(0,o.lastIndexOf("/")+1)+s),this._get(s).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(u(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new c(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",s=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(s,a,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){B=e}function r(e){z=e}function o(){return function(){process.nextTick(c)}}function i(){return function(){$(c)}}function s(){var e=0,t=new H(c),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function a(){var e=new MessageChannel;return e.port1.onmessage=c,function(){e.port2.postMessage(0)}}function u(){return function(){setTimeout(c,1)}}function c(){for(var e=0;I>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}I=0}function l(){try{var e=require,t=e("vertx");return $=t.runOnLoop||t.runOnContext,i()}catch(n){return u()}}function f(e,t){var n=this,r=n._state;if(r===te&&!e||r===ne&&!t)return this;var o=new this.constructor(h),i=n._result;if(r){var s=arguments[r-1];z(function(){M(r,o,s,i)})}else S(n,o,e,t);return o}function p(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(h);return b(n,e),n}function h(){}function g(){return new TypeError("You cannot resolve a promise with itself")}function m(){return new TypeError("A promises callback cannot return that same promise.")}function d(e){try{return e.then}catch(t){return re.error=t,re}}function y(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){z(function(e){var r=!1,o=y(n,t,function(n){r||(r=!0,t!==n?b(e,n):C(e,n))},function(t){r||(r=!0,O(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,O(e,o))},e)}function _(e,t){t._state===te?C(e,t._result):t._state===ne?O(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){O(e,t)})}function w(e,n,r){n.constructor===e.constructor&&r===K&&constructor.resolve===Q?_(e,n):r===re?O(e,re.error):void 0===r?C(e,n):t(r)?v(e,n,r):C(e,n)}function b(t,n){t===n?O(t,g()):e(n)?w(t,n,d(n)):C(t,n)}function A(e){e._onerror&&e._onerror(e._result),E(e)}function C(e,t){e._state===ee&&(e._result=t,e._state=te,0!==e._subscribers.length&&z(E,e))}function O(e,t){e._state===ee&&(e._state=ne,e._result=t,z(A,e))}function S(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+te]=n,o[i+ne]=r,0===i&&e._state&&z(E,e)}function E(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)S(r.resolve(e[s]),void 0,t,n);return o}function P(e){var t=this,n=new t(h);return O(n,e),n}function k(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],h!==e&&("function"!=typeof e&&k(),this instanceof F?j(this,e):R())}function U(e,t){this._instanceConstructor=e,this.promise=new e(h),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?C(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&C(this.promise,this._result))):O(this.promise,this._validationError())}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var D;D=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var $,B,J,q=D,I=0,z=function(e,t){X[I]=e,X[I+1]=t,I+=2,2===I&&(B?B(c):J())},Z="undefined"!=typeof window?window:void 0,Y=Z||{},H=Y.MutationObserver||Y.WebKitMutationObserver,W="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);J=W?o():H?s():V?a():void 0===Z&&"function"==typeof require?l():u();var K=f,Q=p,ee=void 0,te=1,ne=2,re=new N,oe=new N,ie=T,se=x,ae=P,ue=0,ce=F;F.all=ie,F.race=se,F.resolve=Q,F.reject=ae,F._setScheduler=n,F._setAsap=r,F._asap=z,F.prototype={constructor:F,then:K,"catch":function(e){return this.then(null,e)}};var le=U;U.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},U.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ee&&e>n;n++)this._eachEntry(t[n],n)},U.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===Q){var o=d(e);if(o===K&&e._state!==ee)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ce){var i=new n(h);w(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},U.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ee&&(this._remaining--,e===ne?O(r,n):this._result[t]=n),0===this._remaining&&C(r,this._result)},U.prototype._willSettleAt=function(e,t){var n=this;S(e,void 0,function(e){n._settledAt(te,t,e)},function(e){n._settledAt(ne,t,e)})};var fe=G,pe={Promise:ce,polyfill:fe};"function"==typeof define&&define.amd?define(function(){return pe}):"undefined"!=typeof module&&module.exports?module.exports=pe:"undefined"!=typeof this&&(this.ES6Promise=pe),fe()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==d)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new s)&&'""'==u(new a)&&u(v)===d&&u(d)===d&&u()===d&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([d])&&"null"==u(null)&&"[null,null,null]"==u([d,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var s=t.Number||o.Number,a=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,m,d,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!i("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return M[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var r,o,i,s=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&s++;return r=o=null,s?m=2==s?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var r,i,s=v.call(e)==b,a=!s&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)s&&"prototype"==r||!a.call(e,r)||t(r);for(i=o.length;r=o[--i];a.call(e,r)&&t(r));}),m(e,t)},!i("json-stringify")){var T={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},x="000000",P=function(e,t){return(x+(t||0)).slice(-e)},k="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var s=e.charCodeAt(n);switch(s){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=T[s];break;default:if(32>s){t+=k+P(2,s.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,s){var a,u,c,l,p,h,y,_,w,b,N,M,T,x,k,U;try{a=t[e]}catch(G){}if("object"==typeof a&&a)if(u=v.call(a),u!=A||g.call(a,"toJSON"))"function"==typeof a.toJSON&&(u!=C&&u!=O&&u!=S||g.call(a,"toJSON"))&&(a=a.toJSON(e));else if(a>-1/0&&1/0>a){if(j){for(p=L(a/864e5),c=L(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=L((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(a%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,w=L(h/1e3)%60,b=h%1e3}else c=a.getUTCFullYear(),l=a.getUTCMonth(),p=a.getUTCDate(),y=a.getUTCHours(),_=a.getUTCMinutes(),w=a.getUTCSeconds(),b=a.getUTCMilliseconds();a=(0>=c||c>=1e4?(0>c?"-":"+")+P(6,0>c?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,y)+":"+P(2,_)+":"+P(2,w)+"."+P(3,b)+"Z"}else a=null;if(n&&(a=n.call(t,e,a)),null===a)return"null";if(u=v.call(a),u==E)return""+a;if(u==C)return a>-1/0&&1/0>a?""+a:"null";if(u==O)return R(""+a);if("object"==typeof a){for(x=s.length;x--;)if(s[x]===a)throw f();if(s.push(a),N=[],k=i,i+=o,u==S){for(T=0,x=a.length;x>T;T++)M=F(T,a,n,r,o,i,s),N.push(M===d?"null":M);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+k+"]":"["+N.join(",")+"]":"[]"}else m(r||a,function(e){var t=F(e,a,n,r,o,i,s);t!==d&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+k+"}":"{"+N.join(",")+"}":"{}";return s.pop(),U}};r.stringify=function(e,t,r){var o,i,s,a;if(n[typeof t]&&t)if((a=v.call(t))==b)i=t;else if(a==S){s={};for(var u,c=0,l=t.length;l>c;u=t[c++],a=v.call(u),(a==O||a==C)&&(s[u]=1));}if(r)if((a=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;s>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=$[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=D("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;s>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;s>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;s>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else m(o,function(e){I(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=q(J()),"$"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var s=o.JSON,a=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=s,o.JSON3=a,s=a=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),s=0;o>s;){var a,u;s in r&&(a=r[s],u=e.call(n,a,s,r),i[s]=u),s++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var s=t[i];e.call(o,s,i,t)&&r.push(s)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var s;r in o&&(s=o[r],e.call(n,s,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new s(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),r=a.getArg(t,"sources"),o=a.getArg(t,"names",[]),i=a.getArg(t,"sourceRoot",null),s=a.getArg(t,"sourcesContent",null),u=a.getArg(t,"mappings"),l=a.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),o=a.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=a.getArg(e,"offset"),n=a.getArg(t,"line"),o=a.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var s=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=s.length;h>p;p++){var g=s[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,a.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,s,u,c=1,p=0,h=0,g=0,m=0,d=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,s=v;y>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),o=_[r])v+=r.length;else{for(o=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=a.getArg(e,"source");if(null!=this.sourceRoot&&(t=a.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=a?"/":"."),i?(i.path=n,o(i)):n}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),s=r(e);if(s&&(e=s.path||"/"),n&&!n.scheme)return s&&(n.scheme=s.scheme),o(n);if(n||t.match(m))return t;if(s&&!s.host&&!s.path)return s.host=t,o(s);var a="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return s?(s.path=a,o(s)):a}function a(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=s,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=a,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,s,a){var u=Math.floor((r-e)/2)+e,c=s(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,s,a):a==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,s,a):a==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var s=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(r[s],r[s-1],!0);)--s;return s}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e); +if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),s=5,a=1<>>=s,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,a,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(t++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(a&c),a&=u,f+=a<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&s>=e?e-i+l:e==a?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,s){if(s>i){var a=r(i,s),u=i-1;n(e,a,s);for(var c=e[s],l=i;s>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,s)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,s=e.split("\n"),a="",u=Math.min(t,20),c=0;u>c;++c){var l=s[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(a=l+a,n=o.exec(a),n&&n[1])return n[1];if(n=r.exec(a),n&&n[1])return n[1];if(n=i.exec(a),n&&n[1])return n[1]}}}function s(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,s){var a=new e.SourceMapConsumer(n),u=a.originalPositionFor({line:o,column:i}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,s=t.match(i);if(s){var a=s[0].length,u=t.substr(a),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){a(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){s(),a(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),l="data:"===a.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===a[0]||l||/^https?:\/\/|^\/\//i.test(a)||(a=f+a),this._get(a).then(function(n){var i=e.lineNumber,s=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,s,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",s=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(s,a,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map index 351e742..ca2e9b5 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}}function i(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function s(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function a(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function u(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){s(e),this._get(e.fileName).then(function(t){var i=o(t,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){i(),s(e);var t=this.sourceCache,o=e.fileName;this._get(o).then(function(i){var s=a(i),l=\"data:\"===s.substr(0,5);\"/\"===s[0]||l||(s=o.substring(0,o.lastIndexOf(\"/\")+1)+s),this._get(s).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(u(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new l(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","test","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index 822055a..f03bde3 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),o=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),o=a.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new i,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),o=y[r])v+=r.length;else{for(o=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),i?(i.path=t,o(i)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),o(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,o,i,s,a){var u=Math.floor((r-e)/2)+e,c=s(o,i[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,o,i,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,o,i){if(0===r.length)return-1;var s=t(-1,r.length,e,r,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var o=t(1);r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=this._set.hasOwnProperty(t),i=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=i)},r.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=t(5),s=5,a=1<>>=s,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&s>=e?e-i+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=r(i,s),u=i-1;t(e,a,s);for(var c=e[s],l=i;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e,n,t){for(var r,o,i,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=a.exec(l),o&&o[1])return o[1];if(o=s.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function a(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function u(t,r,o,i,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:o,column:i}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var i=o(r,e.lineNumber,e.columnNumber);t(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),s(e);var r=this.sourceCache,o=e.fileName;this._get(o).then(function(i){var s=a(i),c="data:"===s.substr(0,5);"/"===s[0]||c||(s=o.substring(0,o.lastIndexOf("/")+1)+s),this._get(s).then(function(t){var o=e.lineNumber,i=e.columnNumber;n(u(t,e.args,o,i,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new c(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,s=r.length;s>i;i+=2){var a=t.exec(r[i]);a&&o.push(new e(void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,s=r.length;s>i;i+=2){var a=t.exec(r[i]);a&&o.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",s=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return o(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,o){return o=r(i,o),new Promise(function(r){var i=e.parse(n);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(n){function r(){n(e)}new t(o).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?t(o.responseText):r(new Error("POST to "+n+" failed with status: "+o.status)))},o.open("post",n),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),o=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),o=a.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],O=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new i,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),o=y[r])v+=r.length;else{for(o=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),O.push(t),"number"==typeof t.originalLine&&b.push(t)}f(O,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=O,f(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),i?(i.path=t,o(i)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),o(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,o,i,s,a){var u=Math.floor((r-e)/2)+e,c=s(o,i[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,o,i,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,o,i){if(0===r.length)return-1;var s=t(-1,r.length,e,r,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var o=t(1);r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=this._set.hasOwnProperty(t),i=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=i)},r.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=t(5),s=5,a=1<>>=s,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&s>=e?e-i+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=r(i,s),u=i-1;t(e,a,s);for(var c=e[s],l=i;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var t,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,s=e.split("\n"),a="",u=Math.min(n,20),c=0;u>c;++c){var l=s[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(a=l+a,t=o.exec(a),t&&t[1])return t[1];if(t=r.exec(a),t&&t[1])return t[1];if(t=i.exec(a),t&&t[1])return t[1]}}}function s(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(t,r,o,i,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:o,column:i}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){a(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){s(),a(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),l="data:"===a.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===a[0]||l||/^https?:\/\/|^\/\//i.test(a)||(a=f+a),this._get(a).then(function(t){var i=e.lineNumber,s=e.columnNumber;"string"==typeof t&&(t=o(t.replace(/^\)\]\}'/,""))),"undefined"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,s,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new l(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,s=r.length;s>i;i+=2){var a=t.exec(r[i]);a&&o.push(new e(void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,s=r.length;s>i;i+=2){var a=t.exec(r[i]);a&&o.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",s=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return o(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,o){return o=r(i,o),new Promise(function(r){var i=e.parse(n);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(n){function r(){n(e)}new t(o).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?t(o.responseText):r(new Error("POST to "+n+" failed with status: "+o.status)))},o.open("post",n),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 978371b..b12c693 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}}function i(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function s(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function a(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function u(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){s(e),this._get(e.fileName).then(function(t){var i=o(t,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){i(),s(e);var t=this.sourceCache,o=e.fileName;this._get(o).then(function(i){var s=a(i),l=\"data:\"===s.substr(0,5);\"/\"===s[0]||l||(s=o.substring(0,o.lastIndexOf(\"/\")+1)+s),this._get(s).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(u(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new l(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","test","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file From a4ca77dd62878c1abf210b255f313f09ce58f186 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 21 Feb 2016 21:56:07 -0800 Subject: [PATCH 021/110] 1.0.4 --- package.json | 138 +++++++++++++++++++++++++-------------------------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/package.json b/package.json index 5935670..4aee78f 100644 --- a/package.json +++ b/package.json @@ -1,71 +1,71 @@ { - "name": "stacktrace-js", - "description": "Framework-agnostic, micro-library for getting stack traces in all environments", - "maintainers": [ - "Eric Wendelin (http://www.eriwen.com)", - "Victor Homyakov (https://github.com/victor-homyakov)", - "Oliver Salzburg (https://github.com/oliversalzburg)" - ], - "version": "1.0.3", - "license": "Unlicense", - "keywords": [ - "stacktrace", - "error", - "debugger", - "client", - "browser" - ], - "homepage": "https://www.stacktracejs.com", - "repository": { - "type": "git", - "url": "git://github.com/stacktracejs/stacktrace.js.git" - }, - "dependencies": { - "error-stack-parser": "~1.2", - "stack-generator": "~1.0", - "stacktrace-gps": "~2.4" - }, - "devDependencies": { - "colors": "^1.1.2", - "del": "^1.2.0", - "es6-promise": "^3.1.2", - "gulp": "^3.9.1", - "gulp-concat": "^2.6.0", - "gulp-coveralls": "^0.1.4", - "gulp-jshint": "^1.12.0", - "gulp-sourcemaps": "^1.5.2", - "gulp-uglify": "^1.5.1", - "jasmine": "^2.3.2", - "jasmine-ajax": "^3.2.0", - "jasmine-core": "^2.3.4", - "jscs": "^2.9.0", - "json3": "^3.3.2", - "karma": "^0.13.15", - "karma-chrome-launcher": "^0.2.1", - "karma-coverage": "^0.5.2", - "karma-firefox-launcher": "^0.1.7", - "karma-ie-launcher": "^0.2.0", - "karma-jasmine": "^0.3.6", - "karma-jasmine-ajax": "^0.1.13", - "karma-opera-launcher": "^0.3.0", - "karma-phantomjs2-launcher": "^0.3.2", - "karma-safari-launcher": "^0.1.1", - "karma-sauce-launcher": "^0.2.14", - "karma-spec-reporter": "0.0.23", - "run-sequence": "^1.1.2" - }, - "bugs": { - "url": "https://github.com/stacktracejs/stacktrace.js/issues" - }, - "main": "./stacktrace.js", - "files": [ - "LICENSE", - "CHANGELOG.md", - "README.md", - "stacktrace.js", - "dist/" - ], - "scripts": { - "test": "gulp test" - } + "name": "stacktrace-js", + "description": "Framework-agnostic, micro-library for getting stack traces in all environments", + "maintainers": [ + "Eric Wendelin (http://www.eriwen.com)", + "Victor Homyakov (https://github.com/victor-homyakov)", + "Oliver Salzburg (https://github.com/oliversalzburg)" + ], + "version": "1.0.4", + "license": "Unlicense", + "keywords": [ + "stacktrace", + "error", + "debugger", + "client", + "browser" + ], + "homepage": "https://www.stacktracejs.com", + "repository": { + "type": "git", + "url": "git://github.com/stacktracejs/stacktrace.js.git" + }, + "dependencies": { + "error-stack-parser": "~1.2", + "stack-generator": "~1.0", + "stacktrace-gps": "~2.4" + }, + "devDependencies": { + "colors": "^1.1.2", + "del": "^1.2.0", + "es6-promise": "^3.1.2", + "gulp": "^3.9.1", + "gulp-concat": "^2.6.0", + "gulp-coveralls": "^0.1.4", + "gulp-jshint": "^1.12.0", + "gulp-sourcemaps": "^1.5.2", + "gulp-uglify": "^1.5.1", + "jasmine": "^2.3.2", + "jasmine-ajax": "^3.2.0", + "jasmine-core": "^2.3.4", + "jscs": "^2.9.0", + "json3": "^3.3.2", + "karma": "^0.13.15", + "karma-chrome-launcher": "^0.2.1", + "karma-coverage": "^0.5.2", + "karma-firefox-launcher": "^0.1.7", + "karma-ie-launcher": "^0.2.0", + "karma-jasmine": "^0.3.6", + "karma-jasmine-ajax": "^0.1.13", + "karma-opera-launcher": "^0.3.0", + "karma-phantomjs2-launcher": "^0.3.2", + "karma-safari-launcher": "^0.1.1", + "karma-sauce-launcher": "^0.2.14", + "karma-spec-reporter": "0.0.23", + "run-sequence": "^1.1.2" + }, + "bugs": { + "url": "https://github.com/stacktracejs/stacktrace.js/issues" + }, + "main": "./stacktrace.js", + "files": [ + "LICENSE", + "CHANGELOG.md", + "README.md", + "stacktrace.js", + "dist/" + ], + "scripts": { + "test": "gulp test" + } } From a28e8759f4b95d669ea15a0c34281fa9b525f8fc Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Tue, 23 Feb 2016 21:55:55 -0800 Subject: [PATCH 022/110] Fix tests from stacktrace-gps update. --- spec/stacktrace-spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/stacktrace-spec.js b/spec/stacktrace-spec.js index fe4b211..5850d9d 100755 --- a/spec/stacktrace-spec.js +++ b/spec/stacktrace-spec.js @@ -76,7 +76,7 @@ describe('StackTrace', function() { function callback(stackFrames) { expect(stackFrames.length).toEqual(1); - expect(stackFrames[0]).toMatchStackFrame(['null', undefined, 'file.js', 3, 4]); + expect(stackFrames[0]).toMatchStackFrame(['increment', undefined, 'http://path/to/file.js', 3, 4]); done(); } }); From 5833321e604e91a30e7feee5518fe4e3c066076f Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Wed, 24 Feb 2016 20:27:28 -0800 Subject: [PATCH 023/110] Disable firefox/chrome dev because they no longer start in Sauce Labs :( --- karma.conf.ci.js | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/karma.conf.ci.js b/karma.conf.ci.js index 7413f07..d239c74 100644 --- a/karma.conf.ci.js +++ b/karma.conf.ci.js @@ -36,27 +36,12 @@ module.exports = function (config) { base: 'SauceLabs', browserName: 'chrome' }, - slChromeBeta: { - base: 'SauceLabs', - browserName: 'chrome', - version: 'beta' - }, - slChromeCanary: { - base: 'SauceLabs', - browserName: 'chrome', - version: 'dev' - }, - slFirefox42: { + slFirefox43: { base: 'SauceLabs', browserName: 'firefox', platform: 'Windows 8.1', version: '43.0' }, - slFirefoxDev: { - base: 'SauceLabs', - browserName: 'firefox', - version: 'dev' - }, slSafari8: { base: 'SauceLabs', browserName: 'safari', From d7c0726e5d6593d6c4ad95622f3a56f8474baf1d Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Fri, 18 Mar 2016 16:59:27 -0700 Subject: [PATCH 024/110] sigh --- .nvmrc | 1 - .travis.yml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 .nvmrc diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index e01e0dd..0000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -0.12.4 diff --git a/.travis.yml b/.travis.yml index 334db3c..851d043 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,4 +16,4 @@ before_install: before_script: - npm install script: -- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then gulp ci; else gulp pr; fi +- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then gulp ci; else gulp test-pr; fi From 4f2e90c1afc2aa216e440efad08745a7645d315f Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Fri, 25 Mar 2016 14:26:02 -0700 Subject: [PATCH 025/110] Add Sauce Labs browser status to README. --- README.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/README.md b/README.md index ebd859e..752229f 100644 --- a/README.md +++ b/README.md @@ -134,13 +134,7 @@ Example JSON POST data: * **url: String** - URL to POST stack JSON to ## Browser Support -* Chrome 1+ -* Firefox 3+ -* Safari 5+ -* Opera 9+ -* IE 6+ -* iOS 7+ -* Android 4.0+ +[![Sauce Test Status](https://saucelabs.com/browser-matrix/stacktracejs.svg)](https://saucelabs.com/u/stacktracejs) > **HEADS UP**: You won't get the benefit of [source maps](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/) in IE9- or other very old browsers. From 3d2d0e6af55f688b421a41405deeaa57cd9eb0f5 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Fri, 1 Apr 2016 12:12:59 -0700 Subject: [PATCH 026/110] Add prepublish script so I stop forgetting to re-run dist before publishing --- package.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 4aee78f..3b9dec0 100644 --- a/package.json +++ b/package.json @@ -21,9 +21,9 @@ "url": "git://github.com/stacktracejs/stacktrace.js.git" }, "dependencies": { - "error-stack-parser": "~1.2", - "stack-generator": "~1.0", - "stacktrace-gps": "~2.4" + "error-stack-parser": "^1.3.5", + "stack-generator": "^1.0.7", + "stacktrace-gps": "^2.4.1" }, "devDependencies": { "colors": "^1.1.2", @@ -66,6 +66,7 @@ "dist/" ], "scripts": { - "test": "gulp test" + "test": "gulp test", + "prepublish": "gulp dist" } } From 99684c85a73cda2dd241c3315d178dcaf00a02b4 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Fri, 1 Apr 2016 12:13:21 -0700 Subject: [PATCH 027/110] Display Unlicense prominently in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 752229f..aeb9754 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # stacktrace.js ## Framework-agnostic, micro-library for getting stack traces in all web browsers -[![Build Status](https://travis-ci.org/stacktracejs/stacktrace.js.svg?branch=master)](https://travis-ci.org/stacktracejs/stacktrace.js) [![Coverage Status](https://img.shields.io/coveralls/stacktracejs/stacktrace.js.svg)](https://coveralls.io/r/stacktracejs/stacktrace.js?branch=master) [![Code Climate](https://codeclimate.com/github/stacktracejs/stacktrace.js/badges/gpa.svg)](https://codeclimate.com/github/stacktracejs/stacktrace.js) +[![Build Status](https://travis-ci.org/stacktracejs/stacktrace.js.svg?branch=master)](https://travis-ci.org/stacktracejs/stacktrace.js) [![Coverage Status](https://img.shields.io/coveralls/stacktracejs/stacktrace.js.svg)](https://coveralls.io/r/stacktracejs/stacktrace.js?branch=master) [![GitHub license](https://img.shields.io/github/license/stacktracejs/stacktrace.js.svg)](http://unlicense.org) Debug and profile your JavaScript with a [stack trace](http://en.wikipedia.org/wiki/Stack_trace) of function calls leading to an error (or any condition you specify). From e527f6b6c1fd836eabf927d6f8e73ec15ac5797f Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Fri, 1 Apr 2016 12:14:17 -0700 Subject: [PATCH 028/110] Submit to npm's silly enforcement of 2-space indendation for package.json --- .editorconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.editorconfig b/.editorconfig index f7d5bf6..367dc4e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -14,6 +14,9 @@ insert_final_newline = true indent_style = space indent_size = 4 +[package.json] +indent_size = 2 + [.{jshintrc,jscsrc}] indent_style = space indent_size = 4 From 4aefd1f91721dbdc3877b1b0c72a8dc228281832 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Fri, 1 Apr 2016 12:16:29 -0700 Subject: [PATCH 029/110] Reuse StackTraceGPS instance where we can to avoid duplicate network requests for the same resource. Should fix #157 --- dist/stacktrace-with-promises-and-json-polyfills.min.js | 4 ++-- .../stacktrace-with-promises-and-json-polyfills.min.js.map | 2 +- dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- stacktrace.js | 7 ++++--- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index 5852a17..c6656f0 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ -(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){B=e}function r(e){z=e}function o(){return function(){process.nextTick(c)}}function i(){return function(){$(c)}}function s(){var e=0,t=new H(c),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function a(){var e=new MessageChannel;return e.port1.onmessage=c,function(){e.port2.postMessage(0)}}function u(){return function(){setTimeout(c,1)}}function c(){for(var e=0;I>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}I=0}function l(){try{var e=require,t=e("vertx");return $=t.runOnLoop||t.runOnContext,i()}catch(n){return u()}}function f(e,t){var n=this,r=n._state;if(r===te&&!e||r===ne&&!t)return this;var o=new this.constructor(h),i=n._result;if(r){var s=arguments[r-1];z(function(){M(r,o,s,i)})}else S(n,o,e,t);return o}function p(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(h);return b(n,e),n}function h(){}function g(){return new TypeError("You cannot resolve a promise with itself")}function m(){return new TypeError("A promises callback cannot return that same promise.")}function d(e){try{return e.then}catch(t){return re.error=t,re}}function y(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){z(function(e){var r=!1,o=y(n,t,function(n){r||(r=!0,t!==n?b(e,n):C(e,n))},function(t){r||(r=!0,O(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,O(e,o))},e)}function _(e,t){t._state===te?C(e,t._result):t._state===ne?O(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){O(e,t)})}function w(e,n,r){n.constructor===e.constructor&&r===K&&constructor.resolve===Q?_(e,n):r===re?O(e,re.error):void 0===r?C(e,n):t(r)?v(e,n,r):C(e,n)}function b(t,n){t===n?O(t,g()):e(n)?w(t,n,d(n)):C(t,n)}function A(e){e._onerror&&e._onerror(e._result),E(e)}function C(e,t){e._state===ee&&(e._result=t,e._state=te,0!==e._subscribers.length&&z(E,e))}function O(e,t){e._state===ee&&(e._state=ne,e._result=t,z(A,e))}function S(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+te]=n,o[i+ne]=r,0===i&&e._state&&z(E,e)}function E(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)S(r.resolve(e[s]),void 0,t,n);return o}function P(e){var t=this,n=new t(h);return O(n,e),n}function k(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],h!==e&&("function"!=typeof e&&k(),this instanceof F?j(this,e):R())}function U(e,t){this._instanceConstructor=e,this.promise=new e(h),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?C(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&C(this.promise,this._result))):O(this.promise,this._validationError())}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var D;D=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var $,B,J,q=D,I=0,z=function(e,t){X[I]=e,X[I+1]=t,I+=2,2===I&&(B?B(c):J())},Z="undefined"!=typeof window?window:void 0,Y=Z||{},H=Y.MutationObserver||Y.WebKitMutationObserver,W="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);J=W?o():H?s():V?a():void 0===Z&&"function"==typeof require?l():u();var K=f,Q=p,ee=void 0,te=1,ne=2,re=new N,oe=new N,ie=T,se=x,ae=P,ue=0,ce=F;F.all=ie,F.race=se,F.resolve=Q,F.reject=ae,F._setScheduler=n,F._setAsap=r,F._asap=z,F.prototype={constructor:F,then:K,"catch":function(e){return this.then(null,e)}};var le=U;U.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},U.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ee&&e>n;n++)this._eachEntry(t[n],n)},U.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===Q){var o=d(e);if(o===K&&e._state!==ee)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ce){var i=new n(h);w(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},U.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ee&&(this._remaining--,e===ne?O(r,n):this._result[t]=n),0===this._remaining&&C(r,this._result)},U.prototype._willSettleAt=function(e,t){var n=this;S(e,void 0,function(e){n._settledAt(te,t,e)},function(e){n._settledAt(ne,t,e)})};var fe=G,pe={Promise:ce,polyfill:fe};"function"==typeof define&&define.amd?define(function(){return pe}):"undefined"!=typeof module&&module.exports?module.exports=pe:"undefined"!=typeof this&&(this.ES6Promise=pe),fe()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==d)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new s)&&'""'==u(new a)&&u(v)===d&&u(d)===d&&u()===d&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([d])&&"null"==u(null)&&"[null,null,null]"==u([d,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var s=t.Number||o.Number,a=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,m,d,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!i("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return M[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var r,o,i,s=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&s++;return r=o=null,s?m=2==s?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var r,i,s=v.call(e)==b,a=!s&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)s&&"prototype"==r||!a.call(e,r)||t(r);for(i=o.length;r=o[--i];a.call(e,r)&&t(r));}),m(e,t)},!i("json-stringify")){var T={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},x="000000",P=function(e,t){return(x+(t||0)).slice(-e)},k="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var s=e.charCodeAt(n);switch(s){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=T[s];break;default:if(32>s){t+=k+P(2,s.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,s){var a,u,c,l,p,h,y,_,w,b,N,M,T,x,k,U;try{a=t[e]}catch(G){}if("object"==typeof a&&a)if(u=v.call(a),u!=A||g.call(a,"toJSON"))"function"==typeof a.toJSON&&(u!=C&&u!=O&&u!=S||g.call(a,"toJSON"))&&(a=a.toJSON(e));else if(a>-1/0&&1/0>a){if(j){for(p=L(a/864e5),c=L(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=L((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(a%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,w=L(h/1e3)%60,b=h%1e3}else c=a.getUTCFullYear(),l=a.getUTCMonth(),p=a.getUTCDate(),y=a.getUTCHours(),_=a.getUTCMinutes(),w=a.getUTCSeconds(),b=a.getUTCMilliseconds();a=(0>=c||c>=1e4?(0>c?"-":"+")+P(6,0>c?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,y)+":"+P(2,_)+":"+P(2,w)+"."+P(3,b)+"Z"}else a=null;if(n&&(a=n.call(t,e,a)),null===a)return"null";if(u=v.call(a),u==E)return""+a;if(u==C)return a>-1/0&&1/0>a?""+a:"null";if(u==O)return R(""+a);if("object"==typeof a){for(x=s.length;x--;)if(s[x]===a)throw f();if(s.push(a),N=[],k=i,i+=o,u==S){for(T=0,x=a.length;x>T;T++)M=F(T,a,n,r,o,i,s),N.push(M===d?"null":M);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+k+"]":"["+N.join(",")+"]":"[]"}else m(r||a,function(e){var t=F(e,a,n,r,o,i,s);t!==d&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+k+"}":"{"+N.join(",")+"}":"{}";return s.pop(),U}};r.stringify=function(e,t,r){var o,i,s,a;if(n[typeof t]&&t)if((a=v.call(t))==b)i=t;else if(a==S){s={};for(var u,c=0,l=t.length;l>c;u=t[c++],a=v.call(u),(a==O||a==C)&&(s[u]=1));}if(r)if((a=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;s>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=$[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=D("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;s>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;s>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;s>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else m(o,function(e){I(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=q(J()),"$"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var s=o.JSON,a=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=s,o.JSON3=a,s=a=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),s=0;o>s;){var a,u;s in r&&(a=r[s],u=e.call(n,a,s,r),i[s]=u),s++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var s=t[i];e.call(o,s,i,t)&&r.push(s)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var s;r in o&&(s=o[r],e.call(n,s,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new s(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),r=a.getArg(t,"sources"),o=a.getArg(t,"names",[]),i=a.getArg(t,"sourceRoot",null),s=a.getArg(t,"sourcesContent",null),u=a.getArg(t,"mappings"),l=a.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=a.getArg(t,"version"),o=a.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=a.getArg(e,"offset"),n=a.getArg(t,"line"),o=a.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var s=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=s.length;h>p;p++){var g=s[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,a.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,s,u,c=1,p=0,h=0,g=0,m=0,d=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,s=v;y>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),o=_[r])v+=r.length;else{for(o=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=a.getArg(e,"source");if(null!=this.sourceRoot&&(t=a.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=a?"/":"."),i?(i.path=n,o(i)):n}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),s=r(e);if(s&&(e=s.path||"/"),n&&!n.scheme)return s&&(n.scheme=s.scheme),o(n);if(n||t.match(m))return t;if(s&&!s.host&&!s.path)return s.host=t,o(s);var a="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return s?(s.path=a,o(s)):a}function a(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=s,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=a,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,s,a){var u=Math.floor((r-e)/2)+e,c=s(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,s,a):a==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,s,a):a==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var s=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(r[s],r[s-1],!0);)--s;return s}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e); -if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),s=5,a=1<>>=s,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,a,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(t++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(a&c),a&=u,f+=a<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&s>=e?e-i+l:e==a?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,s){if(s>i){var a=r(i,s),u=i-1;n(e,a,s);for(var c=e[s],l=i;s>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,s)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,s=e.split("\n"),a="",u=Math.min(t,20),c=0;u>c;++c){var l=s[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(a=l+a,n=o.exec(a),n&&n[1])return n[1];if(n=r.exec(a),n&&n[1])return n[1];if(n=i.exec(a),n&&n[1])return n[1]}}}function s(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,s){var a=new e.SourceMapConsumer(n),u=a.originalPositionFor({line:o,column:i}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,s=t.match(i);if(s){var a=s[0].length,u=t.substr(a),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){a(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){s(),a(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),l="data:"===a.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===a[0]||l||/^https?:\/\/|^\/\//i.test(a)||(a=f+a),this._get(a).then(function(n){var i=e.lineNumber,s=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,s,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,s=r.length;s>i;i+=2){var a=n.exec(r[i]);a&&o.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",s=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(s,a,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){return o=r(i,o),new Promise(function(r){var i=e.parse(t);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(t){function r(){t(e)}new n(o).pinpoint(e).then(t,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){B=e}function r(e){z=e}function o(){return function(){process.nextTick(c)}}function i(){return function(){D(c)}}function a(){var e=0,t=new H(c),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function s(){var e=new MessageChannel;return e.port1.onmessage=c,function(){e.port2.postMessage(0)}}function u(){return function(){setTimeout(c,1)}}function c(){for(var e=0;I>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}I=0}function l(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,i()}catch(n){return u()}}function f(e,t){var n=this,r=n._state;if(r===te&&!e||r===ne&&!t)return this;var o=new this.constructor(h),i=n._result;if(r){var a=arguments[r-1];z(function(){M(r,o,a,i)})}else S(n,o,e,t);return o}function p(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(h);return b(n,e),n}function h(){}function g(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return re.error=t,re}}function y(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){z(function(e){var r=!1,o=y(n,t,function(n){r||(r=!0,t!==n?b(e,n):C(e,n))},function(t){r||(r=!0,O(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,O(e,o))},e)}function _(e,t){t._state===te?C(e,t._result):t._state===ne?O(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){O(e,t)})}function w(e,n,r){n.constructor===e.constructor&&r===K&&constructor.resolve===Q?_(e,n):r===re?O(e,re.error):void 0===r?C(e,n):t(r)?v(e,n,r):C(e,n)}function b(t,n){t===n?O(t,g()):e(n)?w(t,n,m(n)):C(t,n)}function A(e){e._onerror&&e._onerror(e._result),E(e)}function C(e,t){e._state===ee&&(e._result=t,e._state=te,0!==e._subscribers.length&&z(E,e))}function O(e,t){e._state===ee&&(e._state=ne,e._result=t,z(A,e))}function S(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+te]=n,o[i+ne]=r,0===i&&e._state&&z(E,e)}function E(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)S(r.resolve(e[a]),void 0,t,n);return o}function P(e){var t=this,n=new t(h);return O(n,e),n}function k(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],h!==e&&("function"!=typeof e&&k(),this instanceof F?j(this,e):R())}function U(e,t){this._instanceConstructor=e,this.promise=new e(h),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?C(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&C(this.promise,this._result))):O(this.promise,this._validationError())}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,B,J,q=$,I=0,z=function(e,t){X[I]=e,X[I+1]=t,I+=2,2===I&&(B?B(c):J())},Z="undefined"!=typeof window?window:void 0,Y=Z||{},H=Y.MutationObserver||Y.WebKitMutationObserver,W="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);J=W?o():H?a():V?s():void 0===Z&&"function"==typeof require?l():u();var K=f,Q=p,ee=void 0,te=1,ne=2,re=new N,oe=new N,ie=x,ae=T,se=P,ue=0,ce=F;F.all=ie,F.race=ae,F.resolve=Q,F.reject=se,F._setScheduler=n,F._setAsap=r,F._asap=z,F.prototype={constructor:F,then:K,"catch":function(e){return this.then(null,e)}};var le=U;U.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},U.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ee&&e>n;n++)this._eachEntry(t[n],n)},U.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===Q){var o=m(e);if(o===K&&e._state!==ee)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ce){var i=new n(h);w(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},U.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ee&&(this._remaining--,e===ne?O(r,n):this._result[t]=n),0===this._remaining&&C(r,this._result)},U.prototype._willSettleAt=function(e,t){var n=this;S(e,void 0,function(e){n._settledAt(te,t,e)},function(e){n._settledAt(ne,t,e)})};var fe=G,pe={Promise:ce,polyfill:fe};"function"==typeof define&&define.amd?define(function(){return pe}):"undefined"!=typeof module&&module.exports?module.exports=pe:"undefined"!=typeof this&&(this.ES6Promise=pe),fe()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==m)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===m&&u(m)===m&&u()===m&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([m])&&"null"==u(null)&&"[null,null,null]"==u([m,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,d,m,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!i("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return M[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?d=2==a?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var r,i,a=v.call(e)==b,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),d(e,t)},!i("json-stringify")){var x={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},T="000000",P=function(e,t){return(T+(t||0)).slice(-e)},k="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=x[a];break;default:if(32>a){t+=k+P(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,N,M,x,T,k,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=L((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,w=L(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+P(6,0>c?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,y)+":"+P(2,_)+":"+P(2,w)+"."+P(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(T=a.length;T--;)if(a[T]===s)throw f();if(a.push(s),N=[],k=i,i+=o,u==S){for(x=0,T=s.length;T>x;x++)M=F(x,s,n,r,o,i,a),N.push(M===m?"null":M);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+k+"]":"["+N.join(",")+"]":"[]"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+k+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==b)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=q(J()),"$"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(d))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,d=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=s,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e); +if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i=["eval",""].indexOf(r[0])>-1?void 0:r[0];return new e(o,void 0,i,r[1],r[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(i)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(o){var i=n(o.stack.split("\n"),function(e){return!!e.match(r)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){o=r(i,o);var a=new n(o);return new Promise(function(n){var r=e.parse(t);"function"==typeof o.filter&&(r=r.filter(o.filter)),n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}a.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map index ca2e9b5..c0d2365 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","test","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","test","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","RegExp","$1","caller","ErrorStackParser","_map","array","fn","output","_filter","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","filtered","tokens","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","shift","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","stackframes","sf","resolveOriginal","stackFrames","instrument","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n *\n * @param {String} urlLike\n * @return {Array} 3-tuple of URL, Line Number, and Column Number\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index f03bde3..a8b72bd 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),o=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),o=a.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],O=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new i,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),o=y[r])v+=r.length;else{for(o=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),O.push(t),"number"==typeof t.originalLine&&b.push(t)}f(O,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=O,f(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),i?(i.path=t,o(i)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),o(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,o,i,s,a){var u=Math.floor((r-e)/2)+e,c=s(o,i[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,o,i,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,o,i){if(0===r.length)return-1;var s=t(-1,r.length,e,r,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var o=t(1);r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=this._set.hasOwnProperty(t),i=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=i)},r.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=t(5),s=5,a=1<>>=s,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&s>=e?e-i+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=r(i,s),u=i-1;t(e,a,s);for(var c=e[s],l=i;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var t,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,s=e.split("\n"),a="",u=Math.min(n,20),c=0;u>c;++c){var l=s[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(a=l+a,t=o.exec(a),t&&t[1])return t[1];if(t=r.exec(a),t&&t[1])return t[1];if(t=i.exec(a),t&&t[1])return t[1]}}}function s(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(t,r,o,i,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:o,column:i}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){a(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){s(),a(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),l="data:"===a.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===a[0]||l||/^https?:\/\/|^\/\//i.test(a)||(a=f+a),this._get(a).then(function(t){var i=e.lineNumber,s=e.columnNumber;"string"==typeof t&&(t=o(t.replace(/^\)\]\}'/,""))),"undefined"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,s,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new l(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,s=r.length;s>i;i+=2){var a=t.exec(r[i]);a&&o.push(new e(void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,s=r.length;s>i;i+=2){var a=t.exec(r[i]);a&&o.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[i]))}return o},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",s=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")}};return{get:function(e){try{throw new Error}catch(n){return o(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,o){return o=r(i,o),new Promise(function(r){var i=e.parse(n);"function"==typeof o.filter&&(i=i.filter(o.filter)),r(Promise.all(i.map(function(e){return new Promise(function(n){function r(){n(e)}new t(o).pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?t(o.responseText):r(new Error("POST to "+n+" failed with status: "+o.status)))},o.open("post",n),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),r=s.getArg(n,"sources"),o=s.getArg(n,"names",[]),i=s.getArg(n,"sourceRoot",null),a=s.getArg(n,"sourcesContent",null),u=s.getArg(n,"mappings"),l=s.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),o=s.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=s.getArg(e,"offset"),t=s.getArg(n,"line"),o=s.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],O=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(t=new i,t.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(_,a),o=y[r])_+=r.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),O.push(t),"number"==typeof t.originalLine&&b.push(t)}f(O,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=O,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),i?(i.path=t,o(i)):t}function a(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),a=r(e);if(a&&(e=a.path||"/"),t&&!t.scheme)return a&&(t.scheme=a.scheme),o(t);if(t||n.match(m))return n;if(a&&!a.host&&!a.path)return a.host=n,o(a);var s="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return a?(a.path=s,o(a)):s}function s(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=o,n.normalize=i,n.join=a,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=s,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,o,i,a,s):s==n.LEAST_UPPER_BOUND?r1?t(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,o,i){if(0===r.length)return-1;var a=t(-1,r.length,e,r,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,n,t){function r(){this._array=[],this._set={}}var o=t(1);r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=this._set.hasOwnProperty(t),i=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=i)},r.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=t(5),a=5,s=1<>>=a,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},n.decode=function(e,n,t){var r,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(s&c),s&=u,f+=s<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,a){if(a>i){var s=r(i,a),u=i-1;t(e,s,a);for(var c=e[a],l=i;a>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,a)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var t,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,t=o.exec(s),t&&t[1])return t[1];if(t=r.exec(s),t&&t[1])return t[1];if(t=i.exec(s),t&&t[1])return t[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(t,r,o,i,a){var s=new e.SourceMapConsumer(t),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(t){var i=e.lineNumber,a=e.columnNumber;"string"==typeof t&&(t=o(t.replace(/^\)\]\}'/,""))),"undefined"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,a,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new l(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var t=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(t.pop()),o=t.join(" ")||void 0,i=["eval",""].indexOf(r[0])>-1?void 0:r[0];return new e(o,void 0,i,r[1],r[2],n)},this)},parseFFOrSafari:function(r){var o=t(r.stack.split("\n"),function(e){return!e.match(i)},this);return n(o,function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return new e(n);var t=n.split("@"),r=this.extractLocation(t.pop()),o=t.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(o){var i=t(o.stack.split("\n"),function(e){return!!e.match(r)&&!e.match(/^Error created at/)},this);return n(i,function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(a,s,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(n){return o(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,o){o=r(i,o);var a=new t(o);return new Promise(function(t){var r=e.parse(n);"function"==typeof o.filter&&(r=r.filter(o.filter)),t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}a.pinpoint(e).then(n,t)["catch"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?t(o.responseText):r(new Error("POST to "+n+" failed with status: "+o.status)))},o.open("post",n),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index b12c693..504880e 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","test","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n new StackTraceGPS(opts).pinpoint(sf)\n .then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","test","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","RegExp","$1","undefined","caller","ErrorStackParser","_map","array","fn","thisArg","output","_filter","filter","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filtered","tokens","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","shift","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","callback","errback","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n *\n * @param {String} urlLike\n * @return {Array} 3-tuple of URL, Line Number, and Column Number\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/stacktrace.js b/stacktrace.js index 29bd5b0..d7be057 100644 --- a/stacktrace.js +++ b/stacktrace.js @@ -18,7 +18,8 @@ (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 && (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 && (stackframe.functionName || '').indexOf('StackGenerator$$') === -1; - } + }, + sourceCache: {} }; /** @@ -78,6 +79,7 @@ */ fromError: function StackTrace$$fromError(error, opts) { opts = _merge(_options, opts); + var gps = new StackTraceGPS(opts); return new Promise(function(resolve) { var stackframes = ErrorStackParser.parse(error); if (typeof opts.filter === 'function') { @@ -89,8 +91,7 @@ resolve(sf); } - new StackTraceGPS(opts).pinpoint(sf) - .then(resolve, resolveOriginal)['catch'](resolveOriginal); + gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal); }); }))); }.bind(this)); From d606d3ca975fd07d63471307070f33a9757a9a09 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Fri, 1 Apr 2016 12:17:10 -0700 Subject: [PATCH 030/110] 1.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3b9dec0..93dfb61 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "Victor Homyakov (https://github.com/victor-homyakov)", "Oliver Salzburg (https://github.com/oliversalzburg)" ], - "version": "1.0.4", + "version": "1.1.0", "license": "Unlicense", "keywords": [ "stacktrace", From e93197d1be209f1f580d83a69f761767b6749b90 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Fri, 1 Apr 2016 14:18:18 -0700 Subject: [PATCH 031/110] Update component(1) --- component.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/component.json b/component.json index 2cd9608..747c36b 100644 --- a/component.json +++ b/component.json @@ -2,7 +2,7 @@ "name": "stacktrace.js", "repository": "stacktracejs/stacktrace.js", "description": "Framework-agnostic, micro-library for getting stack traces in all environments", - "version": "1.0.0", + "version": "1.1.0", "keywords": [ "stacktrace", "error", @@ -15,7 +15,7 @@ "stacktrace.js" ], "dependencies": { - "stacktracejs/error-stack-parser": "1.2", + "stacktracejs/error-stack-parser": "1.3", "stacktracejs/stack-generator": "1", "stacktracejs/stacktrace-gps": "2" } From 14ae193c12dd77558d98bfc0731faae57da3abc9 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Fri, 1 Apr 2016 14:18:53 -0700 Subject: [PATCH 032/110] Fix JSCS warnings --- karma.conf.ci.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/karma.conf.ci.js b/karma.conf.ci.js index d239c74..ac6dfdc 100644 --- a/karma.conf.ci.js +++ b/karma.conf.ci.js @@ -1,4 +1,4 @@ -module.exports = function (config) { +module.exports = function(config) { 'use strict'; if (!process.env.SAUCE_USERNAME || !process.env.SAUCE_ACCESS_KEY) { console.log('Make sure the SAUCE_USERNAME and SAUCE_ACCESS_KEY environment variables are set.'); @@ -116,10 +116,10 @@ module.exports = function (config) { colors: true, logLevel: config.LOG_INFO, autoWatch: true, - browserDisconnectTimeout : 10000, - browserDisconnectTolerance : 1, - browserNoActivityTimeout : 240000, - captureTimeout : 240000, + browserDisconnectTimeout: 10000, + browserDisconnectTolerance: 1, + browserNoActivityTimeout: 240000, + captureTimeout: 240000, sauceLabs: { testName: 'stacktrace.js unit tests', recordScreenshots: false, From af438f9e7a5998f365d05a0712fb92d3293417d5 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Fri, 1 Apr 2016 14:19:45 -0700 Subject: [PATCH 033/110] Add v1.1 to CHANGELOG --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34c4937..cd693b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +## v1.1.0 + +### Better parsing +Updated [error-stack-parser](https://github.com/stacktracejs/error-stack-parser) to v1.3 which parses eval stack entries in a better way and fixes a bunch of bugs. + +### Better resource handling +Updated [stacktrace-gps](https://github.com/stacktracejs/stacktrace-gps). Now reuses the same instance to avoid duplicate requests for the same resource by default. + +### Better dev experience +JSCS and automated PR testing have been implemented to ensure consistent styles and quick feedback. + +> Possibly breaking changes: ErrorStackParser now provides it's own polyfill for `Array.map` and `Array.filter`. `eval` information is will display differently in stack traces. + ## v1.0.0 ### stacktrace.js is reborn From 9a98d8d1273253020c53d793277c2c80a5317049 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 16 Apr 2016 13:56:42 -0700 Subject: [PATCH 034/110] Minor URL/formatting cleanup. --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index aeb9754..d462c38 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # stacktrace.js -## Framework-agnostic, micro-library for getting stack traces in all web browsers + +> Framework-agnostic, micro-library for getting stack traces in all web browsers [![Build Status](https://travis-ci.org/stacktracejs/stacktrace.js.svg?branch=master)](https://travis-ci.org/stacktracejs/stacktrace.js) [![Coverage Status](https://img.shields.io/coveralls/stacktracejs/stacktrace.js.svg)](https://coveralls.io/r/stacktracejs/stacktrace.js?branch=master) [![GitHub license](https://img.shields.io/github/license/stacktracejs/stacktrace.js.svg)](http://unlicense.org) Debug and profile your JavaScript with a [stack trace](http://en.wikipedia.org/wiki/Stack_trace) of function calls leading to an error (or any condition you specify). @@ -9,7 +10,7 @@ stacktrace.js uses browsers' `Error.stack` mechanism to generate stack traces, p [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) to return an Array of [StackFrames](https://github.com/stacktracejs/stackframe). -#### Upgrading? Check the [0.x -> 1.x Migration Guide](http://www.stacktracejs.com/#!/docs/v0-migration-guide) +#### Upgrading? Check the [0.x -> 1.x Migration Guide](https://www.stacktracejs.com/#!/docs/v0-migration-guide) ## Usage #### Get a stack trace from current location From 1280ce121f0737a4bca6a83e7407bb3f44d140a4 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 16 Apr 2016 13:57:02 -0700 Subject: [PATCH 035/110] Add JSDoc Dash template and config. --- jsdoc.conf.json | 11 +++++++++++ package.json | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 jsdoc.conf.json diff --git a/jsdoc.conf.json b/jsdoc.conf.json new file mode 100644 index 0000000..ec78124 --- /dev/null +++ b/jsdoc.conf.json @@ -0,0 +1,11 @@ +{ + "docset" : { + "name": "StackTraceJS", + "icon": "../logos/StackTraceLogo16x16.png", + "enableJavascript": true + }, + "opts": { + "template": "node_modules/jsdoc-dash-template", + "destination": "../" + } +} diff --git a/package.json b/package.json index 93dfb61..b31eae2 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "stacktrace-js", "description": "Framework-agnostic, micro-library for getting stack traces in all environments", "maintainers": [ - "Eric Wendelin (http://www.eriwen.com)", + "Eric Wendelin (https://www.eriwen.com)", "Victor Homyakov (https://github.com/victor-homyakov)", "Oliver Salzburg (https://github.com/oliversalzburg)" ], @@ -39,6 +39,7 @@ "jasmine-ajax": "^3.2.0", "jasmine-core": "^2.3.4", "jscs": "^2.9.0", + "jsdoc-dash-template": "^1.2.0", "json3": "^3.3.2", "karma": "^0.13.15", "karma-chrome-launcher": "^0.2.1", From cc342a2cd6d9f52f0cea4035c6c2d4a2b14a45fe Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 16 Apr 2016 13:59:40 -0700 Subject: [PATCH 036/110] Better tagline --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d462c38..a856d7b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # stacktrace.js +Generate, parse and enhance JavaScript stack traces in all browsers -> Framework-agnostic, micro-library for getting stack traces in all web browsers [![Build Status](https://travis-ci.org/stacktracejs/stacktrace.js.svg?branch=master)](https://travis-ci.org/stacktracejs/stacktrace.js) [![Coverage Status](https://img.shields.io/coveralls/stacktracejs/stacktrace.js.svg)](https://coveralls.io/r/stacktracejs/stacktrace.js?branch=master) [![GitHub license](https://img.shields.io/github/license/stacktracejs/stacktrace.js.svg)](http://unlicense.org) Debug and profile your JavaScript with a [stack trace](http://en.wikipedia.org/wiki/Stack_trace) of function calls leading to an error (or any condition you specify). From c3230346033f297dae46bc7cd60ec428067755f6 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 16 Apr 2016 19:10:40 -0700 Subject: [PATCH 037/110] Add issue and PR templates. --- CONTRIBUTING.md => .github/CONTRIBUTING.md | 2 +- .github/ISSUE_TEMPLATE.md | 28 ++++++++++++++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 28 ++++++++++++++++++++++ README.md | 4 ++-- 4 files changed, 59 insertions(+), 3 deletions(-) rename CONTRIBUTING.md => .github/CONTRIBUTING.md (94%) create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/CONTRIBUTING.md b/.github/CONTRIBUTING.md similarity index 94% rename from CONTRIBUTING.md rename to .github/CONTRIBUTING.md index dfb038c..f0720ff 100644 --- a/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -18,7 +18,7 @@ Want to be listed as a *Contributor*? Make a pull request with: * Please keep code style consistent with surrounding code. ## Dev Setup -* Make sure you have [NodeJS v0.10](http://nodejs.org/) installed +* Make sure you have [NodeJS v4.0+](http://nodejs.org/) installed * Run `npm install` from the project directory ## Testing diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..8bdf95d --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,28 @@ + + +## Expected Behavior + + + +## Current Behavior + + + +## Steps to Reproduce (for bugs) + + + +## Context + + + +## Your Environment + +* stacktrace.js version: +* Browser Name and version: +* Operating System and version (desktop or mobile): +* Link to your project: + +## Possible Solution + + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..c7f935d --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,28 @@ + + +## Description + + +## Motivation and Context + + + +## How Has This Been Tested? + + + + +## Types of changes + +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to change) + +## Checklist: + + +- [ ] `node_modules/.bin/jscs -c .jscsrc stacktrace.js` passes without errors +- [ ] `npm test` passes without errors +- [ ] I have read the [contribution guidelines](CONTRIBUTING.md) +- [ ] I have updated the documentation accordingly +- [ ] I have added tests to cover my changes diff --git a/README.md b/README.md index a856d7b..c15ed76 100644 --- a/README.md +++ b/README.md @@ -147,11 +147,11 @@ It has a very similar API and also supports source maps. ## Contributing This project adheres to the [Open Code of Conduct](http://todogroup.org/opencodeofconduct/#stacktrace.js/me@eriwen.com). By participating, you are expected to honor this code. -Want to be listed as a *Contributor*? Start with the [Contributing Guide](https://github.com/stacktracejs/stacktrace.js/blob/master/CONTRIBUTING.md)! +Want to be listed as a *Contributor*? Start with the [Contributing Guide](https://github.com/stacktracejs/stacktrace.js/blob/master/.github/CONTRIBUTING.md)! This project is made possible due to the efforts of these fine people: -* [Eric Wendelin](http://www.eriwen.com) +* [Eric Wendelin](https://www.eriwen.com) * [Victor Homyakov](https://github.com/victor-homyakov) * [Oliver Salzburg](https://github.com/oliversalzburg) * [Many others](https://github.com/stacktracejs/stacktrace.js/graphs/contributors) From 9c402607322ca8aec77775f03d9001530725897d Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Mon, 18 Apr 2016 21:19:50 -0700 Subject: [PATCH 038/110] Upgrade Travis CI to Ubuntu Trusty to fix Chrome usage in testing. --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 851d043..ec20015 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,6 @@ language: node_js -sudo: false +sudo: required +dist: trusty node_js: stable addons: sauce_connect: true From ec61b83b2e4182195618edea31fffef8163e85da Mon Sep 17 00:00:00 2001 From: Oliver Salzburg Date: Sun, 24 Apr 2016 07:30:12 +0200 Subject: [PATCH 039/110] Unminified builds (#161) * Provide unminified dist files * Rebuild dist files * Fix misplaced debug statement --- ...ktrace-with-promises-and-json-polyfills.js | 2381 +++++++++++++++++ ...ce-with-promises-and-json-polyfills.min.js | 4 +- ...ith-promises-and-json-polyfills.min.js.map | 2 +- dist/stacktrace.concat.js | 383 +++ dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- gulpfile.js | 7 +- package.json | 1 + 8 files changed, 2776 insertions(+), 6 deletions(-) create mode 100644 dist/stacktrace-with-promises-and-json-polyfills.js create mode 100644 dist/stacktrace.concat.js diff --git a/dist/stacktrace-with-promises-and-json-polyfills.js b/dist/stacktrace-with-promises-and-json-polyfills.js new file mode 100644 index 0000000..5b7af91 --- /dev/null +++ b/dist/stacktrace-with-promises-and-json-polyfills.js @@ -0,0 +1,2381 @@ +/*! + * @overview es6-promise - a tiny implementation of Promises/A+. + * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) + * @license Licensed under MIT license + * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE + * @version 3.0.2 + */ + +(function() { + "use strict"; + function lib$es6$promise$utils$$objectOrFunction(x) { + return typeof x === 'function' || (typeof x === 'object' && x !== null); + } + + function lib$es6$promise$utils$$isFunction(x) { + return typeof x === 'function'; + } + + function lib$es6$promise$utils$$isMaybeThenable(x) { + return typeof x === 'object' && x !== null; + } + + var lib$es6$promise$utils$$_isArray; + if (!Array.isArray) { + lib$es6$promise$utils$$_isArray = function (x) { + return Object.prototype.toString.call(x) === '[object Array]'; + }; + } else { + lib$es6$promise$utils$$_isArray = Array.isArray; + } + + var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray; + var lib$es6$promise$asap$$len = 0; + var lib$es6$promise$asap$$toString = {}.toString; + var lib$es6$promise$asap$$vertxNext; + var lib$es6$promise$asap$$customSchedulerFn; + + var lib$es6$promise$asap$$asap = function asap(callback, arg) { + lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback; + lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg; + lib$es6$promise$asap$$len += 2; + if (lib$es6$promise$asap$$len === 2) { + // If len is 2, that means that we need to schedule an async flush. + // If additional callbacks are queued before the queue is flushed, they + // will be processed by this flush that we are scheduling. + if (lib$es6$promise$asap$$customSchedulerFn) { + lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush); + } else { + lib$es6$promise$asap$$scheduleFlush(); + } + } + } + + function lib$es6$promise$asap$$setScheduler(scheduleFn) { + lib$es6$promise$asap$$customSchedulerFn = scheduleFn; + } + + function lib$es6$promise$asap$$setAsap(asapFn) { + lib$es6$promise$asap$$asap = asapFn; + } + + var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined; + var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {}; + var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver; + var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]'; + + // test for web worker but not in IE10 + var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' && + typeof importScripts !== 'undefined' && + typeof MessageChannel !== 'undefined'; + + // node + function lib$es6$promise$asap$$useNextTick() { + // node version 0.10.x displays a deprecation warning when nextTick is used recursively + // see https://github.com/cujojs/when/issues/410 for details + return function() { + process.nextTick(lib$es6$promise$asap$$flush); + }; + } + + // vertx + function lib$es6$promise$asap$$useVertxTimer() { + return function() { + lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush); + }; + } + + function lib$es6$promise$asap$$useMutationObserver() { + var iterations = 0; + var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush); + var node = document.createTextNode(''); + observer.observe(node, { characterData: true }); + + return function() { + node.data = (iterations = ++iterations % 2); + }; + } + + // web worker + function lib$es6$promise$asap$$useMessageChannel() { + var channel = new MessageChannel(); + channel.port1.onmessage = lib$es6$promise$asap$$flush; + return function () { + channel.port2.postMessage(0); + }; + } + + function lib$es6$promise$asap$$useSetTimeout() { + return function() { + setTimeout(lib$es6$promise$asap$$flush, 1); + }; + } + + var lib$es6$promise$asap$$queue = new Array(1000); + function lib$es6$promise$asap$$flush() { + for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) { + var callback = lib$es6$promise$asap$$queue[i]; + var arg = lib$es6$promise$asap$$queue[i+1]; + + callback(arg); + + lib$es6$promise$asap$$queue[i] = undefined; + lib$es6$promise$asap$$queue[i+1] = undefined; + } + + lib$es6$promise$asap$$len = 0; + } + + function lib$es6$promise$asap$$attemptVertx() { + try { + var r = require; + var vertx = r('vertx'); + lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext; + return lib$es6$promise$asap$$useVertxTimer(); + } catch(e) { + return lib$es6$promise$asap$$useSetTimeout(); + } + } + + var lib$es6$promise$asap$$scheduleFlush; + // Decide what async method to use to triggering processing of queued callbacks: + if (lib$es6$promise$asap$$isNode) { + lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick(); + } else if (lib$es6$promise$asap$$BrowserMutationObserver) { + lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver(); + } else if (lib$es6$promise$asap$$isWorker) { + lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel(); + } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') { + lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx(); + } else { + lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout(); + } + + function lib$es6$promise$$internal$$noop() {} + + var lib$es6$promise$$internal$$PENDING = void 0; + var lib$es6$promise$$internal$$FULFILLED = 1; + var lib$es6$promise$$internal$$REJECTED = 2; + + var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject(); + + function lib$es6$promise$$internal$$selfFulfillment() { + return new TypeError("You cannot resolve a promise with itself"); + } + + function lib$es6$promise$$internal$$cannotReturnOwn() { + return new TypeError('A promises callback cannot return that same promise.'); + } + + function lib$es6$promise$$internal$$getThen(promise) { + try { + return promise.then; + } catch(error) { + lib$es6$promise$$internal$$GET_THEN_ERROR.error = error; + return lib$es6$promise$$internal$$GET_THEN_ERROR; + } + } + + function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) { + try { + then.call(value, fulfillmentHandler, rejectionHandler); + } catch(e) { + return e; + } + } + + function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) { + lib$es6$promise$asap$$asap(function(promise) { + var sealed = false; + var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) { + if (sealed) { return; } + sealed = true; + if (thenable !== value) { + lib$es6$promise$$internal$$resolve(promise, value); + } else { + lib$es6$promise$$internal$$fulfill(promise, value); + } + }, function(reason) { + if (sealed) { return; } + sealed = true; + + lib$es6$promise$$internal$$reject(promise, reason); + }, 'Settle: ' + (promise._label || ' unknown promise')); + + if (!sealed && error) { + sealed = true; + lib$es6$promise$$internal$$reject(promise, error); + } + }, promise); + } + + function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) { + if (thenable._state === lib$es6$promise$$internal$$FULFILLED) { + lib$es6$promise$$internal$$fulfill(promise, thenable._result); + } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) { + lib$es6$promise$$internal$$reject(promise, thenable._result); + } else { + lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) { + lib$es6$promise$$internal$$resolve(promise, value); + }, function(reason) { + lib$es6$promise$$internal$$reject(promise, reason); + }); + } + } + + function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) { + if (maybeThenable.constructor === promise.constructor) { + lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable); + } else { + var then = lib$es6$promise$$internal$$getThen(maybeThenable); + + if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) { + lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error); + } else if (then === undefined) { + lib$es6$promise$$internal$$fulfill(promise, maybeThenable); + } else if (lib$es6$promise$utils$$isFunction(then)) { + lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then); + } else { + lib$es6$promise$$internal$$fulfill(promise, maybeThenable); + } + } + } + + function lib$es6$promise$$internal$$resolve(promise, value) { + if (promise === value) { + lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment()); + } else if (lib$es6$promise$utils$$objectOrFunction(value)) { + lib$es6$promise$$internal$$handleMaybeThenable(promise, value); + } else { + lib$es6$promise$$internal$$fulfill(promise, value); + } + } + + function lib$es6$promise$$internal$$publishRejection(promise) { + if (promise._onerror) { + promise._onerror(promise._result); + } + + lib$es6$promise$$internal$$publish(promise); + } + + function lib$es6$promise$$internal$$fulfill(promise, value) { + if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; } + + promise._result = value; + promise._state = lib$es6$promise$$internal$$FULFILLED; + + if (promise._subscribers.length !== 0) { + lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise); + } + } + + function lib$es6$promise$$internal$$reject(promise, reason) { + if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; } + promise._state = lib$es6$promise$$internal$$REJECTED; + promise._result = reason; + + lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise); + } + + function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) { + var subscribers = parent._subscribers; + var length = subscribers.length; + + parent._onerror = null; + + subscribers[length] = child; + subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment; + subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection; + + if (length === 0 && parent._state) { + lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent); + } + } + + function lib$es6$promise$$internal$$publish(promise) { + var subscribers = promise._subscribers; + var settled = promise._state; + + if (subscribers.length === 0) { return; } + + var child, callback, detail = promise._result; + + for (var i = 0; i < subscribers.length; i += 3) { + child = subscribers[i]; + callback = subscribers[i + settled]; + + if (child) { + lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail); + } else { + callback(detail); + } + } + + promise._subscribers.length = 0; + } + + function lib$es6$promise$$internal$$ErrorObject() { + this.error = null; + } + + var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject(); + + function lib$es6$promise$$internal$$tryCatch(callback, detail) { + try { + return callback(detail); + } catch(e) { + lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e; + return lib$es6$promise$$internal$$TRY_CATCH_ERROR; + } + } + + function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) { + var hasCallback = lib$es6$promise$utils$$isFunction(callback), + value, error, succeeded, failed; + + if (hasCallback) { + value = lib$es6$promise$$internal$$tryCatch(callback, detail); + + if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) { + failed = true; + error = value.error; + value = null; + } else { + succeeded = true; + } + + if (promise === value) { + lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn()); + return; + } + + } else { + value = detail; + succeeded = true; + } + + if (promise._state !== lib$es6$promise$$internal$$PENDING) { + // noop + } else if (hasCallback && succeeded) { + lib$es6$promise$$internal$$resolve(promise, value); + } else if (failed) { + lib$es6$promise$$internal$$reject(promise, error); + } else if (settled === lib$es6$promise$$internal$$FULFILLED) { + lib$es6$promise$$internal$$fulfill(promise, value); + } else if (settled === lib$es6$promise$$internal$$REJECTED) { + lib$es6$promise$$internal$$reject(promise, value); + } + } + + function lib$es6$promise$$internal$$initializePromise(promise, resolver) { + try { + resolver(function resolvePromise(value){ + lib$es6$promise$$internal$$resolve(promise, value); + }, function rejectPromise(reason) { + lib$es6$promise$$internal$$reject(promise, reason); + }); + } catch(e) { + lib$es6$promise$$internal$$reject(promise, e); + } + } + + function lib$es6$promise$enumerator$$Enumerator(Constructor, input) { + var enumerator = this; + + enumerator._instanceConstructor = Constructor; + enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop); + + if (enumerator._validateInput(input)) { + enumerator._input = input; + enumerator.length = input.length; + enumerator._remaining = input.length; + + enumerator._init(); + + if (enumerator.length === 0) { + lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result); + } else { + enumerator.length = enumerator.length || 0; + enumerator._enumerate(); + if (enumerator._remaining === 0) { + lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result); + } + } + } else { + lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError()); + } + } + + lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) { + return lib$es6$promise$utils$$isArray(input); + }; + + lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() { + return new Error('Array Methods must be provided an Array'); + }; + + lib$es6$promise$enumerator$$Enumerator.prototype._init = function() { + this._result = new Array(this.length); + }; + + var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator; + + lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() { + var enumerator = this; + + var length = enumerator.length; + var promise = enumerator.promise; + var input = enumerator._input; + + for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) { + enumerator._eachEntry(input[i], i); + } + }; + + lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) { + var enumerator = this; + var c = enumerator._instanceConstructor; + + if (lib$es6$promise$utils$$isMaybeThenable(entry)) { + if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) { + entry._onerror = null; + enumerator._settledAt(entry._state, i, entry._result); + } else { + enumerator._willSettleAt(c.resolve(entry), i); + } + } else { + enumerator._remaining--; + enumerator._result[i] = entry; + } + }; + + lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) { + var enumerator = this; + var promise = enumerator.promise; + + if (promise._state === lib$es6$promise$$internal$$PENDING) { + enumerator._remaining--; + + if (state === lib$es6$promise$$internal$$REJECTED) { + lib$es6$promise$$internal$$reject(promise, value); + } else { + enumerator._result[i] = value; + } + } + + if (enumerator._remaining === 0) { + lib$es6$promise$$internal$$fulfill(promise, enumerator._result); + } + }; + + lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) { + var enumerator = this; + + lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) { + enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value); + }, function(reason) { + enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason); + }); + }; + function lib$es6$promise$promise$all$$all(entries) { + return new lib$es6$promise$enumerator$$default(this, entries).promise; + } + var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all; + function lib$es6$promise$promise$race$$race(entries) { + /*jshint validthis:true */ + var Constructor = this; + + var promise = new Constructor(lib$es6$promise$$internal$$noop); + + if (!lib$es6$promise$utils$$isArray(entries)) { + lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.')); + return promise; + } + + var length = entries.length; + + function onFulfillment(value) { + lib$es6$promise$$internal$$resolve(promise, value); + } + + function onRejection(reason) { + lib$es6$promise$$internal$$reject(promise, reason); + } + + for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) { + lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection); + } + + return promise; + } + var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race; + function lib$es6$promise$promise$resolve$$resolve(object) { + /*jshint validthis:true */ + var Constructor = this; + + if (object && typeof object === 'object' && object.constructor === Constructor) { + return object; + } + + var promise = new Constructor(lib$es6$promise$$internal$$noop); + lib$es6$promise$$internal$$resolve(promise, object); + return promise; + } + var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve; + function lib$es6$promise$promise$reject$$reject(reason) { + /*jshint validthis:true */ + var Constructor = this; + var promise = new Constructor(lib$es6$promise$$internal$$noop); + lib$es6$promise$$internal$$reject(promise, reason); + return promise; + } + var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject; + + var lib$es6$promise$promise$$counter = 0; + + function lib$es6$promise$promise$$needsResolver() { + throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); + } + + function lib$es6$promise$promise$$needsNew() { + throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); + } + + var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise; + /** + Promise objects represent the eventual result of an asynchronous operation. The + primary way of interacting with a promise is through its `then` method, which + registers callbacks to receive either a promise's eventual value or the reason + why the promise cannot be fulfilled. + + Terminology + ----------- + + - `promise` is an object or function with a `then` method whose behavior conforms to this specification. + - `thenable` is an object or function that defines a `then` method. + - `value` is any legal JavaScript value (including undefined, a thenable, or a promise). + - `exception` is a value that is thrown using the throw statement. + - `reason` is a value that indicates why a promise was rejected. + - `settled` the final resting state of a promise, fulfilled or rejected. + + A promise can be in one of three states: pending, fulfilled, or rejected. + + Promises that are fulfilled have a fulfillment value and are in the fulfilled + state. Promises that are rejected have a rejection reason and are in the + rejected state. A fulfillment value is never a thenable. + + Promises can also be said to *resolve* a value. If this value is also a + promise, then the original promise's settled state will match the value's + settled state. So a promise that *resolves* a promise that rejects will + itself reject, and a promise that *resolves* a promise that fulfills will + itself fulfill. + + + Basic Usage: + ------------ + + ```js + var promise = new Promise(function(resolve, reject) { + // on success + resolve(value); + + // on failure + reject(reason); + }); + + promise.then(function(value) { + // on fulfillment + }, function(reason) { + // on rejection + }); + ``` + + Advanced Usage: + --------------- + + Promises shine when abstracting away asynchronous interactions such as + `XMLHttpRequest`s. + + ```js + function getJSON(url) { + return new Promise(function(resolve, reject){ + var xhr = new XMLHttpRequest(); + + xhr.open('GET', url); + xhr.onreadystatechange = handler; + xhr.responseType = 'json'; + xhr.setRequestHeader('Accept', 'application/json'); + xhr.send(); + + function handler() { + if (this.readyState === this.DONE) { + if (this.status === 200) { + resolve(this.response); + } else { + reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']')); + } + } + }; + }); + } + + getJSON('/posts.json').then(function(json) { + // on fulfillment + }, function(reason) { + // on rejection + }); + ``` + + Unlike callbacks, promises are great composable primitives. + + ```js + Promise.all([ + getJSON('/posts'), + getJSON('/comments') + ]).then(function(values){ + values[0] // => postsJSON + values[1] // => commentsJSON + + return values; + }); + ``` + + @class Promise + @param {function} resolver + Useful for tooling. + @constructor + */ + function lib$es6$promise$promise$$Promise(resolver) { + this._id = lib$es6$promise$promise$$counter++; + this._state = undefined; + this._result = undefined; + this._subscribers = []; + + if (lib$es6$promise$$internal$$noop !== resolver) { + if (!lib$es6$promise$utils$$isFunction(resolver)) { + lib$es6$promise$promise$$needsResolver(); + } + + if (!(this instanceof lib$es6$promise$promise$$Promise)) { + lib$es6$promise$promise$$needsNew(); + } + + lib$es6$promise$$internal$$initializePromise(this, resolver); + } + } + + lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default; + lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default; + lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default; + lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default; + lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler; + lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap; + lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap; + + lib$es6$promise$promise$$Promise.prototype = { + constructor: lib$es6$promise$promise$$Promise, + + /** + The primary way of interacting with a promise is through its `then` method, + which registers callbacks to receive either a promise's eventual value or the + reason why the promise cannot be fulfilled. + + ```js + findUser().then(function(user){ + // user is available + }, function(reason){ + // user is unavailable, and you are given the reason why + }); + ``` + + Chaining + -------- + + The return value of `then` is itself a promise. This second, 'downstream' + promise is resolved with the return value of the first promise's fulfillment + or rejection handler, or rejected if the handler throws an exception. + + ```js + findUser().then(function (user) { + return user.name; + }, function (reason) { + return 'default name'; + }).then(function (userName) { + // If `findUser` fulfilled, `userName` will be the user's name, otherwise it + // will be `'default name'` + }); + + findUser().then(function (user) { + throw new Error('Found user, but still unhappy'); + }, function (reason) { + throw new Error('`findUser` rejected and we're unhappy'); + }).then(function (value) { + // never reached + }, function (reason) { + // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. + // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'. + }); + ``` + If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. + + ```js + findUser().then(function (user) { + throw new PedagogicalException('Upstream error'); + }).then(function (value) { + // never reached + }).then(function (value) { + // never reached + }, function (reason) { + // The `PedgagocialException` is propagated all the way down to here + }); + ``` + + Assimilation + ------------ + + Sometimes the value you want to propagate to a downstream promise can only be + retrieved asynchronously. This can be achieved by returning a promise in the + fulfillment or rejection handler. The downstream promise will then be pending + until the returned promise is settled. This is called *assimilation*. + + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // The user's comments are now available + }); + ``` + + If the assimliated promise rejects, then the downstream promise will also reject. + + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // If `findCommentsByAuthor` fulfills, we'll have the value here + }, function (reason) { + // If `findCommentsByAuthor` rejects, we'll have the reason here + }); + ``` + + Simple Example + -------------- + + Synchronous Example + + ```javascript + var result; + + try { + result = findResult(); + // success + } catch(reason) { + // failure + } + ``` + + Errback Example + + ```js + findResult(function(result, err){ + if (err) { + // failure + } else { + // success + } + }); + ``` + + Promise Example; + + ```javascript + findResult().then(function(result){ + // success + }, function(reason){ + // failure + }); + ``` + + Advanced Example + -------------- + + Synchronous Example + + ```javascript + var author, books; + + try { + author = findAuthor(); + books = findBooksByAuthor(author); + // success + } catch(reason) { + // failure + } + ``` + + Errback Example + + ```js + + function foundBooks(books) { + + } + + function failure(reason) { + + } + + findAuthor(function(author, err){ + if (err) { + failure(err); + // failure + } else { + try { + findBoooksByAuthor(author, function(books, err) { + if (err) { + failure(err); + } else { + try { + foundBooks(books); + } catch(reason) { + failure(reason); + } + } + }); + } catch(error) { + failure(err); + } + // success + } + }); + ``` + + Promise Example; + + ```javascript + findAuthor(). + then(findBooksByAuthor). + then(function(books){ + // found books + }).catch(function(reason){ + // something went wrong + }); + ``` + + @method then + @param {Function} onFulfilled + @param {Function} onRejected + Useful for tooling. + @return {Promise} + */ + then: function(onFulfillment, onRejection) { + var parent = this; + var state = parent._state; + + if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) { + return this; + } + + var child = new this.constructor(lib$es6$promise$$internal$$noop); + var result = parent._result; + + if (state) { + var callback = arguments[state - 1]; + lib$es6$promise$asap$$asap(function(){ + lib$es6$promise$$internal$$invokeCallback(state, child, callback, result); + }); + } else { + lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection); + } + + return child; + }, + + /** + `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same + as the catch block of a try/catch statement. + + ```js + function findAuthor(){ + throw new Error('couldn't find that author'); + } + + // synchronous + try { + findAuthor(); + } catch(reason) { + // something went wrong + } + + // async with promises + findAuthor().catch(function(reason){ + // something went wrong + }); + ``` + + @method catch + @param {Function} onRejection + Useful for tooling. + @return {Promise} + */ + 'catch': function(onRejection) { + return this.then(null, onRejection); + } + }; + function lib$es6$promise$polyfill$$polyfill() { + var local; + + if (typeof global !== 'undefined') { + local = global; + } else if (typeof self !== 'undefined') { + local = self; + } else { + try { + local = Function('return this')(); + } catch (e) { + throw new Error('polyfill failed because global object is unavailable in this environment'); + } + } + + var P = local.Promise; + + if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) { + return; + } + + local.Promise = lib$es6$promise$promise$$default; + } + var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill; + + var lib$es6$promise$umd$$ES6Promise = { + 'Promise': lib$es6$promise$promise$$default, + 'polyfill': lib$es6$promise$polyfill$$default + }; + + /* global define:true module:true window: true */ + if (typeof define === 'function' && define['amd']) { + define(function() { return lib$es6$promise$umd$$ES6Promise; }); + } else if (typeof module !== 'undefined' && module['exports']) { + module['exports'] = lib$es6$promise$umd$$ES6Promise; + } else if (typeof this !== 'undefined') { + this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise; + } + + lib$es6$promise$polyfill$$default(); +}).call(this); + + +/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */ +;(function () { + // Detect the `define` function exposed by asynchronous module loaders. The + // strict `define` check is necessary for compatibility with `r.js`. + var isLoader = typeof define === "function" && define.amd; + + // A set of types used to distinguish objects from primitives. + var objectTypes = { + "function": true, + "object": true + }; + + // Detect the `exports` object exposed by CommonJS implementations. + var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; + + // Use the `global` object exposed by Node (including Browserify via + // `insert-module-globals`), Narwhal, and Ringo as the default context, + // and the `window` object in browsers. Rhino exports a `global` function + // instead. + var root = objectTypes[typeof window] && window || this, + freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == "object" && global; + + if (freeGlobal && (freeGlobal["global"] === freeGlobal || freeGlobal["window"] === freeGlobal || freeGlobal["self"] === freeGlobal)) { + root = freeGlobal; + } + + // Public: Initializes JSON 3 using the given `context` object, attaching the + // `stringify` and `parse` functions to the specified `exports` object. + function runInContext(context, exports) { + context || (context = root["Object"]()); + exports || (exports = root["Object"]()); + + // Native constructor aliases. + var Number = context["Number"] || root["Number"], + String = context["String"] || root["String"], + Object = context["Object"] || root["Object"], + Date = context["Date"] || root["Date"], + SyntaxError = context["SyntaxError"] || root["SyntaxError"], + TypeError = context["TypeError"] || root["TypeError"], + Math = context["Math"] || root["Math"], + nativeJSON = context["JSON"] || root["JSON"]; + + // Delegate to the native `stringify` and `parse` implementations. + if (typeof nativeJSON == "object" && nativeJSON) { + exports.stringify = nativeJSON.stringify; + exports.parse = nativeJSON.parse; + } + + // Convenience aliases. + var objectProto = Object.prototype, + getClass = objectProto.toString, + isProperty, forEach, undef; + + // Test the `Date#getUTC*` methods. Based on work by @Yaffle. + var isExtended = new Date(-3509827334573292); + try { + // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical + // results for certain dates in Opera >= 10.53. + isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 && + // Safari < 2.0.2 stores the internal millisecond time value correctly, + // but clips the values returned by the date methods to the range of + // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]). + isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708; + } catch (exception) {} + + // Internal: Determines whether the native `JSON.stringify` and `parse` + // implementations are spec-compliant. Based on work by Ken Snyder. + function has(name) { + if (has[name] !== undef) { + // Return cached feature test result. + return has[name]; + } + var isSupported; + if (name == "bug-string-char-index") { + // IE <= 7 doesn't support accessing string characters using square + // bracket notation. IE 8 only supports this for primitives. + isSupported = "a"[0] != "a"; + } else if (name == "json") { + // Indicates whether both `JSON.stringify` and `JSON.parse` are + // supported. + isSupported = has("json-stringify") && has("json-parse"); + } else { + var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}'; + // Test `JSON.stringify`. + if (name == "json-stringify") { + var stringify = exports.stringify, stringifySupported = typeof stringify == "function" && isExtended; + if (stringifySupported) { + // A test function object with a custom `toJSON` method. + (value = function () { + return 1; + }).toJSON = value; + try { + stringifySupported = + // Firefox 3.1b1 and b2 serialize string, number, and boolean + // primitives as object literals. + stringify(0) === "0" && + // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object + // literals. + stringify(new Number()) === "0" && + stringify(new String()) == '""' && + // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or + // does not define a canonical JSON representation (this applies to + // objects with `toJSON` properties as well, *unless* they are nested + // within an object or array). + stringify(getClass) === undef && + // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and + // FF 3.1b3 pass this test. + stringify(undef) === undef && + // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s, + // respectively, if the value is omitted entirely. + stringify() === undef && + // FF 3.1b1, 2 throw an error if the given value is not a number, + // string, array, object, Boolean, or `null` literal. This applies to + // objects with custom `toJSON` methods as well, unless they are nested + // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON` + // methods entirely. + stringify(value) === "1" && + stringify([value]) == "[1]" && + // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of + // `"[null]"`. + stringify([undef]) == "[null]" && + // YUI 3.0.0b1 fails to serialize `null` literals. + stringify(null) == "null" && + // FF 3.1b1, 2 halts serialization if an array contains a function: + // `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3 + // elides non-JSON values from objects and arrays, unless they + // define custom `toJSON` methods. + stringify([undef, getClass, null]) == "[null,null,null]" && + // Simple serialization test. FF 3.1b1 uses Unicode escape sequences + // where character escape codes are expected (e.g., `\b` => `\u0008`). + stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized && + // FF 3.1b1 and b2 ignore the `filter` and `width` arguments. + stringify(null, value) === "1" && + stringify([1, 2], null, 1) == "[\n 1,\n 2\n]" && + // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly + // serialize extended years. + stringify(new Date(-8.64e15)) == '"-271821-04-20T00:00:00.000Z"' && + // The milliseconds are optional in ES 5, but required in 5.1. + stringify(new Date(8.64e15)) == '"+275760-09-13T00:00:00.000Z"' && + // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative + // four-digit years instead of six-digit years. Credits: @Yaffle. + stringify(new Date(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' && + // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond + // values less than 1000. Credits: @Yaffle. + stringify(new Date(-1)) == '"1969-12-31T23:59:59.999Z"'; + } catch (exception) { + stringifySupported = false; + } + } + isSupported = stringifySupported; + } + // Test `JSON.parse`. + if (name == "json-parse") { + var parse = exports.parse; + if (typeof parse == "function") { + try { + // FF 3.1b1, b2 will throw an exception if a bare literal is provided. + // Conforming implementations should also coerce the initial argument to + // a string prior to parsing. + if (parse("0") === 0 && !parse(false)) { + // Simple parsing test. + value = parse(serialized); + var parseSupported = value["a"].length == 5 && value["a"][0] === 1; + if (parseSupported) { + try { + // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings. + parseSupported = !parse('"\t"'); + } catch (exception) {} + if (parseSupported) { + try { + // FF 4.0 and 4.0.1 allow leading `+` signs and leading + // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow + // certain octal literals. + parseSupported = parse("01") !== 1; + } catch (exception) {} + } + if (parseSupported) { + try { + // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal + // points. These environments, along with FF 3.1b1 and 2, + // also allow trailing commas in JSON objects and arrays. + parseSupported = parse("1.") !== 1; + } catch (exception) {} + } + } + } + } catch (exception) { + parseSupported = false; + } + } + isSupported = parseSupported; + } + } + return has[name] = !!isSupported; + } + + if (!has("json")) { + // Common `[[Class]]` name aliases. + var functionClass = "[object Function]", + dateClass = "[object Date]", + numberClass = "[object Number]", + stringClass = "[object String]", + arrayClass = "[object Array]", + booleanClass = "[object Boolean]"; + + // Detect incomplete support for accessing string characters by index. + var charIndexBuggy = has("bug-string-char-index"); + + // Define additional utility methods if the `Date` methods are buggy. + if (!isExtended) { + var floor = Math.floor; + // A mapping between the months of the year and the number of days between + // January 1st and the first of the respective month. + var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; + // Internal: Calculates the number of days between the Unix epoch and the + // first day of the given month. + var getDay = function (year, month) { + return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400); + }; + } + + // Internal: Determines if a property is a direct property of the given + // object. Delegates to the native `Object#hasOwnProperty` method. + if (!(isProperty = objectProto.hasOwnProperty)) { + isProperty = function (property) { + var members = {}, constructor; + if ((members.__proto__ = null, members.__proto__ = { + // The *proto* property cannot be set multiple times in recent + // versions of Firefox and SeaMonkey. + "toString": 1 + }, members).toString != getClass) { + // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but + // supports the mutable *proto* property. + isProperty = function (property) { + // Capture and break the object's prototype chain (see section 8.6.2 + // of the ES 5.1 spec). The parenthesized expression prevents an + // unsafe transformation by the Closure Compiler. + var original = this.__proto__, result = property in (this.__proto__ = null, this); + // Restore the original prototype chain. + this.__proto__ = original; + return result; + }; + } else { + // Capture a reference to the top-level `Object` constructor. + constructor = members.constructor; + // Use the `constructor` property to simulate `Object#hasOwnProperty` in + // other environments. + isProperty = function (property) { + var parent = (this.constructor || constructor).prototype; + return property in this && !(property in parent && this[property] === parent[property]); + }; + } + members = null; + return isProperty.call(this, property); + }; + } + + // Internal: Normalizes the `for...in` iteration algorithm across + // environments. Each enumerated key is yielded to a `callback` function. + forEach = function (object, callback) { + var size = 0, Properties, members, property; + + // Tests for bugs in the current environment's `for...in` algorithm. The + // `valueOf` property inherits the non-enumerable flag from + // `Object.prototype` in older versions of IE, Netscape, and Mozilla. + (Properties = function () { + this.valueOf = 0; + }).prototype.valueOf = 0; + + // Iterate over a new instance of the `Properties` class. + members = new Properties(); + for (property in members) { + // Ignore all properties inherited from `Object.prototype`. + if (isProperty.call(members, property)) { + size++; + } + } + Properties = members = null; + + // Normalize the iteration algorithm. + if (!size) { + // A list of non-enumerable properties inherited from `Object.prototype`. + members = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"]; + // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable + // properties. + forEach = function (object, callback) { + var isFunction = getClass.call(object) == functionClass, property, length; + var hasProperty = !isFunction && typeof object.constructor != "function" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty; + for (property in object) { + // Gecko <= 1.0 enumerates the `prototype` property of functions under + // certain conditions; IE does not. + if (!(isFunction && property == "prototype") && hasProperty.call(object, property)) { + callback(property); + } + } + // Manually invoke the callback for each non-enumerable property. + for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property)); + }; + } else if (size == 2) { + // Safari <= 2.0.4 enumerates shadowed properties twice. + forEach = function (object, callback) { + // Create a set of iterated properties. + var members = {}, isFunction = getClass.call(object) == functionClass, property; + for (property in object) { + // Store each property name to prevent double enumeration. The + // `prototype` property of functions is not enumerated due to cross- + // environment inconsistencies. + if (!(isFunction && property == "prototype") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) { + callback(property); + } + } + }; + } else { + // No bugs detected; use the standard `for...in` algorithm. + forEach = function (object, callback) { + var isFunction = getClass.call(object) == functionClass, property, isConstructor; + for (property in object) { + if (!(isFunction && property == "prototype") && isProperty.call(object, property) && !(isConstructor = property === "constructor")) { + callback(property); + } + } + // Manually invoke the callback for the `constructor` property due to + // cross-environment inconsistencies. + if (isConstructor || isProperty.call(object, (property = "constructor"))) { + callback(property); + } + }; + } + return forEach(object, callback); + }; + + // Public: Serializes a JavaScript `value` as a JSON string. The optional + // `filter` argument may specify either a function that alters how object and + // array members are serialized, or an array of strings and numbers that + // indicates which properties should be serialized. The optional `width` + // argument may be either a string or number that specifies the indentation + // level of the output. + if (!has("json-stringify")) { + // Internal: A map of control characters and their escaped equivalents. + var Escapes = { + 92: "\\\\", + 34: '\\"', + 8: "\\b", + 12: "\\f", + 10: "\\n", + 13: "\\r", + 9: "\\t" + }; + + // Internal: Converts `value` into a zero-padded string such that its + // length is at least equal to `width`. The `width` must be <= 6. + var leadingZeroes = "000000"; + var toPaddedString = function (width, value) { + // The `|| 0` expression is necessary to work around a bug in + // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`. + return (leadingZeroes + (value || 0)).slice(-width); + }; + + // Internal: Double-quotes a string `value`, replacing all ASCII control + // characters (characters with code unit values between 0 and 31) with + // their escaped equivalents. This is an implementation of the + // `Quote(value)` operation defined in ES 5.1 section 15.12.3. + var unicodePrefix = "\\u00"; + var quote = function (value) { + var result = '"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10; + var symbols = useCharIndex && (charIndexBuggy ? value.split("") : value); + for (; index < length; index++) { + var charCode = value.charCodeAt(index); + // If the character is a control character, append its Unicode or + // shorthand escape sequence; otherwise, append the character as-is. + switch (charCode) { + case 8: case 9: case 10: case 12: case 13: case 34: case 92: + result += Escapes[charCode]; + break; + default: + if (charCode < 32) { + result += unicodePrefix + toPaddedString(2, charCode.toString(16)); + break; + } + result += useCharIndex ? symbols[index] : value.charAt(index); + } + } + return result + '"'; + }; + + // Internal: Recursively serializes an object. Implements the + // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations. + var serialize = function (property, object, callback, properties, whitespace, indentation, stack) { + var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result; + try { + // Necessary for host object support. + value = object[property]; + } catch (exception) {} + if (typeof value == "object" && value) { + className = getClass.call(value); + if (className == dateClass && !isProperty.call(value, "toJSON")) { + if (value > -1 / 0 && value < 1 / 0) { + // Dates are serialized according to the `Date#toJSON` method + // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15 + // for the ISO 8601 date time string format. + if (getDay) { + // Manually compute the year, month, date, hours, minutes, + // seconds, and milliseconds if the `getUTC*` methods are + // buggy. Adapted from @Yaffle's `date-shim` project. + date = floor(value / 864e5); + for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++); + for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++); + date = 1 + date - getDay(year, month); + // The `time` value specifies the time within the day (see ES + // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used + // to compute `A modulo B`, as the `%` operator does not + // correspond to the `modulo` operation for negative numbers. + time = (value % 864e5 + 864e5) % 864e5; + // The hours, minutes, seconds, and milliseconds are obtained by + // decomposing the time within the day. See section 15.9.1.10. + hours = floor(time / 36e5) % 24; + minutes = floor(time / 6e4) % 60; + seconds = floor(time / 1e3) % 60; + milliseconds = time % 1e3; + } else { + year = value.getUTCFullYear(); + month = value.getUTCMonth(); + date = value.getUTCDate(); + hours = value.getUTCHours(); + minutes = value.getUTCMinutes(); + seconds = value.getUTCSeconds(); + milliseconds = value.getUTCMilliseconds(); + } + // Serialize extended years correctly. + value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) + + "-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) + + // Months, dates, hours, minutes, and seconds should have two + // digits; milliseconds should have three. + "T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) + + // Milliseconds are optional in ES 5.0, but required in 5.1. + "." + toPaddedString(3, milliseconds) + "Z"; + } else { + value = null; + } + } else if (typeof value.toJSON == "function" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, "toJSON"))) { + // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the + // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3 + // ignores all `toJSON` methods on these objects unless they are + // defined directly on an instance. + value = value.toJSON(property); + } + } + if (callback) { + // If a replacement function was provided, call it to obtain the value + // for serialization. + value = callback.call(object, property, value); + } + if (value === null) { + return "null"; + } + className = getClass.call(value); + if (className == booleanClass) { + // Booleans are represented literally. + return "" + value; + } else if (className == numberClass) { + // JSON numbers must be finite. `Infinity` and `NaN` are serialized as + // `"null"`. + return value > -1 / 0 && value < 1 / 0 ? "" + value : "null"; + } else if (className == stringClass) { + // Strings are double-quoted and escaped. + return quote("" + value); + } + // Recursively serialize objects and arrays. + if (typeof value == "object") { + // Check for cyclic structures. This is a linear search; performance + // is inversely proportional to the number of unique nested objects. + for (length = stack.length; length--;) { + if (stack[length] === value) { + // Cyclic structures cannot be serialized by `JSON.stringify`. + throw TypeError(); + } + } + // Add the object to the stack of traversed objects. + stack.push(value); + results = []; + // Save the current indentation level and indent one additional level. + prefix = indentation; + indentation += whitespace; + if (className == arrayClass) { + // Recursively serialize array elements. + for (index = 0, length = value.length; index < length; index++) { + element = serialize(index, value, callback, properties, whitespace, indentation, stack); + results.push(element === undef ? "null" : element); + } + result = results.length ? (whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : ("[" + results.join(",") + "]")) : "[]"; + } else { + // Recursively serialize object members. Members are selected from + // either a user-specified list of property names, or the object + // itself. + forEach(properties || value, function (property) { + var element = serialize(property, value, callback, properties, whitespace, indentation, stack); + if (element !== undef) { + // According to ES 5.1 section 15.12.3: "If `gap` {whitespace} + // is not the empty string, let `member` {quote(property) + ":"} + // be the concatenation of `member` and the `space` character." + // The "`space` character" refers to the literal space + // character, not the `space` {width} argument provided to + // `JSON.stringify`. + results.push(quote(property) + ":" + (whitespace ? " " : "") + element); + } + }); + result = results.length ? (whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : ("{" + results.join(",") + "}")) : "{}"; + } + // Remove the object from the traversed object stack. + stack.pop(); + return result; + } + }; + + // Public: `JSON.stringify`. See ES 5.1 section 15.12.3. + exports.stringify = function (source, filter, width) { + var whitespace, callback, properties, className; + if (objectTypes[typeof filter] && filter) { + if ((className = getClass.call(filter)) == functionClass) { + callback = filter; + } else if (className == arrayClass) { + // Convert the property names array into a makeshift set. + properties = {}; + for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1)); + } + } + if (width) { + if ((className = getClass.call(width)) == numberClass) { + // Convert the `width` to an integer and create a string containing + // `width` number of space characters. + if ((width -= width % 1) > 0) { + for (whitespace = "", width > 10 && (width = 10); whitespace.length < width; whitespace += " "); + } + } else if (className == stringClass) { + whitespace = width.length <= 10 ? width : width.slice(0, 10); + } + } + // Opera <= 7.54u2 discards the values associated with empty string keys + // (`""`) only if they are used directly within an object member list + // (e.g., `!("" in { "": 1})`). + return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []); + }; + } + + // Public: Parses a JSON source string. + if (!has("json-parse")) { + var fromCharCode = String.fromCharCode; + + // Internal: A map of escaped control characters and their unescaped + // equivalents. + var Unescapes = { + 92: "\\", + 34: '"', + 47: "/", + 98: "\b", + 116: "\t", + 110: "\n", + 102: "\f", + 114: "\r" + }; + + // Internal: Stores the parser state. + var Index, Source; + + // Internal: Resets the parser state and throws a `SyntaxError`. + var abort = function () { + Index = Source = null; + throw SyntaxError(); + }; + + // Internal: Returns the next token, or `"$"` if the parser has reached + // the end of the source string. A token may be a string, number, `null` + // literal, or Boolean literal. + var lex = function () { + var source = Source, length = source.length, value, begin, position, isSigned, charCode; + while (Index < length) { + charCode = source.charCodeAt(Index); + switch (charCode) { + case 9: case 10: case 13: case 32: + // Skip whitespace tokens, including tabs, carriage returns, line + // feeds, and space characters. + Index++; + break; + case 123: case 125: case 91: case 93: case 58: case 44: + // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at + // the current position. + value = charIndexBuggy ? source.charAt(Index) : source[Index]; + Index++; + return value; + case 34: + // `"` delimits a JSON string; advance to the next character and + // begin parsing the string. String tokens are prefixed with the + // sentinel `@` character to distinguish them from punctuators and + // end-of-string tokens. + for (value = "@", Index++; Index < length;) { + charCode = source.charCodeAt(Index); + if (charCode < 32) { + // Unescaped ASCII control characters (those with a code unit + // less than the space character) are not permitted. + abort(); + } else if (charCode == 92) { + // A reverse solidus (`\`) marks the beginning of an escaped + // control character (including `"`, `\`, and `/`) or Unicode + // escape sequence. + charCode = source.charCodeAt(++Index); + switch (charCode) { + case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114: + // Revive escaped control characters. + value += Unescapes[charCode]; + Index++; + break; + case 117: + // `\u` marks the beginning of a Unicode escape sequence. + // Advance to the first character and validate the + // four-digit code point. + begin = ++Index; + for (position = Index + 4; Index < position; Index++) { + charCode = source.charCodeAt(Index); + // A valid sequence comprises four hexdigits (case- + // insensitive) that form a single hexadecimal value. + if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) { + // Invalid Unicode escape sequence. + abort(); + } + } + // Revive the escaped character. + value += fromCharCode("0x" + source.slice(begin, Index)); + break; + default: + // Invalid escape sequence. + abort(); + } + } else { + if (charCode == 34) { + // An unescaped double-quote character marks the end of the + // string. + break; + } + charCode = source.charCodeAt(Index); + begin = Index; + // Optimize for the common case where a string is valid. + while (charCode >= 32 && charCode != 92 && charCode != 34) { + charCode = source.charCodeAt(++Index); + } + // Append the string as-is. + value += source.slice(begin, Index); + } + } + if (source.charCodeAt(Index) == 34) { + // Advance to the next character and return the revived string. + Index++; + return value; + } + // Unterminated string. + abort(); + default: + // Parse numbers and literals. + begin = Index; + // Advance past the negative sign, if one is specified. + if (charCode == 45) { + isSigned = true; + charCode = source.charCodeAt(++Index); + } + // Parse an integer or floating-point value. + if (charCode >= 48 && charCode <= 57) { + // Leading zeroes are interpreted as octal literals. + if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) { + // Illegal octal literal. + abort(); + } + isSigned = false; + // Parse the integer component. + for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++); + // Floats cannot contain a leading decimal point; however, this + // case is already accounted for by the parser. + if (source.charCodeAt(Index) == 46) { + position = ++Index; + // Parse the decimal component. + for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++); + if (position == Index) { + // Illegal trailing decimal. + abort(); + } + Index = position; + } + // Parse exponents. The `e` denoting the exponent is + // case-insensitive. + charCode = source.charCodeAt(Index); + if (charCode == 101 || charCode == 69) { + charCode = source.charCodeAt(++Index); + // Skip past the sign following the exponent, if one is + // specified. + if (charCode == 43 || charCode == 45) { + Index++; + } + // Parse the exponential component. + for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++); + if (position == Index) { + // Illegal empty exponent. + abort(); + } + Index = position; + } + // Coerce the parsed value to a JavaScript number. + return +source.slice(begin, Index); + } + // A negative sign may only precede numbers. + if (isSigned) { + abort(); + } + // `true`, `false`, and `null` literals. + if (source.slice(Index, Index + 4) == "true") { + Index += 4; + return true; + } else if (source.slice(Index, Index + 5) == "false") { + Index += 5; + return false; + } else if (source.slice(Index, Index + 4) == "null") { + Index += 4; + return null; + } + // Unrecognized token. + abort(); + } + } + // Return the sentinel `$` character if the parser has reached the end + // of the source string. + return "$"; + }; + + // Internal: Parses a JSON `value` token. + var get = function (value) { + var results, hasMembers; + if (value == "$") { + // Unexpected end of input. + abort(); + } + if (typeof value == "string") { + if ((charIndexBuggy ? value.charAt(0) : value[0]) == "@") { + // Remove the sentinel `@` character. + return value.slice(1); + } + // Parse object and array literals. + if (value == "[") { + // Parses a JSON array, returning a new JavaScript array. + results = []; + for (;; hasMembers || (hasMembers = true)) { + value = lex(); + // A closing square bracket marks the end of the array literal. + if (value == "]") { + break; + } + // If the array literal contains elements, the current token + // should be a comma separating the previous element from the + // next. + if (hasMembers) { + if (value == ",") { + value = lex(); + if (value == "]") { + // Unexpected trailing `,` in array literal. + abort(); + } + } else { + // A `,` must separate each array element. + abort(); + } + } + // Elisions and leading commas are not permitted. + if (value == ",") { + abort(); + } + results.push(get(value)); + } + return results; + } else if (value == "{") { + // Parses a JSON object, returning a new JavaScript object. + results = {}; + for (;; hasMembers || (hasMembers = true)) { + value = lex(); + // A closing curly brace marks the end of the object literal. + if (value == "}") { + break; + } + // If the object literal contains members, the current token + // should be a comma separator. + if (hasMembers) { + if (value == ",") { + value = lex(); + if (value == "}") { + // Unexpected trailing `,` in object literal. + abort(); + } + } else { + // A `,` must separate each object member. + abort(); + } + } + // Leading commas are not permitted, object property names must be + // double-quoted strings, and a `:` must separate each property + // name and value. + if (value == "," || typeof value != "string" || (charIndexBuggy ? value.charAt(0) : value[0]) != "@" || lex() != ":") { + abort(); + } + results[value.slice(1)] = get(lex()); + } + return results; + } + // Unexpected token encountered. + abort(); + } + return value; + }; + + // Internal: Updates a traversed object member. + var update = function (source, property, callback) { + var element = walk(source, property, callback); + if (element === undef) { + delete source[property]; + } else { + source[property] = element; + } + }; + + // Internal: Recursively traverses a parsed JSON object, invoking the + // `callback` function for each value. This is an implementation of the + // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2. + var walk = function (source, property, callback) { + var value = source[property], length; + if (typeof value == "object" && value) { + // `forEach` can't be used to traverse an array in Opera <= 8.54 + // because its `Object#hasOwnProperty` implementation returns `false` + // for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`). + if (getClass.call(value) == arrayClass) { + for (length = value.length; length--;) { + update(value, length, callback); + } + } else { + forEach(value, function (property) { + update(value, property, callback); + }); + } + } + return callback.call(source, property, value); + }; + + // Public: `JSON.parse`. See ES 5.1 section 15.12.2. + exports.parse = function (source, callback) { + var result, value; + Index = 0; + Source = "" + source; + result = get(lex()); + // If a JSON string contains multiple tokens, it is invalid. + if (lex() != "$") { + abort(); + } + // Reset the parser state. + Index = Source = null; + return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[""] = result, value), "", callback) : result; + }; + } + } + + exports["runInContext"] = runInContext; + return exports; + } + + if (freeExports && !isLoader) { + // Export for CommonJS environments. + runInContext(root, freeExports); + } else { + // Export for web browsers and JavaScript engines. + var nativeJSON = root.JSON, + previousJSON = root["JSON3"], + isRestored = false; + + var JSON3 = runInContext(root, (root["JSON3"] = { + // Public: Restores the original value of the global `JSON` object and + // returns a reference to the `JSON3` object. + "noConflict": function () { + if (!isRestored) { + isRestored = true; + root.JSON = nativeJSON; + root["JSON3"] = previousJSON; + nativeJSON = previousJSON = null; + } + return JSON3; + } + })); + + root.JSON = { + "parse": JSON3.parse, + "stringify": JSON3.stringify + }; + } + + // Export for asynchronous module loaders. + if (isLoader) { + define(function () { + return JSON3; + }); + } +}).call(this); + +// Polyfill for old browsers +// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray +if (!Array.isArray) { + Array.isArray = function(arg) { + return Object.prototype.toString.call(arg) === '[object Array]'; + }; +} + +if (typeof Promise === 'undefined') { + ES6Promise.polyfill(); +} + +// ES5 Polyfills +// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind +if (!Function.prototype.bind) { + Function.prototype.bind = function (oThis) { + if (typeof this !== 'function') { + throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable'); + } + + var aArgs = Array.prototype.slice.call(arguments, 1); + var fToBind = this; + var NoOp = function () { + }; + var fBound = function () { + return fToBind.apply(this instanceof NoOp && oThis ? this : oThis, + aArgs.concat(Array.prototype.slice.call(arguments))); + }; + + NoOp.prototype = this.prototype; + fBound.prototype = new NoOp(); + + return fBound; + }; +} + + +// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map +if (!Array.prototype.map) { + Array.prototype.map = function(callback, thisArg) { + if (this === void 0 || this === null) { + throw new TypeError('this is null or not defined'); + } + var O = Object(this); + var len = O.length >>> 0; + var T; + if (typeof callback !== 'function') { + throw new TypeError(callback + ' is not a function'); + } + if (arguments.length > 1) { + T = thisArg; + } + + var A = new Array(len); + var k = 0; + + while (k < len) { + var kValue, mappedValue; + if (k in O) { + kValue = O[k]; + mappedValue = callback.call(T, kValue, k, O); + A[k] = mappedValue; + } + k++; + } + + return A; + }; +} + +// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter +if (!Array.prototype.filter) { + Array.prototype.filter = function(callback/*, thisArg*/) { + if (this === void 0 || this === null) { + throw new TypeError('this is null or not defined'); + } + + var t = Object(this); + var len = t.length >>> 0; + if (typeof callback !== 'function') { + throw new TypeError(callback + ' is not a function'); + } + + var res = []; + var thisArg = arguments.length >= 2 ? arguments[1] : void 0; + for (var i = 0; i < len; i++) { + if (i in t) { + var val = t[i]; + if (callback.call(thisArg, val, i, t)) { + res.push(val); + } + } + } + + return res; + }; +} + +// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach +if (!Array.prototype.forEach) { + Array.prototype.forEach = function(callback, thisArg) { + var T, k; + if (this === null || this === undefined) { + throw new TypeError(' this is null or not defined'); + } + + var O = Object(this); + var len = O.length >>> 0; + if (typeof callback !== 'function') { + throw new TypeError(callback + ' is not a function'); + } + + if (arguments.length > 1) { + T = thisArg; + } + k = 0; + while (k < len) { + var kValue; + if (k in O) { + kValue = O[k]; + callback.call(T, kValue, k, O); + } + k++; + } + }; +} + +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",t=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(";"===e.charAt(v))l++,v++,p=0;else if(","===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),"number"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function r(e,n,r){var t=new XMLHttpRequest;t.open("get",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error("Unable to retrieve "+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,l=e.split("\n"),c="",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf("//"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(n){return new Promise(function(r,t){var o="data:"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(n.substr(5,i.length)!==i)t(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+i.length+",".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l="data:"===i.substr(0,5);"/"===i[0]||l||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new u(e)}}); +//# sourceMappingURL=stacktrace-gps.min.js.map +(function (root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stack-generator', ['stackframe'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('stackframe')); + } else { + root.StackGenerator = factory(root.StackFrame); + } +}(this, function (StackFrame) { + return { + backtrace: function StackGenerator$$backtrace(opts) { + var stack = []; + var maxStackSize = 10; + + if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') { + maxStackSize = opts.maxStackSize; + } + + var curr = arguments.callee; + while (curr && stack.length < maxStackSize) { + // Allow V8 optimizations + var args = new Array(curr['arguments'].length); + for(var i = 0; i < args.length; ++i) { + args[i] = curr['arguments'][i]; + } + if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { + stack.push(new StackFrame(RegExp.$1 || undefined, args)); + } else { + stack.push(new StackFrame(undefined, args)); + } + + try { + curr = curr.caller; + } catch (e) { + break; + } + } + return stack; + } + }; +})); + +(function (root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('error-stack-parser', ['stackframe'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('stackframe')); + } else { + root.ErrorStackParser = factory(root.StackFrame); + } +}(this, function ErrorStackParser(StackFrame) { + 'use strict'; + + var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\S+\:\d+/; + var CHROME_IE_STACK_REGEXP = /\s+at .*(\S+\:\d+|\(native\))/; + + return { + /** + * Given an Error object, extract the most information from it. + * @param error {Error} + * @return Array[StackFrame] + */ + parse: function ErrorStackParser$$parse(error) { + if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') { + return this.parseOpera(error); + } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) { + return this.parseV8OrIE(error); + } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) { + return this.parseFFOrSafari(error); + } else { + throw new Error('Cannot parse given Error object'); + } + }, + + /** + * Separate line and column numbers from a URL-like string. + * @param urlLike String + * @return Array[String] + */ + extractLocation: function ErrorStackParser$$extractLocation(urlLike) { + // Fail-fast but return locations like "(native)" + if (urlLike.indexOf(':') === -1) { + return [urlLike]; + } + + var locationParts = urlLike.replace(/[\(\)\s]/g, '').split(':'); + var lastNumber = locationParts.pop(); + var possibleNumber = locationParts[locationParts.length - 1]; + if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) { + var lineNumber = locationParts.pop(); + return [locationParts.join(':'), lineNumber, lastNumber]; + } else { + return [locationParts.join(':'), lastNumber, undefined]; + } + }, + + parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) { + return error.stack.split('\n').filter(function (line) { + return !!line.match(CHROME_IE_STACK_REGEXP); + }, this).map(function (line) { + var tokens = line.replace(/^\s+/, '').split(/\s+/).slice(1); + var locationParts = this.extractLocation(tokens.pop()); + var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0]; + return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line); + }, this); + }, + + parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) { + return error.stack.split('\n').filter(function (line) { + return !!line.match(FIREFOX_SAFARI_STACK_REGEXP); + }, this).map(function (line) { + var tokens = line.split('@'); + var locationParts = this.extractLocation(tokens.pop()); + var functionName = tokens.shift() || undefined; + return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line); + }, this); + }, + + parseOpera: function ErrorStackParser$$parseOpera(e) { + if (!e.stacktrace || (e.message.indexOf('\n') > -1 && + e.message.split('\n').length > e.stacktrace.split('\n').length)) { + return this.parseOpera9(e); + } else if (!e.stack) { + return this.parseOpera10(e); + } else { + return this.parseOpera11(e); + } + }, + + parseOpera9: function ErrorStackParser$$parseOpera9(e) { + var lineRE = /Line (\d+).*script (?:in )?(\S+)/i; + var lines = e.message.split('\n'); + var result = []; + + for (var i = 2, len = lines.length; i < len; i += 2) { + var match = lineRE.exec(lines[i]); + if (match) { + result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i])); + } + } + + return result; + }, + + parseOpera10: function ErrorStackParser$$parseOpera10(e) { + var lineRE = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i; + var lines = e.stacktrace.split('\n'); + var result = []; + + for (var i = 0, len = lines.length; i < len; i += 2) { + var match = lineRE.exec(lines[i]); + if (match) { + result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i])); + } + } + + return result; + }, + + // Opera 10.65+ Error.stack very similar to FF/Safari + parseOpera11: function ErrorStackParser$$parseOpera11(error) { + return error.stack.split('\n').filter(function (line) { + return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && + !line.match(/^Error created at/); + }, this).map(function (line) { + var tokens = line.split('@'); + var locationParts = this.extractLocation(tokens.pop()); + var functionCall = (tokens.shift() || ''); + var functionName = functionCall + .replace(//, '$2') + .replace(/\([^\)]*\)/g, '') || undefined; + var argsRaw; + if (functionCall.match(/\(([^\)]*)\)/)) { + argsRaw = functionCall.replace(/^[^\(]+\(([^\)]*)\)$/, '$1'); + } + var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(','); + return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line); + }, this); + } + }; +})); + + +(function(root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps')); + } else { + root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS); + } +}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) { + var _options = { + filter: function(stackframe) { + // Filter out stackframes for this library by default + return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 && + (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 && + (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 && + (stackframe.functionName || '').indexOf('StackGenerator$$') === -1; + }, + sourceCache: {} + }; + + /** + * Merge 2 given Objects. If a conflict occurs the second object wins. + * Does not do deep merges. + * + * @param {Object} first base object + * @param {Object} second overrides + * @returns {Object} merged first and second + * @private + */ + function _merge(first, second) { + var target = {}; + + [first, second].forEach(function(obj) { + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + target[prop] = obj[prop]; + } + } + return target; + }); + + return target; + } + + function _isShapedLikeParsableError(err) { + return err.stack || err['opera#sourceloc']; + } + + return { + /** + * Get a backtrace from invocation point. + * + * @param {Object} opts + * @returns {Array} of StackFrame + */ + get: function StackTrace$$get(opts) { + try { + // Error must be thrown to get stack in IE + throw new Error(); + } catch (err) { + if (_isShapedLikeParsableError(err)) { + return this.fromError(err, opts); + } else { + return this.generateArtificially(opts); + } + } + }, + + /** + * Given an error object, parse it. + * + * @param {Error} error object + * @param {Object} opts + * @returns {Promise} for Array[StackFrame} + */ + fromError: function StackTrace$$fromError(error, opts) { + opts = _merge(_options, opts); + var gps = new StackTraceGPS(opts); + return new Promise(function(resolve) { + var stackframes = ErrorStackParser.parse(error); + if (typeof opts.filter === 'function') { + stackframes = stackframes.filter(opts.filter); + } + resolve(Promise.all(stackframes.map(function(sf) { + return new Promise(function(resolve) { + function resolveOriginal() { + resolve(sf); + } + + gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal); + }); + }))); + }.bind(this)); + }, + + /** + * Use StackGenerator to generate a backtrace. + * + * @param {Object} opts + * @returns {Promise} of Array[StackFrame] + */ + generateArtificially: function StackTrace$$generateArtificially(opts) { + opts = _merge(_options, opts); + var stackFrames = StackGenerator.backtrace(opts); + if (typeof opts.filter === 'function') { + stackFrames = stackFrames.filter(opts.filter); + } + return Promise.resolve(stackFrames); + }, + + /** + * Given a function, wrap it such that invocations trigger a callback that + * is called with a stack trace. + * + * @param {Function} fn to be instrumented + * @param {Function} callback function to call with a stack trace on invocation + * @param {Function} errback optional function to call with error if unable to get stack trace. + * @param {Object} thisArg optional context object (e.g. window) + */ + instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) { + if (typeof fn !== 'function') { + throw new Error('Cannot instrument non-function object'); + } else if (typeof fn.__stacktraceOriginalFn === 'function') { + // Already instrumented, return given Function + return fn; + } + + var instrumented = function StackTrace$$instrumented() { + try { + this.get().then(callback, errback)['catch'](errback); + return fn.apply(thisArg || this, arguments); + } catch (e) { + if (_isShapedLikeParsableError(e)) { + this.fromError(e).then(callback, errback)['catch'](errback); + } + throw e; + } + }.bind(this); + instrumented.__stacktraceOriginalFn = fn; + + return instrumented; + }, + + /** + * Given a function that has been instrumented, + * revert the function to it's original (non-instrumented) state. + * + * @param {Function} fn to de-instrument + */ + deinstrument: function StackTrace$$deinstrument(fn) { + if (typeof fn !== 'function') { + throw new Error('Cannot de-instrument non-function object'); + } else if (typeof fn.__stacktraceOriginalFn === 'function') { + return fn.__stacktraceOriginalFn; + } else { + // Function not instrumented, return original + return fn; + } + }, + + /** + * Given an Array of StackFrames, serialize and POST to given URL. + * + * @param {Array} stackframes + * @param {String} url + */ + report: function StackTrace$$report(stackframes, url) { + return new Promise(function(resolve, reject) { + var req = new XMLHttpRequest(); + req.onerror = reject; + req.onreadystatechange = function onreadystatechange() { + if (req.readyState === 4) { + if (req.status >= 200 && req.status < 400) { + resolve(req.responseText); + } else { + reject(new Error('POST to ' + url + ' failed with status: ' + req.status)); + } + } + }; + req.open('post', url); + req.setRequestHeader('Content-Type', 'application/json'); + req.send(JSON.stringify({stack: stackframes})); + }); + } + }; +})); diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index c6656f0..e1631c4 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ -(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){B=e}function r(e){z=e}function o(){return function(){process.nextTick(c)}}function i(){return function(){D(c)}}function a(){var e=0,t=new H(c),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function s(){var e=new MessageChannel;return e.port1.onmessage=c,function(){e.port2.postMessage(0)}}function u(){return function(){setTimeout(c,1)}}function c(){for(var e=0;I>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}I=0}function l(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,i()}catch(n){return u()}}function f(e,t){var n=this,r=n._state;if(r===te&&!e||r===ne&&!t)return this;var o=new this.constructor(h),i=n._result;if(r){var a=arguments[r-1];z(function(){M(r,o,a,i)})}else S(n,o,e,t);return o}function p(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(h);return b(n,e),n}function h(){}function g(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return re.error=t,re}}function y(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){z(function(e){var r=!1,o=y(n,t,function(n){r||(r=!0,t!==n?b(e,n):C(e,n))},function(t){r||(r=!0,O(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,O(e,o))},e)}function _(e,t){t._state===te?C(e,t._result):t._state===ne?O(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){O(e,t)})}function w(e,n,r){n.constructor===e.constructor&&r===K&&constructor.resolve===Q?_(e,n):r===re?O(e,re.error):void 0===r?C(e,n):t(r)?v(e,n,r):C(e,n)}function b(t,n){t===n?O(t,g()):e(n)?w(t,n,m(n)):C(t,n)}function A(e){e._onerror&&e._onerror(e._result),E(e)}function C(e,t){e._state===ee&&(e._result=t,e._state=te,0!==e._subscribers.length&&z(E,e))}function O(e,t){e._state===ee&&(e._state=ne,e._result=t,z(A,e))}function S(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+te]=n,o[i+ne]=r,0===i&&e._state&&z(E,e)}function E(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)S(r.resolve(e[a]),void 0,t,n);return o}function P(e){var t=this,n=new t(h);return O(n,e),n}function k(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],h!==e&&("function"!=typeof e&&k(),this instanceof F?j(this,e):R())}function U(e,t){this._instanceConstructor=e,this.promise=new e(h),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?C(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&C(this.promise,this._result))):O(this.promise,this._validationError())}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,B,J,q=$,I=0,z=function(e,t){X[I]=e,X[I+1]=t,I+=2,2===I&&(B?B(c):J())},Z="undefined"!=typeof window?window:void 0,Y=Z||{},H=Y.MutationObserver||Y.WebKitMutationObserver,W="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);J=W?o():H?a():V?s():void 0===Z&&"function"==typeof require?l():u();var K=f,Q=p,ee=void 0,te=1,ne=2,re=new N,oe=new N,ie=x,ae=T,se=P,ue=0,ce=F;F.all=ie,F.race=ae,F.resolve=Q,F.reject=se,F._setScheduler=n,F._setAsap=r,F._asap=z,F.prototype={constructor:F,then:K,"catch":function(e){return this.then(null,e)}};var le=U;U.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},U.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ee&&e>n;n++)this._eachEntry(t[n],n)},U.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===Q){var o=m(e);if(o===K&&e._state!==ee)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ce){var i=new n(h);w(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},U.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ee&&(this._remaining--,e===ne?O(r,n):this._result[t]=n),0===this._remaining&&C(r,this._result)},U.prototype._willSettleAt=function(e,t){var n=this;S(e,void 0,function(e){n._settledAt(te,t,e)},function(e){n._settledAt(ne,t,e)})};var fe=G,pe={Promise:ce,polyfill:fe};"function"==typeof define&&define.amd?define(function(){return pe}):"undefined"!=typeof module&&module.exports?module.exports=pe:"undefined"!=typeof this&&(this.ES6Promise=pe),fe()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==m)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===m&&u(m)===m&&u()===m&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([m])&&"null"==u(null)&&"[null,null,null]"==u([m,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,d,m,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!i("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return M[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?d=2==a?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var r,i,a=v.call(e)==b,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),d(e,t)},!i("json-stringify")){var x={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},T="000000",P=function(e,t){return(T+(t||0)).slice(-e)},k="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=x[a];break;default:if(32>a){t+=k+P(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,N,M,x,T,k,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=L((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,w=L(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+P(6,0>c?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,y)+":"+P(2,_)+":"+P(2,w)+"."+P(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(T=a.length;T--;)if(a[T]===s)throw f();if(a.push(s),N=[],k=i,i+=o,u==S){for(x=0,T=s.length;T>x;x++)M=F(x,s,n,r,o,i,a),N.push(M===m?"null":M);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+k+"]":"["+N.join(",")+"]":"[]"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+k+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==b)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=q(J()),"$"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(d))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,d=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=s,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e); -if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i=["eval",""].indexOf(r[0])>-1?void 0:r[0];return new e(o,void 0,i,r[1],r[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(i)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(o){var i=n(o.stack.split("\n"),function(e){return!!e.match(r)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){o=r(i,o);var a=new n(o);return new Promise(function(n){var r=e.parse(t);"function"==typeof o.filter&&(r=r.filter(o.filter)),n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}a.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function r(e){B=e}function o(e){z=e}function i(){return function(){process.nextTick(l)}}function a(){return function(){$(l)}}function s(){var e=0,t=new H(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;J>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}J=0}function f(){try{var e=require,t=e("vertx");return $=t.runOnLoop||t.runOnContext,a()}catch(n){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return te.error=t,te}}function d(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function y(e,t,n){z(function(e){var r=!1,o=d(n,t,function(n){r||(r=!0,t!==n?b(e,n):A(e,n))},function(t){r||(r=!0,C(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,C(e,o))},e)}function v(e,t){t._state===Q?A(e,t._result):t._state===ee?C(e,t._result):O(t,void 0,function(t){b(e,t)},function(t){C(e,t)})}function _(e,n){if(n.constructor===e.constructor)v(e,n);else{var r=m(n);r===te?C(e,te.error):void 0===r?A(e,n):t(r)?y(e,n,r):A(e,n)}}function b(t,n){t===n?C(t,h()):e(n)?_(t,n):A(t,n)}function w(e){e._onerror&&e._onerror(e._result),S(e)}function A(e,t){e._state===K&&(e._result=t,e._state=Q,0!==e._subscribers.length&&z(S,e))}function C(e,t){e._state===K&&(e._state=ee,e._result=t,z(w,e))}function O(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+Q]=n,o[i+ee]=r,0===i&&e._state&&z(S,e)}function S(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)O(r.resolve(e[a]),void 0,t,n);return o}function k(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(p);return b(n,e),n}function P(e){var t=this,n=new t(p);return C(n,e),n}function R(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function U(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||R(),this instanceof U||F(),M(this,e))}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var D;D=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var $,B,q,I=D,J=0,z=({}.toString,function(e,t){X[J]=e,X[J+1]=t,J+=2,2===J&&(B?B(l):q())}),Z="undefined"!=typeof window?window:void 0,W=Z||{},H=W.MutationObserver||W.WebKitMutationObserver,Y="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=Y?i():H?s():V?u():void 0===Z&&"function"==typeof require?f():c();var K=void 0,Q=1,ee=2,te=new E,ne=new E;j.prototype._validateInput=function(e){return I(e)},j.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},j.prototype._init=function(){this._result=new Array(this.length)};var re=j;j.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===K&&t>o;o++)e._eachEntry(r[o],o)},j.prototype._eachEntry=function(e,t){var r=this,o=r._instanceConstructor;n(e)?e.constructor===o&&e._state!==K?(e._onerror=null,r._settledAt(e._state,t,e._result)):r._willSettleAt(o.resolve(e),t):(r._remaining--,r._result[t]=e)},j.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===K&&(r._remaining--,e===ee?C(o,n):r._result[t]=n),0===r._remaining&&A(o,r._result)},j.prototype._willSettleAt=function(e,t){var n=this;O(e,void 0,function(e){n._settledAt(Q,t,e)},function(e){n._settledAt(ee,t,e)})};var oe=T,ie=x,ae=k,se=P,ue=0,ce=U;U.all=oe,U.race=ie,U.resolve=ae,U.reject=se,U._setScheduler=r,U._setAsap=o,U._asap=z,U.prototype={constructor:U,then:function(e,t){var n=this,r=n._state;if(r===Q&&!e||r===ee&&!t)return this;var o=new this.constructor(p),i=n._result;if(r){var a=arguments[r-1];z(function(){L(r,o,a,i)})}else O(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=G,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==d)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===d&&u(d)===d&&u()===d&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([d])&&"null"==u(null)&&"[null,null,null]"==u([d,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,m,d,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(b){}if(!i("json")){var w="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return M[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?m=2==a?function(e,t){var n,r={},o=v.call(e)==w;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==w;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var r,i,a=v.call(e)==w,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),m(e,t)},!i("json-stringify")){var T={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},x="000000",k=function(e,t){return(x+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=T[a];break;default:if(32>a){t+=P+k(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,b,w,N,M,T,x,P,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=L((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,b=L(h/1e3)%60,w=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),b=s.getUTCSeconds(),w=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+k(6,0>c?-c:c):k(4,c))+"-"+k(2,l+1)+"-"+k(2,p)+"T"+k(2,y)+":"+k(2,_)+":"+k(2,b)+"."+k(3,w)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(x=a.length;x--;)if(a[x]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==S){for(T=0,x=s.length;x>T;T++)M=F(T,s,n,r,o,i,a),N.push(M===d?"null":M);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+P+"]":"["+N.join(",")+"]":"[]"}else m(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==d&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+P+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==w)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=$[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=D("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},I=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=q(),"]"!=e;n||(n=!0))n&&(","==e?(e=q(),"]"==e&&B()):B()),","==e&&B(),t.push(I(e));return t}if("{"==e){for(t={};e=q(),"}"!=e;n||(n=!0))n&&(","==e?(e=q(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=q())&&B(),t[e.slice(1)]=I(q());return t}B()}return e},J=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)J(o,r,n);else m(o,function(e){J(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=I(q()),"$"!=q()&&B(),U=G=null,t&&v.call(t)==w?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,m=0,d=0,y=e.length,v=0,_={},b={},w=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&w.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(w,s.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(m))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=s,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.'); +},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e,t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return t(r.responseText);n(new Error("Unable to retrieve "+e))}},r.send()}function r(e,t,n){for(var r,o,i,a=/function\s+([^(]*?)\s*\(([^)]*)\)/,s=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=s.exec(l),o&&o[1])return o[1];if(o=a.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function a(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function s(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)r(new Error("The encoding of the inline sourcemap is not supported"));else{var a="data:".length+i.length+",".length,s=t.substr(a),u=this._atob(s);this.sourceCache[t]=u,n(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,n(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,o){i(e),this._get(e.fileName).then(function(o){var i=r(o,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),i(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=a(o),c="data:"===i.substr(0,5);"/"===i[0]||c||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(s(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new u(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){o=r(i,o);var a=new n(o);return new Promise(function(n){var r=e.parse(t);"function"==typeof o.filter&&(r=r.filter(o.filter)),n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}a.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map index c0d2365..973ff40 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","test","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","RegExp","$1","caller","ErrorStackParser","_map","array","fn","output","_filter","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","filtered","tokens","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","shift","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","stackframes","sf","resolveOriginal","stackFrames","instrument","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n *\n * @param {String} urlLike\n * @return {Array} 3-tuple of URL, Line Number, and Column Number\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","atob","Buffer","_get","offline","pinpoint","getMappedLocation","findFunctionName","substring","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.concat.js b/dist/stacktrace.concat.js new file mode 100644 index 0000000..0778cad --- /dev/null +++ b/dist/stacktrace.concat.js @@ -0,0 +1,383 @@ +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",t=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(";"===e.charAt(v))l++,v++,p=0;else if(","===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),"number"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function r(e,n,r){var t=new XMLHttpRequest;t.open("get",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error("Unable to retrieve "+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,l=e.split("\n"),c="",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf("//"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(n){return new Promise(function(r,t){var o="data:"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(n.substr(5,i.length)!==i)t(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+i.length+",".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l="data:"===i.substr(0,5);"/"===i[0]||l||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new u(e)}}); +//# sourceMappingURL=stacktrace-gps.min.js.map +(function (root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stack-generator', ['stackframe'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('stackframe')); + } else { + root.StackGenerator = factory(root.StackFrame); + } +}(this, function (StackFrame) { + return { + backtrace: function StackGenerator$$backtrace(opts) { + var stack = []; + var maxStackSize = 10; + + if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') { + maxStackSize = opts.maxStackSize; + } + + var curr = arguments.callee; + while (curr && stack.length < maxStackSize) { + // Allow V8 optimizations + var args = new Array(curr['arguments'].length); + for(var i = 0; i < args.length; ++i) { + args[i] = curr['arguments'][i]; + } + if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { + stack.push(new StackFrame(RegExp.$1 || undefined, args)); + } else { + stack.push(new StackFrame(undefined, args)); + } + + try { + curr = curr.caller; + } catch (e) { + break; + } + } + return stack; + } + }; +})); + +(function (root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('error-stack-parser', ['stackframe'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('stackframe')); + } else { + root.ErrorStackParser = factory(root.StackFrame); + } +}(this, function ErrorStackParser(StackFrame) { + 'use strict'; + + var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\S+\:\d+/; + var CHROME_IE_STACK_REGEXP = /\s+at .*(\S+\:\d+|\(native\))/; + + return { + /** + * Given an Error object, extract the most information from it. + * @param error {Error} + * @return Array[StackFrame] + */ + parse: function ErrorStackParser$$parse(error) { + if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') { + return this.parseOpera(error); + } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) { + return this.parseV8OrIE(error); + } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) { + return this.parseFFOrSafari(error); + } else { + throw new Error('Cannot parse given Error object'); + } + }, + + /** + * Separate line and column numbers from a URL-like string. + * @param urlLike String + * @return Array[String] + */ + extractLocation: function ErrorStackParser$$extractLocation(urlLike) { + // Fail-fast but return locations like "(native)" + if (urlLike.indexOf(':') === -1) { + return [urlLike]; + } + + var locationParts = urlLike.replace(/[\(\)\s]/g, '').split(':'); + var lastNumber = locationParts.pop(); + var possibleNumber = locationParts[locationParts.length - 1]; + if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) { + var lineNumber = locationParts.pop(); + return [locationParts.join(':'), lineNumber, lastNumber]; + } else { + return [locationParts.join(':'), lastNumber, undefined]; + } + }, + + parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) { + return error.stack.split('\n').filter(function (line) { + return !!line.match(CHROME_IE_STACK_REGEXP); + }, this).map(function (line) { + var tokens = line.replace(/^\s+/, '').split(/\s+/).slice(1); + var locationParts = this.extractLocation(tokens.pop()); + var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0]; + return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line); + }, this); + }, + + parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) { + return error.stack.split('\n').filter(function (line) { + return !!line.match(FIREFOX_SAFARI_STACK_REGEXP); + }, this).map(function (line) { + var tokens = line.split('@'); + var locationParts = this.extractLocation(tokens.pop()); + var functionName = tokens.shift() || undefined; + return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line); + }, this); + }, + + parseOpera: function ErrorStackParser$$parseOpera(e) { + if (!e.stacktrace || (e.message.indexOf('\n') > -1 && + e.message.split('\n').length > e.stacktrace.split('\n').length)) { + return this.parseOpera9(e); + } else if (!e.stack) { + return this.parseOpera10(e); + } else { + return this.parseOpera11(e); + } + }, + + parseOpera9: function ErrorStackParser$$parseOpera9(e) { + var lineRE = /Line (\d+).*script (?:in )?(\S+)/i; + var lines = e.message.split('\n'); + var result = []; + + for (var i = 2, len = lines.length; i < len; i += 2) { + var match = lineRE.exec(lines[i]); + if (match) { + result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i])); + } + } + + return result; + }, + + parseOpera10: function ErrorStackParser$$parseOpera10(e) { + var lineRE = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i; + var lines = e.stacktrace.split('\n'); + var result = []; + + for (var i = 0, len = lines.length; i < len; i += 2) { + var match = lineRE.exec(lines[i]); + if (match) { + result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i])); + } + } + + return result; + }, + + // Opera 10.65+ Error.stack very similar to FF/Safari + parseOpera11: function ErrorStackParser$$parseOpera11(error) { + return error.stack.split('\n').filter(function (line) { + return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && + !line.match(/^Error created at/); + }, this).map(function (line) { + var tokens = line.split('@'); + var locationParts = this.extractLocation(tokens.pop()); + var functionCall = (tokens.shift() || ''); + var functionName = functionCall + .replace(//, '$2') + .replace(/\([^\)]*\)/g, '') || undefined; + var argsRaw; + if (functionCall.match(/\(([^\)]*)\)/)) { + argsRaw = functionCall.replace(/^[^\(]+\(([^\)]*)\)$/, '$1'); + } + var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(','); + return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line); + }, this); + } + }; +})); + + +(function(root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps')); + } else { + root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS); + } +}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) { + var _options = { + filter: function(stackframe) { + // Filter out stackframes for this library by default + return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 && + (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 && + (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 && + (stackframe.functionName || '').indexOf('StackGenerator$$') === -1; + }, + sourceCache: {} + }; + + /** + * Merge 2 given Objects. If a conflict occurs the second object wins. + * Does not do deep merges. + * + * @param {Object} first base object + * @param {Object} second overrides + * @returns {Object} merged first and second + * @private + */ + function _merge(first, second) { + var target = {}; + + [first, second].forEach(function(obj) { + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + target[prop] = obj[prop]; + } + } + return target; + }); + + return target; + } + + function _isShapedLikeParsableError(err) { + return err.stack || err['opera#sourceloc']; + } + + return { + /** + * Get a backtrace from invocation point. + * + * @param {Object} opts + * @returns {Array} of StackFrame + */ + get: function StackTrace$$get(opts) { + try { + // Error must be thrown to get stack in IE + throw new Error(); + } catch (err) { + if (_isShapedLikeParsableError(err)) { + return this.fromError(err, opts); + } else { + return this.generateArtificially(opts); + } + } + }, + + /** + * Given an error object, parse it. + * + * @param {Error} error object + * @param {Object} opts + * @returns {Promise} for Array[StackFrame} + */ + fromError: function StackTrace$$fromError(error, opts) { + opts = _merge(_options, opts); + var gps = new StackTraceGPS(opts); + return new Promise(function(resolve) { + var stackframes = ErrorStackParser.parse(error); + if (typeof opts.filter === 'function') { + stackframes = stackframes.filter(opts.filter); + } + resolve(Promise.all(stackframes.map(function(sf) { + return new Promise(function(resolve) { + function resolveOriginal() { + resolve(sf); + } + + gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal); + }); + }))); + }.bind(this)); + }, + + /** + * Use StackGenerator to generate a backtrace. + * + * @param {Object} opts + * @returns {Promise} of Array[StackFrame] + */ + generateArtificially: function StackTrace$$generateArtificially(opts) { + opts = _merge(_options, opts); + var stackFrames = StackGenerator.backtrace(opts); + if (typeof opts.filter === 'function') { + stackFrames = stackFrames.filter(opts.filter); + } + return Promise.resolve(stackFrames); + }, + + /** + * Given a function, wrap it such that invocations trigger a callback that + * is called with a stack trace. + * + * @param {Function} fn to be instrumented + * @param {Function} callback function to call with a stack trace on invocation + * @param {Function} errback optional function to call with error if unable to get stack trace. + * @param {Object} thisArg optional context object (e.g. window) + */ + instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) { + if (typeof fn !== 'function') { + throw new Error('Cannot instrument non-function object'); + } else if (typeof fn.__stacktraceOriginalFn === 'function') { + // Already instrumented, return given Function + return fn; + } + + var instrumented = function StackTrace$$instrumented() { + try { + this.get().then(callback, errback)['catch'](errback); + return fn.apply(thisArg || this, arguments); + } catch (e) { + if (_isShapedLikeParsableError(e)) { + this.fromError(e).then(callback, errback)['catch'](errback); + } + throw e; + } + }.bind(this); + instrumented.__stacktraceOriginalFn = fn; + + return instrumented; + }, + + /** + * Given a function that has been instrumented, + * revert the function to it's original (non-instrumented) state. + * + * @param {Function} fn to de-instrument + */ + deinstrument: function StackTrace$$deinstrument(fn) { + if (typeof fn !== 'function') { + throw new Error('Cannot de-instrument non-function object'); + } else if (typeof fn.__stacktraceOriginalFn === 'function') { + return fn.__stacktraceOriginalFn; + } else { + // Function not instrumented, return original + return fn; + } + }, + + /** + * Given an Array of StackFrames, serialize and POST to given URL. + * + * @param {Array} stackframes + * @param {String} url + */ + report: function StackTrace$$report(stackframes, url) { + return new Promise(function(resolve, reject) { + var req = new XMLHttpRequest(); + req.onerror = reject; + req.onreadystatechange = function onreadystatechange() { + if (req.readyState === 4) { + if (req.status >= 200 && req.status < 400) { + resolve(req.responseText); + } else { + reject(new Error('POST to ' + url + ' failed with status: ' + req.status)); + } + } + }; + req.open('post', url); + req.setRequestHeader('Content-Type', 'application/json'); + req.send(JSON.stringify({stack: stackframes})); + }); + } + }; +})); diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index a8b72bd..0e775be 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),r=s.getArg(n,"sources"),o=s.getArg(n,"names",[]),i=s.getArg(n,"sourceRoot",null),a=s.getArg(n,"sourcesContent",null),u=s.getArg(n,"mappings"),l=s.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),o=s.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=s.getArg(e,"offset"),t=s.getArg(n,"line"),o=s.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],O=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(t=new i,t.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(_,a),o=y[r])_+=r.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),O.push(t),"number"==typeof t.originalLine&&b.push(t)}f(O,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=O,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),i?(i.path=t,o(i)):t}function a(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),a=r(e);if(a&&(e=a.path||"/"),t&&!t.scheme)return a&&(t.scheme=a.scheme),o(t);if(t||n.match(m))return n;if(a&&!a.host&&!a.path)return a.host=n,o(a);var s="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return a?(a.path=s,o(a)):s}function s(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=o,n.normalize=i,n.join=a,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=s,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,o,i,a,s):s==n.LEAST_UPPER_BOUND?r1?t(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,o,i){if(0===r.length)return-1;var a=t(-1,r.length,e,r,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,n,t){function r(){this._array=[],this._set={}}var o=t(1);r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=this._set.hasOwnProperty(t),i=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=i)},r.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=t(5),a=5,s=1<>>=a,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},n.decode=function(e,n,t){var r,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(s&c),s&=u,f+=s<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,a){if(a>i){var s=r(i,a),u=i-1;t(e,s,a);for(var c=e[a],l=i;a>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,a)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var t,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,t=o.exec(s),t&&t[1])return t[1];if(t=r.exec(s),t&&t[1])return t[1];if(t=i.exec(s),t&&t[1])return t[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(t,r,o,i,a){var s=new e.SourceMapConsumer(t),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(t){var i=e.lineNumber,a=e.columnNumber;"string"==typeof t&&(t=o(t.replace(/^\)\]\}'/,""))),"undefined"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,a,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new l(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var t=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(t.pop()),o=t.join(" ")||void 0,i=["eval",""].indexOf(r[0])>-1?void 0:r[0];return new e(o,void 0,i,r[1],r[2],n)},this)},parseFFOrSafari:function(r){var o=t(r.stack.split("\n"),function(e){return!e.match(i)},this);return n(o,function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return new e(n);var t=n.split("@"),r=this.extractLocation(t.pop()),o=t.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(o){var i=t(o.stack.split("\n"),function(e){return!!e.match(r)&&!e.match(/^Error created at/)},this);return n(i,function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(a,s,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(n){return o(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,o){o=r(i,o);var a=new t(o);return new Promise(function(t){var r=e.parse(n);"function"==typeof o.filter&&(r=r.filter(o.filter)),t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}a.pinpoint(e).then(n,t)["catch"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?t(o.responseText):r(new Error("POST to "+n+" failed with status: "+o.status)))},o.open("post",n),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i,o){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i),void 0!==o&&this.setSource(o)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new i(n)}function i(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),i=a.getArg(n,"names",[]),o=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return o&&a.isAbsolute(o)&&a.isAbsolute(e)?a.relative(o,e):e}),this._names=c.fromArray(i,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=s,this._mappings=u,this.file=l}function o(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),i=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var o={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),i=a.getArg(n,"column");if(t=0){var o=this._originalMappings[i];if(void 0===e.column)for(var s=o.originalLine;o&&o.originalLine===s;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i];else for(var c=o.originalColumn;o&&o.originalLine===n&&o.originalColumn==c;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var n=Object.create(i.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new o;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,n){for(var t,r,i,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new o,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),i=y[r])v+=r.length;else{for(i=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");y[r]=i}t.generatedColumn=p+i[0],p=t.generatedColumn,i.length>1&&(t.source=m+i[1],m+=i[1],t.originalLine=g+i[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+i[3],h=t.originalColumn,i.length>4&&(t.name=d+i[4],d+=i[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},i.prototype._findMapping=function(e,n,t,r,i,o){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,i,o)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[t];if(i.generatedLine===n.generatedLine){var o=a.getArg(i,"source",null);null!==o&&(o=this._sources.at(o),null!=this.sourceRoot&&(o=a.join(this.sourceRoot,o)));var s=a.getArg(i,"name",null);return null!==s&&(s=this._names.at(s)),{source:o,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},i.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===t.source)return{line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),o?(o.path=t,i(o)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),i(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,i(s);var a="/"===n.charAt(0)?n:o(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,i(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=i,n.normalize=o,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,i,o,s,a){var u=Math.floor((r-e)/2)+e,c=s(i,o[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,i,o,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,i,o,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,e,r,i,o||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var i=t(1);r.fromArray=function(e,n){for(var t=new r,i=0,o=e.length;o>i;i++)t.add(e[i],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=i.toSetString(e),r=this._set.hasOwnProperty(t),o=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=o)},r.prototype.has=function(e){var n=i.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=i.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var n=1===(1&e),t=e>>1;return n?-t:t}var o=t(5),s=5,a=1<>>=s,i>0&&(n|=c),t+=o.encode(n);while(i>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=o.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&i>=e?e-r+c:e>=o&&s>=e?e-o+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,o,s){if(s>o){var a=r(o,s),u=o-1;t(e,a,s);for(var c=e[s],l=o;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;i(e,n,o,f-1),i(e,n,f+1,s)}}n.quickSort=function(e,n){i(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e,n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return n(r.responseText);t(new Error("Unable to retrieve "+e))}},r.send()}function r(e,n,t){for(var r,i,o,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=a.exec(l),i&&i[1])return i[1];if(i=s.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function o(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(t,r,i,o,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:i,column:o}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=t,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(n){return new Promise(function(t,r){var i="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(n.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+o.length+",".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,i){o(e),this._get(e.fileName).then(function(i){var o=r(i,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},i)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),o(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(i){var o=s(i),c="data:"===o.substr(0,5);"/"===o[0]||c||(o=u.substring(0,u.lastIndexOf("/")+1)+o),this._get(o).then(function(t){var i=e.lineNumber,o=e.columnNumber;n(a(t,e.args,i,o,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new u(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var i=arguments.callee;i&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),i=[],o=2,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),i=[],o=0,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",s=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(t=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,i[0],i[1],i[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(n){return i(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,i){i=r(o,i);var s=new t(i);return new Promise(function(t){var r=e.parse(n);"function"==typeof i.filter&&(r=r.filter(i.filter)),t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}s.pinpoint(e).then(n,t)["catch"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(n,t)["catch"](t),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):r(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json"),i.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 504880e..59427ea 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","test","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","RegExp","$1","undefined","caller","ErrorStackParser","_map","array","fn","thisArg","output","_filter","filter","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filtered","tokens","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","shift","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","callback","errback","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n *\n * @param {String} urlLike\n * @return {Array} 3-tuple of URL, Line Number, and Column Number\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","window","atob","Buffer","_get","Promise","offline","bind","pinpoint","getMappedLocation","then","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 33d4f3e..19c87bb 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -4,6 +4,7 @@ var del = require('del'); var gulp = require('gulp'); var jshint = require('gulp-jshint'); var karma = require('karma'); +var rename = require('gulp-rename'); var runSequence = require('run-sequence'); var sourcemaps = require('gulp-sourcemaps'); var uglify = require('gulp-uglify'); @@ -54,13 +55,17 @@ gulp.task('test-ci', ['dist'], function(done) { gulp.task('dist', function() { gulp.src(polyfills.concat(dependencies.concat(sources))) .pipe(sourcemaps.init()) - .pipe(concat(sources.replace('.js', '-with-promises-and-json-polyfills.min.js'))) + .pipe(concat(sources.replace('.js', '-with-promises-and-json-polyfills.js'))) + .pipe(gulp.dest('dist')) .pipe(uglify()) + .pipe(rename({extname:'.min.js'})) .pipe(sourcemaps.write('./')) .pipe(gulp.dest('dist')); return gulp.src(dependencies.concat(sources)) .pipe(sourcemaps.init()) + .pipe(concat(sources.replace('.js', '.concat.js'))) + .pipe(gulp.dest('dist')) .pipe(concat(sources.replace('.js', '.min.js'))) .pipe(uglify()) .pipe(sourcemaps.write('./')) diff --git a/package.json b/package.json index b31eae2..0ab9b28 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "gulp-concat": "^2.6.0", "gulp-coveralls": "^0.1.4", "gulp-jshint": "^1.12.0", + "gulp-rename": "^1.2.2", "gulp-sourcemaps": "^1.5.2", "gulp-uglify": "^1.5.1", "jasmine": "^2.3.2", From 8496c4f428362f5d4f05ce1a4b4b867b6bf06ad2 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 23 Apr 2016 22:34:06 -0700 Subject: [PATCH 040/110] Update dist --- ...ktrace-with-promises-and-json-polyfills.js | 411 ++++++++++-------- ...ce-with-promises-and-json-polyfills.min.js | 4 +- ...ith-promises-and-json-polyfills.min.js.map | 2 +- dist/stacktrace.concat.js | 126 ++++-- dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- 6 files changed, 339 insertions(+), 208 deletions(-) diff --git a/dist/stacktrace-with-promises-and-json-polyfills.js b/dist/stacktrace-with-promises-and-json-polyfills.js index 5b7af91..2918b1b 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.js @@ -3,7 +3,7 @@ * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) * @license Licensed under MIT license * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE - * @version 3.0.2 + * @version 3.1.2 */ (function() { @@ -31,7 +31,6 @@ var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray; var lib$es6$promise$asap$$len = 0; - var lib$es6$promise$asap$$toString = {}.toString; var lib$es6$promise$asap$$vertxNext; var lib$es6$promise$asap$$customSchedulerFn; @@ -150,6 +149,42 @@ } else { lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout(); } + function lib$es6$promise$then$$then(onFulfillment, onRejection) { + var parent = this; + var state = parent._state; + + if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) { + return this; + } + + var child = new this.constructor(lib$es6$promise$$internal$$noop); + var result = parent._result; + + if (state) { + var callback = arguments[state - 1]; + lib$es6$promise$asap$$asap(function(){ + lib$es6$promise$$internal$$invokeCallback(state, child, callback, result); + }); + } else { + lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection); + } + + return child; + } + var lib$es6$promise$then$$default = lib$es6$promise$then$$then; + function lib$es6$promise$promise$resolve$$resolve(object) { + /*jshint validthis:true */ + var Constructor = this; + + if (object && typeof object === 'object' && object.constructor === Constructor) { + return object; + } + + var promise = new Constructor(lib$es6$promise$$internal$$noop); + lib$es6$promise$$internal$$resolve(promise, object); + return promise; + } + var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve; function lib$es6$promise$$internal$$noop() {} @@ -223,12 +258,12 @@ } } - function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) { - if (maybeThenable.constructor === promise.constructor) { + function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) { + if (maybeThenable.constructor === promise.constructor && + then === lib$es6$promise$then$$default && + constructor.resolve === lib$es6$promise$promise$resolve$$default) { lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable); } else { - var then = lib$es6$promise$$internal$$getThen(maybeThenable); - if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) { lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error); } else if (then === undefined) { @@ -245,7 +280,7 @@ if (promise === value) { lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment()); } else if (lib$es6$promise$utils$$objectOrFunction(value)) { - lib$es6$promise$$internal$$handleMaybeThenable(promise, value); + lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value)); } else { lib$es6$promise$$internal$$fulfill(promise, value); } @@ -380,104 +415,6 @@ } } - function lib$es6$promise$enumerator$$Enumerator(Constructor, input) { - var enumerator = this; - - enumerator._instanceConstructor = Constructor; - enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop); - - if (enumerator._validateInput(input)) { - enumerator._input = input; - enumerator.length = input.length; - enumerator._remaining = input.length; - - enumerator._init(); - - if (enumerator.length === 0) { - lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result); - } else { - enumerator.length = enumerator.length || 0; - enumerator._enumerate(); - if (enumerator._remaining === 0) { - lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result); - } - } - } else { - lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError()); - } - } - - lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) { - return lib$es6$promise$utils$$isArray(input); - }; - - lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() { - return new Error('Array Methods must be provided an Array'); - }; - - lib$es6$promise$enumerator$$Enumerator.prototype._init = function() { - this._result = new Array(this.length); - }; - - var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator; - - lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() { - var enumerator = this; - - var length = enumerator.length; - var promise = enumerator.promise; - var input = enumerator._input; - - for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) { - enumerator._eachEntry(input[i], i); - } - }; - - lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) { - var enumerator = this; - var c = enumerator._instanceConstructor; - - if (lib$es6$promise$utils$$isMaybeThenable(entry)) { - if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) { - entry._onerror = null; - enumerator._settledAt(entry._state, i, entry._result); - } else { - enumerator._willSettleAt(c.resolve(entry), i); - } - } else { - enumerator._remaining--; - enumerator._result[i] = entry; - } - }; - - lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) { - var enumerator = this; - var promise = enumerator.promise; - - if (promise._state === lib$es6$promise$$internal$$PENDING) { - enumerator._remaining--; - - if (state === lib$es6$promise$$internal$$REJECTED) { - lib$es6$promise$$internal$$reject(promise, value); - } else { - enumerator._result[i] = value; - } - } - - if (enumerator._remaining === 0) { - lib$es6$promise$$internal$$fulfill(promise, enumerator._result); - } - }; - - lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) { - var enumerator = this; - - lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) { - enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value); - }, function(reason) { - enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason); - }); - }; function lib$es6$promise$promise$all$$all(entries) { return new lib$es6$promise$enumerator$$default(this, entries).promise; } @@ -510,19 +447,6 @@ return promise; } var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race; - function lib$es6$promise$promise$resolve$$resolve(object) { - /*jshint validthis:true */ - var Constructor = this; - - if (object && typeof object === 'object' && object.constructor === Constructor) { - return object; - } - - var promise = new Constructor(lib$es6$promise$$internal$$noop); - lib$es6$promise$$internal$$resolve(promise, object); - return promise; - } - var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve; function lib$es6$promise$promise$reject$$reject(reason) { /*jshint validthis:true */ var Constructor = this; @@ -653,15 +577,8 @@ this._subscribers = []; if (lib$es6$promise$$internal$$noop !== resolver) { - if (!lib$es6$promise$utils$$isFunction(resolver)) { - lib$es6$promise$promise$$needsResolver(); - } - - if (!(this instanceof lib$es6$promise$promise$$Promise)) { - lib$es6$promise$promise$$needsNew(); - } - - lib$es6$promise$$internal$$initializePromise(this, resolver); + typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver(); + this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew(); } } @@ -869,28 +786,7 @@ Useful for tooling. @return {Promise} */ - then: function(onFulfillment, onRejection) { - var parent = this; - var state = parent._state; - - if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) { - return this; - } - - var child = new this.constructor(lib$es6$promise$$internal$$noop); - var result = parent._result; - - if (state) { - var callback = arguments[state - 1]; - lib$es6$promise$asap$$asap(function(){ - lib$es6$promise$$internal$$invokeCallback(state, child, callback, result); - }); - } else { - lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection); - } - - return child; - }, + then: lib$es6$promise$then$$default, /** `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same @@ -923,6 +819,97 @@ return this.then(null, onRejection); } }; + var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator; + function lib$es6$promise$enumerator$$Enumerator(Constructor, input) { + this._instanceConstructor = Constructor; + this.promise = new Constructor(lib$es6$promise$$internal$$noop); + + if (Array.isArray(input)) { + this._input = input; + this.length = input.length; + this._remaining = input.length; + + this._result = new Array(this.length); + + if (this.length === 0) { + lib$es6$promise$$internal$$fulfill(this.promise, this._result); + } else { + this.length = this.length || 0; + this._enumerate(); + if (this._remaining === 0) { + lib$es6$promise$$internal$$fulfill(this.promise, this._result); + } + } + } else { + lib$es6$promise$$internal$$reject(this.promise, this._validationError()); + } + } + + lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() { + return new Error('Array Methods must be provided an Array'); + }; + + lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() { + var length = this.length; + var input = this._input; + + for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) { + this._eachEntry(input[i], i); + } + }; + + lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) { + var c = this._instanceConstructor; + var resolve = c.resolve; + + if (resolve === lib$es6$promise$promise$resolve$$default) { + var then = lib$es6$promise$$internal$$getThen(entry); + + if (then === lib$es6$promise$then$$default && + entry._state !== lib$es6$promise$$internal$$PENDING) { + this._settledAt(entry._state, i, entry._result); + } else if (typeof then !== 'function') { + this._remaining--; + this._result[i] = entry; + } else if (c === lib$es6$promise$promise$$default) { + var promise = new c(lib$es6$promise$$internal$$noop); + lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then); + this._willSettleAt(promise, i); + } else { + this._willSettleAt(new c(function(resolve) { resolve(entry); }), i); + } + } else { + this._willSettleAt(resolve(entry), i); + } + }; + + lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) { + var promise = this.promise; + + if (promise._state === lib$es6$promise$$internal$$PENDING) { + this._remaining--; + + if (state === lib$es6$promise$$internal$$REJECTED) { + lib$es6$promise$$internal$$reject(promise, value); + } else { + this._result[i] = value; + } + } + + if (this._remaining === 0) { + lib$es6$promise$$internal$$fulfill(promise, this._result); + } + }; + + lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) { + var enumerator = this; + + lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) { + enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value); + }, function(reason) { + enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason); + }); + }; function lib$es6$promise$polyfill$$polyfill() { var local; @@ -1996,8 +1983,9 @@ if (!Array.prototype.forEach) { }; } -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",t=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(";"===e.charAt(v))l++,v++,p=0;else if(","===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),"number"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function r(e,n,r){var t=new XMLHttpRequest;t.open("get",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error("Unable to retrieve "+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,l=e.split("\n"),c="",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf("//"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(n){return new Promise(function(r,t){var o="data:"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(n.substr(5,i.length)!==i)t(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+i.length+",".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l="data:"===i.substr(0,5);"/"===i[0]||l||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new u(e)}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",t=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(";"===e.charAt(v))l++,v++,p=0;else if(","===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),"number"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open("get",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r,t=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,s=e.split("\n"),a="",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf("//");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o="data:"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error("The encoding of the inline sourcemap is not supported"))}else{var c=this.ajax(n,{method:"get"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)["catch"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c="data:"===a.substr(0,5),g=i.substring(0,i.lastIndexOf("/")+1);"/"===a[0]||c||/^https?:\/\/|^\/\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;"string"==typeof r&&(r=o(r.replace(/^\)\]\}'/,""))),"undefined"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new c(e)}}); //# sourceMappingURL=stacktrace-gps.min.js.map + (function (root, factory) { 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. @@ -2044,7 +2032,7 @@ if (!Array.prototype.forEach) { }; })); -(function (root, factory) { +(function(root, factory) { 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. @@ -2060,20 +2048,48 @@ if (!Array.prototype.forEach) { 'use strict'; var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\S+\:\d+/; - var CHROME_IE_STACK_REGEXP = /\s+at .*(\S+\:\d+|\(native\))/; + var CHROME_IE_STACK_REGEXP = /^\s*at .*(\S+\:\d+|\(native\))/m; + var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\[native code\])?$/; + + function _map(array, fn, thisArg) { + if (typeof Array.prototype.map === 'function') { + return array.map(fn, thisArg); + } else { + var output = new Array(array.length); + for (var i = 0; i < array.length; i++) { + output[i] = fn.call(thisArg, array[i]); + } + return output; + } + } + + function _filter(array, fn, thisArg) { + if (typeof Array.prototype.filter === 'function') { + return array.filter(fn, thisArg); + } else { + var output = []; + for (var i = 0; i < array.length; i++) { + if (fn.call(thisArg, array[i])) { + output.push(array[i]); + } + } + return output; + } + } return { /** * Given an Error object, extract the most information from it. - * @param error {Error} - * @return Array[StackFrame] + * + * @param {Error} error object + * @return {Array} of StackFrames */ parse: function ErrorStackParser$$parse(error) { if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') { return this.parseOpera(error); } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) { return this.parseV8OrIE(error); - } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) { + } else if (error.stack) { return this.parseFFOrSafari(error); } else { throw new Error('Cannot parse given Error object'); @@ -2082,8 +2098,9 @@ if (!Array.prototype.forEach) { /** * Separate line and column numbers from a URL-like string. - * @param urlLike String - * @return Array[String] + * + * @param {String} urlLike + * @return {Array} 3-tuple of URL, Line Number, and Column Number */ extractLocation: function ErrorStackParser$$extractLocation(urlLike) { // Fail-fast but return locations like "(native)" @@ -2103,24 +2120,49 @@ if (!Array.prototype.forEach) { }, parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) { - return error.stack.split('\n').filter(function (line) { + var filtered = _filter(error.stack.split('\n'), function(line) { return !!line.match(CHROME_IE_STACK_REGEXP); - }, this).map(function (line) { - var tokens = line.replace(/^\s+/, '').split(/\s+/).slice(1); + }, this); + + return _map(filtered, function(line) { + if (line.indexOf('(eval ') > -1) { + // Throw away eval information until we implement stacktrace.js/stackframe#8 + line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^\()]*)|(\)\,.*$)/g, ''); + } + var tokens = line.replace(/^\s+/, '').replace(/\(eval code/g, '(').split(/\s+/).slice(1); var locationParts = this.extractLocation(tokens.pop()); - var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0]; - return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line); + var functionName = tokens.join(' ') || undefined; + var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0]; + + return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line); }, this); }, parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) { - return error.stack.split('\n').filter(function (line) { - return !!line.match(FIREFOX_SAFARI_STACK_REGEXP); - }, this).map(function (line) { - var tokens = line.split('@'); - var locationParts = this.extractLocation(tokens.pop()); - var functionName = tokens.shift() || undefined; - return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line); + var filtered = _filter(error.stack.split('\n'), function(line) { + return !line.match(SAFARI_NATIVE_CODE_REGEXP); + }, this); + + return _map(filtered, function(line) { + // Throw away eval information until we implement stacktrace.js/stackframe#8 + if (line.indexOf(' > eval') > -1) { + line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g, ':$1'); + } + + if (line.indexOf('@') === -1 && line.indexOf(':') === -1) { + // Safari eval frames only have function names and nothing else + return new StackFrame(line); + } else { + var tokens = line.split('@'); + var locationParts = this.extractLocation(tokens.pop()); + var functionName = tokens.join('@') || undefined; + return new StackFrame(functionName, + undefined, + locationParts[0], + locationParts[1], + locationParts[2], + line); + } }, this); }, @@ -2158,7 +2200,16 @@ if (!Array.prototype.forEach) { for (var i = 0, len = lines.length; i < len; i += 2) { var match = lineRE.exec(lines[i]); if (match) { - result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i])); + result.push( + new StackFrame( + match[3] || undefined, + undefined, + match[2], + match[1], + undefined, + lines[i] + ) + ); } } @@ -2167,10 +2218,11 @@ if (!Array.prototype.forEach) { // Opera 10.65+ Error.stack very similar to FF/Safari parseOpera11: function ErrorStackParser$$parseOpera11(error) { - return error.stack.split('\n').filter(function (line) { - return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && - !line.match(/^Error created at/); - }, this).map(function (line) { + var filtered = _filter(error.stack.split('\n'), function(line) { + return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/); + }, this); + + return _map(filtered, function(line) { var tokens = line.split('@'); var locationParts = this.extractLocation(tokens.pop()); var functionCall = (tokens.shift() || ''); @@ -2181,8 +2233,15 @@ if (!Array.prototype.forEach) { if (functionCall.match(/\(([^\)]*)\)/)) { argsRaw = functionCall.replace(/^[^\(]+\(([^\)]*)\)$/, '$1'); } - var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(','); - return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line); + var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? + undefined : argsRaw.split(','); + return new StackFrame( + functionName, + args, + locationParts[0], + locationParts[1], + locationParts[2], + line); }, this); } }; diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index e1631c4..c6656f0 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ -(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function r(e){B=e}function o(e){z=e}function i(){return function(){process.nextTick(l)}}function a(){return function(){$(l)}}function s(){var e=0,t=new H(l),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function u(){var e=new MessageChannel;return e.port1.onmessage=l,function(){e.port2.postMessage(0)}}function c(){return function(){setTimeout(l,1)}}function l(){for(var e=0;J>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}J=0}function f(){try{var e=require,t=e("vertx");return $=t.runOnLoop||t.runOnContext,a()}catch(n){return c()}}function p(){}function h(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return te.error=t,te}}function d(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function y(e,t,n){z(function(e){var r=!1,o=d(n,t,function(n){r||(r=!0,t!==n?b(e,n):A(e,n))},function(t){r||(r=!0,C(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,C(e,o))},e)}function v(e,t){t._state===Q?A(e,t._result):t._state===ee?C(e,t._result):O(t,void 0,function(t){b(e,t)},function(t){C(e,t)})}function _(e,n){if(n.constructor===e.constructor)v(e,n);else{var r=m(n);r===te?C(e,te.error):void 0===r?A(e,n):t(r)?y(e,n,r):A(e,n)}}function b(t,n){t===n?C(t,h()):e(n)?_(t,n):A(t,n)}function w(e){e._onerror&&e._onerror(e._result),S(e)}function A(e,t){e._state===K&&(e._result=t,e._state=Q,0!==e._subscribers.length&&z(S,e))}function C(e,t){e._state===K&&(e._state=ee,e._result=t,z(w,e))}function O(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+Q]=n,o[i+ee]=r,0===i&&e._state&&z(S,e)}function S(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)O(r.resolve(e[a]),void 0,t,n);return o}function k(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(p);return b(n,e),n}function P(e){var t=this,n=new t(p);return C(n,e),n}function R(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function F(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function U(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],p!==e&&(t(e)||R(),this instanceof U||F(),M(this,e))}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var D;D=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var $,B,q,I=D,J=0,z=({}.toString,function(e,t){X[J]=e,X[J+1]=t,J+=2,2===J&&(B?B(l):q())}),Z="undefined"!=typeof window?window:void 0,W=Z||{},H=W.MutationObserver||W.WebKitMutationObserver,Y="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);q=Y?i():H?s():V?u():void 0===Z&&"function"==typeof require?f():c();var K=void 0,Q=1,ee=2,te=new E,ne=new E;j.prototype._validateInput=function(e){return I(e)},j.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},j.prototype._init=function(){this._result=new Array(this.length)};var re=j;j.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===K&&t>o;o++)e._eachEntry(r[o],o)},j.prototype._eachEntry=function(e,t){var r=this,o=r._instanceConstructor;n(e)?e.constructor===o&&e._state!==K?(e._onerror=null,r._settledAt(e._state,t,e._result)):r._willSettleAt(o.resolve(e),t):(r._remaining--,r._result[t]=e)},j.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===K&&(r._remaining--,e===ee?C(o,n):r._result[t]=n),0===r._remaining&&A(o,r._result)},j.prototype._willSettleAt=function(e,t){var n=this;O(e,void 0,function(e){n._settledAt(Q,t,e)},function(e){n._settledAt(ee,t,e)})};var oe=T,ie=x,ae=k,se=P,ue=0,ce=U;U.all=oe,U.race=ie,U.resolve=ae,U.reject=se,U._setScheduler=r,U._setAsap=o,U._asap=z,U.prototype={constructor:U,then:function(e,t){var n=this,r=n._state;if(r===Q&&!e||r===ee&&!t)return this;var o=new this.constructor(p),i=n._result;if(r){var a=arguments[r-1];z(function(){L(r,o,a,i)})}else O(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var le=G,fe={Promise:ce,polyfill:le};"function"==typeof define&&define.amd?define(function(){return fe}):"undefined"!=typeof module&&module.exports?module.exports=fe:"undefined"!=typeof this&&(this.ES6Promise=fe),le()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==d)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===d&&u(d)===d&&u()===d&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([d])&&"null"==u(null)&&"[null,null,null]"==u([d,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,m,d,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(b){}if(!i("json")){var w="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return M[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?m=2==a?function(e,t){var n,r={},o=v.call(e)==w;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==w;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var r,i,a=v.call(e)==w,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),m(e,t)},!i("json-stringify")){var T={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},x="000000",k=function(e,t){return(x+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=T[a];break;default:if(32>a){t+=P+k(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,b,w,N,M,T,x,P,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=L((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,b=L(h/1e3)%60,w=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),b=s.getUTCSeconds(),w=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+k(6,0>c?-c:c):k(4,c))+"-"+k(2,l+1)+"-"+k(2,p)+"T"+k(2,y)+":"+k(2,_)+":"+k(2,b)+"."+k(3,w)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(x=a.length;x--;)if(a[x]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==S){for(T=0,x=s.length;x>T;T++)M=F(T,s,n,r,o,i,a),N.push(M===d?"null":M);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+P+"]":"["+N.join(",")+"]":"[]"}else m(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==d&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+P+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==w)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=$[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=D("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},I=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=q(),"]"!=e;n||(n=!0))n&&(","==e?(e=q(),"]"==e&&B()):B()),","==e&&B(),t.push(I(e));return t}if("{"==e){for(t={};e=q(),"}"!=e;n||(n=!0))n&&(","==e?(e=q(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=q())&&B(),t[e.slice(1)]=I(q());return t}B()}return e},J=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)J(o,r,n);else m(o,function(e){J(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=I(q()),"$"!=q()&&B(),U=G=null,t&&v.call(t)==w?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],m=new i;m.generatedLine=g.generatedLine,m.generatedColumn=g.generatedColumn,g.source&&(m.source=r.indexOf(g.source),m.originalLine=g.originalLine,m.originalColumn=g.originalColumn,g.name&&(m.name=n.indexOf(g.name)),l.push(m)),u.push(m)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,m=0,d=0,y=e.length,v=0,_={},b={},w=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),A.push(n),"number"==typeof n.originalLine&&w.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(w,s.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(m))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=s,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.'); -},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e,t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return t(r.responseText);n(new Error("Unable to retrieve "+e))}},r.send()}function r(e,t,n){for(var r,o,i,a=/function\s+([^(]*?)\s*\(([^)]*)\)/,s=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(t,20),p=0;f>p;++p)if(r=c[t-p-1],i=r.indexOf("//"),i>=0&&(r=r.substr(0,i)),r){if(l=r+l,o=s.exec(l),o&&o[1])return o[1];if(o=a.exec(l),o&&o[1])return o[1];if(o=u.exec(l),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function a(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function s(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=n,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(t.substr(5,i.length)!==i)r(new Error("The encoding of the inline sourcemap is not supported"));else{var a="data:".length+i.length+",".length,s=t.substr(a),u=this._atob(s);this.sourceCache[t]=u,n(u)}}else this.ajax(t,function(e){this.sourceCache[t]=e,n(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,o){i(e),this._get(e.fileName).then(function(o){var i=r(o,e.lineNumber,e.columnNumber);n(new t(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){o(),i(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=a(o),c="data:"===i.substr(0,5);"/"===i[0]||c||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(n){var o=e.lineNumber,i=e.columnNumber;t(s(n,e.args,o,i,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new u(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(n){return n.stack.split("\n").filter(function(e){return!!e.match(t)&&!e.match(/^Error created at/)},this).map(function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){o=r(i,o);var a=new n(o);return new Promise(function(n){var r=e.parse(t);"function"==typeof o.filter&&(r=r.filter(o.filter)),n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}a.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){B=e}function r(e){z=e}function o(){return function(){process.nextTick(c)}}function i(){return function(){D(c)}}function a(){var e=0,t=new H(c),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function s(){var e=new MessageChannel;return e.port1.onmessage=c,function(){e.port2.postMessage(0)}}function u(){return function(){setTimeout(c,1)}}function c(){for(var e=0;I>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}I=0}function l(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,i()}catch(n){return u()}}function f(e,t){var n=this,r=n._state;if(r===te&&!e||r===ne&&!t)return this;var o=new this.constructor(h),i=n._result;if(r){var a=arguments[r-1];z(function(){M(r,o,a,i)})}else S(n,o,e,t);return o}function p(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(h);return b(n,e),n}function h(){}function g(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return re.error=t,re}}function y(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){z(function(e){var r=!1,o=y(n,t,function(n){r||(r=!0,t!==n?b(e,n):C(e,n))},function(t){r||(r=!0,O(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,O(e,o))},e)}function _(e,t){t._state===te?C(e,t._result):t._state===ne?O(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){O(e,t)})}function w(e,n,r){n.constructor===e.constructor&&r===K&&constructor.resolve===Q?_(e,n):r===re?O(e,re.error):void 0===r?C(e,n):t(r)?v(e,n,r):C(e,n)}function b(t,n){t===n?O(t,g()):e(n)?w(t,n,m(n)):C(t,n)}function A(e){e._onerror&&e._onerror(e._result),E(e)}function C(e,t){e._state===ee&&(e._result=t,e._state=te,0!==e._subscribers.length&&z(E,e))}function O(e,t){e._state===ee&&(e._state=ne,e._result=t,z(A,e))}function S(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+te]=n,o[i+ne]=r,0===i&&e._state&&z(E,e)}function E(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)S(r.resolve(e[a]),void 0,t,n);return o}function P(e){var t=this,n=new t(h);return O(n,e),n}function k(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],h!==e&&("function"!=typeof e&&k(),this instanceof F?j(this,e):R())}function U(e,t){this._instanceConstructor=e,this.promise=new e(h),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?C(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&C(this.promise,this._result))):O(this.promise,this._validationError())}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,B,J,q=$,I=0,z=function(e,t){X[I]=e,X[I+1]=t,I+=2,2===I&&(B?B(c):J())},Z="undefined"!=typeof window?window:void 0,Y=Z||{},H=Y.MutationObserver||Y.WebKitMutationObserver,W="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);J=W?o():H?a():V?s():void 0===Z&&"function"==typeof require?l():u();var K=f,Q=p,ee=void 0,te=1,ne=2,re=new N,oe=new N,ie=x,ae=T,se=P,ue=0,ce=F;F.all=ie,F.race=ae,F.resolve=Q,F.reject=se,F._setScheduler=n,F._setAsap=r,F._asap=z,F.prototype={constructor:F,then:K,"catch":function(e){return this.then(null,e)}};var le=U;U.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},U.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ee&&e>n;n++)this._eachEntry(t[n],n)},U.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===Q){var o=m(e);if(o===K&&e._state!==ee)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ce){var i=new n(h);w(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},U.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ee&&(this._remaining--,e===ne?O(r,n):this._result[t]=n),0===this._remaining&&C(r,this._result)},U.prototype._willSettleAt=function(e,t){var n=this;S(e,void 0,function(e){n._settledAt(te,t,e)},function(e){n._settledAt(ne,t,e)})};var fe=G,pe={Promise:ce,polyfill:fe};"function"==typeof define&&define.amd?define(function(){return pe}):"undefined"!=typeof module&&module.exports?module.exports=pe:"undefined"!=typeof this&&(this.ES6Promise=pe),fe()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==m)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===m&&u(m)===m&&u()===m&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([m])&&"null"==u(null)&&"[null,null,null]"==u([m,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,d,m,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!i("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return M[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?d=2==a?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var r,i,a=v.call(e)==b,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),d(e,t)},!i("json-stringify")){var x={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},T="000000",P=function(e,t){return(T+(t||0)).slice(-e)},k="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=x[a];break;default:if(32>a){t+=k+P(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,N,M,x,T,k,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=L((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,w=L(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+P(6,0>c?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,y)+":"+P(2,_)+":"+P(2,w)+"."+P(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(T=a.length;T--;)if(a[T]===s)throw f();if(a.push(s),N=[],k=i,i+=o,u==S){for(x=0,T=s.length;T>x;x++)M=F(x,s,n,r,o,i,a),N.push(M===m?"null":M);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+k+"]":"["+N.join(",")+"]":"[]"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+k+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==b)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=q(J()),"$"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(d))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,d=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=s,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e); +if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i=["eval",""].indexOf(r[0])>-1?void 0:r[0];return new e(o,void 0,i,r[1],r[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(i)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(o){var i=n(o.stack.split("\n"),function(e){return!!e.match(r)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){o=r(i,o);var a=new n(o);return new Promise(function(n){var r=e.parse(t);"function"==typeof o.filter&&(r=r.filter(o.filter)),n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}a.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map index 973ff40..c0d2365 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","this","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","Constructor","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","resolve","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","Array","isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","c","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","atob","Buffer","_get","offline","pinpoint","getMappedLocation","findFunctionName","substring","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","test","RegExp","$1","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","stackframes","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"CAQA,WACA,YACA,SAAAA,GAAAC,GACA,MAAA,kBAAAA,IAAA,gBAAAA,IAAA,OAAAA,EAGA,QAAAC,GAAAD,GACA,MAAA,kBAAAA,GAGA,QAAAE,GAAAF,GACA,MAAA,gBAAAA,IAAA,OAAAA,EAkCA,QAAAG,GAAAC,GACAC,EAAAD,EAGA,QAAAE,GAAAC,GACAC,EAAAD,EAcA,QAAAE,KAGA,MAAA,YACAC,QAAAC,SAAAC,IAKA,QAAAC,KACA,MAAA,YACAC,EAAAF,IAIA,QAAAG,KACA,GAAAC,GAAA,EACAC,EAAA,GAAAC,GAAAN,GACAO,EAAAC,SAAAC,eAAA,GAGA,OAFAJ,GAAAK,QAAAH,GAAAI,eAAA,IAEA,WACAJ,EAAAK,KAAAR,IAAAA,EAAA,GAKA,QAAAS,KACA,GAAAC,GAAA,GAAAC,eAEA,OADAD,GAAAE,MAAAC,UAAAjB,EACA,WACAc,EAAAI,MAAAC,YAAA,IAIA,QAAAC,KACA,MAAA,YACAC,WAAArB,EAAA,IAKA,QAAAA,KACA,IAAA,GAAAsB,GAAA,EAAAC,EAAAD,EAAAA,GAAA,EAAA,CACA,GAAAE,GAAAC,EAAAH,GACAI,EAAAD,EAAAH,EAAA,EAEAE,GAAAE,GAEAD,EAAAH,GAAAK,OACAF,EAAAH,EAAA,GAAAK,OAGAJ,EAAA,EAGA,QAAAK,KACA,IACA,GAAAC,GAAAC,QACAC,EAAAF,EAAA,QAEA,OADA3B,GAAA6B,EAAAC,WAAAD,EAAAE,aACAhC,IACA,MAAAiC,GACA,MAAAd,MAkBA,QAAAe,MAQA,QAAAC,KACA,MAAA,IAAAC,WAAA,4CAGA,QAAAC,KACA,MAAA,IAAAD,WAAA,wDAGA,QAAAE,GAAAC,GACA,IACA,MAAAA,GAAAC,KACA,MAAAC,GAEA,MADAC,IAAAD,MAAAA,EACAC,IAIA,QAAAC,GAAAH,EAAAI,EAAAC,EAAAC,GACA,IACAN,EAAAO,KAAAH,EAAAC,EAAAC,GACA,MAAAb,GACA,MAAAA,IAIA,QAAAe,GAAAT,EAAAU,EAAAT,GACA7C,EAAA,SAAA4C,GACA,GAAAW,IAAA,EACAT,EAAAE,EAAAH,EAAAS,EAAA,SAAAL,GACAM,IACAA,GAAA,EACAD,IAAAL,EACAO,EAAAZ,EAAAK,GAEAQ,EAAAb,EAAAK,KAEA,SAAAS,GACAH,IACAA,GAAA,EAEAI,EAAAf,EAAAc,KACA,YAAAd,EAAAgB,QAAA,sBAEAL,GAAAT,IACAS,GAAA,EACAI,EAAAf,EAAAE,KAEAF,GAGA,QAAAiB,GAAAjB,EAAAU,GACAA,EAAAQ,SAAAC,EACAN,EAAAb,EAAAU,EAAAU,SACAV,EAAAQ,SAAAG,GACAN,EAAAf,EAAAU,EAAAU,SAEAE,EAAAZ,EAAAvB,OAAA,SAAAkB,GACAO,EAAAZ,EAAAK,IACA,SAAAS,GACAC,EAAAf,EAAAc,KAKA,QAAAS,GAAAvB,EAAAwB,GACA,GAAAA,EAAAC,cAAAzB,EAAAyB,YACAR,EAAAjB,EAAAwB,OACA,CACA,GAAAvB,GAAAF,EAAAyB,EAEAvB,KAAAE,GACAY,EAAAf,EAAAG,GAAAD,OACAf,SAAAc,EACAY,EAAAb,EAAAwB,GACA3E,EAAAoD,GACAQ,EAAAT,EAAAwB,EAAAvB,GAEAY,EAAAb,EAAAwB,IAKA,QAAAZ,GAAAZ,EAAAK,GACAL,IAAAK,EACAU,EAAAf,EAAAJ,KACAjD,EAAA0D,GACAkB,EAAAvB,EAAAK,GAEAQ,EAAAb,EAAAK,GAIA,QAAAqB,GAAA1B,GACAA,EAAA2B,UACA3B,EAAA2B,SAAA3B,EAAAoB,SAGAQ,EAAA5B,GAGA,QAAAa,GAAAb,EAAAK,GACAL,EAAAkB,SAAAW,IAEA7B,EAAAoB,QAAAf,EACAL,EAAAkB,OAAAC,EAEA,IAAAnB,EAAA8B,aAAAC,QACA3E,EAAAwE,EAAA5B,IAIA,QAAAe,GAAAf,EAAAc,GACAd,EAAAkB,SAAAW,IACA7B,EAAAkB,OAAAG,GACArB,EAAAoB,QAAAN,EAEA1D,EAAAsE,EAAA1B,IAGA,QAAAsB,GAAAU,EAAAC,EAAAC,EAAAC,GACA,GAAAC,GAAAJ,EAAAF,aACAC,EAAAK,EAAAL,MAEAC,GAAAL,SAAA,KAEAS,EAAAL,GAAAE,EACAG,EAAAL,EAAAZ,GAAAe,EACAE,EAAAL,EAAAV,IAAAc,EAEA,IAAAJ,GAAAC,EAAAd,QACA9D,EAAAwE,EAAAI,GAIA,QAAAJ,GAAA5B,GACA,GAAAoC,GAAApC,EAAA8B,aACAO,EAAArC,EAAAkB,MAEA,IAAA,IAAAkB,EAAAL,OAAA,CAIA,IAAA,GAFAE,GAAAjD,EAAAsD,EAAAtC,EAAAoB,QAEAtC,EAAA,EAAAA,EAAAsD,EAAAL,OAAAjD,GAAA,EACAmD,EAAAG,EAAAtD,GACAE,EAAAoD,EAAAtD,EAAAuD,GAEAJ,EACAM,EAAAF,EAAAJ,EAAAjD,EAAAsD,GAEAtD,EAAAsD,EAIAtC,GAAA8B,aAAAC,OAAA,GAGA,QAAAS,KACAC,KAAAvC,MAAA,KAKA,QAAAwC,GAAA1D,EAAAsD,GACA,IACA,MAAAtD,GAAAsD,GACA,MAAA5C,GAEA,MADAiD,IAAAzC,MAAAR,EACAiD,IAIA,QAAAJ,GAAAF,EAAArC,EAAAhB,EAAAsD,GACA,GACAjC,GAAAH,EAAA0C,EAAAC,EADAC,EAAAjG,EAAAmC,EAGA,IAAA8D,GAWA,GAVAzC,EAAAqC,EAAA1D,EAAAsD,GAEAjC,IAAAsC,IACAE,GAAA,EACA3C,EAAAG,EAAAH,MACAG,EAAA,MAEAuC,GAAA,EAGA5C,IAAAK,EAEA,WADAU,GAAAf,EAAAF,SAKAO,GAAAiC,EACAM,GAAA,CAGA5C,GAAAkB,SAAAW,IAEAiB,GAAAF,EACAhC,EAAAZ,EAAAK,GACAwC,EACA9B,EAAAf,EAAAE,GACAmC,IAAAlB,EACAN,EAAAb,EAAAK,GACAgC,IAAAhB,IACAN,EAAAf,EAAAK,IAIA,QAAA0C,GAAA/C,EAAAgD,GACA,IACAA,EAAA,SAAA3C,GACAO,EAAAZ,EAAAK,IACA,SAAAS,GACAC,EAAAf,EAAAc,KAEA,MAAApB,GACAqB,EAAAf,EAAAN,IAIA,QAAAuD,GAAAC,EAAAC,GACA,GAAAC,GAAAX,IAEAW,GAAAC,qBAAAH,EACAE,EAAApD,QAAA,GAAAkD,GAAAvD,GAEAyD,EAAAE,eAAAH,IACAC,EAAAG,OAAAJ,EACAC,EAAArB,OAAAoB,EAAApB,OACAqB,EAAAI,WAAAL,EAAApB,OAEAqB,EAAAK,QAEA,IAAAL,EAAArB,OACAlB,EAAAuC,EAAApD,QAAAoD,EAAAhC,UAEAgC,EAAArB,OAAAqB,EAAArB,QAAA,EACAqB,EAAAM,aACA,IAAAN,EAAAI,YACA3C,EAAAuC,EAAApD,QAAAoD,EAAAhC,WAIAL,EAAAqC,EAAApD,QAAAoD,EAAAO,oBA2EA,QAAAC,GAAAC,GACA,MAAA,IAAAC,IAAArB,KAAAoB,GAAA7D,QAGA,QAAA+D,GAAAF,GAaA,QAAA3B,GAAA7B,GACAO,EAAAZ,EAAAK,GAGA,QAAA8B,GAAArB,GACAC,EAAAf,EAAAc,GAhBA,GAAAoC,GAAAT,KAEAzC,EAAA,GAAAkD,GAAAvD,EAEA,KAAAqE,EAAAH,GAEA,MADA9C,GAAAf,EAAA,GAAAH,WAAA,oCACAG,CAaA,KAAA,GAVA+B,GAAA8B,EAAA9B,OAUAjD,EAAA,EAAAkB,EAAAkB,SAAAW,GAAAE,EAAAjD,EAAAA,IACAwC,EAAA4B,EAAAe,QAAAJ,EAAA/E,IAAAK,OAAA+C,EAAAC,EAGA,OAAAnC,GAGA,QAAAkE,GAAAC,GAEA,GAAAjB,GAAAT,IAEA,IAAA0B,GAAA,gBAAAA,IAAAA,EAAA1C,cAAAyB,EACA,MAAAiB,EAGA,IAAAnE,GAAA,GAAAkD,GAAAvD,EAEA,OADAiB,GAAAZ,EAAAmE,GACAnE,EAGA,QAAAoE,GAAAtD,GAEA,GAAAoC,GAAAT,KACAzC,EAAA,GAAAkD,GAAAvD,EAEA,OADAoB,GAAAf,EAAAc,GACAd,EAMA,QAAAqE,KACA,KAAA,IAAAxE,WAAA,sFAGA,QAAAyE,KACA,KAAA,IAAAzE,WAAA,yHA2GA,QAAA0E,GAAAvB,GACAP,KAAA+B,IAAAC,KACAhC,KAAAvB,OAAA/B,OACAsD,KAAArB,QAAAjC,OACAsD,KAAAX,gBAEAnC,IAAAqD,IACAnG,EAAAmG,IACAqB,IAGA5B,eAAA8B,IACAD,IAGAvB,EAAAN,KAAAO,IAsQA,QAAA0B,KACA,GAAAC,EAEA,IAAA,mBAAAC,QACAD,EAAAC,WACA,IAAA,mBAAAC,MACAF,EAAAE,SAEA,KACAF,EAAAG,SAAA,iBACA,MAAApF,GACA,KAAA,IAAAqF,OAAA,4EAIA,GAAAC,GAAAL,EAAAM,UAEAD,GAAA,qBAAAE,OAAAC,UAAAC,SAAA5E,KAAAwE,EAAAf,YAAAe,EAAAK,QAIAV,EAAAM,QAAAK,IA55BA,GAAAC,EAMAA,GALAC,MAAAC,QAKAD,MAAAC,QAJA,SAAA7I,GACA,MAAA,mBAAAsI,OAAAC,UAAAC,SAAA5E,KAAA5D,GAMA,IAGAc,GACAT,EAwGAyI,EA5GA1B,EAAAuB,EACAxG,EAAA,EAKA3B,MAJAgI,SAIA,SAAApG,EAAAE,GACAD,EAAAF,GAAAC,EACAC,EAAAF,EAAA,GAAAG,EACAH,GAAA,EACA,IAAAA,IAIA9B,EACAA,EAAAO,GAEAkI,OAaAC,EAAA,mBAAAC,QAAAA,OAAAzG,OACA0G,EAAAF,MACA7H,EAAA+H,EAAAC,kBAAAD,EAAAE,uBACAC,EAAA,mBAAA1I,UAAA,wBAAA8H,SAAA5E,KAAAlD,SAGA2I,EAAA,mBAAAC,oBACA,mBAAAC,gBACA,mBAAA5H,gBA4CAU,EAAA,GAAAuG,OAAA,IA6BAE,GADAM,EACA3I,IACAS,EACAH,IACAsI,EACA5H,IACAc,SAAAwG,GAAA,kBAAArG,SACAF,IAEAR,GAKA,IAAAiD,GAAA,OACAV,EAAA,EACAE,GAAA,EAEAlB,GAAA,GAAAqC,GAkKAG,GAAA,GAAAH,EAwFAS,GAAAkC,UAAA7B,eAAA,SAAAH,GACA,MAAAa,GAAAb,IAGAF,EAAAkC,UAAAxB,iBAAA,WACA,MAAA,IAAAoB,OAAA,4CAGA9B,EAAAkC,UAAA1B,MAAA,WACAhB,KAAArB,QAAA,GAAAoE,OAAA/C,KAAAV,QAGA,IAAA+B,IAAAb,CAEAA,GAAAkC,UAAAzB,WAAA,WAOA,IAAA,GANAN,GAAAX,KAEAV,EAAAqB,EAAArB,OACA/B,EAAAoD,EAAApD,QACAmD,EAAAC,EAAAG,OAEAzE,EAAA,EAAAkB,EAAAkB,SAAAW,GAAAE,EAAAjD,EAAAA,IACAsE,EAAAgD,WAAAjD,EAAArE,GAAAA,IAIAmE,EAAAkC,UAAAiB,WAAA,SAAAC,EAAAvH,GACA,GAAAsE,GAAAX,KACA6D,EAAAlD,EAAAC,oBAEAvG,GAAAuJ,GACAA,EAAA5E,cAAA6E,GAAAD,EAAAnF,SAAAW,GACAwE,EAAA1E,SAAA,KACAyB,EAAAmD,WAAAF,EAAAnF,OAAApC,EAAAuH,EAAAjF,UAEAgC,EAAAoD,cAAAF,EAAArC,QAAAoC,GAAAvH,IAGAsE,EAAAI,aACAJ,EAAAhC,QAAAtC,GAAAuH,IAIApD,EAAAkC,UAAAoB,WAAA,SAAAE,EAAA3H,EAAAuB,GACA,GAAA+C,GAAAX,KACAzC,EAAAoD,EAAApD,OAEAA,GAAAkB,SAAAW,IACAuB,EAAAI,aAEAiD,IAAApF,GACAN,EAAAf,EAAAK,GAEA+C,EAAAhC,QAAAtC,GAAAuB,GAIA,IAAA+C,EAAAI,YACA3C,EAAAb,EAAAoD,EAAAhC,UAIA6B,EAAAkC,UAAAqB,cAAA,SAAAxG,EAAAlB,GACA,GAAAsE,GAAAX,IAEAnB,GAAAtB,EAAAb,OAAA,SAAAkB,GACA+C,EAAAmD,WAAApF,EAAArC,EAAAuB,IACA,SAAAS,GACAsC,EAAAmD,WAAAlF,GAAAvC,EAAAgC,KAMA,IAAA4F,IAAA9C,EA4BA+C,GAAA5C,EAaA6C,GAAA1C,EAQA2C,GAAAzC,EAEAK,GAAA,EAUAa,GAAAf,CA2HAA,GAAAuC,IAAAJ,GACAnC,EAAAwC,KAAAJ,GACApC,EAAAN,QAAA2C,GACArC,EAAAyC,OAAAH,GACAtC,EAAA0C,cAAAlK,EACAwH,EAAA2C,SAAAhK,EACAqH,EAAA4C,MAAA/J,EAEAmH,EAAAY,WACA1D,YAAA8C,EAmMAtE,KAAA,SAAAiC,EAAAC,GACA,GAAAH,GAAAS,KACAgE,EAAAzE,EAAAd,MAEA,IAAAuF,IAAAtF,IAAAe,GAAAuE,IAAApF,KAAAc,EACA,MAAAM,KAGA,IAAAR,GAAA,GAAAQ,MAAAhB,YAAA9B,GACAyH,EAAApF,EAAAZ,OAEA,IAAAqF,EAAA,CACA,GAAAzH,GAAAqI,UAAAZ,EAAA,EACArJ,GAAA,WACAmF,EAAAkE,EAAAxE,EAAAjD,EAAAoI,SAGA9F,GAAAU,EAAAC,EAAAC,EAAAC,EAGA,OAAAF,IA8BAqF,QAAA,SAAAnF,GACA,MAAAM,MAAAxC,KAAA,KAAAkC,IA0BA,IAAAoF,IAAA7C,EAEA8C,IACAvC,QAAAK,GACAmC,SAAAF,GAIA,mBAAAG,SAAAA,OAAA,IACAA,OAAA,WAAA,MAAAF,MACA,mBAAAG,SAAAA,OAAA,QACAA,OAAA,QAAAH,GACA,mBAAA/E,QACAA,KAAA,WAAA+E,IAGAD,OACA/G,KAAAiC,MCp8BA,WA2BA,QAAAmF,GAAAC,EAAAC,GAuCA,QAAAC,GAAAC,GACA,GAAAD,EAAAC,KAAAC,EAEA,MAAAF,GAAAC,EAEA,IAAAE,EACA,IAAA,yBAAAF,EAGAE,EAAA,KAAA,IAAA,OACA,IAAA,QAAAF,EAGAE,EAAAH,EAAA,mBAAAA,EAAA,kBACA,CACA,GAAA1H,GAAA8H,EAAA,oDAEA,IAAA,kBAAAH,EAAA,CACA,GAAAI,GAAAN,EAAAM,UAAAC,EAAA,kBAAAD,IAAAE,CACA,IAAAD,EAAA,EAEAhI,EAAA,WACA,MAAA,KACAkI,OAAAlI,CACA,KACAgI,EAGA,MAAAD,EAAA,IAGA,MAAAA,EAAA,GAAAI,KACA,MAAAJ,EAAA,GAAAK,KAKAL,EAAAM,KAAAT,GAGAG,EAAAH,KAAAA,GAGAG,MAAAH,GAMA,MAAAG,EAAA/H,IACA,OAAA+H,GAAA/H,KAGA,UAAA+H,GAAAH,KAEA,QAAAG,EAAA,OAKA,oBAAAA,GAAAH,EAAAS,EAAA,QAGAN,GAAAO,GAAAtI,GAAA,GAAA,EAAA,KAAA,oBAAA8H,GAEA,MAAAC,EAAA,KAAA/H,IACA,iBAAA+H,GAAA,EAAA,GAAA,KAAA,IAGA,iCAAAA,EAAA,GAAAQ,GAAA,WAEA,iCAAAR,EAAA,GAAAQ,GAAA,UAGA,iCAAAR,EAAA,GAAAQ,GAAA,gBAGA,8BAAAR,EAAA,GAAAQ,GAAA,KACA,MAAAC,GACAR,GAAA,GAGAH,EAAAG,EAGA,GAAA,cAAAL,EAAA,CACA,GAAAc,GAAAhB,EAAAgB,KACA,IAAA,kBAAAA,GACA,IAIA,GAAA,IAAAA,EAAA,OAAAA,GAAA,GAAA,CAEAzI,EAAAyI,EAAAX,EACA,IAAAY,GAAA,GAAA1I,EAAA,EAAA0B,QAAA,IAAA1B,EAAA,EAAA,EACA,IAAA0I,EAAA,CACA,IAEAA,GAAAD,EAAA,OACA,MAAAD,IACA,GAAAE,EACA,IAIAA,EAAA,IAAAD,EAAA,MACA,MAAAD,IAEA,GAAAE,EACA,IAIAA,EAAA,IAAAD,EAAA,MACA,MAAAD,OAIA,MAAAA,GACAE,GAAA,EAGAb,EAAAa,GAGA,MAAAhB,GAAAC,KAAAE,EApKAL,IAAAA,EAAAmB,EAAA,UACAlB,IAAAA,EAAAkB,EAAA,SAGA,IAAAR,GAAAX,EAAA,QAAAmB,EAAA,OACAP,EAAAZ,EAAA,QAAAmB,EAAA,OACA9D,EAAA2C,EAAA,QAAAmB,EAAA,OACAJ,EAAAf,EAAA,MAAAmB,EAAA,KACAC,EAAApB,EAAA,aAAAmB,EAAA,YACAnJ,EAAAgI,EAAA,WAAAmB,EAAA,UACAE,EAAArB,EAAA,MAAAmB,EAAA,KACAG,EAAAtB,EAAA,MAAAmB,EAAA,IAGA,iBAAAG,IAAAA,IACArB,EAAAM,UAAAe,EAAAf,UACAN,EAAAgB,MAAAK,EAAAL,MAIA,IAEAM,GAAAC,EAAApB,EAFAqB,EAAApE,EAAAC,UACAuD,EAAAY,EAAAlE,SAIAkD,EAAA,GAAAM,GAAA,iBACA,KAGAN,EAAA,SAAAA,EAAAiB,kBAAA,IAAAjB,EAAAkB,eAAA,IAAAlB,EAAAmB,cAIA,IAAAnB,EAAAoB,eAAA,IAAApB,EAAAqB,iBAAA,GAAArB,EAAAsB,iBAAA,KAAAtB,EAAAuB,qBACA,MAAAhB,IAqIA,IAAAd,EAAA,QAAA,CAEA,GAAA+B,GAAA,oBACAC,EAAA,gBACAC,EAAA,kBACAC,EAAA,kBACAC,EAAA,iBACAC,EAAA,mBAGAC,EAAArC,EAAA,wBAGA,KAAAO,EACA,GAAA+B,GAAAnB,EAAAmB,MAGAC,GAAA,EAAA,GAAA,GAAA,GAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,KAGAC,EAAA,SAAAC,EAAAC,GACA,MAAAH,GAAAG,GAAA,KAAAD,EAAA,MAAAH,GAAAG,EAAA,MAAAC,IAAAA,EAAA,KAAA,GAAAJ,GAAAG,EAAA,KAAAC,GAAA,KAAAJ,GAAAG,EAAA,KAAAC,GAAA,KAwHA,KAlHArB,EAAAE,EAAAoB,kBACAtB,EAAA,SAAAuB,GACA,GAAAlJ,GAAAmJ,IA4BA,QA3BAA,EAAAC,UAAA,KAAAD,EAAAC,WAGAzF,SAAA,GACAwF,GAAAxF,UAAAsD,EAGAU,EAAA,SAAAuB,GAIA,GAAAG,GAAArI,KAAAoI,UAAAzD,EAAAuD,KAAAlI,KAAAoI,UAAA,KAAApI,KAGA,OADAA,MAAAoI,UAAAC,EACA1D,IAIA3F,EAAAmJ,EAAAnJ,YAGA2H,EAAA,SAAAuB,GACA,GAAA3I,IAAAS,KAAAhB,aAAAA,GAAA0D,SACA,OAAAwF,KAAAlI,SAAAkI,IAAA3I,IAAAS,KAAAkI,KAAA3I,EAAA2I,MAGAC,EAAA,KACAxB,EAAA5I,KAAAiC,KAAAkI,KAMAtB,EAAA,SAAAlF,EAAAnF,GACA,GAAA+L,GAAAH,EAAAD,EAAAK,EAAA,GAKAD,EAAA,WACAtI,KAAAwI,QAAA,IACA9F,UAAA8F,QAAA,EAGAL,EAAA,GAAAG,EACA,KAAAJ,IAAAC,GAEAxB,EAAA5I,KAAAoK,EAAAD,IACAK,GAsDA,OAnDAD,GAAAH,EAAA,KAGAI,EAoBA3B,EAFA,GAAA2B,EAEA,SAAA7G,EAAAnF,GAEA,GAAA2L,GAAAC,KAAAM,EAAAxC,EAAAlI,KAAA2D,IAAA2F,CACA,KAAAa,IAAAxG,GAIA+G,GAAA,aAAAP,GAAAvB,EAAA5I,KAAAoK,EAAAD,MAAAC,EAAAD,GAAA,KAAAvB,EAAA5I,KAAA2D,EAAAwG,IACA3L,EAAA2L,IAMA,SAAAxG,EAAAnF,GACA,GAAA2L,GAAAQ,EAAAD,EAAAxC,EAAAlI,KAAA2D,IAAA2F,CACA,KAAAa,IAAAxG,GACA+G,GAAA,aAAAP,IAAAvB,EAAA5I,KAAA2D,EAAAwG,KAAAQ,EAAA,gBAAAR,IACA3L,EAAA2L,IAKAQ,GAAA/B,EAAA5I,KAAA2D,EAAAwG,EAAA,iBACA3L,EAAA2L,KA1CAC,GAAA,UAAA,WAAA,iBAAA,uBAAA,gBAAA,iBAAA,eAGAvB,EAAA,SAAAlF,EAAAnF,GACA,GAAA2L,GAAA5I,EAAAmJ,EAAAxC,EAAAlI,KAAA2D,IAAA2F,EACAsB,GAAAF,GAAA,kBAAA/G,GAAA1C,aAAA4J,QAAAlH,GAAAuG,iBAAAvG,EAAAuG,gBAAAtB,CACA,KAAAuB,IAAAxG,GAGA+G,GAAA,aAAAP,IAAAS,EAAA5K,KAAA2D,EAAAwG,IACA3L,EAAA2L,EAIA,KAAA5I,EAAA6I,EAAA7I,OAAA4I,EAAAC,IAAA7I,GAAAqJ,EAAA5K,KAAA2D,EAAAwG,IAAA3L,EAAA2L,OAgCAtB,EAAAlF,EAAAnF,KASA+I,EAAA,kBAAA,CAEA,GAAAuD,IACAC,GAAA,OACAC,GAAA,MACAC,EAAA,MACAC,GAAA,MACAC,GAAA,MACAC,GAAA,MACAC,EAAA,OAKAC,EAAA,SACAC,EAAA,SAAAC,EAAA3L,GAGA,OAAAyL,GAAAzL,GAAA,IAAA4L,OAAAD,IAOAE,EAAA,QACAC,EAAA,SAAA9L,GAGA,IAFA,GAAA+G,GAAA,IAAAgF,EAAA,EAAArK,EAAA1B,EAAA0B,OAAAsK,GAAAjC,GAAArI,EAAA,GACAuK,EAAAD,IAAAjC,EAAA/J,EAAAkM,MAAA,IAAAlM,GACA0B,EAAAqK,EAAAA,IAAA,CACA,GAAAI,GAAAnM,EAAAoM,WAAAL,EAGA,QAAAI,GACA,IAAA,GAAA,IAAA,GAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IACApF,GAAAkE,EAAAkB,EACA,MACA,SACA,GAAA,GAAAA,EAAA,CACApF,GAAA8E,EAAAH,EAAA,EAAAS,EAAApH,SAAA,IACA,OAEAgC,GAAAiF,EAAAC,EAAAF,GAAA/L,EAAAqM,OAAAN,IAGA,MAAAhF,GAAA,KAKAuF,EAAA,SAAAhC,EAAAxG,EAAAnF,EAAA4N,EAAAC,EAAAC,EAAAC,GACA,GAAA1M,GAAA2M,EAAAxC,EAAAC,EAAAwC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAApB,EAAArK,EAAA0L,EAAArG,CACA,KAEA/G,EAAA8D,EAAAwG,GACA,MAAA9B,IACA,GAAA,gBAAAxI,IAAAA,EAEA,GADA2M,EAAAtE,EAAAlI,KAAAH,GACA2M,GAAAjD,GAAAX,EAAA5I,KAAAH,EAAA,UA4CA,kBAAAA,GAAAkI,SAAAyE,GAAAhD,GAAAgD,GAAA/C,GAAA+C,GAAA9C,GAAAd,EAAA5I,KAAAH,EAAA,aAKAA,EAAAA,EAAAkI,OAAAoC,QAhDA,IAAAtK,EAAA,GAAA,GAAA,EAAA,EAAAA,EAAA,CAIA,GAAAkK,EAAA,CAKA,IADA0C,EAAA5C,EAAAhK,EAAA,OACAmK,EAAAH,EAAA4C,EAAA,UAAA,KAAA,EAAA1C,EAAAC,EAAA,EAAA,IAAAyC,EAAAzC,KACA,IAAAC,EAAAJ,GAAA4C,EAAA1C,EAAAC,EAAA,IAAA,OAAAD,EAAAC,EAAAC,EAAA,IAAAwC,EAAAxC,KACAwC,EAAA,EAAAA,EAAA1C,EAAAC,EAAAC,GAKAyC,GAAA7M,EAAA,MAAA,OAAA,MAGA8M,EAAA9C,EAAA6C,EAAA,MAAA,GACAE,EAAA/C,EAAA6C,EAAA,KAAA,GACAG,EAAAhD,EAAA6C,EAAA,KAAA,GACAI,EAAAJ,EAAA,QAEA1C,GAAAnK,EAAAkJ,iBACAkB,EAAApK,EAAAmJ,cACAyD,EAAA5M,EAAAoJ,aACA0D,EAAA9M,EAAAqJ,cACA0D,EAAA/M,EAAAsJ,gBACA0D,EAAAhN,EAAAuJ,gBACA0D,EAAAjN,EAAAwJ,oBAGAxJ,IAAA,GAAAmK,GAAAA,GAAA,KAAA,EAAAA,EAAA,IAAA,KAAAuB,EAAA,EAAA,EAAAvB,GAAAA,EAAAA,GAAAuB,EAAA,EAAAvB,IACA,IAAAuB,EAAA,EAAAtB,EAAA,GAAA,IAAAsB,EAAA,EAAAkB,GAGA,IAAAlB,EAAA,EAAAoB,GAAA,IAAApB,EAAA,EAAAqB,GAAA,IAAArB,EAAA,EAAAsB,GAEA,IAAAtB,EAAA,EAAAuB,GAAA,QAEAjN,GAAA,IAeA,IALArB,IAGAqB,EAAArB,EAAAwB,KAAA2D,EAAAwG,EAAAtK,IAEA,OAAAA,EACA,MAAA,MAGA,IADA2M,EAAAtE,EAAAlI,KAAAH,GACA2M,GAAA7C,EAEA,MAAA,GAAA9J,CACA,IAAA2M,GAAAhD,EAGA,MAAA3J,GAAA,GAAA,GAAA,EAAA,EAAAA,EAAA,GAAAA,EAAA,MACA,IAAA2M,GAAA/C,EAEA,MAAAkC,GAAA,GAAA9L,EAGA,IAAA,gBAAAA,GAAA,CAGA,IAAA0B,EAAAgL,EAAAhL,OAAAA,KACA,GAAAgL,EAAAhL,KAAA1B,EAEA,KAAAR,IASA,IALAkN,EAAAW,KAAArN,GACAkN,KAEAE,EAAAX,EACAA,GAAAD,EACAG,GAAA9C,EAAA,CAEA,IAAAkC,EAAA,EAAArK,EAAA1B,EAAA0B,OAAAA,EAAAqK,EAAAA,IACAoB,EAAAb,EAAAP,EAAA/L,EAAArB,EAAA4N,EAAAC,EAAAC,EAAAC,GACAQ,EAAAG,KAAAF,IAAAvF,EAAA,OAAAuF,EAEApG,GAAAmG,EAAAxL,OAAA8K,EAAA,MAAAC,EAAAS,EAAAI,KAAA,MAAAb,GAAA,KAAAW,EAAA,IAAA,IAAAF,EAAAI,KAAA,KAAA,IAAA,SAKAtE,GAAAuD,GAAAvM,EAAA,SAAAsK,GACA,GAAA6C,GAAAb,EAAAhC,EAAAtK,EAAArB,EAAA4N,EAAAC,EAAAC,EAAAC,EACAS,KAAAvF,GAOAsF,EAAAG,KAAAvB,EAAAxB,GAAA,KAAAkC,EAAA,IAAA,IAAAW,KAGApG,EAAAmG,EAAAxL,OAAA8K,EAAA,MAAAC,EAAAS,EAAAI,KAAA,MAAAb,GAAA,KAAAW,EAAA,IAAA,IAAAF,EAAAI,KAAA,KAAA,IAAA,IAIA,OADAZ,GAAAa,MACAxG,GAKAU,GAAAM,UAAA,SAAAyF,EAAAC,EAAA9B,GACA,GAAAa,GAAA7N,EAAA4N,EAAAI,CACA,IAAA3B,QAAAyC,KAAAA,EACA,IAAAd,EAAAtE,EAAAlI,KAAAsN,KAAAhE,EACA9K,EAAA8O,MACA,IAAAd,GAAA9C,EAAA,CAEA0C,IACA,KAAA,GAAAvM,GAAA+L,EAAA,EAAArK,EAAA+L,EAAA/L,OAAAA,EAAAqK,EAAA/L,EAAAyN,EAAA1B,KAAAY,EAAAtE,EAAAlI,KAAAH,IAAA2M,GAAA/C,GAAA+C,GAAAhD,KAAA4C,EAAAvM,GAAA,KAGA,GAAA2L,EACA,IAAAgB,EAAAtE,EAAAlI,KAAAwL,KAAAhC,GAGA,IAAAgC,GAAAA,EAAA,GAAA,EACA,IAAAa,EAAA,GAAAb,EAAA,KAAAA,EAAA,IAAAa,EAAA9K,OAAAiK,EAAAa,GAAA,UAEAG,IAAA/C,IACA4C,EAAAb,EAAAjK,QAAA,GAAAiK,EAAAA,EAAAC,MAAA,EAAA,IAMA,OAAAU,GAAA,IAAAtM,KAAAA,EAAA,IAAAwN,EAAAxN,GAAArB,EAAA4N,EAAAC,EAAA,QAKA,IAAA9E,EAAA,cAAA,CACA,GAgBAgG,GAAAC,EAhBAC,EAAAxF,EAAAwF,aAIAC,GACA3C,GAAA,KACAC,GAAA,IACA2C,GAAA,IACAC,GAAA,KACAC,IAAA,IACAC,IAAA,KACAC,IAAA,KACAC,IAAA,MAOAC,EAAA,WAEA,KADAV,GAAAC,EAAA,KACA/E,KAMAyF,EAAA,WAEA,IADA,GAAArO,GAAAsO,EAAAC,EAAAC,EAAArC,EAAAqB,EAAAG,EAAAjM,EAAA8L,EAAA9L,OACAA,EAAAgM,GAEA,OADAvB,EAAAqB,EAAApB,WAAAsB,IAEA,IAAA,GAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAGAA,GACA,MACA,KAAA,KAAA,IAAA,KAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAKA,MAFA1N,GAAA+J,EAAAyD,EAAAnB,OAAAqB,GAAAF,EAAAE,GACAA,IACA1N,CACA,KAAA,IAKA,IAAAA,EAAA,IAAA0N,IAAAhM,EAAAgM,GAEA,GADAvB,EAAAqB,EAAApB,WAAAsB,GACA,GAAAvB,EAGAiC,QACA,IAAA,IAAAjC,EAKA,OADAA,EAAAqB,EAAApB,aAAAsB,IAEA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,KAAA,IAAA,KAAA,IAAA,KAAA,IAAA,KAEA1N,GAAA6N,EAAA1B,GACAuB,GACA,MACA,KAAA,KAKA,IADAY,IAAAZ,EACAa,EAAAb,EAAA,EAAAa,EAAAb,EAAAA,IACAvB,EAAAqB,EAAApB,WAAAsB,GAGAvB,GAAA,IAAA,IAAAA,GAAAA,GAAA,IAAA,KAAAA,GAAAA,GAAA,IAAA,IAAAA,GAEAiC,GAIApO,IAAA4N,EAAA,KAAAJ,EAAA5B,MAAA0C,EAAAZ,GACA,MACA,SAEAU,QAEA,CACA,GAAA,IAAAjC,EAGA,KAKA,KAHAA,EAAAqB,EAAApB,WAAAsB,GACAY,EAAAZ,EAEAvB,GAAA,IAAA,IAAAA,GAAA,IAAAA,GACAA,EAAAqB,EAAApB,aAAAsB,EAGA1N,IAAAwN,EAAA5B,MAAA0C,EAAAZ,GAGA,GAAA,IAAAF,EAAApB,WAAAsB,GAGA,MADAA,KACA1N,CAGAoO,IACA,SASA,GAPAE,EAAAZ,EAEA,IAAAvB,IACAqC,GAAA,EACArC,EAAAqB,EAAApB,aAAAsB,IAGAvB,GAAA,IAAA,IAAAA,EAAA,CAQA,IANA,IAAAA,IAAAA,EAAAqB,EAAApB,WAAAsB,EAAA,GAAAvB,GAAA,IAAA,IAAAA,IAEAiC,IAEAI,GAAA,EAEA9M,EAAAgM,IAAAvB,EAAAqB,EAAApB,WAAAsB,GAAAvB,GAAA,IAAA,IAAAA,GAAAuB,KAGA,GAAA,IAAAF,EAAApB,WAAAsB,GAAA,CAGA,IAFAa,IAAAb,EAEAhM,EAAA6M,IAAApC,EAAAqB,EAAApB,WAAAmC,GAAApC,GAAA,IAAA,IAAAA,GAAAoC,KACAA,GAAAb,GAEAU,IAEAV,EAAAa,EAKA,GADApC,EAAAqB,EAAApB,WAAAsB,GACA,KAAAvB,GAAA,IAAAA,EAAA,CAQA,IAPAA,EAAAqB,EAAApB,aAAAsB,IAGA,IAAAvB,GAAA,IAAAA,IACAuB,IAGAa,EAAAb,EAAAhM,EAAA6M,IAAApC,EAAAqB,EAAApB,WAAAmC,GAAApC,GAAA,IAAA,IAAAA,GAAAoC,KACAA,GAAAb,GAEAU,IAEAV,EAAAa,EAGA,OAAAf,EAAA5B,MAAA0C,EAAAZ,GAOA,GAJAc,GACAJ,IAGA,QAAAZ,EAAA5B,MAAA8B,EAAAA,EAAA,GAEA,MADAA,IAAA,GACA,CACA,IAAA,SAAAF,EAAA5B,MAAA8B,EAAAA,EAAA,GAEA,MADAA,IAAA,GACA,CACA,IAAA,QAAAF,EAAA5B,MAAA8B,EAAAA,EAAA,GAEA,MADAA,IAAA,EACA,IAGAU,KAKA,MAAA,KAIAK,EAAA,SAAAzO,GACA,GAAAkN,GAAAwB,CAKA,IAJA,KAAA1O,GAEAoO,IAEA,gBAAApO,GAAA,CACA,GAAA,MAAA+J,EAAA/J,EAAAqM,OAAA,GAAArM,EAAA,IAEA,MAAAA,GAAA4L,MAAA,EAGA,IAAA,KAAA5L,EAAA,CAGA,IADAkN,KAEAlN,EAAAqO,IAEA,KAAArO,EAHA0O,IAAAA,GAAA,GASAA,IACA,KAAA1O,GACAA,EAAAqO,IACA,KAAArO,GAEAoO,KAIAA,KAIA,KAAApO,GACAoO,IAEAlB,EAAAG,KAAAoB,EAAAzO,GAEA,OAAAkN,GACA,GAAA,KAAAlN,EAAA,CAGA,IADAkN,KAEAlN,EAAAqO,IAEA,KAAArO,EAHA0O,IAAAA,GAAA,GAQAA,IACA,KAAA1O,GACAA,EAAAqO,IACA,KAAArO,GAEAoO,KAIAA,MAMA,KAAApO,GAAA,gBAAAA,IAAA,MAAA+J,EAAA/J,EAAAqM,OAAA,GAAArM,EAAA,KAAA,KAAAqO,MACAD,IAEAlB,EAAAlN,EAAA4L,MAAA,IAAA6C,EAAAJ,IAEA,OAAAnB,GAGAkB,IAEA,MAAApO,IAIA2O,EAAA,SAAAnB,EAAAlD,EAAA3L,GACA,GAAAwO,GAAAyB,EAAApB,EAAAlD,EAAA3L,EACAwO,KAAAvF,QACA4F,GAAAlD,GAEAkD,EAAAlD,GAAA6C,GAOAyB,EAAA,SAAApB,EAAAlD,EAAA3L,GACA,GAAA+C,GAAA1B,EAAAwN,EAAAlD,EACA,IAAA,gBAAAtK,IAAAA,EAIA,GAAAqI,EAAAlI,KAAAH,IAAA6J,EACA,IAAAnI,EAAA1B,EAAA0B,OAAAA,KACAiN,EAAA3O,EAAA0B,EAAA/C,OAGAqK,GAAAhJ,EAAA,SAAAsK,GACAqE,EAAA3O,EAAAsK,EAAA3L,IAIA,OAAAA,GAAAwB,KAAAqN,EAAAlD,EAAAtK,GAIAyH,GAAAgB,MAAA,SAAA+E,EAAA7O,GACA,GAAAoI,GAAA/G,CAUA,OATA0N,GAAA,EACAC,EAAA,GAAAH,EACAzG,EAAA0H,EAAAJ,KAEA,KAAAA,KACAD,IAGAV,EAAAC,EAAA,KACAhP,GAAA0J,EAAAlI,KAAAxB,IAAA8K,EAAAmF,GAAA5O,KAAAA,EAAA,IAAA+G,EAAA/G,GAAA,GAAArB,GAAAoI,IAMA,MADAU,GAAA,aAAAF,EACAE,EA31BA,GAAAoH,GAAA,kBAAAxH,SAAAA,OAAAyH,IAGA9D,GACA+D,YAAA,EACAjL,QAAA,GAIAkL,EAAAhE,QAAAvD,WAAAA,UAAAA,QAAAwH,UAAAxH,QAMAkB,EAAAqC,QAAAzF,UAAAA,QAAAnD,KACA8M,EAAAF,GAAAhE,QAAA1D,UAAAA,SAAAA,OAAA2H,UAAA,gBAAA1K,SAAAA,MA80BA,KA50BA2K,GAAAA,EAAA,SAAAA,GAAAA,EAAA,SAAAA,GAAAA,EAAA,OAAAA,IACAvG,EAAAuG,GA20BAF,IAAAH,EAEAtH,EAAAoB,EAAAqG,OACA,CAEA,GAAAlG,GAAAH,EAAAwG,KACAC,EAAAzG,EAAA,MACA0G,GAAA,EAEAC,EAAA/H,EAAAoB,EAAAA,EAAA,OAGA4G,WAAA,WAOA,MANAF,KACAA,GAAA,EACA1G,EAAAwG,KAAArG,EACAH,EAAA,MAAAyG,EACAtG,EAAAsG,EAAA,MAEAE,IAIA3G,GAAAwG,MACA1G,MAAA6G,EAAA7G,MACAV,UAAAuH,EAAAvH,WAKA8G,GACAxH,OAAA,WACA,MAAAiI,MAGAnP,KAAAiC,MCn4BA+C,MAAAC,UACAD,MAAAC,QAAA,SAAAvG,GACA,MAAA,mBAAAgG,OAAAC,UAAAC,SAAA5E,KAAAtB,KAIA,mBAAA+F,UACA4K,WAAApI,WAKA3C,SAAAK,UAAA2K,OACAhL,SAAAK,UAAA2K,KAAA,SAAAC,GACA,GAAA,kBAAAtN,MACA,KAAA,IAAA5C,WAAA,uEAGA,IAAAmQ,GAAAxK,MAAAL,UAAA8G,MAAAzL,KAAA6G,UAAA,GACA4I,EAAAxN,KACAyN,EAAA,aAEAC,EAAA,WACA,MAAAF,GAAAG,MAAA3N,eAAAyN,IAAAH,EAAAtN,KAAAsN,EACAC,EAAAK,OAAA7K,MAAAL,UAAA8G,MAAAzL,KAAA6G,aAMA,OAHA6I,GAAA/K,UAAA1C,KAAA0C,UACAgL,EAAAhL,UAAA,GAAA+K,GAEAC,IAMA3K,MAAAL,UAAAmL,MACA9K,MAAAL,UAAAmL,IAAA,SAAAtR,EAAAuR,GACA,GAAA,SAAA9N,MAAA,OAAAA,KACA,KAAA,IAAA5C,WAAA,8BAEA,IAEA2Q,GAFAC,EAAAvL,OAAAzC,MACAiO,EAAAD,EAAA1O,SAAA,CAEA,IAAA,kBAAA/C,GACA,KAAA,IAAAa,WAAAb,EAAA,qBAEAqI,WAAAtF,OAAA,IACAyO,EAAAD,EAMA,KAHA,GAAAI,GAAA,GAAAnL,OAAAkL,GACAE,EAAA,EAEAF,EAAAE,GAAA,CACA,GAAAC,GAAAC,CACAF,KAAAH,KACAI,EAAAJ,EAAAG,GACAE,EAAA9R,EAAAwB,KAAAgQ,EAAAK,EAAAD,EAAAH,GACAE,EAAAC,GAAAE,GAEAF,IAGA,MAAAD,KAKAnL,MAAAL,UAAA2I,SACAtI,MAAAL,UAAA2I,OAAA,SAAA9O,GACA,GAAA,SAAAyD,MAAA,OAAAA,KACA,KAAA,IAAA5C,WAAA,8BAGA,IAAAkR,GAAA7L,OAAAzC,MACAiO,EAAAK,EAAAhP,SAAA,CACA,IAAA,kBAAA/C,GACA,KAAA,IAAAa,WAAAb,EAAA,qBAKA,KAAA,GAFAgS,MACAT,EAAAlJ,UAAAtF,QAAA,EAAAsF,UAAA,GAAA,OACAvI,EAAA,EAAA4R,EAAA5R,EAAAA,IACA,GAAAA,IAAAiS,GAAA,CACA,GAAAE,GAAAF,EAAAjS,EACAE,GAAAwB,KAAA+P,EAAAU,EAAAnS,EAAAiS,IACAC,EAAAtD,KAAAuD,GAKA,MAAAD,KAKAxL,MAAAL,UAAAkE,UACA7D,MAAAL,UAAAkE,QAAA,SAAArK,EAAAuR,GACA,GAAAC,GAAAI,CACA,IAAA,OAAAnO,MAAAtD,SAAAsD,KACA,KAAA,IAAA5C,WAAA,+BAGA,IAAA4Q,GAAAvL,OAAAzC,MACAiO,EAAAD,EAAA1O,SAAA,CACA,IAAA,kBAAA/C,GACA,KAAA,IAAAa,WAAAb,EAAA,qBAOA,KAJAqI,UAAAtF,OAAA,IACAyO,EAAAD,GAEAK,EAAA,EACAF,EAAAE,GAAA,CACA,GAAAC,EACAD,KAAAH,KACAI,EAAAJ,EAAAG,GACA5R,EAAAwB,KAAAgQ,EAAAK,EAAAD,EAAAH,IAEAG,QC1HA,SAAAlR,EAAAwR,GAAA,YAAA,mBAAAxJ,SAAAA,OAAAyH,IAAAzH,OAAA,gBAAAwJ,GAAA,gBAAApJ,SAAAH,OAAAG,QAAAoJ,IAAAxR,EAAAyR,WAAAD,KAAAzO,KAAA,WAAA,YAAA,SAAA/C,GAAAA,GAAA,OAAA0R,MAAAC,WAAA3R,KAAA4R,SAAA5R,GAAA,QAAAwR,GAAAxR,EAAAwR,EAAA7R,EAAA0R,EAAAQ,EAAAzS,GAAA,SAAAY,GAAA+C,KAAA+O,gBAAA9R,GAAA,SAAAwR,GAAAzO,KAAAgP,QAAAP,GAAA,SAAA7R,GAAAoD,KAAAiP,YAAArS,GAAA,SAAA0R,GAAAtO,KAAAkP,cAAAZ,GAAA,SAAAQ,GAAA9O,KAAAmP,gBAAAL,GAAA,SAAAzS,GAAA2D,KAAAoP,UAAA/S,GAAA,MAAAoS,GAAA/L,WAAA2M,gBAAA,WAAA,MAAArP,MAAAsP,cAAAP,gBAAA,SAAA9R,GAAA+C,KAAAsP,aAAAtJ,OAAA/I,IAAAsS,QAAA,WAAA,MAAAvP,MAAAwP,MAAAR,QAAA,SAAA/R,GAAA,GAAA,mBAAAwF,OAAAC,UAAAC,SAAA5E,KAAAd,GAAA,KAAA,IAAAG,WAAA,wBAAA4C,MAAAwP,KAAAvS,GAAAwS,YAAA,WAAA,MAAAzP,MAAA0P,UAAAT,YAAA,SAAAhS,GAAA+C,KAAA0P,SAAA1J,OAAA/I,IAAA0S,cAAA,WAAA,MAAA3P,MAAA4P,YAAAV,cAAA,SAAAT,GAAA,IAAAxR,EAAAwR,GAAA,KAAA,IAAArR,WAAA,+BAAA4C,MAAA4P,WAAA7J,OAAA0I,IAAAoB,gBAAA,WAAA,MAAA7P,MAAA8P,cAAAX,gBAAA,SAAAV,GAAA,IAAAxR,EAAAwR,GAAA,KAAA,IAAArR,WAAA,iCAAA4C,MAAA8P,aAAA/J,OAAA0I,IAAAsB,UAAA,WAAA,MAAA/P,MAAAoL,QAAAgE,UAAA,SAAAnS,GAAA+C,KAAAoL,OAAApF,OAAA/I,IAAA0F,SAAA,WAAA,GAAA8L,GAAAzO,KAAAqP,mBAAA,cAAAzS,EAAA,KAAAoD,KAAAuP,eAAArE,KAAA,KAAA,IAAAoD,EAAAtO,KAAAyP,cAAA,IAAAzP,KAAAyP,cAAA,GAAAX,EAAA7R,EAAA+C,KAAA2P,iBAAA,IAAA3P,KAAA2P,gBAAA,GAAAtT,EAAAY,EAAA+C,KAAA6P,mBAAA,IAAA7P,KAAA6P,kBAAA,EAAA,OAAApB,GAAA7R,EAAA0R,EAAAQ,EAAAzS,IAAAoS,GAAA,IAAAuB,WAAA,SAAA/S,GAAA,QAAAwR,GAAAH,GAAA,GAAA1R,EAAA0R,GAAA,MAAA1R,GAAA0R,GAAAjJ,OAAA,IAAAyJ,GAAAlS,EAAA0R,IAAAjJ,WAAA4K,GAAA3B,EAAA4B,QAAA,EAAA,OAAAjT,GAAAqR,GAAAvQ,KAAA+Q,EAAAzJ,QAAAyJ,EAAAA,EAAAzJ,QAAAoJ,GAAAK,EAAAoB,QAAA,EAAApB,EAAAzJ,QAAA,GAAAzI,KAAA,OAAA6R,GAAA0B,EAAAlT,EAAAwR,EAAA5K,EAAAjH,EAAA6R,EAAA2B,EAAA,GAAA3B,EAAA,KAAA,SAAAxR,EAAAwR,EAAA7R,GAAA,QAAA0R,GAAArR,GAAA,GAAAwR,GAAAxR,CAAA,OAAA,gBAAAA,KAAAwR,EAAA1B,KAAA1G,MAAApJ,EAAAoT,QAAA,WAAA,MAAA,MAAA5B,EAAA6B,SAAA,GAAAC,GAAA9B,GAAA,GAAAK,GAAAL,GAAA,QAAAK,GAAA7R,GAAA,GAAAwR,GAAAxR,CAAA,iBAAAA,KAAAwR,EAAA1B,KAAA1G,MAAApJ,EAAAoT,QAAA,WAAA,KAAA,IAAAzT,GAAAsJ,EAAAsK,OAAA/B,EAAA,WAAAH,EAAApI,EAAAsK,OAAA/B,EAAA,WAAAK,EAAA5I,EAAAsK,OAAA/B,EAAA,YAAApS,EAAA6J,EAAAsK,OAAA/B,EAAA,aAAA,MAAA8B,EAAArK,EAAAsK,OAAA/B,EAAA,iBAAA,MAAAgC,EAAAvK,EAAAsK,OAAA/B,EAAA,YAAA5K,EAAAqC,EAAAsK,OAAA/B,EAAA,OAAA,KAAA,IAAA7R,GAAAoD,KAAA0Q,SAAA,KAAA,IAAApO,OAAA,wBAAA1F,EAAA0R,GAAAA,EAAAT,IAAA3H,EAAAyK,WAAA9C,IAAA,SAAA5Q,GAAA,MAAAZ,IAAA6J,EAAA0K,WAAAvU,IAAA6J,EAAA0K,WAAA3T,GAAAiJ,EAAA2K,SAAAxU,EAAAY,GAAAA,IAAA+C,KAAA8Q,OAAAC,EAAAC,UAAAlC,GAAA,GAAA9O,KAAAiR,SAAAF,EAAAC,UAAA1C,GAAA,GAAAtO,KAAAkR,WAAA7U,EAAA2D,KAAAmR,eAAAZ,EAAAvQ,KAAAoR,UAAAX,EAAAzQ,KAAAqR,KAAAxN,EAAA,QAAAxH,KAAA2D,KAAAsR,cAAA,EAAAtR,KAAAuR,gBAAA,EAAAvR,KAAAoL,OAAA,KAAApL,KAAAwR,aAAA,KAAAxR,KAAAyR,eAAA,KAAAzR,KAAAuF,KAAA,KAAA,QAAAgL,GAAAtT,GAAA,GAAAwR,GAAAxR,CAAA,iBAAAA,KAAAwR,EAAA1B,KAAA1G,MAAApJ,EAAAoT,QAAA,WAAA,KAAA,IAAAzT,GAAAsJ,EAAAsK,OAAA/B,EAAA,WAAAK,EAAA5I,EAAAsK,OAAA/B,EAAA,WAAA,IAAA7R,GAAAoD,KAAA0Q,SAAA,KAAA,IAAApO,OAAA,wBAAA1F,EAAAoD,MAAAiR,SAAA,GAAAF,GAAA/Q,KAAA8Q,OAAA,GAAAC,EAAA,IAAA1U,IAAAqV,KAAA,GAAAC,OAAA,EAAA3R,MAAA4R,UAAA9C,EAAAjB,IAAA,SAAA5Q,GAAA,GAAAA,EAAA4U,IAAA,KAAA,IAAAvP,OAAA,qDAAA,IAAAmM,GAAAvI,EAAAsK,OAAAvT,EAAA,UAAAL,EAAAsJ,EAAAsK,OAAA/B,EAAA,QAAAK,EAAA5I,EAAAsK,OAAA/B,EAAA,SAAA,IAAA7R,EAAAP,EAAAqV,MAAA9U,IAAAP,EAAAqV,MAAA5C,EAAAzS,EAAAsV,OAAA,KAAA,IAAArP,OAAA,uDAAA,OAAAjG,GAAAoS,GAAAqD,iBAAAR,cAAA1U,EAAA,EAAA2U,gBAAAzC,EAAA,GAAAiD,SAAA,GAAAzD,GAAApI,EAAAsK,OAAAvT,EAAA,WAAA,GAAAiJ,GAAAtJ,EAAA,GAAA6T,EAAA7T,EAAA,GAAAmU,EAAAnU,EAAA,GAAAoV,SAAAnO,EAAAjH,EAAA,GAAAqV,EAAArV,EAAA,GAAAsV,SAAA5D,GAAA6D,cAAA,SAAAlV,GAAA,MAAA6R,GAAAqD,cAAAlV,IAAAqR,EAAA5L,UAAAgO,SAAA,EAAApC,EAAA5L,UAAA0P,oBAAA,KAAA3P,OAAA4P,eAAA/D,EAAA5L,UAAA,sBAAA2J,IAAA,WAAA,MAAArM,MAAAoS,qBAAApS,KAAAsS,eAAAtS,KAAAoR,UAAApR,KAAAkR,YAAAlR,KAAAoS,uBAAA9D,EAAA5L,UAAA6P,mBAAA,KAAA9P,OAAA4P,eAAA/D,EAAA5L,UAAA,qBAAA2J,IAAA,WAAA,MAAArM,MAAAuS,oBAAAvS,KAAAsS,eAAAtS,KAAAoR,UAAApR,KAAAkR,YAAAlR,KAAAuS,sBAAAjE,EAAA5L,UAAA8P,wBAAA,SAAAvV,EAAAwR,GAAA,GAAA7R,GAAAK,EAAAgN,OAAAwE,EAAA,OAAA,MAAA7R,GAAA,MAAAA,GAAA0R,EAAA5L,UAAA4P,eAAA,SAAArV,EAAAwR,GAAA,KAAA,IAAAnM,OAAA,6CAAAgM,EAAAmE,gBAAA,EAAAnE,EAAAoE,eAAA,EAAApE,EAAAqE,qBAAA,EAAArE,EAAAsE,kBAAA,EAAAtE,EAAA5L,UAAAmQ,YAAA,SAAA5V,EAAAwR,EAAA7R,GAAA,GAAAkS,GAAAzS,EAAAoS,GAAA,KAAA8B,EAAA3T,GAAA0R,EAAAmE,eAAA,QAAAlC,GAAA,IAAAjC,GAAAmE,gBAAA3D,EAAA9O,KAAA8S,kBAAA,MAAA,KAAAxE,GAAAoE,eAAA5D,EAAA9O,KAAA+S,iBAAA,MAAA,SAAA,KAAA,IAAAzQ,OAAA,+BAAA,GAAAmO,GAAAzQ,KAAAkR,UAAApC,GAAAjB,IAAA,SAAA5Q,GAAA,GAAAwR,GAAA,OAAAxR,EAAAmO,OAAA,KAAApL,KAAAiR,SAAA+B,GAAA/V,EAAAmO,OAAA,OAAA,OAAAqD,GAAA,MAAAgC,IAAAhC,EAAAvI,EAAAgF,KAAAuF,EAAAhC,KAAArD,OAAAqD,EAAA6C,cAAArU,EAAAqU,cAAAC,gBAAAtU,EAAAsU,gBAAAC,aAAAvU,EAAAuU,aAAAC,eAAAxU,EAAAwU,eAAAlM,KAAA,OAAAtI,EAAAsI,KAAA,KAAAvF,KAAA8Q,OAAAkC,GAAA/V,EAAAsI,QAAAvF,MAAA4G,QAAA3J,EAAAZ,IAAAiS,EAAA5L,UAAAuQ,yBAAA,SAAAhW,GAAA,GAAAwR,GAAAvI,EAAAsK,OAAAvT,EAAA,QAAAL,GAAAwO,OAAAlF,EAAAsK,OAAAvT,EAAA,UAAAuU,aAAA/C,EAAAgD,eAAAvL,EAAAsK,OAAAvT,EAAA,SAAA,GAAA,IAAA,MAAA+C,KAAAkR,aAAAtU,EAAAwO,OAAAlF,EAAA2K,SAAA7Q,KAAAkR,WAAAtU,EAAAwO,UAAApL,KAAAiR,SAAA3L,IAAA1I,EAAAwO,QAAA,QAAAxO,GAAAwO,OAAApL,KAAAiR,SAAAiC,QAAAtW,EAAAwO,OAAA,IAAAkD,MAAAQ,EAAA9O,KAAAmT,aAAAvW,EAAAoD,KAAA+S,kBAAA,eAAA,iBAAA7M,EAAAkN,2BAAA3C,EAAAmC,kBAAA,IAAA9D,GAAA,EAAA,CAAA,GAAAzS,GAAA2D,KAAA+S,kBAAAjE,EAAA,IAAA,SAAA7R,EAAA0U,OAAA,IAAA,GAAApB,GAAAlU,EAAAmV,aAAAnV,GAAAA,EAAAmV,eAAAjB,GAAAjC,EAAArD,MAAAyG,KAAAxL,EAAAsK,OAAAnU,EAAA,gBAAA,MAAAsV,OAAAzL,EAAAsK,OAAAnU,EAAA,kBAAA,MAAAgX,WAAAnN,EAAAsK,OAAAnU,EAAA,sBAAA,QAAAA,EAAA2D,KAAA+S,oBAAAjE,OAAA,KAAA,GAAAiC,GAAA1U,EAAAoV,eAAApV,GAAAA,EAAAmV,eAAA/C,GAAApS,EAAAoV,gBAAAV,GAAAzC,EAAArD,MAAAyG,KAAAxL,EAAAsK,OAAAnU,EAAA,gBAAA,MAAAsV,OAAAzL,EAAAsK,OAAAnU,EAAA,kBAAA,MAAAgX,WAAAnN,EAAAsK,OAAAnU,EAAA,sBAAA,QAAAA,EAAA2D,KAAA+S,oBAAAjE,GAAA,MAAAR,IAAAG,EAAA6E,kBAAAhF,EAAAQ,EAAApM,UAAAD,OAAA8Q,OAAAjF,EAAA5L,WAAAoM,EAAApM,UAAAqP,SAAAzD,EAAAQ,EAAAqD,cAAA,SAAAlV,GAAA,GAAAwR,GAAAhM,OAAA8Q,OAAAzE,EAAApM,WAAA9F,EAAA6R,EAAAqC,OAAAC,EAAAC,UAAA/T,EAAA6T,OAAA0C,WAAA,GAAAlF,EAAAG,EAAAwC,SAAAF,EAAAC,UAAA/T,EAAAgU,SAAAuC,WAAA,EAAA/E,GAAAyC,WAAAjU,EAAAwW,YAAAhF,EAAA0C,eAAAlU,EAAAyW,wBAAAjF,EAAAwC,SAAAuC,UAAA/E,EAAAyC,YAAAzC,EAAA4C,KAAApU,EAAA0W,KAAA,KAAA,GAAApD,GAAAtT,EAAAmU,UAAAoC,UAAAhK,QAAAiH,EAAAhC,EAAA2D,uBAAAvO,EAAA4K,EAAA8D,sBAAAnC,EAAA,EAAAwD,EAAArD,EAAAjR,OAAAsU,EAAAxD,EAAAA,IAAA,CAAA,GAAAyD,GAAAtD,EAAAH,GAAAD,EAAA,GAAA9T,EAAA8T,GAAAmB,cAAAuC,EAAAvC,cAAAnB,EAAAoB,gBAAAsC,EAAAtC,gBAAAsC,EAAAzI,SAAA+E,EAAA/E,OAAAkD,EAAA4E,QAAAW,EAAAzI,QAAA+E,EAAAqB,aAAAqC,EAAArC,aAAArB,EAAAsB,eAAAoC,EAAApC,eAAAoC,EAAAtO,OAAA4K,EAAA5K,KAAA3I,EAAAsW,QAAAW,EAAAtO,OAAA1B,EAAAoH,KAAAkF,IAAAM,EAAAxF,KAAAkF,GAAA,MAAA8B,GAAAxD,EAAA8D,mBAAArM,EAAAkN,4BAAA3E,GAAAK,EAAApM,UAAAgO,SAAA,EAAAjO,OAAA4P,eAAAvD,EAAApM,UAAA,WAAA2J,IAAA,WAAA,MAAArM,MAAAiR,SAAAuC,UAAA3F,IAAA,SAAA5Q,GAAA,MAAA,OAAA+C,KAAAkR,WAAAhL,EAAAgF,KAAAlL,KAAAkR,WAAAjU,GAAAA,GAAA+C,SAAA8O,EAAApM,UAAA4P,eAAA,SAAArV,EAAAwR,GAAA,IAAA,GAAA7R,GAAA0R,EAAAQ,EAAAyB,EAAAE,EAAAM,EAAA,EAAAX,EAAA,EAAAwD,EAAA,EAAAC,EAAA,EAAA1D,EAAA,EAAA2D,EAAA,EAAAC,EAAA9W,EAAAqC,OAAA0U,EAAA,EAAAC,KAAAC,KAAAC,KAAAC,KAAAL,EAAAC,GAAA,GAAA,MAAA/W,EAAAgN,OAAA+J,GAAAjD,IAAAiD,IAAA5D,EAAA,MAAA,IAAA,MAAAnT,EAAAgN,OAAA+J,GAAAA,QAAA,CAAA,IAAApX,EAAA,GAAAP,GAAAO,EAAA0U,cAAAP,EAAAR,EAAAyD,EAAAD,EAAAxD,IAAAvQ,KAAAwS,wBAAAvV,EAAAsT,GAAAA,KAAA,GAAAjC,EAAArR,EAAAuM,MAAAwK,EAAAzD,GAAAzB,EAAAmF,EAAA3F,GAAA0F,GAAA1F,EAAAhP,WAAA,CAAA,IAAAwP,KAAAyB,EAAAyD,GAAAnQ,EAAAwQ,OAAApX,EAAA+W,EAAAE,GAAAzD,EAAAyD,EAAAtW,MAAAoW,EAAAE,EAAAI,KAAAxF,EAAA7D,KAAAwF,EAAA,IAAA,IAAA3B,EAAAxP,OAAA,KAAA,IAAAgD,OAAA,yCAAA,IAAA,IAAAwM,EAAAxP,OAAA,KAAA,IAAAgD,OAAA,yCAAA2R,GAAA3F,GAAAQ,EAAAlS,EAAA2U,gBAAAnB,EAAAtB,EAAA,GAAAsB,EAAAxT,EAAA2U,gBAAAzC,EAAAxP,OAAA,IAAA1C,EAAAwO,OAAA+E,EAAArB,EAAA,GAAAqB,GAAArB,EAAA,GAAAlS,EAAA4U,aAAAoC,EAAA9E,EAAA,GAAA8E,EAAAhX,EAAA4U,aAAA5U,EAAA4U,cAAA,EAAA5U,EAAA6U,eAAAoC,EAAA/E,EAAA,GAAA+E,EAAAjX,EAAA6U,eAAA3C,EAAAxP,OAAA,IAAA1C,EAAA2I,KAAAuO,EAAAhF,EAAA,GAAAgF,GAAAhF,EAAA,KAAAsF,EAAAnJ,KAAArO,GAAA,gBAAAA,GAAA4U,cAAA2C,EAAAlJ,KAAArO,GAAAqV,EAAAmC,EAAAlO,EAAAqO,qCAAAvU,KAAAoS,oBAAAgC,EAAAnC,EAAAkC,EAAAjO,EAAAkN,4BAAApT,KAAAuS,mBAAA4B,GAAArF,EAAApM,UAAAyQ,aAAA,SAAAlW,EAAAwR,EAAA7R,EAAA0R,EAAAQ,EAAAzS,GAAA,GAAAY,EAAAL,IAAA,EAAA,KAAA,IAAAQ,WAAA,gDAAAH,EAAAL,GAAA,IAAAK,EAAAqR,GAAA,EAAA,KAAA,IAAAlR,WAAA,kDAAAH,EAAAqR,GAAA,OAAAmC,GAAA+D,OAAAvX,EAAAwR,EAAAK,EAAAzS,IAAAyS,EAAApM,UAAA+R,mBAAA,WAAA,IAAA,GAAAxX,GAAA,EAAAA,EAAA+C,KAAA8S,mBAAAxT,SAAArC,EAAA,CAAA,GAAAwR,GAAAzO,KAAA8S,mBAAA7V,EAAA,IAAAA,EAAA,EAAA+C,KAAA8S,mBAAAxT,OAAA,CAAA,GAAA1C,GAAAoD,KAAA8S,mBAAA7V,EAAA,EAAA,IAAAwR,EAAA6C,gBAAA1U,EAAA0U,cAAA,CAAA7C,EAAAiG,oBAAA9X,EAAA2U,gBAAA,CAAA,WAAA9C,EAAAiG,oBAAA,EAAA,IAAA5F,EAAApM,UAAAiS,oBAAA,SAAA1X,GAAA,GAAAwR,IAAA6C,cAAApL,EAAAsK,OAAAvT,EAAA,QAAAsU,gBAAArL,EAAAsK,OAAAvT,EAAA,WAAAL,EAAAoD,KAAAmT,aAAA1E,EAAAzO,KAAA8S,mBAAA,gBAAA,kBAAA5M,EAAAqO,oCAAArO,EAAAsK,OAAAvT,EAAA,OAAAqR,EAAAqE,sBAAA,IAAA/V,GAAA,EAAA,CAAA,GAAAkS,GAAA9O,KAAA8S,mBAAAlW,EAAA,IAAAkS,EAAAwC,gBAAA7C,EAAA6C,cAAA,CAAA,GAAAjV,GAAA6J,EAAAsK,OAAA1B,EAAA,SAAA,KAAA,QAAAzS,IAAAA,EAAA2D,KAAAiR,SAAA+B,GAAA3W,GAAA,MAAA2D,KAAAkR,aAAA7U,EAAA6J,EAAAgF,KAAAlL,KAAAkR,WAAA7U,IAAA,IAAAkU,GAAArK,EAAAsK,OAAA1B,EAAA,OAAA,KAAA,OAAA,QAAAyB,IAAAA,EAAAvQ,KAAA8Q,OAAAkC,GAAAzC,KAAAnF,OAAA/O,EAAAqV,KAAAxL,EAAAsK,OAAA1B,EAAA,eAAA,MAAA6C,OAAAzL,EAAAsK,OAAA1B,EAAA,iBAAA,MAAAvJ,KAAAgL,IAAA,OAAAnF,OAAA,KAAAsG,KAAA,KAAAC,OAAA,KAAApM,KAAA,OAAAuJ,EAAApM,UAAAkS,wBAAA,WAAA,MAAA5U,MAAAmR,eAAAnR,KAAAmR,eAAA7R,QAAAU,KAAAiR,SAAA1I,SAAAvI,KAAAmR,eAAA0D,KAAA,SAAA5X,GAAA,MAAA,OAAAA,KAAA,GAAA6R,EAAApM,UAAAoS,iBAAA,SAAA7X,EAAAwR,GAAA,IAAAzO,KAAAmR,eAAA,MAAA,KAAA,IAAA,MAAAnR,KAAAkR,aAAAjU,EAAAiJ,EAAA2K,SAAA7Q,KAAAkR,WAAAjU,IAAA+C,KAAAiR,SAAA3L,IAAArI,GAAA,MAAA+C,MAAAmR,eAAAnR,KAAAiR,SAAAiC,QAAAjW,GAAA,IAAAL,EAAA,IAAA,MAAAoD,KAAAkR,aAAAtU,EAAAsJ,EAAA6O,SAAA/U,KAAAkR,aAAA,CAAA,GAAA5C,GAAArR,EAAAoT,QAAA,aAAA,GAAA,IAAA,QAAAzT,EAAAoY,QAAAhV,KAAAiR,SAAA3L,IAAAgJ,GAAA,MAAAtO,MAAAmR,eAAAnR,KAAAiR,SAAAiC,QAAA5E,GAAA,MAAA1R,EAAAqY,MAAA,KAAArY,EAAAqY,OAAAjV,KAAAiR,SAAA3L,IAAA,IAAArI,GAAA,MAAA+C,MAAAmR,eAAAnR,KAAAiR,SAAAiC,QAAA,IAAAjW,IAAA,GAAAwR,EAAA,MAAA,KAAA,MAAA,IAAAnM,OAAA,IAAArF,EAAA,+BAAA6R,EAAApM,UAAAwS,qBAAA,SAAAjY,GAAA,GAAAwR,GAAAvI,EAAAsK,OAAAvT,EAAA,SAAA,IAAA,MAAA+C,KAAAkR,aAAAzC,EAAAvI,EAAA2K,SAAA7Q,KAAAkR,WAAAzC,KAAAzO,KAAAiR,SAAA3L,IAAAmJ,GAAA,OAAAiD,KAAA,KAAAC,OAAA,KAAA0B,WAAA,KAAA5E,GAAAzO,KAAAiR,SAAAiC,QAAAzE,EAAA,IAAA7R,IAAAwO,OAAAqD,EAAA+C,aAAAtL,EAAAsK,OAAAvT,EAAA,QAAAwU,eAAAvL,EAAAsK,OAAAvT,EAAA,WAAA6R,EAAA9O,KAAAmT,aAAAvW,EAAAoD,KAAA+S,kBAAA,eAAA,iBAAA7M,EAAAkN,2BAAAlN,EAAAsK,OAAAvT,EAAA,OAAAqR,EAAAqE,sBAAA,IAAA7D,GAAA,EAAA,CAAA,GAAAzS,GAAA2D,KAAA+S,kBAAAjE,EAAA,IAAAzS,EAAA+O,SAAAxO,EAAAwO,OAAA,OAAAsG,KAAAxL,EAAAsK,OAAAnU,EAAA,gBAAA,MAAAsV,OAAAzL,EAAAsK,OAAAnU,EAAA,kBAAA,MAAAgX,WAAAnN,EAAAsK,OAAAnU,EAAA,sBAAA,OAAA,OAAAqV,KAAA,KAAAC,OAAA,KAAA0B,WAAA,OAAA5E,EAAA0G,uBAAArG,EAAAyB,EAAA7N,UAAAD,OAAA8Q,OAAAjF,EAAA5L,WAAA6N,EAAA7N,UAAA1D,YAAAsP,EAAAiC,EAAA7N,UAAAgO,SAAA,EAAAjO,OAAA4P,eAAA9B,EAAA7N,UAAA,WAAA2J,IAAA,WAAA,IAAA,GAAApP,MAAAwR,EAAA,EAAAA,EAAAzO,KAAA4R,UAAAtS,OAAAmP,IAAA,IAAA,GAAA7R,GAAA,EAAAA,EAAAoD,KAAA4R,UAAAnD,GAAAsD,SAAAqD,QAAA9V,OAAA1C,IAAAK,EAAAgO,KAAAjL,KAAA4R,UAAAnD,GAAAsD,SAAAqD,QAAAxY,GAAA,OAAAK,MAAAsT,EAAA7N,UAAAiS,oBAAA,SAAA1X,GAAA,GAAAwR,IAAA6C,cAAApL,EAAAsK,OAAAvT,EAAA,QAAAsU,gBAAArL,EAAAsK,OAAAvT,EAAA,WAAAL,EAAA6T,EAAA+D,OAAA/F,EAAAzO,KAAA4R,UAAA,SAAA3U,EAAAwR,GAAA,GAAA7R,GAAAK,EAAAqU,cAAA7C,EAAAqD,gBAAAR,aAAA,OAAA1U,GAAAA,EAAAK,EAAAsU,gBAAA9C,EAAAqD,gBAAAP,kBAAAjD,EAAAtO,KAAA4R,UAAAhV,EAAA,OAAA0R,GAAAA,EAAAyD,SAAA4C,qBAAAjD,KAAAjD,EAAA6C,eAAAhD,EAAAwD,gBAAAR,cAAA,GAAAK,OAAAlD,EAAA8C,iBAAAjD,EAAAwD,gBAAAR,gBAAA7C,EAAA6C,cAAAhD,EAAAwD,gBAAAP,gBAAA,EAAA,GAAA8D,KAAApY,EAAAoY,QAAAjK,OAAA,KAAAsG,KAAA,KAAAC,OAAA,KAAApM,KAAA,OAAAgL,EAAA7N,UAAAkS,wBAAA,WAAA,MAAA5U,MAAA4R,UAAA0D,MAAA,SAAArY,GAAA,MAAAA,GAAA8U,SAAA6C,6BAAArE,EAAA7N,UAAAoS,iBAAA,SAAA7X,EAAAwR,GAAA,IAAA,GAAA7R,GAAA,EAAAA,EAAAoD,KAAA4R,UAAAtS,OAAA1C,IAAA,CAAA,GAAA0R,GAAAtO,KAAA4R,UAAAhV,GAAAkS,EAAAR,EAAAyD,SAAA+C,iBAAA7X,GAAA,EAAA,IAAA6R,EAAA,MAAAA,GAAA,GAAAL,EAAA,MAAA,KAAA,MAAA,IAAAnM,OAAA,IAAArF,EAAA,+BAAAsT,EAAA7N,UAAAwS,qBAAA,SAAAjY,GAAA,IAAA,GAAAwR,GAAA,EAAAA,EAAAzO,KAAA4R,UAAAtS,OAAAmP,IAAA,CAAA,GAAA7R,GAAAoD,KAAA4R,UAAAnD,EAAA,IAAA,KAAA7R,EAAAmV,SAAAqD,QAAAlC,QAAAhN,EAAAsK,OAAAvT,EAAA,WAAA,CAAA,GAAAqR,GAAA1R,EAAAmV,SAAAmD,qBAAAjY,EAAA,IAAAqR,EAAA,CAAA,GAAAQ,IAAA4C,KAAApD,EAAAoD,MAAA9U,EAAAkV,gBAAAR,cAAA,GAAAK,OAAArD,EAAAqD,QAAA/U,EAAAkV,gBAAAR,gBAAAhD,EAAAoD,KAAA9U,EAAAkV,gBAAAP,gBAAA,EAAA,GAAA,OAAAzC,KAAA,OAAA4C,KAAA,KAAAC,OAAA,OAAApB,EAAA7N,UAAA4P,eAAA,SAAArV,EAAAwR,GAAAzO,KAAAoS,uBAAApS,KAAAuS,qBAAA,KAAA,GAAA3V,GAAA,EAAAA,EAAAoD,KAAA4R,UAAAtS,OAAA1C,IAAA,IAAA,GAAA0R,GAAAtO,KAAA4R,UAAAhV,GAAAkS,EAAAR,EAAAyD,SAAAe,mBAAAzW,EAAA,EAAAA,EAAAyS,EAAAxP,OAAAjD,IAAA,CAAA,GAAAkU,GAAAzB,EAAAlS,GAAA6T,EAAAnC,EAAAyD,SAAAd,SAAA+B,GAAAzC,EAAAnF,OAAA,QAAAkD,EAAAyD,SAAAb,aAAAT,EAAAvK,EAAAgF,KAAAoD,EAAAyD,SAAAb,WAAAT,IAAAzQ,KAAAiR,SAAAsE,IAAA9E,GAAAA,EAAAzQ,KAAAiR,SAAAiC,QAAAzC,EAAA,IAAAM,GAAAzC,EAAAyD,SAAAjB,OAAAkC,GAAAzC,EAAAhL,KAAAvF,MAAA8Q,OAAAyE,IAAAxE,GAAAA,EAAA/Q,KAAA8Q,OAAAoC,QAAAnC,EAAA,IAAAlN,IAAAuH,OAAAqF,EAAAa,cAAAf,EAAAe,eAAAhD,EAAAwD,gBAAAR,cAAA,GAAAC,gBAAAhB,EAAAoB,QAAArD,EAAAwD,gBAAAR,gBAAAf,EAAAe,eAAAhD,EAAAwD,gBAAAP,gBAAA,EAAA,EAAAC,aAAAjB,EAAAiB,aAAAC,eAAAlB,EAAAkB,eAAAlM,KAAAwL,EAAA/Q,MAAAoS,oBAAAnH,KAAApH,GAAA,gBAAAA,GAAA2N,cAAAxR,KAAAuS,mBAAAtH,KAAApH,GAAAoO,EAAAjS,KAAAoS,oBAAAlM,EAAAqO,qCAAAtC,EAAAjS,KAAAuS,mBAAArM,EAAAkN,6BAAA3E,EAAA+G,yBAAAjF,GAAA,SAAAtT,EAAAwR,GAAA,QAAA7R,GAAAK,EAAAwR,EAAA7R,GAAA,GAAA6R,IAAAxR,GAAA,MAAAA,GAAAwR,EAAA,IAAA,IAAA7J,UAAAtF,OAAA,MAAA1C,EAAA,MAAA,IAAA0F,OAAA,IAAAmM,EAAA,6BAAA,QAAAH,GAAArR,GAAA,GAAAwR,GAAAxR,EAAAwY,MAAA5B,EAAA,OAAApF,IAAAuG,OAAAvG,EAAA,GAAAiH,KAAAjH,EAAA,GAAAkH,KAAAlH,EAAA,GAAAmH,KAAAnH,EAAA,GAAAwG,KAAAxG,EAAA,IAAA,KAAA,QAAAK,GAAA7R,GAAA,GAAAwR,GAAA,EAAA,OAAAxR,GAAA+X,SAAAvG,GAAAxR,EAAA+X,OAAA,KAAAvG,GAAA,KAAAxR,EAAAyY,OAAAjH,GAAAxR,EAAAyY,KAAA,KAAAzY,EAAA0Y,OAAAlH,GAAAxR,EAAA0Y,MAAA1Y,EAAA2Y,OAAAnH,GAAA,IAAAxR,EAAA2Y,MAAA3Y,EAAAgY,OAAAxG,GAAAxR,EAAAgY,MAAAxG,EAAA,QAAApS,GAAAY,GAAA,GAAAL,GAAAK,EAAAZ,EAAAiS,EAAArR,EAAA,IAAAZ,EAAA,CAAA,IAAAA,EAAA4Y,KAAA,MAAAhY,EAAAL,GAAAP,EAAA4Y,KAAA,IAAA,GAAA1E,GAAArK,EAAAuI,EAAAmC,WAAAhU,GAAA6T,EAAA7T,EAAAkN,MAAA,OAAAiH,EAAA,EAAAlN,EAAA4M,EAAAnR,OAAA,EAAAuE,GAAA,EAAAA,IAAA0M,EAAAE,EAAA5M,GAAA,MAAA0M,EAAAE,EAAAoF,OAAAhS,EAAA,GAAA,OAAA0M,EAAAQ,IAAAA,EAAA,IAAA,KAAAR,GAAAE,EAAAoF,OAAAhS,EAAA,EAAAkN,GAAAA,EAAA,IAAAN,EAAAoF,OAAAhS,EAAA,GAAAkN,KAAA,OAAAnU,GAAA6T,EAAAvF,KAAA,KAAA,KAAAtO,IAAAA,EAAAsJ,EAAA,IAAA,KAAA7J,GAAAA,EAAA4Y,KAAArY,EAAAkS,EAAAzS,IAAAO,EAAA,QAAA2T,GAAAtT,EAAAwR,GAAA,KAAAxR,IAAAA,EAAA,KAAA,KAAAwR,IAAAA,EAAA,IAAA,IAAA7R,GAAA0R,EAAAG,GAAA8B,EAAAjC,EAAArR,EAAA,IAAAsT,IAAAtT,EAAAsT,EAAA0E,MAAA,KAAArY,IAAAA,EAAAoY,OAAA,MAAAzE,KAAA3T,EAAAoY,OAAAzE,EAAAyE,QAAAlG,EAAAlS,EAAA,IAAAA,GAAA6R,EAAAgH,MAAAtF,GAAA,MAAA1B,EAAA,IAAA8B,IAAAA,EAAAoF,OAAApF,EAAA0E,KAAA,MAAA1E,GAAAoF,KAAAlH,EAAAK,EAAAyB,EAAA,IAAArK,GAAA,MAAAuI,EAAAxE,OAAA,GAAAwE,EAAApS,EAAAY,EAAAoT,QAAA,OAAA,IAAA,IAAA5B,EAAA,OAAA8B,IAAAA,EAAA0E,KAAA/O,EAAA4I,EAAAyB,IAAArK,EAAA,QAAAA,GAAAjJ,EAAAwR,GAAA,KAAAxR,IAAAA,EAAA,KAAAA,EAAAA,EAAAoT,QAAA,MAAA,GAAA,KAAA,GAAAzT,GAAA,EAAA,IAAA6R,EAAAyE,QAAAjW,EAAA,MAAA,CAAA,GAAAqR,GAAArR,EAAA6Y,YAAA,IAAA,IAAA,EAAAxH,EAAA,MAAAG,EAAA,IAAAxR,EAAAA,EAAAuM,MAAA,EAAA8E,GAAArR,EAAAwY,MAAA,qBAAA,MAAAhH,KAAA7R,EAAA,MAAAmG,OAAAnG,EAAA,GAAAsO,KAAA,OAAAuD,EAAAsH,OAAA9Y,EAAAqC,OAAA,GAAA,QAAAmR,GAAAxT,GAAA,MAAA,IAAAA,EAAA,QAAA8T,GAAA9T,GAAA,MAAAA,GAAA8Y,OAAA,GAAA,QAAAlS,GAAA5G,EAAAwR,EAAA7R,GAAA,GAAA0R,GAAArR,EAAAmO,OAAAqD,EAAArD,MAAA,OAAA,KAAAkD,EAAAA,GAAAA,EAAArR,EAAAuU,aAAA/C,EAAA+C,aAAA,IAAAlD,EAAAA,GAAAA,EAAArR,EAAAwU,eAAAhD,EAAAgD,eAAA,IAAAnD,GAAA1R,EAAA0R,GAAAA,EAAArR,EAAAsU,gBAAA9C,EAAA8C,gBAAA,IAAAjD,EAAAA,GAAAA,EAAArR,EAAAqU,cAAA7C,EAAA6C,cAAA,IAAAhD,EAAAA,EAAArR,EAAAsI,KAAAkJ,EAAAlJ,SAAA,QAAA0M,GAAAhV,EAAAwR,EAAA7R,GAAA,GAAA0R,GAAArR,EAAAqU,cAAA7C,EAAA6C,aAAA,OAAA,KAAAhD,EAAAA,GAAAA,EAAArR,EAAAsU,gBAAA9C,EAAA8C,gBAAA,IAAAjD,GAAA1R,EAAA0R,GAAAA,EAAArR,EAAAmO,OAAAqD,EAAArD,OAAA,IAAAkD,EAAAA,GAAAA,EAAArR,EAAAuU,aAAA/C,EAAA+C,aAAA,IAAAlD,EAAAA,GAAAA,EAAArR,EAAAwU,eAAAhD,EAAAgD,eAAA,IAAAnD,EAAAA,EAAArR,EAAAsI,KAAAkJ,EAAAlJ,SAAA,QAAA6K,GAAAnT,EAAAwR,GAAA,MAAAxR,KAAAwR,EAAA,EAAAxR,EAAAwR,EAAA,EAAA,GAAA,QAAAmF,GAAA3W,EAAAwR,GAAA,GAAA7R,GAAAK,EAAAqU,cAAA7C,EAAA6C,aAAA,OAAA,KAAA1U,EAAAA,GAAAA,EAAAK,EAAAsU,gBAAA9C,EAAA8C,gBAAA,IAAA3U,EAAAA,GAAAA,EAAAwT,EAAAnT,EAAAmO,OAAAqD,EAAArD,QAAA,IAAAxO,EAAAA,GAAAA,EAAAK,EAAAuU,aAAA/C,EAAA+C,aAAA,IAAA5U,EAAAA,GAAAA,EAAAK,EAAAwU,eAAAhD,EAAAgD,eAAA,IAAA7U,EAAAA,EAAAwT,EAAAnT,EAAAsI,KAAAkJ,EAAAlJ,UAAAkJ,EAAA+B,OAAA5T,CAAA,IAAAiX,GAAA,iEAAA1D,EAAA,eAAA1B,GAAAsG,SAAAzG,EAAAG,EAAAuH,YAAAlH,EAAAL,EAAAkC,UAAAtU,EAAAoS,EAAAvD,KAAAqF,EAAA9B,EAAAmC,WAAA,SAAA3T,GAAA,MAAA,MAAAA,EAAAgN,OAAA,MAAAhN,EAAAwY,MAAA5B,IAAApF,EAAAoC,SAAA3K,EAAAuI,EAAAwH,YAAAxF,EAAAhC,EAAAyH,cAAAnF,EAAAtC,EAAA2E,2BAAAvP,EAAA4K,EAAA8F,oCAAAtC,EAAAxD,EAAA0H,oCAAAvC,GAAA,SAAA3W,EAAAwR,GAAA,QAAA7R,GAAAK,EAAAqR,EAAAQ,EAAAzS,EAAAkU,EAAArK,GAAA,GAAAuK,GAAAhK,KAAAmB,OAAA0G,EAAArR,GAAA,GAAAA,EAAA8T,EAAAR,EAAAzB,EAAAzS,EAAAoU,IAAA,EAAA,OAAA,KAAAM,EAAAN,EAAAM,EAAA,EAAAzC,EAAAmC,EAAA,EAAA7T,EAAA6T,EAAAnC,EAAAQ,EAAAzS,EAAAkU,EAAArK,GAAAA,GAAAuI,EAAAmE,kBAAAtE,EAAAjS,EAAAiD,OAAAgP,EAAA,GAAAmC,EAAAA,EAAAxT,EAAA,EAAAL,EAAAK,EAAAwT,EAAA3B,EAAAzS,EAAAkU,EAAArK,GAAAA,GAAAuI,EAAAmE,kBAAAnC,EAAA,EAAAxT,EAAA,GAAAA,EAAAwR,EAAAkE,qBAAA,EAAAlE,EAAAmE,kBAAA,EAAAnE,EAAA+F,OAAA,SAAAvX,EAAAqR,EAAAQ,EAAAzS,GAAA,GAAA,IAAAiS,EAAAhP,OAAA,MAAA,EAAA,IAAAiR,GAAA3T,EAAA,GAAA0R,EAAAhP,OAAArC,EAAAqR,EAAAQ,EAAAzS,GAAAoS,EAAAkE,qBAAA,IAAA,EAAApC,EAAA,MAAA,EAAA,MAAAA,EAAA,GAAA,GAAA,IAAAzB,EAAAR,EAAAiC,GAAAjC,EAAAiC,EAAA,IAAA,MAAAA,CAAA,OAAAA,KAAA,SAAAtT,EAAAwR,EAAA7R,GAAA,QAAA0R,KAAAtO,KAAAoW,UAAApW,KAAAqW,QAAA,GAAAvH,GAAAlS,EAAA,EAAA0R,GAAA0C,UAAA,SAAA/T,EAAAwR,GAAA,IAAA,GAAA7R,GAAA,GAAA0R,GAAAQ,EAAA,EAAAzS,EAAAY,EAAAqC,OAAAjD,EAAAyS,EAAAA,IAAAlS,EAAA2Y,IAAAtY,EAAA6R,GAAAL,EAAA,OAAA7R,IAAA0R,EAAA5L,UAAA6F,KAAA,WAAA,MAAA9F,QAAA6T,oBAAAtW,KAAAqW,MAAA/W,QAAAgP,EAAA5L,UAAA6S,IAAA,SAAAtY,EAAAwR,GAAA,GAAA7R,GAAAkS,EAAAmH,YAAAhZ,GAAAqR,EAAAtO,KAAAqW,KAAApO,eAAArL,GAAAP,EAAA2D,KAAAoW,OAAA9W,SAAAgP,GAAAG,IAAAzO,KAAAoW,OAAAnL,KAAAhO,GAAAqR,IAAAtO,KAAAqW,KAAAzZ,GAAAP,IAAAiS,EAAA5L,UAAA4C,IAAA,SAAArI,GAAA,GAAAwR,GAAAK,EAAAmH,YAAAhZ,EAAA,OAAA+C,MAAAqW,KAAApO,eAAAwG,IAAAH,EAAA5L,UAAAwQ,QAAA,SAAAjW,GAAA,GAAAwR,GAAAK,EAAAmH,YAAAhZ,EAAA,IAAA+C,KAAAqW,KAAApO,eAAAwG,GAAA,MAAAzO,MAAAqW,KAAA5H,EAAA,MAAA,IAAAnM,OAAA,IAAArF,EAAA;EAAAqR,EAAA5L,UAAAsQ,GAAA,SAAA/V,GAAA,GAAAA,GAAA,GAAAA,EAAA+C,KAAAoW,OAAA9W,OAAA,MAAAU,MAAAoW,OAAAnZ,EAAA,MAAA,IAAAqF,OAAA,yBAAArF,IAAAqR,EAAA5L,UAAA8Q,QAAA,WAAA,MAAAxT,MAAAoW,OAAA5M,SAAAiF,EAAAuD,SAAA1D,GAAA,SAAArR,EAAAwR,EAAA7R,GAAA,QAAA0R,GAAArR,GAAA,MAAA,GAAAA,IAAAA,GAAA,GAAA,GAAAA,GAAA,GAAA,EAAA,QAAA6R,GAAA7R,GAAA,GAAAwR,GAAA,KAAA,EAAAxR,GAAAL,EAAAK,GAAA,CAAA,OAAAwR,IAAA7R,EAAAA,EAAA,GAAAP,GAAAO,EAAA,GAAA2T,EAAA,EAAArK,EAAA,GAAAqK,EAAAE,EAAAvK,EAAA,EAAA6K,EAAA7K,CAAAuI,GAAA8H,OAAA,SAAAtZ,GAAA,GAAAwR,GAAA7R,EAAA,GAAAkS,EAAAR,EAAArR,EAAA,GAAAwR,GAAAK,EAAA2B,EAAA3B,KAAAyB,EAAAzB,EAAA,IAAAL,GAAAsC,GAAAnU,GAAAP,EAAAka,OAAA9H,SAAAK,EAAA,EAAA,OAAAlS,IAAA6R,EAAA4F,OAAA,SAAApX,EAAAwR,EAAA7R,GAAA,GAAA0R,GAAApI,EAAArC,EAAA5G,EAAAqC,OAAA2S,EAAA,EAAA7B,EAAA,CAAA,GAAA,CAAA,GAAA3B,GAAA5K,EAAA,KAAA,IAAAvB,OAAA,6CAAA,IAAA4D,EAAA7J,EAAAgY,OAAApX,EAAA+M,WAAAyE,MAAA,KAAAvI,EAAA,KAAA,IAAA5D,OAAA,yBAAArF,EAAAgN,OAAAwE,EAAA,GAAAH,MAAApI,EAAA6K,GAAA7K,GAAAuK,EAAAwB,GAAA/L,GAAAkK,EAAAA,GAAAG,QAAAjC,EAAA1R,GAAAgB,MAAAkR,EAAAmD,GAAArV,EAAA0X,KAAA7F,IAAA,SAAAxR,EAAAwR,GAAA,GAAA7R,GAAA,mEAAAkN,MAAA,GAAA2E,GAAA8H,OAAA,SAAAtZ,GAAA,GAAAA,GAAA,GAAAA,EAAAL,EAAA0C,OAAA,MAAA1C,GAAAK,EAAA,MAAA,IAAAG,WAAA,6BAAAH,IAAAwR,EAAA4F,OAAA,SAAApX,GAAA,GAAAwR,GAAA,GAAA7R,EAAA,GAAA0R,EAAA,GAAAQ,EAAA,IAAAzS,EAAA,GAAAkU,EAAA,GAAArK,EAAA,GAAAuK,EAAA,GAAAM,EAAA,GAAAlN,EAAA,EAAA,OAAA5G,IAAAwR,GAAA7R,GAAAK,EAAAA,EAAAwR,EAAAxR,GAAAqR,GAAAQ,GAAA7R,EAAAA,EAAAqR,EAAAyC,EAAA9T,GAAAZ,GAAAkU,GAAAtT,EAAAA,EAAAZ,EAAAwH,EAAA5G,GAAAiJ,EAAA,GAAAjJ,GAAAwT,EAAA,GAAA,KAAA,SAAAxT,EAAAwR,GAAA,QAAA7R,GAAAK,EAAAwR,EAAA7R,GAAA,GAAA0R,GAAArR,EAAAwR,EAAAxR,GAAAwR,GAAAxR,EAAAL,GAAAK,EAAAL,GAAA0R,EAAA,QAAAA,GAAArR,EAAAwR,GAAA,MAAAhI,MAAA+P,MAAAvZ,EAAAwJ,KAAAgQ,UAAAhI,EAAAxR,IAAA,QAAA6R,GAAA7R,EAAAwR,EAAApS,EAAAkU,GAAA,GAAAA,EAAAlU,EAAA,CAAA,GAAA6J,GAAAoI,EAAAjS,EAAAkU,GAAAE,EAAApU,EAAA,CAAAO,GAAAK,EAAAiJ,EAAAqK,EAAA,KAAA,GAAAQ,GAAA9T,EAAAsT,GAAA1M,EAAAxH,EAAAkU,EAAA1M,EAAAA,IAAA4K,EAAAxR,EAAA4G,GAAAkN,IAAA,IAAAN,GAAA,EAAA7T,EAAAK,EAAAwT,EAAA5M,GAAAjH,GAAAK,EAAAwT,EAAA,EAAA5M,EAAA,IAAAoO,GAAAxB,EAAA,CAAA3B,GAAA7R,EAAAwR,EAAApS,EAAA4V,EAAA,GAAAnD,EAAA7R,EAAAwR,EAAAwD,EAAA,EAAA1B,IAAA9B,EAAAyD,UAAA,SAAAjV,EAAAwR,GAAAK,EAAA7R,EAAAwR,EAAA,EAAAxR,EAAAqC,OAAA,QAAA,SAAArC,EAAAwR,GAAA,YAAA,mBAAAxJ,SAAAA,OAAAyH,IAAAzH,OAAA,kBAAA,aAAA,cAAAwJ,GAAA,gBAAApJ,SAAAH,OAAAG,QAAAoJ,EAAA5R,QAAA,sCAAAA,QAAA,eAAAI,EAAAyZ,cAAAjI,EAAAxR,EAAA+S,UAAA/S,EAAAyR,aAAA1O,KAAA,SAAA/C,EAAAwR,GAAA,YAAA,SAAA7R,GAAAK,EAAAwR,EAAA7R,GAAA,GAAA0R,GAAA,GAAAqI,eAAArI,GAAAsI,KAAA,MAAA3Z,GAAAqR,EAAAuI,QAAAja,EAAA0R,EAAAwI,mBAAA,WAAA,GAAA,IAAAxI,EAAAyI,WAAA,CAAA,GAAAzI,EAAA0I,QAAA,KAAA1I,EAAA0I,OAAA,IAAA,MAAAvI,GAAAH,EAAA2I,aAAAra,GAAA,GAAA0F,OAAA,sBAAArF,MAAAqR,EAAA4I,OAAA,QAAA5I,GAAArR,EAAAwR,EAAA7R,GAAA,IAAA,GAAA0R,GAAAQ,EAAAzS,EAAAkU,EAAA,oCAAArK,EAAA,2DAAAuK,EAAA,wEAAAM,EAAA9T,EAAA6M,MAAA,MAAAjG,EAAA,GAAAoO,EAAAxL,KAAA0Q,IAAA1I,EAAA,IAAA2B,EAAA,EAAA6B,EAAA7B,IAAAA,EAAA,GAAA9B,EAAAyC,EAAAtC,EAAA2B,EAAA,GAAA/T,EAAAiS,EAAA4E,QAAA,MAAA7W,GAAA,IAAAiS,EAAAA,EAAAyH,OAAA,EAAA1Z,IAAAiS,EAAA,CAAA,GAAAzK,EAAAyK,EAAAzK,EAAAiL,EAAA5I,EAAAkR,KAAAvT,GAAAiL,GAAAA,EAAA,GAAA,MAAAA,GAAA,EAAA,IAAAA,EAAAyB,EAAA6G,KAAAvT,GAAAiL,GAAAA,EAAA,GAAA,MAAAA,GAAA,EAAA,IAAAA,EAAA2B,EAAA2G,KAAAvT,GAAAiL,GAAAA,EAAA,GAAA,MAAAA,GAAA,GAAA,MAAA,QAAA,QAAAA,KAAA,GAAA,kBAAArM,QAAA4P,gBAAA,kBAAA5P,QAAA8Q,OAAA,KAAA,IAAAjR,OAAA,mDAAA,QAAAjG,GAAAY,GAAA,GAAA,gBAAAA,GAAA,KAAA,IAAAG,WAAA,oCAAA,IAAA,gBAAAH,GAAAyS,SAAA,KAAA,IAAAtS,WAAA,kCAAA,IAAA,gBAAAH,GAAA2S,YAAA3S,EAAA2S,WAAA,IAAA,GAAA3S,EAAA2S,WAAA,EAAA,KAAA,IAAAxS,WAAA,+CAAA,IAAA,gBAAAH,GAAA6S,cAAA7S,EAAA6S,aAAA,IAAA,GAAA7S,EAAA6S,aAAA,EAAA,KAAA,IAAA1S,WAAA,qDAAA,QAAA,EAAA,QAAAmT,GAAAtT,GAAA,GAAAwR,GAAA,yCAAA2I,KAAAna,EAAA,IAAAwR,GAAAA,EAAA,GAAA,MAAAA,GAAA,EAAA,MAAA,IAAAnM,OAAA,8BAAA,QAAA4D,GAAAtJ,EAAA0R,EAAAQ,EAAAzS,EAAAkU,GAAA,GAAArK,GAAA,GAAAjJ,GAAAqW,kBAAA1W,GAAA6T,EAAAvK,EAAAyO,qBAAAjD,KAAA5C,EAAA6C,OAAAtV,IAAA0U,EAAA7K,EAAA4O,iBAAArE,EAAArF,OAAA,OAAA2F,KAAAR,EAAAE,EAAArF,QAAA2F,GAAA,GAAAtC,GAAAgC,EAAAlL,KAAA+I,EAAAmC,EAAArF,OAAAqF,EAAAiB,KAAAjB,EAAAkB,QAAA,MAAA,SAAAlB,GAAAxT,GAAA,MAAA+C,gBAAAyQ,IAAAxT,EAAAA,MAAA+C,KAAAqX,YAAApa,EAAAoa,gBAAArX,KAAAsX,KAAA1a,EAAAoD,KAAAuX,MAAA,SAAAta,GAAA,GAAAkG,QAAAA,OAAAqU,KAAA,MAAArU,QAAAqU,KAAAva,EAAA,IAAA,mBAAAwa,QAAA,MAAA,IAAAA,QAAAxa,EAAA,UAAA0F,SAAA,QAAA,MAAA,IAAAL,OAAA,gCAAAtC,KAAA0X,KAAA,SAAAjJ,GAAA,MAAA,IAAAjM,SAAA,SAAA5F,EAAA0R,GAAA,GAAAQ,GAAA,UAAAL,EAAAsH,OAAA,EAAA,EAAA,IAAA/V,KAAAqX,YAAA5I,GAAA7R,EAAAoD,KAAAqX,YAAA5I,QAAA,IAAAxR,EAAA0a,UAAA7I,EAAAR,EAAA,GAAAhM,OAAA,qDAAA,IAAAwM,EAAA,CAAA,GAAAzS,GAAA,yBAAA,IAAAoS,EAAAsH,OAAA,EAAA1Z,EAAAiD,UAAAjD,EAAAiS,EAAA,GAAAhM,OAAA,8DAAA,CAAA,GAAAiO,GAAA,QAAAjR,OAAAjD,EAAAiD,OAAA,IAAAA,OAAA4G,EAAAuI,EAAAsH,OAAAxF,GAAAE,EAAAzQ,KAAAuX,MAAArR,EAAAlG,MAAAqX,YAAA5I,GAAAgC,EAAA7T,EAAA6T,QAAAzQ,MAAAsX,KAAA7I,EAAA,SAAAxR,GAAA+C,KAAAqX,YAAA5I,GAAAxR,EAAAL,EAAAK,IAAAoQ,KAAArN,MAAAsO,IAAAjB,KAAArN,QAAAA,KAAA4X,SAAA,SAAA3a,GAAA,MAAA,IAAAuF,SAAA,SAAAiM,EAAA7R,GAAAoD,KAAA6X,kBAAA5a,GAAAO,KAAA,SAAAP,GAAA,QAAAL,KAAA6R,EAAAxR,GAAA+C,KAAA8X,iBAAA7a,GAAAO,KAAAiR,EAAA7R,GAAA,SAAAA,IAAAyQ,KAAArN,MAAApD,IAAAyQ,KAAArN,QAAAA,KAAA8X,iBAAA,SAAA7a,GAAA,MAAA,IAAAuF,SAAA,SAAA5F,EAAAkS,GAAAzS,EAAAY,GAAA+C,KAAA0X,KAAAza,EAAAyS,UAAAlS,KAAA,SAAAsR,GAAA,GAAAzS,GAAAiS,EAAAQ,EAAA7R,EAAA2S,WAAA3S,EAAA6S,aAAAlT,GAAA,GAAA6R,GAAApS,EAAAY,EAAAuS,KAAAvS,EAAAyS,SAAAzS,EAAA2S,WAAA3S,EAAA6S,gBAAAhB,IAAAzB,KAAArN,aAAAA,KAAA6X,kBAAA,SAAA5a,GAAA,MAAA,IAAAuF,SAAA,SAAAiM,EAAA7R,GAAAkS,IAAAzS,EAAAY,EAAA,IAAAqR,GAAAtO,KAAAqX,YAAA5G,EAAAxT,EAAAyS,QAAA1P,MAAA0X,KAAAjH,GAAAjT,KAAA,SAAAsR,GAAA,GAAAzS,GAAAkU,EAAAzB,GAAAiC,EAAA,UAAA1U,EAAA0Z,OAAA,EAAA,EAAA,OAAA1Z,EAAA,IAAA0U,IAAA1U,EAAAoU,EAAAsH,UAAA,EAAAtH,EAAAqF,YAAA,KAAA,GAAAzZ,GAAA2D,KAAA0X,KAAArb,GAAAmB,KAAA,SAAAZ,GAAA,GAAAkS,GAAA7R,EAAA2S,WAAAvT,EAAAY,EAAA6S,YAAArB,GAAAvI,EAAAtJ,EAAAK,EAAAuS,KAAAV,EAAAzS,EAAAiS,KAAA1R,GAAA,SAAAA,IAAAyQ,KAAArN,MAAApD,GAAA,SAAAA,IAAAyQ,KAAArN,UAAA,GAAAyQ,GAAAxT,MCAA,SAAAsJ,EAAAyR,GACA,YAIA,mBAAA/S,SAAAA,OAAAyH,IACAzH,OAAA,mBAAA,cAAA+S,GACA,gBAAA3S,SACAH,OAAAG,QAAA2S,EAAAnb,QAAA,eAEA0J,EAAA0R,eAAAD,EAAAzR,EAAAmI,aAEA1O,KAAA,SAAA0O,GACA,OACAwJ,UAAA,SAAAC,GACA,GAAA7N,MACA8N,EAAA,EAEA,iBAAAD,IAAA,gBAAAA,GAAAC,eACAA,EAAAD,EAAAC,aAIA,KADA,GAAAC,GAAAzT,UAAA0T,OACAD,GAAA/N,EAAAhL,OAAA8Y,GAAA,CAGA,IAAA,GADA5I,GAAA,GAAAzM,OAAAsV,EAAA,UAAA/Y,QACAjD,EAAA,EAAAA,EAAAmT,EAAAlQ,SAAAjD,EACAmT,EAAAnT,GAAAgc,EAAA,UAAAhc,EAEA,iCAAAkc,KAAAF,EAAA1V,YACA2H,EAAAW,KAAA,GAAAyD,GAAA8J,OAAAC,IAAA/b,OAAA8S,IAEAlF,EAAAW,KAAA,GAAAyD,GAAAhS,OAAA8S,GAGA,KACA6I,EAAAA,EAAAK,OACA,MAAAzb,GACA,OAGA,MAAAqN,OCzCA,SAAA/D,EAAAyR,GACA,YAIA,mBAAA/S,SAAAA,OAAAyH,IACAzH,OAAA,sBAAA,cAAA+S,GACA,gBAAA3S,SACAH,OAAAG,QAAA2S,EAAAnb,QAAA,eAEA0J,EAAAoS,iBAAAX,EAAAzR,EAAAmI,aAEA1O,KAAA,SAAA0O,GACA,YAEA,IAAAkK,GAAA,gBACAC,EAAA,+BAEA,QAMAxS,MAAA,SAAA5I,GACA,GAAA,mBAAAA,GAAAqb,YAAA,mBAAArb,GAAA,mBACA,MAAAuC,MAAA+Y,WAAAtb,EACA,IAAAA,EAAA6M,OAAA7M,EAAA6M,MAAAmL,MAAAoD,GACA,MAAA7Y,MAAAgZ,YAAAvb,EACA,IAAAA,EAAA6M,OAAA7M,EAAA6M,MAAAmL,MAAAmD,GACA,MAAA5Y,MAAAiZ,gBAAAxb,EAEA,MAAA,IAAA6E,OAAA,oCASA4W,gBAAA,SAAAC,GAEA,GAAA,KAAAA,EAAAjG,QAAA,KACA,OAAAiG,EAGA,IAAAC,GAAAD,EAAA9I,QAAA,YAAA,IAAAvG,MAAA,KACAuP,EAAAD,EAAAjO,MACAmO,EAAAF,EAAAA,EAAA9Z,OAAA,EACA,KAAAqP,MAAAC,WAAA0K,KAAAzK,SAAAyK,GAAA,CACA,GAAA1J,GAAAwJ,EAAAjO,KACA,QAAAiO,EAAAlO,KAAA,KAAA0E,EAAAyJ,GAEA,OAAAD,EAAAlO,KAAA,KAAAmO,EAAA3c,SAIAsc,YAAA,SAAAvb,GACA,MAAAA,GAAA6M,MAAAR,MAAA,MAAAuB,OAAA,SAAAqG,GACA,QAAAA,EAAA+D,MAAAoD,IACA7Y,MAAA6N,IAAA,SAAA6D,GACA,GAAA6H,GAAA7H,EAAArB,QAAA,OAAA,IAAAvG,MAAA,OAAAN,MAAA,GACA4P,EAAApZ,KAAAkZ,gBAAAK,EAAApO,OACAmE,EAAAiK,EAAA,IAAA,cAAAA,EAAA,GAAAA,EAAA,GAAA7c,MACA,OAAA,IAAAgS,GAAAY,EAAA5S,OAAA0c,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAA1H,IACA1R,OAGAiZ,gBAAA,SAAAxb,GACA,MAAAA,GAAA6M,MAAAR,MAAA,MAAAuB,OAAA,SAAAqG,GACA,QAAAA,EAAA+D,MAAAmD,IACA5Y,MAAA6N,IAAA,SAAA6D,GACA,GAAA6H,GAAA7H,EAAA5H,MAAA,KACAsP,EAAApZ,KAAAkZ,gBAAAK,EAAApO,OACAmE,EAAAiK,EAAAC,SAAA9c,MACA,OAAA,IAAAgS,GAAAY,EAAA5S,OAAA0c,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAA1H,IACA1R,OAGA+Y,WAAA,SAAA9b,GACA,OAAAA,EAAA6b,YAAA7b,EAAAwc,QAAAvG,QAAA,MAAA,IACAjW,EAAAwc,QAAA3P,MAAA,MAAAxK,OAAArC,EAAA6b,WAAAhP,MAAA,MAAAxK,OACAU,KAAA0Z,YAAAzc,GACAA,EAAAqN,MAGAtK,KAAA2Z,aAAA1c,GAFA+C,KAAA4Z,aAAA3c,IAMAyc,YAAA,SAAAzc,GAKA,IAAA,GAJA4c,GAAA,oCACAC,EAAA7c,EAAAwc,QAAA3P,MAAA,MACAnF,KAEAtI,EAAA,EAAA4R,EAAA6L,EAAAxa,OAAA2O,EAAA5R,EAAAA,GAAA,EAAA,CACA,GAAAoZ,GAAAoE,EAAAzC,KAAA0C,EAAAzd,GACAoZ,IACA9Q,EAAAsG,KAAA,GAAAyD,GAAAhS,OAAAA,OAAA+Y,EAAA,GAAAA,EAAA,GAAA/Y,OAAAod,EAAAzd,KAIA,MAAAsI,IAGAiV,aAAA,SAAA3c,GAKA,IAAA,GAJA4c,GAAA,6DACAC,EAAA7c,EAAA6b,WAAAhP,MAAA,MACAnF,KAEAtI,EAAA,EAAA4R,EAAA6L,EAAAxa,OAAA2O,EAAA5R,EAAAA,GAAA,EAAA,CACA,GAAAoZ,GAAAoE,EAAAzC,KAAA0C,EAAAzd,GACAoZ,IACA9Q,EAAAsG,KAAA,GAAAyD,GAAA+G,EAAA,IAAA/Y,OAAAA,OAAA+Y,EAAA,GAAAA,EAAA,GAAA/Y,OAAAod,EAAAzd,KAIA,MAAAsI,IAIAgV,aAAA,SAAAlc,GACA,MAAAA,GAAA6M,MAAAR,MAAA,MAAAuB,OAAA,SAAAqG,GACA,QAAAA,EAAA+D,MAAAmD,KACAlH,EAAA+D,MAAA,sBACAzV,MAAA6N,IAAA,SAAA6D,GACA,GAMAqI,GANAR,EAAA7H,EAAA5H,MAAA,KACAsP,EAAApZ,KAAAkZ,gBAAAK,EAAApO,OACA6O,EAAAT,EAAAC,SAAA,GACAlK,EAAA0K,EACA3J,QAAA,iCAAA,MACAA,QAAA,cAAA,KAAA3T,MAEAsd,GAAAvE,MAAA,kBACAsE,EAAAC,EAAA3J,QAAA,uBAAA,MAEA,IAAAb,GAAA9S,SAAAqd,GAAA,8BAAAA,EAAArd,OAAAqd,EAAAjQ,MAAA,IACA,OAAA,IAAA4E,GAAAY,EAAAE,EAAA4J,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAA1H,IACA1R,UC3IA,SAAAuG,EAAAyR,GACA,YAIA,mBAAA/S,SAAAA,OAAAyH,IACAzH,OAAA,cAAA,qBAAA,kBAAA,kBAAA+S,GACA,gBAAA3S,SACAH,OAAAG,QAAA2S,EAAAnb,QAAA,sBAAAA,QAAA,mBAAAA,QAAA,mBAEA0J,EAAA0T,WAAAjC,EAAAzR,EAAAoS,iBAAApS,EAAA0R,eAAA1R,EAAAmQ,gBAEA1W,KAAA,SAAA2Y,EAAAV,EAAAvB,GAqBA,QAAAwD,GAAAC,EAAAC,GACA,GAAAC,KAWA,QATAF,EAAAC,GAAAxT,QAAA,SAAA0T,GACA,IAAA,GAAAC,KAAAD,GACAA,EAAArS,eAAAsS,KACAF,EAAAE,GAAAD,EAAAC,GAGA,OAAAF,KAGAA,EAGA,QAAAG,GAAAC,GACA,MAAAA,GAAAnQ,OAAAmQ,EAAA,mBApCA,GAAAC,IACArP,OAAA,SAAAsP,GAEA,MAAA,MAAAA,EAAArL,cAAA,IAAA4D,QAAA,iBACA,MAAAyH,EAAArL,cAAA,IAAA4D,QAAA,uBACA,MAAAyH,EAAArL,cAAA,IAAA4D,QAAA,oBACA,MAAAyH,EAAArL,cAAA,IAAA4D,QAAA,qBAEAmE,eA+BA,QAOAhL,IAAA,SAAA8L,GACA,IAEA,KAAA,IAAA7V,OACA,MAAAmY,GACA,MAAAD,GAAAC,GACAza,KAAA4a,UAAAH,EAAAtC,GAEAnY,KAAA6a,qBAAA1C,KAYAyC,UAAA,SAAAnd,EAAA0a,GACAA,EAAA+B,EAAAQ,EAAAvC,EACA,IAAA2C,GAAA,GAAApE,GAAAyB,EACA,OAAA,IAAA3V,SAAA,SAAAhB,GACA,GAAAuZ,GAAApC,EAAAtS,MAAA5I,EACA,mBAAA0a,GAAA9M,SACA0P,EAAAA,EAAA1P,OAAA8M,EAAA9M,SAEA7J,EAAAgB,QAAA6B,IAAA0W,EAAAlN,IAAA,SAAAmN,GACA,MAAA,IAAAxY,SAAA,SAAAhB,GACA,QAAAyZ,KACAzZ,EAAAwZ,GAGAF,EAAAlD,SAAAoD,GAAAxd,KAAAgE,EAAAyZ,GAAA,SAAAA,UAGA5N,KAAArN,QASA6a,qBAAA,SAAA1C,GACAA,EAAA+B,EAAAQ,EAAAvC,EACA,IAAA+C,GAAAjD,EAAAC,UAAAC,EAIA,OAHA,kBAAAA,GAAA9M,SACA6P,EAAAA,EAAA7P,OAAA8M,EAAA9M,SAEA7I,QAAAhB,QAAA0Z,IAYAC,WAAA,SAAAC,EAAA7e,EAAA8e,EAAAvN,GACA,GAAA,kBAAAsN,GACA,KAAA,IAAA9Y,OAAA,wCACA,IAAA,kBAAA8Y,GAAAE,uBAEA,MAAAF,EAGA,IAAAG,GAAA,WACA,IAEA,MADAvb,MAAAqM,MAAA7O,KAAAjB,EAAA8e,GAAA,SAAAA,GACAD,EAAAzN,MAAAG,GAAA9N,KAAA4E,WACA,MAAA3H,GAIA,KAHAud,GAAAvd,IACA+C,KAAA4a,UAAA3d,GAAAO,KAAAjB,EAAA8e,GAAA,SAAAA,GAEApe,IAEAoQ,KAAArN,KAGA,OAFAub,GAAAD,uBAAAF,EAEAG,GASAC,aAAA,SAAAJ,GACA,GAAA,kBAAAA,GACA,KAAA,IAAA9Y,OAAA,2CACA,OAAA,kBAAA8Y,GAAAE,uBACAF,EAAAE,uBAGAF,GAUAK,OAAA,SAAAV,EAAAlJ,GACA,MAAA,IAAArP,SAAA,SAAAhB,EAAA+C,GACA,GAAAmX,GAAA,GAAA/E,eACA+E,GAAA7E,QAAAtS,EACAmX,EAAA5E,mBAAA,WACA,IAAA4E,EAAA3E,aACA2E,EAAA1E,QAAA,KAAA0E,EAAA1E,OAAA,IACAxV,EAAAka,EAAAzE,cAEA1S,EAAA,GAAAjC,OAAA,WAAAuP,EAAA,wBAAA6J,EAAA1E,WAIA0E,EAAA9E,KAAA,OAAA/E,GACA6J,EAAAC,iBAAA,eAAA,oBACAD,EAAAxE,KAAAnK,KAAApH,WAAA2E,MAAAyQ","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.0.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","test","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","RegExp","$1","caller","ErrorStackParser","_map","array","fn","output","_filter","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","filtered","tokens","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","shift","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","stackframes","sf","resolveOriginal","stackFrames","instrument","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n *\n * @param {String} urlLike\n * @return {Array} 3-tuple of URL, Line Number, and Column Number\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.concat.js b/dist/stacktrace.concat.js index 0778cad..7b6fc95 100644 --- a/dist/stacktrace.concat.js +++ b/dist/stacktrace.concat.js @@ -1,5 +1,6 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",t=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(";"===e.charAt(v))l++,v++,p=0;else if(","===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),"number"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function r(e,n,r){var t=new XMLHttpRequest;t.open("get",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error("Unable to retrieve "+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,l=e.split("\n"),c="",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf("//"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function i(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(n){return new Promise(function(r,t){var o="data:"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error("Cannot make network requests in offline mode"));else if(o){var i="application/json;base64";if(n.substr(5,i.length)!==i)t(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+i.length+",".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l="data:"===i.substr(0,5);"/"===i[0]||l||(i=u.substring(0,u.lastIndexOf("/")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new u(e)}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",t=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(";"===e.charAt(v))l++,v++,p=0;else if(","===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),"number"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open("get",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r,t=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,s=e.split("\n"),a="",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf("//");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o="data:"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error("The encoding of the inline sourcemap is not supported"))}else{var c=this.ajax(n,{method:"get"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)["catch"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c="data:"===a.substr(0,5),g=i.substring(0,i.lastIndexOf("/")+1);"/"===a[0]||c||/^https?:\/\/|^\/\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;"string"==typeof r&&(r=o(r.replace(/^\)\]\}'/,""))),"undefined"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new c(e)}}); //# sourceMappingURL=stacktrace-gps.min.js.map + (function (root, factory) { 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. @@ -46,7 +47,7 @@ }; })); -(function (root, factory) { +(function(root, factory) { 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. @@ -62,20 +63,48 @@ 'use strict'; var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\S+\:\d+/; - var CHROME_IE_STACK_REGEXP = /\s+at .*(\S+\:\d+|\(native\))/; + var CHROME_IE_STACK_REGEXP = /^\s*at .*(\S+\:\d+|\(native\))/m; + var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\[native code\])?$/; + + function _map(array, fn, thisArg) { + if (typeof Array.prototype.map === 'function') { + return array.map(fn, thisArg); + } else { + var output = new Array(array.length); + for (var i = 0; i < array.length; i++) { + output[i] = fn.call(thisArg, array[i]); + } + return output; + } + } + + function _filter(array, fn, thisArg) { + if (typeof Array.prototype.filter === 'function') { + return array.filter(fn, thisArg); + } else { + var output = []; + for (var i = 0; i < array.length; i++) { + if (fn.call(thisArg, array[i])) { + output.push(array[i]); + } + } + return output; + } + } return { /** * Given an Error object, extract the most information from it. - * @param error {Error} - * @return Array[StackFrame] + * + * @param {Error} error object + * @return {Array} of StackFrames */ parse: function ErrorStackParser$$parse(error) { if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') { return this.parseOpera(error); } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) { return this.parseV8OrIE(error); - } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) { + } else if (error.stack) { return this.parseFFOrSafari(error); } else { throw new Error('Cannot parse given Error object'); @@ -84,8 +113,9 @@ /** * Separate line and column numbers from a URL-like string. - * @param urlLike String - * @return Array[String] + * + * @param {String} urlLike + * @return {Array} 3-tuple of URL, Line Number, and Column Number */ extractLocation: function ErrorStackParser$$extractLocation(urlLike) { // Fail-fast but return locations like "(native)" @@ -105,24 +135,49 @@ }, parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) { - return error.stack.split('\n').filter(function (line) { + var filtered = _filter(error.stack.split('\n'), function(line) { return !!line.match(CHROME_IE_STACK_REGEXP); - }, this).map(function (line) { - var tokens = line.replace(/^\s+/, '').split(/\s+/).slice(1); + }, this); + + return _map(filtered, function(line) { + if (line.indexOf('(eval ') > -1) { + // Throw away eval information until we implement stacktrace.js/stackframe#8 + line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^\()]*)|(\)\,.*$)/g, ''); + } + var tokens = line.replace(/^\s+/, '').replace(/\(eval code/g, '(').split(/\s+/).slice(1); var locationParts = this.extractLocation(tokens.pop()); - var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0]; - return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line); + var functionName = tokens.join(' ') || undefined; + var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0]; + + return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line); }, this); }, parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) { - return error.stack.split('\n').filter(function (line) { - return !!line.match(FIREFOX_SAFARI_STACK_REGEXP); - }, this).map(function (line) { - var tokens = line.split('@'); - var locationParts = this.extractLocation(tokens.pop()); - var functionName = tokens.shift() || undefined; - return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line); + var filtered = _filter(error.stack.split('\n'), function(line) { + return !line.match(SAFARI_NATIVE_CODE_REGEXP); + }, this); + + return _map(filtered, function(line) { + // Throw away eval information until we implement stacktrace.js/stackframe#8 + if (line.indexOf(' > eval') > -1) { + line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g, ':$1'); + } + + if (line.indexOf('@') === -1 && line.indexOf(':') === -1) { + // Safari eval frames only have function names and nothing else + return new StackFrame(line); + } else { + var tokens = line.split('@'); + var locationParts = this.extractLocation(tokens.pop()); + var functionName = tokens.join('@') || undefined; + return new StackFrame(functionName, + undefined, + locationParts[0], + locationParts[1], + locationParts[2], + line); + } }, this); }, @@ -160,7 +215,16 @@ for (var i = 0, len = lines.length; i < len; i += 2) { var match = lineRE.exec(lines[i]); if (match) { - result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i])); + result.push( + new StackFrame( + match[3] || undefined, + undefined, + match[2], + match[1], + undefined, + lines[i] + ) + ); } } @@ -169,10 +233,11 @@ // Opera 10.65+ Error.stack very similar to FF/Safari parseOpera11: function ErrorStackParser$$parseOpera11(error) { - return error.stack.split('\n').filter(function (line) { - return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && - !line.match(/^Error created at/); - }, this).map(function (line) { + var filtered = _filter(error.stack.split('\n'), function(line) { + return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/); + }, this); + + return _map(filtered, function(line) { var tokens = line.split('@'); var locationParts = this.extractLocation(tokens.pop()); var functionCall = (tokens.shift() || ''); @@ -183,8 +248,15 @@ if (functionCall.match(/\(([^\)]*)\)/)) { argsRaw = functionCall.replace(/^[^\(]+\(([^\)]*)\)$/, '$1'); } - var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(','); - return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line); + var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? + undefined : argsRaw.split(','); + return new StackFrame( + functionName, + args, + locationParts[0], + locationParts[1], + locationParts[2], + line); }, this); } }; diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index 0e775be..a8b72bd 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,i,o){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==i&&this.setColumnNumber(i),void 0!==o&&this.setSource(o)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",i=e(this.getLineNumber())?":"+this.getLineNumber():"",o=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+i+o}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new i(n)}function i(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),r=a.getArg(n,"sources"),i=a.getArg(n,"names",[]),o=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),l=a.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(a.normalize).map(function(e){return o&&a.isAbsolute(o)&&a.isAbsolute(e)?a.relative(o,e):e}),this._names=c.fromArray(i,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=o,this.sourcesContent=s,this._mappings=u,this.file=l}function o(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=a.getArg(n,"version"),i=a.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var o={line:-1,column:0};this._sections=i.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),t=a.getArg(n,"line"),i=a.getArg(n,"column");if(t=0){var o=this._originalMappings[i];if(void 0===e.column)for(var s=o.originalLine;o&&o.originalLine===s;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i];else for(var c=o.originalColumn;o&&o.originalLine===n&&o.originalColumn==c;)r.push({line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}),o=this._originalMappings[++i]}return r},n.SourceMapConsumer=r,i.prototype=Object.create(r.prototype),i.prototype.consumer=r,i.fromSourceMap=function(e){var n=Object.create(i.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=s.length;g>p;p++){var h=s[p],m=new o;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,a.compareByOriginalPositions),n},i.prototype._version=3,Object.defineProperty(i.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),i.prototype._parseMappings=function(e,n){for(var t,r,i,s,u,c=1,p=0,g=0,h=0,m=0,d=0,_=e.length,v=0,y={},w={},b=[],C=[];_>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(t=new o,t.generatedLine=c,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(r=e.slice(v,s),i=y[r])v+=r.length;else{for(i=[];s>v;)l.decode(e,v,w),u=w.value,v=w.rest,i.push(u);if(2===i.length)throw new Error("Found a source, but no line and column");if(3===i.length)throw new Error("Found a source and line, but no column");y[r]=i}t.generatedColumn=p+i[0],p=t.generatedColumn,i.length>1&&(t.source=m+i[1],m+=i[1],t.originalLine=g+i[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+i[3],h=t.originalColumn,i.length>4&&(t.name=d+i[4],d+=i[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,a.compareByOriginalPositions),this.__originalMappings=b},i.prototype._findMapping=function(e,n,t,r,i,o){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,i,o)},i.prototype.computeColumnSpans=function(){for(var e=0;e=0){var i=this._generatedMappings[t];if(i.generatedLine===n.generatedLine){var o=a.getArg(i,"source",null);null!==o&&(o=this._sources.at(o),null!=this.sourceRoot&&(o=a.join(this.sourceRoot,o)));var s=a.getArg(i,"name",null);return null!==s&&(s=this._names.at(s)),{source:o,line:a.getArg(i,"originalLine",null),column:a.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},i.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},i.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=a.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},i.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},i=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===t.source)return{line:a.getArg(o,"generatedLine",null),column:a.getArg(o,"generatedColumn",null),lastColumn:a.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=i,s.prototype=Object.create(r.prototype),s.prototype.constructor=r,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)s=u[l],"."===s?u.splice(l,1):".."===s?c++:c>0&&(""===s?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=a?"/":"."),o?(o.path=t,i(o)):t}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),s=r(e);if(s&&(e=s.path||"/"),t&&!t.scheme)return s&&(t.scheme=s.scheme),i(t);if(t||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,i(s);var a="/"===n.charAt(0)?n:o(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,i(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=i,n.normalize=o,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,i,o,s,a){var u=Math.floor((r-e)/2)+e,c=s(i,o[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,i,o,s,a):a==n.LEAST_UPPER_BOUND?r1?t(e,u,i,o,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,i,o){if(0===r.length)return-1;var s=t(-1,r.length,e,r,i,o||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===i(r[s],r[s-1],!0);)--s;return s}},function(e,n,t){function r(){this._array=[],this._set={}}var i=t(1);r.fromArray=function(e,n){for(var t=new r,i=0,o=e.length;o>i;i++)t.add(e[i],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=i.toSetString(e),r=this._set.hasOwnProperty(t),o=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=o)},r.prototype.has=function(e){var n=i.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=i.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function i(e){var n=1===(1&e),t=e>>1;return n?-t:t}var o=t(5),s=5,a=1<>>=s,i>0&&(n|=c),t+=o.encode(n);while(i>0);return t},n.decode=function(e,n,t){var r,a,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(a=o.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(a&c),a&=u,f+=a<=0&&e=n&&t>=e?e-n:e>=r&&i>=e?e-r+c:e>=o&&s>=e?e-o+l:e==a?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,o,s){if(s>o){var a=r(o,s),u=o-1;t(e,a,s);for(var c=e[s],l=o;s>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;i(e,n,o,f-1),i(e,n,f+1,s)}}n.quickSort=function(e,n){i(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e,n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){if(4===r.readyState){if(r.status>=200&&r.status<400)return n(r.responseText);t(new Error("Unable to retrieve "+e))}},r.send()}function r(e,n,t){for(var r,i,o,s=/function\s+([^(]*?)\s*\(([^)]*)\)/,a=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,u=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,c=e.split("\n"),l="",f=Math.min(n,20),p=0;f>p;++p)if(r=c[n-p-1],o=r.indexOf("//"),o>=0&&(r=r.substr(0,o)),r){if(l=r+l,i=a.exec(l),i&&i[1])return i[1];if(i=s.exec(l),i&&i[1])return i[1];if(i=u.exec(l),i&&i[1])return i[1]}return void 0}function i(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function o(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function s(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function a(t,r,i,o,s){var a=new e.SourceMapConsumer(t),u=a.originalPositionFor({line:i,column:o}),c=a.sourceContentFor(u.source);return c&&(s[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=t,this._atob=function(e){if(window&&window.atob)return window.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString("utf-8");throw new Error("No base64 decoder available")},this._get=function(n){return new Promise(function(t,r){var i="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!i)r(new Error("Cannot make network requests in offline mode"));else if(i){var o="application/json;base64";if(n.substr(5,o.length)!==o)r(new Error("The encoding of the inline sourcemap is not supported"));else{var s="data:".length+o.length+",".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,t(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,t(e)}.bind(this),r)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,i){o(e),this._get(e.fileName).then(function(i){var o=r(i,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},i)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){i(),o(e);var r=this.sourceCache,u=e.fileName;this._get(u).then(function(i){var o=s(i),c="data:"===o.substr(0,5);"/"===o[0]||c||(o=u.substring(0,u.lastIndexOf("/")+1)+o),this._get(o).then(function(t){var i=e.lineNumber,o=e.columnNumber;n(a(t,e.args,i,o,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new u(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var i=arguments.callee;i&&t.length-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),i=[],o=2,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),i=[],o=0,s=r.length;s>o;o+=2){var a=t.exec(r[o]);a&&i.push(new e(a[3]||void 0,void 0,a[2],a[1],void 0,r[o]))}return i},parseOpera11:function(t){return t.stack.split("\n").filter(function(e){return!!e.match(n)&&!e.match(/^Error created at/)},this).map(function(n){var t,r=n.split("@"),i=this.extractLocation(r.pop()),o=r.shift()||"",s=o.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;o.match(/\(([^\)]*)\)/)&&(t=o.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var a=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(s,a,i[0],i[1],i[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function i(e){return e.stack||e["opera#sourceloc"]}var o={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(n){return i(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,i){i=r(o,i);var s=new t(i);return new Promise(function(t){var r=e.parse(n);"function"==typeof i.filter&&(r=r.filter(i.filter)),t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}s.pinpoint(e).then(n,t)["catch"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(o,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var o=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(o){throw i(o)&&this.fromError(o).then(n,t)["catch"](t),o}}.bind(this);return o.__stacktraceOriginalFn=e,o},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var i=new XMLHttpRequest;i.onerror=r,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):r(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json"),i.send(JSON.stringify({stack:e}))})}}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),r=s.getArg(n,"sources"),o=s.getArg(n,"names",[]),i=s.getArg(n,"sourceRoot",null),a=s.getArg(n,"sourcesContent",null),u=s.getArg(n,"mappings"),l=s.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),o=s.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=s.getArg(e,"offset"),t=s.getArg(n,"line"),o=s.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],O=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(t=new i,t.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(_,a),o=y[r])_+=r.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),O.push(t),"number"==typeof t.originalLine&&b.push(t)}f(O,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=O,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),i?(i.path=t,o(i)):t}function a(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),a=r(e);if(a&&(e=a.path||"/"),t&&!t.scheme)return a&&(t.scheme=a.scheme),o(t);if(t||n.match(m))return n;if(a&&!a.host&&!a.path)return a.host=n,o(a);var s="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return a?(a.path=s,o(a)):s}function s(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=o,n.normalize=i,n.join=a,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=s,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,o,i,a,s):s==n.LEAST_UPPER_BOUND?r1?t(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,o,i){if(0===r.length)return-1;var a=t(-1,r.length,e,r,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,n,t){function r(){this._array=[],this._set={}}var o=t(1);r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=this._set.hasOwnProperty(t),i=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=i)},r.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=t(5),a=5,s=1<>>=a,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},n.decode=function(e,n,t){var r,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(s&c),s&=u,f+=s<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,a){if(a>i){var s=r(i,a),u=i-1;t(e,s,a);for(var c=e[a],l=i;a>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,a)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var t,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,t=o.exec(s),t&&t[1])return t[1];if(t=r.exec(s),t&&t[1])return t[1];if(t=i.exec(s),t&&t[1])return t[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(t,r,o,i,a){var s=new e.SourceMapConsumer(t),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(t){var i=e.lineNumber,a=e.columnNumber;"string"==typeof t&&(t=o(t.replace(/^\)\]\}'/,""))),"undefined"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,a,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new l(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var t=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(t.pop()),o=t.join(" ")||void 0,i=["eval",""].indexOf(r[0])>-1?void 0:r[0];return new e(o,void 0,i,r[1],r[2],n)},this)},parseFFOrSafari:function(r){var o=t(r.stack.split("\n"),function(e){return!e.match(i)},this);return n(o,function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return new e(n);var t=n.split("@"),r=this.extractLocation(t.pop()),o=t.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(o){var i=t(o.stack.split("\n"),function(e){return!!e.match(r)&&!e.match(/^Error created at/)},this);return n(i,function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(a,s,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(n){return o(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,o){o=r(i,o);var a=new t(o);return new Promise(function(t){var r=e.parse(n);"function"==typeof o.filter&&(r=r.filter(o.filter)),t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}a.pinpoint(e).then(n,t)["catch"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?t(o.responseText):r(new Error("POST to "+n+" failed with status: "+o.status)))},o.open("post",n),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 59427ea..504880e 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","min","exec","sourceCache","ajax","_atob","window","atob","Buffer","_get","Promise","offline","bind","pinpoint","getMappedLocation","then","findFunctionName","substring","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","test","RegExp","$1","undefined","caller","ErrorStackParser","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filter","tokens","shift","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e,n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){if(4===t.readyState){if(t.status>=200&&t.status<400)return n(t.responseText);r(new Error(\"Unable to retrieve \"+e))}},t.send()}function t(e,n,r){for(var t,o,i,s=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,a=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,u=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,l=e.split(\"\\n\"),c=\"\",g=Math.min(n,20),p=0;g>p;++p)if(t=l[n-p-1],i=t.indexOf(\"//\"),i>=0&&(t=t.substr(0,i)),t){if(c=t+c,o=a.exec(c),o&&o[1])return o[1];if(o=s.exec(c),o&&o[1])return o[1];if(o=u.exec(c),o&&o[1])return o[1]}return void 0}function o(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function i(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function s(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function a(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function u(e){return this instanceof u?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=r,this._atob=function(e){if(window&&window.atob)return window.atob(e);if(\"undefined\"!=typeof Buffer)return new Buffer(e,\"base64\").toString(\"utf-8\");throw new Error(\"No base64 decoder available\")},this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=\"application/json;base64\";if(n.substr(5,i.length)!==i)t(new Error(\"The encoding of the inline sourcemap is not supported\"));else{var s=\"data:\".length+i.length+\",\".length,a=n.substr(s),u=this._atob(a);this.sourceCache[n]=u,r(u)}}else this.ajax(n,function(e){this.sourceCache[n]=e,r(e)}.bind(this),t)}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,o){i(e),this._get(e.fileName).then(function(o){var i=t(o,e.lineNumber,e.columnNumber);r(new n(i,e.args,e.fileName,e.lineNumber,e.columnNumber))},o)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){o(),i(e);var t=this.sourceCache,u=e.fileName;this._get(u).then(function(o){var i=s(o),l=\"data:\"===i.substr(0,5);\"/\"===i[0]||l||(i=u.substring(0,u.lastIndexOf(\"/\")+1)+i),this._get(i).then(function(r){var o=e.lineNumber,i=e.columnNumber;n(a(r,e.args,o,i,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new u(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /\\s+at .*(\\S+\\:\\d+|\\(native\\))/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n * @param error {Error}\n * @return Array[StackFrame]\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack && error.stack.match(FIREFOX_SAFARI_STACK_REGEXP)) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n * @param urlLike String\n * @return Array[String]\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.replace(/^\\s+/, '').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = (!tokens[0] || tokens[0] === 'Anonymous') ? undefined : tokens[0];\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.shift() || undefined;\n return new StackFrame(functionName, undefined, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(match[3] || undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n return error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) &&\n !line.match(/^Error created at/);\n }, this).map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(',');\n return new StackFrame(functionName, args, locationParts[0], locationParts[1], locationParts[2], line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","test","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","RegExp","$1","undefined","caller","ErrorStackParser","_map","array","fn","thisArg","output","_filter","filter","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filtered","tokens","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","shift","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","callback","errback","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n *\n * @param {String} urlLike\n * @return {Array} 3-tuple of URL, Line Number, and Column Number\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file From 4a80e70b24c116bf16d1a97860ab52f254ccef7c Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 23 Apr 2016 22:34:18 -0700 Subject: [PATCH 041/110] 1.1.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0ab9b28..38894ae 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "Victor Homyakov (https://github.com/victor-homyakov)", "Oliver Salzburg (https://github.com/oliversalzburg)" ], - "version": "1.1.0", + "version": "1.1.1", "license": "Unlicense", "keywords": [ "stacktrace", From 8473901378834702a35502fc5b67350249d57ffa Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 23 Apr 2016 22:44:09 -0700 Subject: [PATCH 042/110] Update bower main file to dist including dependencies --- bower.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index 428e5ca..e472f68 100644 --- a/bower.json +++ b/bower.json @@ -1,9 +1,9 @@ { "name": "stacktrace-js", - "main": "./stacktrace.js", + "main": "./dist/stacktrace.concat.js", "homepage": "https://github.com/stacktracejs/stacktrace.js", "authors": [ - "Eric Wendelin (http://www.eriwen.com)", + "Eric Wendelin (https://www.eriwen.com)", "Victor Homyakov (https://github.com/victor-homyakov)", "Oliver Salzburg (https://github.com/oliversalzburg)" ], From d683f195883d3a2fcf985a755f35e466ef3758d9 Mon Sep 17 00:00:00 2001 From: Oliver Salzburg Date: Wed, 4 May 2016 05:37:52 +0200 Subject: [PATCH 043/110] Don't declare dependencies for bower (#162) --- bower.json | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/bower.json b/bower.json index e472f68..d6c04f3 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "stacktrace-js", - "main": "./dist/stacktrace.concat.js", + "main": "./dist/stacktrace-with-promises-and-json-polyfills.js", "homepage": "https://github.com/stacktracejs/stacktrace.js", "authors": [ "Eric Wendelin (https://www.eriwen.com)", @@ -28,9 +28,5 @@ "node_modules", "spec" ], - "dependencies": { - "error-stack-parser": "~1.2.3", - "stack-generator": "~1.0.7", - "stacktrace-gps": "~2.3.0" - } + "dependencies": {} } From e5fb69e70f6cfe8f4881b17c81d6127fd1f3fcad Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Tue, 3 May 2016 20:40:22 -0700 Subject: [PATCH 044/110] 1.1.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 38894ae..59d304f 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "Victor Homyakov (https://github.com/victor-homyakov)", "Oliver Salzburg (https://github.com/oliversalzburg)" ], - "version": "1.1.1", + "version": "1.1.2", "license": "Unlicense", "keywords": [ "stacktrace", From 8e10377df7398c679917e20272932980d2de2ae4 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 15 May 2016 14:51:38 -0700 Subject: [PATCH 045/110] Update error-stack-parser and stacktrace-gps dependencies to include their bug fixes. --- ...ktrace-with-promises-and-json-polyfills.js | 36 ++++++++++--------- ...ce-with-promises-and-json-polyfills.min.js | 4 +-- ...ith-promises-and-json-polyfills.min.js.map | 2 +- dist/stacktrace.concat.js | 36 ++++++++++--------- dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- package.json | 4 +-- 7 files changed, 45 insertions(+), 41 deletions(-) diff --git a/dist/stacktrace-with-promises-and-json-polyfills.js b/dist/stacktrace-with-promises-and-json-polyfills.js index 2918b1b..99b8fff 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.js @@ -1983,7 +1983,7 @@ if (!Array.prototype.forEach) { }; } -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",t=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(";"===e.charAt(v))l++,v++,p=0;else if(","===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),"number"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open("get",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r,t=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,s=e.split("\n"),a="",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf("//");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o="data:"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error("The encoding of the inline sourcemap is not supported"))}else{var c=this.ajax(n,{method:"get"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)["catch"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c="data:"===a.substr(0,5),g=i.substring(0,i.lastIndexOf("/")+1);"/"===a[0]||c||/^https?:\/\/|^\/\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;"string"==typeof r&&(r=o(r.replace(/^\)\]\}'/,""))),"undefined"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new c(e)}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",t=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(";"===e.charAt(v))l++,v++,p=0;else if(","===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),"number"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?"$"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open("get",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r,t=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,s=e.split("\n"),a="",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf("//");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o="data:"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error("The encoding of the inline sourcemap is not supported"))}else{var c=this.ajax(n,{method:"get"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)["catch"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c="data:"===a.substr(0,5),g=i.substring(0,i.lastIndexOf("/")+1);"/"===a[0]||c||/^https?:\/\/|^\/\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;"string"==typeof r&&(r=o(r.replace(/^\)\]\}'/,""))),"undefined"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new c(e)}}); //# sourceMappingURL=stacktrace-gps.min.js.map (function (root, factory) { @@ -2077,6 +2077,19 @@ if (!Array.prototype.forEach) { } } + function _indexOf(array, target) { + if (typeof Array.prototype.indexOf === 'function') { + return array.indexOf(target); + } else { + for (var i = 0; i < array.length; i++) { + if (array[i] === target) { + return i; + } + } + return -1; + } + } + return { /** * Given an Error object, extract the most information from it. @@ -2096,27 +2109,16 @@ if (!Array.prototype.forEach) { } }, - /** - * Separate line and column numbers from a URL-like string. - * - * @param {String} urlLike - * @return {Array} 3-tuple of URL, Line Number, and Column Number - */ + // Separate line and column numbers from a string of the form: (URI:Line:Column) extractLocation: function ErrorStackParser$$extractLocation(urlLike) { // Fail-fast but return locations like "(native)" if (urlLike.indexOf(':') === -1) { return [urlLike]; } - var locationParts = urlLike.replace(/[\(\)\s]/g, '').split(':'); - var lastNumber = locationParts.pop(); - var possibleNumber = locationParts[locationParts.length - 1]; - if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) { - var lineNumber = locationParts.pop(); - return [locationParts.join(':'), lineNumber, lastNumber]; - } else { - return [locationParts.join(':'), lastNumber, undefined]; - } + var regExp = /(.+?)(?:\:(\d+))?(?:\:(\d+))?$/; + var parts = regExp.exec(urlLike.replace(/[\(\)]/g, '')); + return [parts[1], parts[2] || undefined, parts[3] || undefined]; }, parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) { @@ -2132,7 +2134,7 @@ if (!Array.prototype.forEach) { var tokens = line.replace(/^\s+/, '').replace(/\(eval code/g, '(').split(/\s+/).slice(1); var locationParts = this.extractLocation(tokens.pop()); var functionName = tokens.join(' ') || undefined; - var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0]; + var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0]; return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line); }, this); diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index c6656f0..5cc3aa8 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ -(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){B=e}function r(e){z=e}function o(){return function(){process.nextTick(c)}}function i(){return function(){D(c)}}function a(){var e=0,t=new H(c),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function s(){var e=new MessageChannel;return e.port1.onmessage=c,function(){e.port2.postMessage(0)}}function u(){return function(){setTimeout(c,1)}}function c(){for(var e=0;I>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}I=0}function l(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,i()}catch(n){return u()}}function f(e,t){var n=this,r=n._state;if(r===te&&!e||r===ne&&!t)return this;var o=new this.constructor(h),i=n._result;if(r){var a=arguments[r-1];z(function(){M(r,o,a,i)})}else S(n,o,e,t);return o}function p(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(h);return b(n,e),n}function h(){}function g(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return re.error=t,re}}function y(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){z(function(e){var r=!1,o=y(n,t,function(n){r||(r=!0,t!==n?b(e,n):C(e,n))},function(t){r||(r=!0,O(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,O(e,o))},e)}function _(e,t){t._state===te?C(e,t._result):t._state===ne?O(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){O(e,t)})}function w(e,n,r){n.constructor===e.constructor&&r===K&&constructor.resolve===Q?_(e,n):r===re?O(e,re.error):void 0===r?C(e,n):t(r)?v(e,n,r):C(e,n)}function b(t,n){t===n?O(t,g()):e(n)?w(t,n,m(n)):C(t,n)}function A(e){e._onerror&&e._onerror(e._result),E(e)}function C(e,t){e._state===ee&&(e._result=t,e._state=te,0!==e._subscribers.length&&z(E,e))}function O(e,t){e._state===ee&&(e._state=ne,e._result=t,z(A,e))}function S(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+te]=n,o[i+ne]=r,0===i&&e._state&&z(E,e)}function E(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)S(r.resolve(e[a]),void 0,t,n);return o}function P(e){var t=this,n=new t(h);return O(n,e),n}function k(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],h!==e&&("function"!=typeof e&&k(),this instanceof F?j(this,e):R())}function U(e,t){this._instanceConstructor=e,this.promise=new e(h),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?C(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&C(this.promise,this._result))):O(this.promise,this._validationError())}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,B,J,q=$,I=0,z=function(e,t){X[I]=e,X[I+1]=t,I+=2,2===I&&(B?B(c):J())},Z="undefined"!=typeof window?window:void 0,Y=Z||{},H=Y.MutationObserver||Y.WebKitMutationObserver,W="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);J=W?o():H?a():V?s():void 0===Z&&"function"==typeof require?l():u();var K=f,Q=p,ee=void 0,te=1,ne=2,re=new N,oe=new N,ie=x,ae=T,se=P,ue=0,ce=F;F.all=ie,F.race=ae,F.resolve=Q,F.reject=se,F._setScheduler=n,F._setAsap=r,F._asap=z,F.prototype={constructor:F,then:K,"catch":function(e){return this.then(null,e)}};var le=U;U.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},U.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ee&&e>n;n++)this._eachEntry(t[n],n)},U.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===Q){var o=m(e);if(o===K&&e._state!==ee)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ce){var i=new n(h);w(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},U.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ee&&(this._remaining--,e===ne?O(r,n):this._result[t]=n),0===this._remaining&&C(r,this._result)},U.prototype._willSettleAt=function(e,t){var n=this;S(e,void 0,function(e){n._settledAt(te,t,e)},function(e){n._settledAt(ne,t,e)})};var fe=G,pe={Promise:ce,polyfill:fe};"function"==typeof define&&define.amd?define(function(){return pe}):"undefined"!=typeof module&&module.exports?module.exports=pe:"undefined"!=typeof this&&(this.ES6Promise=pe),fe()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==m)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===m&&u(m)===m&&u()===m&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([m])&&"null"==u(null)&&"[null,null,null]"==u([m,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,d,m,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!i("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return M[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?d=2==a?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var r,i,a=v.call(e)==b,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),d(e,t)},!i("json-stringify")){var x={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},T="000000",P=function(e,t){return(T+(t||0)).slice(-e)},k="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=x[a];break;default:if(32>a){t+=k+P(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,N,M,x,T,k,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=L((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,w=L(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+P(6,0>c?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,y)+":"+P(2,_)+":"+P(2,w)+"."+P(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(T=a.length;T--;)if(a[T]===s)throw f();if(a.push(s),N=[],k=i,i+=o,u==S){for(x=0,T=s.length;T>x;x++)M=F(x,s,n,r,o,i,a),N.push(M===m?"null":M);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+k+"]":"["+N.join(",")+"]":"[]"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+k+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==b)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=q(J()),"$"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(d))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function f(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function p(e,t){return e===t?0:e>t?1:-1}function h(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=p(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:p(e.name,t.name)))))}t.getArg=n;var g=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,d=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(g)},t.relative=s,t.toSetString=u,t.fromSetString=c,t.compareByOriginalPositions=l,t.compareByGeneratedPositionsDeflated=f,t.compareByGeneratedPositionsInflated=h},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){this._array=[],this._set={}}var o=n(1);r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=this._set.hasOwnProperty(n),i=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=i)},r.prototype.has=function(e){var t=o.toSetString(e);return this._set.hasOwnProperty(t)},r.prototype.indexOf=function(e){var t=o.toSetString(e); -if(this._set.hasOwnProperty(t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i=["eval",""].indexOf(r[0])>-1?void 0:r[0];return new e(o,void 0,i,r[1],r[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(i)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(o){var i=n(o.stack.split("\n"),function(e){return!!e.match(r)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){o=r(i,o);var a=new n(o);return new Promise(function(n){var r=e.parse(t);"function"==typeof o.filter&&(r=r.filter(o.filter)),n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}a.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){B=e}function r(e){z=e}function o(){return function(){process.nextTick(c)}}function i(){return function(){D(c)}}function a(){var e=0,t=new H(c),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function s(){var e=new MessageChannel;return e.port1.onmessage=c,function(){e.port2.postMessage(0)}}function u(){return function(){setTimeout(c,1)}}function c(){for(var e=0;I>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}I=0}function l(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,i()}catch(n){return u()}}function f(e,t){var n=this,r=n._state;if(r===te&&!e||r===ne&&!t)return this;var o=new this.constructor(h),i=n._result;if(r){var a=arguments[r-1];z(function(){j(r,o,a,i)})}else S(n,o,e,t);return o}function p(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(h);return b(n,e),n}function h(){}function g(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return re.error=t,re}}function y(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){z(function(e){var r=!1,o=y(n,t,function(n){r||(r=!0,t!==n?b(e,n):C(e,n))},function(t){r||(r=!0,O(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,O(e,o))},e)}function _(e,t){t._state===te?C(e,t._result):t._state===ne?O(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){O(e,t)})}function w(e,n,r){n.constructor===e.constructor&&r===K&&constructor.resolve===Q?_(e,n):r===re?O(e,re.error):void 0===r?C(e,n):t(r)?v(e,n,r):C(e,n)}function b(t,n){t===n?O(t,g()):e(n)?w(t,n,m(n)):C(t,n)}function A(e){e._onerror&&e._onerror(e._result),E(e)}function C(e,t){e._state===ee&&(e._result=t,e._state=te,0!==e._subscribers.length&&z(E,e))}function O(e,t){e._state===ee&&(e._state=ne,e._result=t,z(A,e))}function S(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+te]=n,o[i+ne]=r,0===i&&e._state&&z(E,e)}function E(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)S(r.resolve(e[a]),void 0,t,n);return o}function k(e){var t=this,n=new t(h);return O(n,e),n}function P(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],h!==e&&("function"!=typeof e&&P(),this instanceof F?M(this,e):R())}function U(e,t){this._instanceConstructor=e,this.promise=new e(h),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?C(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&C(this.promise,this._result))):O(this.promise,this._validationError())}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,B,J,q=$,I=0,z=function(e,t){X[I]=e,X[I+1]=t,I+=2,2===I&&(B?B(c):J())},Z="undefined"!=typeof window?window:void 0,Y=Z||{},H=Y.MutationObserver||Y.WebKitMutationObserver,W="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);J=W?o():H?a():V?s():void 0===Z&&"function"==typeof require?l():u();var K=f,Q=p,ee=void 0,te=1,ne=2,re=new N,oe=new N,ie=x,ae=T,se=k,ue=0,ce=F;F.all=ie,F.race=ae,F.resolve=Q,F.reject=se,F._setScheduler=n,F._setAsap=r,F._asap=z,F.prototype={constructor:F,then:K,"catch":function(e){return this.then(null,e)}};var le=U;U.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},U.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ee&&e>n;n++)this._eachEntry(t[n],n)},U.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===Q){var o=m(e);if(o===K&&e._state!==ee)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ce){var i=new n(h);w(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},U.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ee&&(this._remaining--,e===ne?O(r,n):this._result[t]=n),0===this._remaining&&C(r,this._result)},U.prototype._willSettleAt=function(e,t){var n=this;S(e,void 0,function(e){n._settledAt(te,t,e)},function(e){n._settledAt(ne,t,e)})};var fe=G,pe={Promise:ce,polyfill:fe};"function"==typeof define&&define.amd?define(function(){return pe}):"undefined"!=typeof module&&module.exports?module.exports=pe:"undefined"!=typeof this&&(this.ES6Promise=pe),fe()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==m)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===m&&u(m)===m&&u()===m&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([m])&&"null"==u(null)&&"[null,null,null]"==u([m,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,d,m,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!i("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,j=[0,31,59,90,120,151,181,212,243,273,304,334],M=function(e,t){return j[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?d=2==a?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var r,i,a=v.call(e)==b,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),d(e,t)},!i("json-stringify")){var x={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},T="000000",k=function(e,t){return(T+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=x[a];break;default:if(32>a){t+=P+k(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,N,j,x,T,P,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(M){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=L((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,w=L(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+k(6,0>c?-c:c):k(4,c))+"-"+k(2,l+1)+"-"+k(2,p)+"T"+k(2,y)+":"+k(2,_)+":"+k(2,w)+"."+k(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(T=a.length;T--;)if(a[T]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==S){for(x=0,T=s.length;T>x;x++)j=F(x,s,n,r,o,i,a),N.push(j===m?"null":j);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+P+"]":"["+N.join(",")+"]":"[]"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+P+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==b)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=q(J()),"$"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(y))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return e}function c(e){return f(e)?"$"+e:e}function l(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var t=e.length;if(9>t)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function p(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function h(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function g(e,t){return e===t?0:e>t?1:-1}function d(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=g(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:g(e.name,t.name)))))}t.getArg=n;var m=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(m)},t.relative=s;var v=function(){var e=Object.create(null);return!("__proto__"in e)}();t.toSetString=v?u:c,t.fromSetString=v?u:l,t.compareByOriginalPositions=p,t.compareByGeneratedPositionsDeflated=h,t.compareByGeneratedPositionsInflated=d},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){ +this._array=[],this._set=Object.create(null)}var o=n(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){o=r(i,o);var a=new n(o);return new Promise(function(n){var r=e.parse(t);"function"==typeof o.filter&&(r=r.filter(o.filter)),n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}a.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map index c0d2365..e113c51 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes",92,34,8,12,10,13,9,"leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes",47,98,116,110,102,114,"abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","b","w","C","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","test","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","RegExp","$1","caller","ErrorStackParser","_map","array","fn","output","_filter","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","possibleNumber","filtered","tokens","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","shift","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","stackframes","sf","resolveOriginal","stackFrames","instrument","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"CAQA,WACA,YACA,SAAAA,GAAAC,GACA,MAAA,kBAAAA,IAAA,gBAAAA,IAAA,OAAAA,EAGA,QAAAC,GAAAD,GACA,MAAA,kBAAAA,GAqCA,QAAAE,GAAAC,GACAC,EAAAD,EAGA,QAAAE,GAAAC,GACAC,EAAAD,EAcA,QAAAE,KAGA,MAAA,YACAC,QAAAC,SAAAC,IAKA,QAAAC,KACA,MAAA,YACAC,EAAAF,IAIA,QAAAG,KACA,GAAAC,GAAA,EACAC,EAAA,GAAAC,GAAAN,GACAO,EAAAC,SAAAC,eAAA,GAGA,OAFAJ,GAAAK,QAAAH,GAAAI,eAAA,IAEA,WACAJ,EAAAK,KAAAR,IAAAA,EAAA,GAKA,QAAAS,KACA,GAAAC,GAAA,GAAAC,eAEA,OADAD,GAAAE,MAAAC,UAAAjB,EACA,WACAc,EAAAI,MAAAC,YAAA,IAIA,QAAAC,KACA,MAAA,YACAC,WAAArB,EAAA,IAKA,QAAAA,KACA,IAAA,GAAAsB,GAAA,EAAAC,EAAAD,EAAAA,GAAA,EAAA,CACA,GAAAE,GAAAC,EAAAH,GACAI,EAAAD,EAAAH,EAAA,EAEAE,GAAAE,GAEAD,EAAAH,GAAAK,OACAF,EAAAH,EAAA,GAAAK,OAGAJ,EAAA,EAGA,QAAAK,KACA,IACA,GAAAC,GAAAC,QACAC,EAAAF,EAAA,QAEA,OADA3B,GAAA6B,EAAAC,WAAAD,EAAAE,aACAhC,IACA,MAAAiC,GACA,MAAAd,MAiBA,QAAAe,GAAAC,EAAAC,GACA,GAAAC,GAAAC,KACAC,EAAAF,EAAAG,MAEA,IAAAD,IAAAE,KAAAN,GAAAI,IAAAG,KAAAN,EACA,MAAAE,KAGA,IAAAK,GAAA,GAAAL,MAAAM,YAAAC,GACAC,EAAAT,EAAAU,OAEA,IAAAR,EAAA,CACA,GAAAhB,GAAAyB,UAAAT,EAAA,EACA5C,GAAA,WACAsD,EAAAV,EAAAI,EAAApB,EAAAuB,SAGAI,GAAAb,EAAAM,EAAAR,EAAAC,EAGA,OAAAO,GAGA,QAAAQ,GAAAC,GAEA,GAAAC,GAAAf,IAEA,IAAAc,GAAA,gBAAAA,IAAAA,EAAAR,cAAAS,EACA,MAAAD,EAGA,IAAAE,GAAA,GAAAD,GAAAR,EAEA,OADAU,GAAAD,EAAAF,GACAE,EAIA,QAAAT,MAQA,QAAAW,KACA,MAAA,IAAAC,WAAA,4CAGA,QAAAC,KACA,MAAA,IAAAD,WAAA,wDAGA,QAAAE,GAAAL,GACA,IACA,MAAAA,GAAAM,KACA,MAAAC,GAEA,MADAC,IAAAD,MAAAA,EACAC,IAIA,QAAAC,GAAAH,EAAAI,EAAAC,EAAAC,GACA,IACAN,EAAAO,KAAAH,EAAAC,EAAAC,GACA,MAAAjC,GACA,MAAAA,IAIA,QAAAmC,GAAAd,EAAAe,EAAAT,GACAjE,EAAA,SAAA2D,GACA,GAAAgB,IAAA,EACAT,EAAAE,EAAAH,EAAAS,EAAA,SAAAL,GACAM,IACAA,GAAA,EACAD,IAAAL,EACAT,EAAAD,EAAAU,GAEAO,EAAAjB,EAAAU,KAEA,SAAAQ,GACAF,IACAA,GAAA,EAEAG,EAAAnB,EAAAkB,KACA,YAAAlB,EAAAoB,QAAA,sBAEAJ,GAAAT,IACAS,GAAA,EACAG,EAAAnB,EAAAO,KAEAP,GAGA,QAAAqB,GAAArB,EAAAe,GACAA,EAAA7B,SAAAC,GACA8B,EAAAjB,EAAAe,EAAAtB,SACAsB,EAAA7B,SAAAE,GACA+B,EAAAnB,EAAAe,EAAAtB,SAEAG,EAAAmB,EAAA3C,OAAA,SAAAsC,GACAT,EAAAD,EAAAU,IACA,SAAAQ,GACAC,EAAAnB,EAAAkB,KAKA,QAAAI,GAAAtB,EAAAuB,EAAAjB,GACAiB,EAAAjC,cAAAU,EAAAV,aACAgB,IAAAkB,GACAlC,YAAAmC,UAAAC,EACAL,EAAArB,EAAAuB,GAEAjB,IAAAE,GACAW,EAAAnB,EAAAQ,GAAAD,OACAnC,SAAAkC,EACAW,EAAAjB,EAAAuB,GACAxF,EAAAuE,GACAQ,EAAAd,EAAAuB,EAAAjB,GAEAW,EAAAjB,EAAAuB,GAKA,QAAAtB,GAAAD,EAAAU,GACAV,IAAAU,EACAS,EAAAnB,EAAAE,KACArE,EAAA6E,GACAY,EAAAtB,EAAAU,EAAAL,EAAAK,IAEAO,EAAAjB,EAAAU,GAIA,QAAAiB,GAAA3B,GACAA,EAAA4B,UACA5B,EAAA4B,SAAA5B,EAAAP,SAGAoC,EAAA7B,GAGA,QAAAiB,GAAAjB,EAAAU,GACAV,EAAAd,SAAA4C,KAEA9B,EAAAP,QAAAiB,EACAV,EAAAd,OAAAC,GAEA,IAAAa,EAAA+B,aAAAC,QACA3F,EAAAwF,EAAA7B,IAIA,QAAAmB,GAAAnB,EAAAkB,GACAlB,EAAAd,SAAA4C,KACA9B,EAAAd,OAAAE,GACAY,EAAAP,QAAAyB,EAEA7E,EAAAsF,EAAA3B,IAGA,QAAAJ,GAAAb,EAAAM,EAAAR,EAAAC,GACA,GAAAmD,GAAAlD,EAAAgD,aACAC,EAAAC,EAAAD,MAEAjD,GAAA6C,SAAA,KAEAK,EAAAD,GAAA3C,EACA4C,EAAAD,EAAA7C,IAAAN,EACAoD,EAAAD,EAAA5C,IAAAN,EAEA,IAAAkD,GAAAjD,EAAAG,QACA7C,EAAAwF,EAAA9C,GAIA,QAAA8C,GAAA7B,GACA,GAAAiC,GAAAjC,EAAA+B,aACAG,EAAAlC,EAAAd,MAEA,IAAA,IAAA+C,EAAAD,OAAA,CAIA,IAAA,GAFA3C,GAAApB,EAAAkE,EAAAnC,EAAAP,QAEA1B,EAAA,EAAAA,EAAAkE,EAAAD,OAAAjE,GAAA,EACAsB,EAAA4C,EAAAlE,GACAE,EAAAgE,EAAAlE,EAAAmE,GAEA7C,EACAM,EAAAuC,EAAA7C,EAAApB,EAAAkE,GAEAlE,EAAAkE,EAIAnC,GAAA+B,aAAAC,OAAA,GAGA,QAAAI,KACApD,KAAAuB,MAAA,KAKA,QAAA8B,GAAApE,EAAAkE,GACA,IACA,MAAAlE,GAAAkE,GACA,MAAAxD,GAEA,MADA2D,IAAA/B,MAAA5B,EACA2D,IAIA,QAAA3C,GAAAuC,EAAAlC,EAAA/B,EAAAkE,GACA,GACAzB,GAAAH,EAAAgC,EAAAC,EADAC,EAAA1G,EAAAkC,EAGA,IAAAwE,GAWA,GAVA/B,EAAA2B,EAAApE,EAAAkE,GAEAzB,IAAA4B,IACAE,GAAA,EACAjC,EAAAG,EAAAH,MACAG,EAAA,MAEA6B,GAAA,EAGAvC,IAAAU,EAEA,WADAS,GAAAnB,EAAAI,SAKAM,GAAAyB,EACAI,GAAA,CAGAvC,GAAAd,SAAA4C,KAEAW,GAAAF,EACAtC,EAAAD,EAAAU,GACA8B,EACArB,EAAAnB,EAAAO,GACA2B,IAAA/C,GACA8B,EAAAjB,EAAAU,GACAwB,IAAA9C,IACA+B,EAAAnB,EAAAU,IAIA,QAAAgC,GAAA1C,EAAA2C,GACA,IACAA,EAAA,SAAAjC,GACAT,EAAAD,EAAAU,IACA,SAAAQ,GACAC,EAAAnB,EAAAkB,KAEA,MAAAvC,GACAwC,EAAAnB,EAAArB,IAIA,QAAAiE,GAAAC,GACA,MAAA,IAAAC,IAAA9D,KAAA6D,GAAA7C,QAGA,QAAA+C,GAAAF,GAaA,QAAAhE,GAAA6B,GACAT,EAAAD,EAAAU,GAGA,QAAA5B,GAAAoC,GACAC,EAAAnB,EAAAkB,GAhBA,GAAAnB,GAAAf,KAEAgB,EAAA,GAAAD,GAAAR,EAEA,KAAAyD,EAAAH,GAEA,MADA1B,GAAAnB,EAAA,GAAAG,WAAA,oCACAH,CAaA,KAAA,GAVAgC,GAAAa,EAAAb,OAUAjE,EAAA,EAAAiC,EAAAd,SAAA4C,IAAAE,EAAAjE,EAAAA,IACA6B,EAAAG,EAAA0B,QAAAoB,EAAA9E,IAAAK,OAAAS,EAAAC,EAGA,OAAAkB,GAGA,QAAAiD,GAAA/B,GAEA,GAAAnB,GAAAf,KACAgB,EAAA,GAAAD,GAAAR,EAEA,OADA4B,GAAAnB,EAAAkB,GACAlB,EAMA,QAAAkD,KACA,KAAA,IAAA/C,WAAA,sFAGA,QAAAgD,KACA,KAAA,IAAAhD,WAAA,yHA2GA,QAAAiD,GAAAT,GACA3D,KAAAqE,IAAAC,KACAtE,KAAAE,OAAAd,OACAY,KAAAS,QAAArB,OACAY,KAAA+C,gBAEAxC,IAAAoD,IACA,kBAAAA,IAAAO,IACAlE,eAAAoE,GAAAV,EAAA1D,KAAA2D,GAAAQ,KAkPA,QAAAI,GAAAxD,EAAAyD,GACAxE,KAAAyE,qBAAA1D,EACAf,KAAAgB,QAAA,GAAAD,GAAAR,GAEAmE,MAAAC,QAAAH,IACAxE,KAAA4E,OAAAJ,EACAxE,KAAAgD,OAAAwB,EAAAxB,OACAhD,KAAA6E,WAAAL,EAAAxB,OAEAhD,KAAAS,QAAA,GAAAiE,OAAA1E,KAAAgD,QAEA,IAAAhD,KAAAgD,OACAf,EAAAjC,KAAAgB,QAAAhB,KAAAS,UAEAT,KAAAgD,OAAAhD,KAAAgD,QAAA,EACAhD,KAAA8E,aACA,IAAA9E,KAAA6E,YACA5C,EAAAjC,KAAAgB,QAAAhB,KAAAS,WAIA0B,EAAAnC,KAAAgB,QAAAhB,KAAA+E,oBAqEA,QAAAC,KACA,GAAAC,EAEA,IAAA,mBAAAC,QACAD,EAAAC,WACA,IAAA,mBAAAC,MACAF,EAAAE,SAEA,KACAF,EAAAG,SAAA,iBACA,MAAAzF,GACA,KAAA,IAAA0F,OAAA,4EAIA,GAAAC,GAAAL,EAAAM,UAEAD,GAAA,qBAAAE,OAAAC,UAAAC,SAAA7D,KAAAyD,EAAA7C,YAAA6C,EAAAK,QAIAV,EAAAM,QAAAK,IA/4BA,GAAAC,EAMAA,GALAnB,MAAAC,QAKAD,MAAAC,QAJA,SAAA7H,GACA,MAAA,mBAAA0I,OAAAC,UAAAC,SAAA7D,KAAA/E,GAMA,IAEAa,GACAT,EAwGA4I,EA3GA9B,EAAA6B,EACA7G,EAAA,EAIA3B,EAAA,SAAA4B,EAAAE,GACAD,EAAAF,GAAAC,EACAC,EAAAF,EAAA,GAAAG,EACAH,GAAA,EACA,IAAAA,IAIA9B,EACAA,EAAAO,GAEAqI,MAaAC,EAAA,mBAAAC,QAAAA,OAAA5G,OACA6G,EAAAF,MACAhI,EAAAkI,EAAAC,kBAAAD,EAAAE,uBACAC,EAAA,mBAAA7I,UAAA,wBAAAmI,SAAA7D,KAAAtE,SAGA8I,EAAA,mBAAAC,oBACA,mBAAAC,gBACA,mBAAA/H,gBA4CAU,EAAA,GAAAwF,OAAA,IA6BAoB,GADAM,EACA9I,IACAS,EACAH,IACAyI,EACA/H,IACAc,SAAA2G,GAAA,kBAAAxG,SACAF,IAEAR,GAwBA,IAAA2D,GAAA5C,EAaA8C,EAAA7B,EAIAiC,GAAA,OACA3C,GAAA,EACAC,GAAA,EAEAoB,GAAA,GAAA4B,GAkKAE,GAAA,GAAAF,GAgEAoD,GAAA5C,EA4BA6C,GAAA1C,EAQA2C,GAAAzC,EAEAK,GAAA,EAUAsB,GAAAxB,CAoHAA,GAAAuC,IAAAH,GACApC,EAAAwC,KAAAH,GACArC,EAAA3B,QAAAC,EACA0B,EAAAyC,OAAAH,GACAtC,EAAA0C,cAAA9J,EACAoH,EAAA2C,SAAA5J,EACAiH,EAAA4C,MAAA3J,EAEA+G,EAAAqB,WACAnF,YAAA8D,EAmMA9C,KAAAkB,EA6BAyE,QAAA,SAAAnH,GACA,MAAAE,MAAAsB,KAAA,KAAAxB,IAGA,IAAAgE,IAAAS,CA0BAA,GAAAkB,UAAAV,iBAAA,WACA,MAAA,IAAAM,OAAA,4CAGAd,EAAAkB,UAAAX,WAAA,WAIA,IAAA,GAHA9B,GAAAhD,KAAAgD,OACAwB,EAAAxE,KAAA4E,OAEA7F,EAAA,EAAAiB,KAAAE,SAAA4C,IAAAE,EAAAjE,EAAAA,IACAiB,KAAAkH,WAAA1C,EAAAzF,GAAAA,IAIAwF,EAAAkB,UAAAyB,WAAA,SAAAC,EAAApI,GACA,GAAAqI,GAAApH,KAAAyE,qBACAhC,EAAA2E,EAAA3E,OAEA,IAAAA,IAAAC,EAAA,CACA,GAAApB,GAAAD,EAAA8F,EAEA,IAAA7F,IAAAkB,GACA2E,EAAAjH,SAAA4C,GACA9C,KAAAqH,WAAAF,EAAAjH,OAAAnB,EAAAoI,EAAA1G,aACA,IAAA,kBAAAa,GACAtB,KAAA6E,aACA7E,KAAAS,QAAA1B,GAAAoI,MACA,IAAAC,IAAAxB,GAAA,CACA,GAAA5E,GAAA,GAAAoG,GAAA7G,EACA+B,GAAAtB,EAAAmG,EAAA7F,GACAtB,KAAAsH,cAAAtG,EAAAjC,OAEAiB,MAAAsH,cAAA,GAAAF,GAAA,SAAA3E,GAAAA,EAAA0E,KAAApI,OAGAiB,MAAAsH,cAAA7E,EAAA0E,GAAApI,IAIAwF,EAAAkB,UAAA4B,WAAA,SAAApH,EAAAlB,EAAA2C,GACA,GAAAV,GAAAhB,KAAAgB,OAEAA,GAAAd,SAAA4C,KACA9C,KAAA6E,aAEA5E,IAAAG,GACA+B,EAAAnB,EAAAU,GAEA1B,KAAAS,QAAA1B,GAAA2C,GAIA,IAAA1B,KAAA6E,YACA5C,EAAAjB,EAAAhB,KAAAS,UAIA8D,EAAAkB,UAAA6B,cAAA,SAAAtG,EAAAjC,GACA,GAAAwI,GAAAvH,IAEAY,GAAAI,EAAA5B,OAAA,SAAAsC,GACA6F,EAAAF,WAAAlH,GAAApB,EAAA2C,IACA,SAAAQ,GACAqF,EAAAF,WAAAjH,GAAArB,EAAAmD,KA0BA,IAAAsF,IAAAxC,EAEAyC,IACAlC,QAAAK,GACA8B,SAAAF,GAIA,mBAAAG,SAAAA,OAAA,IACAA,OAAA,WAAA,MAAAF,MACA,mBAAAG,SAAAA,OAAA,QACAA,OAAA,QAAAH,GACA,mBAAAzH,QACAA,KAAA,WAAAyH,IAGAD,OACA3F,KAAA7B,MCv7BA,WA2BA,QAAA6H,GAAAC,EAAAC,GAuCA,QAAAC,GAAAC,GACA,GAAAD,EAAAC,KAAAC,EAEA,MAAAF,GAAAC,EAEA,IAAAE,EACA,IAAA,yBAAAF,EAGAE,EAAA,KAAA,IAAA,OACA,IAAA,QAAAF,EAGAE,EAAAH,EAAA,mBAAAA,EAAA,kBACA,CACA,GAAAtG,GAAA0G,EAAA,oDAEA,IAAA,kBAAAH,EAAA,CACA,GAAAI,GAAAN,EAAAM,UAAAC,EAAA,kBAAAD,IAAAE,CACA,IAAAD,EAAA,EAEA5G,EAAA,WACA,MAAA,KACA8G,OAAA9G,CACA,KACA4G,EAGA,MAAAD,EAAA,IAGA,MAAAA,EAAA,GAAAI,KACA,MAAAJ,EAAA,GAAAK,KAKAL,EAAAM,KAAAT,GAGAG,EAAAH,KAAAA,GAGAG,MAAAH,GAMA,MAAAG,EAAA3G,IACA,OAAA2G,GAAA3G,KAGA,UAAA2G,GAAAH,KAEA,QAAAG,EAAA,OAKA,oBAAAA,GAAAH,EAAAS,EAAA,QAGAN,GAAAO,GAAAlH,GAAA,GAAA,EAAA,KAAA,oBAAA0G,GAEA,MAAAC,EAAA,KAAA3G,IACA,iBAAA2G,GAAA,EAAA,GAAA,KAAA,IAGA,iCAAAA,EAAA,GAAAQ,GAAA,WAEA,iCAAAR,EAAA,GAAAQ,GAAA,UAGA,iCAAAR,EAAA,GAAAQ,GAAA,gBAGA,8BAAAR,EAAA,GAAAQ,GAAA,KACA,MAAAC,GACAR,GAAA,GAGAH,EAAAG,EAGA,GAAA,cAAAL,EAAA,CACA,GAAAc,GAAAhB,EAAAgB,KACA,IAAA,kBAAAA,GACA,IAIA,GAAA,IAAAA,EAAA,OAAAA,GAAA,GAAA,CAEArH,EAAAqH,EAAAX,EACA,IAAAY,GAAA,GAAAtH,EAAA,EAAAsB,QAAA,IAAAtB,EAAA,EAAA,EACA,IAAAsH,EAAA,CACA,IAEAA,GAAAD,EAAA,OACA,MAAAD,IACA,GAAAE,EACA,IAIAA,EAAA,IAAAD,EAAA,MACA,MAAAD,IAEA,GAAAE,EACA,IAIAA,EAAA,IAAAD,EAAA,MACA,MAAAD,OAIA,MAAAA,GACAE,GAAA,EAGAb,EAAAa,GAGA,MAAAhB,GAAAC,KAAAE,EApKAL,IAAAA,EAAAmB,EAAA,UACAlB,IAAAA,EAAAkB,EAAA,SAGA,IAAAR,GAAAX,EAAA,QAAAmB,EAAA,OACAP,EAAAZ,EAAA,QAAAmB,EAAA,OACAzD,EAAAsC,EAAA,QAAAmB,EAAA,OACAJ,EAAAf,EAAA,MAAAmB,EAAA,KACAC,EAAApB,EAAA,aAAAmB,EAAA,YACA9H,EAAA2G,EAAA,WAAAmB,EAAA,UACAE,EAAArB,EAAA,MAAAmB,EAAA,KACAG,EAAAtB,EAAA,MAAAmB,EAAA,IAGA,iBAAAG,IAAAA,IACArB,EAAAM,UAAAe,EAAAf,UACAN,EAAAgB,MAAAK,EAAAL,MAIA,IAEAM,GAAAC,EAAApB,EAFAqB,EAAA/D,EAAAC,UACAkD,EAAAY,EAAA7D,SAIA6C,EAAA,GAAAM,GAAA,iBACA,KAGAN,EAAA,SAAAA,EAAAiB,kBAAA,IAAAjB,EAAAkB,eAAA,IAAAlB,EAAAmB,cAIA,IAAAnB,EAAAoB,eAAA,IAAApB,EAAAqB,iBAAA,GAAArB,EAAAsB,iBAAA,KAAAtB,EAAAuB,qBACA,MAAAhB,IAqIA,IAAAd,EAAA,QAAA,CAEA,GAAA+B,GAAA,oBACAC,EAAA,gBACAC,EAAA,kBACAC,EAAA,kBACAC,EAAA,iBACAC,EAAA,mBAGAC,EAAArC,EAAA,wBAGA,KAAAO,EACA,GAAA+B,GAAAnB,EAAAmB,MAGAC,GAAA,EAAA,GAAA,GAAA,GAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,KAGAC,EAAA,SAAAC,EAAAC,GACA,MAAAH,GAAAG,GAAA,KAAAD,EAAA,MAAAH,GAAAG,EAAA,MAAAC,IAAAA,EAAA,KAAA,GAAAJ,GAAAG,EAAA,KAAAC,GAAA,KAAAJ,GAAAG,EAAA,KAAAC,GAAA,KAwHA,KAlHArB,EAAAE,EAAAoB,kBACAtB,EAAA,SAAAuB,GACA,GAAAtK,GAAAuK,IA4BA,QA3BAA,EAAAC,UAAA,KAAAD,EAAAC,WAGApF,SAAA,GACAmF,GAAAnF,UAAAiD,EAGAU,EAAA,SAAAuB,GAIA,GAAAG,GAAA/K,KAAA8K,UAAAtK,EAAAoK,KAAA5K,KAAA8K,UAAA,KAAA9K,KAGA,OADAA,MAAA8K,UAAAC,EACAvK,IAIAF,EAAAuK,EAAAvK,YAGA+I,EAAA,SAAAuB,GACA,GAAA7K,IAAAC,KAAAM,aAAAA,GAAAmF,SACA,OAAAmF,KAAA5K,SAAA4K,IAAA7K,IAAAC,KAAA4K,KAAA7K,EAAA6K,MAGAC,EAAA,KACAxB,EAAAxH,KAAA7B,KAAA4K,KAMAtB,EAAA,SAAAxI,EAAA7B,GACA,GAAA+L,GAAAH,EAAAD,EAAAK,EAAA,GAKAD,EAAA,WACAhL,KAAAkL,QAAA,IACAzF,UAAAyF,QAAA,EAGAL,EAAA,GAAAG,EACA,KAAAJ,IAAAC,GAEAxB,EAAAxH,KAAAgJ,EAAAD,IACAK,GAsDA,OAnDAD,GAAAH,EAAA,KAGAI,EAoBA3B,EAFA,GAAA2B,EAEA,SAAAnK,EAAA7B,GAEA,GAAA2L,GAAAC,KAAAM,EAAAxC,EAAA9G,KAAAf,IAAAiJ,CACA,KAAAa,IAAA9J,GAIAqK,GAAA,aAAAP,GAAAvB,EAAAxH,KAAAgJ,EAAAD,MAAAC,EAAAD,GAAA,KAAAvB,EAAAxH,KAAAf,EAAA8J,IACA3L,EAAA2L,IAMA,SAAA9J,EAAA7B,GACA,GAAA2L,GAAAQ,EAAAD,EAAAxC,EAAA9G,KAAAf,IAAAiJ,CACA,KAAAa,IAAA9J,GACAqK,GAAA,aAAAP,IAAAvB,EAAAxH,KAAAf,EAAA8J,KAAAQ,EAAA,gBAAAR,IACA3L,EAAA2L,IAKAQ,GAAA/B,EAAAxH,KAAAf,EAAA8J,EAAA,iBACA3L,EAAA2L,KA1CAC,GAAA,UAAA,WAAA,iBAAA,uBAAA,gBAAA,iBAAA,eAGAvB,EAAA,SAAAxI,EAAA7B,GACA,GAAA2L,GAAA5H,EAAAmI,EAAAxC,EAAA9G,KAAAf,IAAAiJ,EACAsB,GAAAF,GAAA,kBAAArK,GAAAR,aAAAgL,QAAAxK,GAAA6J,iBAAA7J,EAAA6J,gBAAAtB,CACA,KAAAuB,IAAA9J,GAGAqK,GAAA,aAAAP,IAAAS,EAAAxJ,KAAAf,EAAA8J,IACA3L,EAAA2L,EAIA,KAAA5H,EAAA6H,EAAA7H,OAAA4H,EAAAC,IAAA7H,GAAAqI,EAAAxJ,KAAAf,EAAA8J,IAAA3L,EAAA2L,OAgCAtB,EAAAxI,EAAA7B,KASA+I,EAAA,kBAAA,CAEA,GAAAuD,IACAC,GAAA,OACAC,GAAA,MACAC,EAAA,MACAC,GAAA,MACAC,GAAA,MACAC,GAAA,MACAC,EAAA,OAKAC,EAAA,SACAC,EAAA,SAAAC,EAAAvK,GAGA,OAAAqK,GAAArK,GAAA,IAAAwK,OAAAD,IAOAE,EAAA,QACAC,EAAA,SAAA1K,GAGA,IAFA,GAAAlB,GAAA,IAAA6L,EAAA,EAAArJ,EAAAtB,EAAAsB,OAAAsJ,GAAAjC,GAAArH,EAAA,GACAuJ,EAAAD,IAAAjC,EAAA3I,EAAA8K,MAAA,IAAA9K,GACAsB,EAAAqJ,EAAAA,IAAA,CACA,GAAAI,GAAA/K,EAAAgL,WAAAL,EAGA,QAAAI,GACA,IAAA,GAAA,IAAA,GAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IACAjM,GAAA+K,EAAAkB,EACA,MACA,SACA,GAAA,GAAAA,EAAA,CACAjM,GAAA2L,EAAAH,EAAA,EAAAS,EAAA/G,SAAA,IACA,OAEAlF,GAAA8L,EAAAC,EAAAF,GAAA3K,EAAAiL,OAAAN,IAGA,MAAA7L,GAAA,KAKAoM,EAAA,SAAAhC,EAAA9J,EAAA7B,EAAA4N,EAAAC,EAAAC,EAAAC,GACA,GAAAtL,GAAAuL,EAAAxC,EAAAC,EAAAwC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAApB,EAAArJ,EAAA0K,EAAAlN,CACA,KAEAkB,EAAAZ,EAAA8J,GACA,MAAA9B,IACA,GAAA,gBAAApH,IAAAA,EAEA,GADAuL,EAAAtE,EAAA9G,KAAAH,GACAuL,GAAAjD,GAAAX,EAAAxH,KAAAH,EAAA,UA4CA,kBAAAA,GAAA8G,SAAAyE,GAAAhD,GAAAgD,GAAA/C,GAAA+C,GAAA9C,GAAAd,EAAAxH,KAAAH,EAAA,aAKAA,EAAAA,EAAA8G,OAAAoC,QAhDA,IAAAlJ,EAAA,GAAA,GAAA,EAAA,EAAAA,EAAA,CAIA,GAAA8I,EAAA,CAKA,IADA0C,EAAA5C,EAAA5I,EAAA,OACA+I,EAAAH,EAAA4C,EAAA,UAAA,KAAA,EAAA1C,EAAAC,EAAA,EAAA,IAAAyC,EAAAzC,KACA,IAAAC,EAAAJ,GAAA4C,EAAA1C,EAAAC,EAAA,IAAA,OAAAD,EAAAC,EAAAC,EAAA,IAAAwC,EAAAxC,KACAwC,EAAA,EAAAA,EAAA1C,EAAAC,EAAAC,GAKAyC,GAAAzL,EAAA,MAAA,OAAA,MAGA0L,EAAA9C,EAAA6C,EAAA,MAAA,GACAE,EAAA/C,EAAA6C,EAAA,KAAA,GACAG,EAAAhD,EAAA6C,EAAA,KAAA,GACAI,EAAAJ,EAAA,QAEA1C,GAAA/I,EAAA8H,iBACAkB,EAAAhJ,EAAA+H,cACAyD,EAAAxL,EAAAgI,aACA0D,EAAA1L,EAAAiI,cACA0D,EAAA3L,EAAAkI,gBACA0D,EAAA5L,EAAAmI,gBACA0D,EAAA7L,EAAAoI,oBAGApI,IAAA,GAAA+I,GAAAA,GAAA,KAAA,EAAAA,EAAA,IAAA,KAAAuB,EAAA,EAAA,EAAAvB,GAAAA,EAAAA,GAAAuB,EAAA,EAAAvB,IACA,IAAAuB,EAAA,EAAAtB,EAAA,GAAA,IAAAsB,EAAA,EAAAkB,GAGA,IAAAlB,EAAA,EAAAoB,GAAA,IAAApB,EAAA,EAAAqB,GAAA,IAAArB,EAAA,EAAAsB,GAEA,IAAAtB,EAAA,EAAAuB,GAAA,QAEA7L,GAAA,IAeA,IALAzC,IAGAyC,EAAAzC,EAAA4C,KAAAf,EAAA8J,EAAAlJ,IAEA,OAAAA,EACA,MAAA,MAGA,IADAuL,EAAAtE,EAAA9G,KAAAH,GACAuL,GAAA7C,EAEA,MAAA,GAAA1I,CACA,IAAAuL,GAAAhD,EAGA,MAAAvI,GAAA,GAAA,GAAA,EAAA,EAAAA,EAAA,GAAAA,EAAA,MACA,IAAAuL,GAAA/C,EAEA,MAAAkC,GAAA,GAAA1K,EAGA,IAAA,gBAAAA,GAAA,CAGA,IAAAsB,EAAAgK,EAAAhK,OAAAA,KACA,GAAAgK,EAAAhK,KAAAtB,EAEA,KAAAP,IASA,IALA6L,EAAAW,KAAAjM,GACA8L,KAEAE,EAAAX,EACAA,GAAAD,EACAG,GAAA9C,EAAA,CAEA,IAAAkC,EAAA,EAAArJ,EAAAtB,EAAAsB,OAAAA,EAAAqJ,EAAAA,IACAoB,EAAAb,EAAAP,EAAA3K,EAAAzC,EAAA4N,EAAAC,EAAAC,EAAAC,GACAQ,EAAAG,KAAAF,IAAAvF,EAAA,OAAAuF,EAEAjN,GAAAgN,EAAAxK,OAAA8J,EAAA,MAAAC,EAAAS,EAAAI,KAAA,MAAAb,GAAA,KAAAW,EAAA,IAAA,IAAAF,EAAAI,KAAA,KAAA,IAAA,SAKAtE,GAAAuD,GAAAnL,EAAA,SAAAkJ,GACA,GAAA6C,GAAAb,EAAAhC,EAAAlJ,EAAAzC,EAAA4N,EAAAC,EAAAC,EAAAC,EACAS,KAAAvF,GAOAsF,EAAAG,KAAAvB,EAAAxB,GAAA,KAAAkC,EAAA,IAAA,IAAAW,KAGAjN,EAAAgN,EAAAxK,OAAA8J,EAAA,MAAAC,EAAAS,EAAAI,KAAA,MAAAb,GAAA,KAAAW,EAAA,IAAA,IAAAF,EAAAI,KAAA,KAAA,IAAA,IAIA,OADAZ,GAAAa,MACArN,GAKAuH,GAAAM,UAAA,SAAAyF,EAAAC,EAAA9B,GACA,GAAAa,GAAA7N,EAAA4N,EAAAI,CACA,IAAA3B,QAAAyC,KAAAA,EACA,IAAAd,EAAAtE,EAAA9G,KAAAkM,KAAAhE,EACA9K,EAAA8O,MACA,IAAAd,GAAA9C,EAAA,CAEA0C,IACA,KAAA,GAAAnL,GAAA2K,EAAA,EAAArJ,EAAA+K,EAAA/K,OAAAA,EAAAqJ,EAAA3K,EAAAqM,EAAA1B,KAAAY,EAAAtE,EAAA9G,KAAAH,IAAAuL,GAAA/C,GAAA+C,GAAAhD,KAAA4C,EAAAnL,GAAA,KAGA,GAAAuK,EACA,IAAAgB,EAAAtE,EAAA9G,KAAAoK,KAAAhC,GAGA,IAAAgC,GAAAA,EAAA,GAAA,EACA,IAAAa,EAAA,GAAAb,EAAA,KAAAA,EAAA,IAAAa,EAAA9J,OAAAiJ,EAAAa,GAAA,UAEAG,IAAA/C,IACA4C,EAAAb,EAAAjJ,QAAA,GAAAiJ,EAAAA,EAAAC,MAAA,EAAA,IAMA,OAAAU,GAAA,IAAAlL,KAAAA,EAAA,IAAAoM,EAAApM,GAAAzC,EAAA4N,EAAAC,EAAA,QAKA,IAAA9E,EAAA,cAAA,CACA,GAgBAgG,GAAAC,EAhBAC,EAAAxF,EAAAwF,aAIAC,GACA3C,GAAA,KACAC,GAAA,IACA2C,GAAA,IACAC,GAAA,KACAC,IAAA,IACAC,IAAA,KACAC,IAAA,KACAC,IAAA,MAOAC,EAAA,WAEA,KADAV,GAAAC,EAAA,KACA/E,KAMAyF,EAAA,WAEA,IADA,GAAAjN,GAAAkN,EAAAC,EAAAC,EAAArC,EAAAqB,EAAAG,EAAAjL,EAAA8K,EAAA9K,OACAA,EAAAgL,GAEA,OADAvB,EAAAqB,EAAApB,WAAAsB,IAEA,IAAA,GAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAGAA,GACA,MACA,KAAA,KAAA,IAAA,KAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAKA,MAFAtM,GAAA2I,EAAAyD,EAAAnB,OAAAqB,GAAAF,EAAAE,GACAA,IACAtM,CACA,KAAA,IAKA,IAAAA,EAAA,IAAAsM,IAAAhL,EAAAgL,GAEA,GADAvB,EAAAqB,EAAApB,WAAAsB,GACA,GAAAvB,EAGAiC,QACA,IAAA,IAAAjC,EAKA,OADAA,EAAAqB,EAAApB,aAAAsB,IAEA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,KAAA,IAAA,KAAA,IAAA,KAAA,IAAA,KAEAtM,GAAAyM,EAAA1B,GACAuB,GACA,MACA,KAAA,KAKA,IADAY,IAAAZ,EACAa,EAAAb,EAAA,EAAAa,EAAAb,EAAAA,IACAvB,EAAAqB,EAAApB,WAAAsB,GAGAvB,GAAA,IAAA,IAAAA,GAAAA,GAAA,IAAA,KAAAA,GAAAA,GAAA,IAAA,IAAAA,GAEAiC,GAIAhN,IAAAwM,EAAA,KAAAJ,EAAA5B,MAAA0C,EAAAZ,GACA,MACA,SAEAU,QAEA,CACA,GAAA,IAAAjC,EAGA,KAKA,KAHAA,EAAAqB,EAAApB,WAAAsB,GACAY,EAAAZ,EAEAvB,GAAA,IAAA,IAAAA,GAAA,IAAAA,GACAA,EAAAqB,EAAApB,aAAAsB,EAGAtM,IAAAoM,EAAA5B,MAAA0C,EAAAZ,GAGA,GAAA,IAAAF,EAAApB,WAAAsB,GAGA,MADAA,KACAtM,CAGAgN,IACA,SASA,GAPAE,EAAAZ,EAEA,IAAAvB,IACAqC,GAAA,EACArC,EAAAqB,EAAApB,aAAAsB,IAGAvB,GAAA,IAAA,IAAAA,EAAA,CAQA,IANA,IAAAA,IAAAA,EAAAqB,EAAApB,WAAAsB,EAAA,GAAAvB,GAAA,IAAA,IAAAA,IAEAiC,IAEAI,GAAA,EAEA9L,EAAAgL,IAAAvB,EAAAqB,EAAApB,WAAAsB,GAAAvB,GAAA,IAAA,IAAAA,GAAAuB,KAGA,GAAA,IAAAF,EAAApB,WAAAsB,GAAA,CAGA,IAFAa,IAAAb,EAEAhL,EAAA6L,IAAApC,EAAAqB,EAAApB,WAAAmC,GAAApC,GAAA,IAAA,IAAAA,GAAAoC,KACAA,GAAAb,GAEAU,IAEAV,EAAAa,EAKA,GADApC,EAAAqB,EAAApB,WAAAsB,GACA,KAAAvB,GAAA,IAAAA,EAAA,CAQA,IAPAA,EAAAqB,EAAApB,aAAAsB,IAGA,IAAAvB,GAAA,IAAAA,IACAuB,IAGAa,EAAAb,EAAAhL,EAAA6L,IAAApC,EAAAqB,EAAApB,WAAAmC,GAAApC,GAAA,IAAA,IAAAA,GAAAoC,KACAA,GAAAb,GAEAU,IAEAV,EAAAa,EAGA,OAAAf,EAAA5B,MAAA0C,EAAAZ,GAOA,GAJAc,GACAJ,IAGA,QAAAZ,EAAA5B,MAAA8B,EAAAA,EAAA,GAEA,MADAA,IAAA,GACA,CACA,IAAA,SAAAF,EAAA5B,MAAA8B,EAAAA,EAAA,GAEA,MADAA,IAAA,GACA,CACA,IAAA,QAAAF,EAAA5B,MAAA8B,EAAAA,EAAA,GAEA,MADAA,IAAA,EACA,IAGAU,KAKA,MAAA,KAIAK,EAAA,SAAArN,GACA,GAAA8L,GAAAwB,CAKA,IAJA,KAAAtN,GAEAgN,IAEA,gBAAAhN,GAAA,CACA,GAAA,MAAA2I,EAAA3I,EAAAiL,OAAA,GAAAjL,EAAA,IAEA,MAAAA,GAAAwK,MAAA,EAGA,IAAA,KAAAxK,EAAA,CAGA,IADA8L,KAEA9L,EAAAiN,IAEA,KAAAjN,EAHAsN,IAAAA,GAAA,GASAA,IACA,KAAAtN,GACAA,EAAAiN,IACA,KAAAjN,GAEAgN,KAIAA,KAIA,KAAAhN,GACAgN,IAEAlB,EAAAG,KAAAoB,EAAArN,GAEA,OAAA8L,GACA,GAAA,KAAA9L,EAAA,CAGA,IADA8L,KAEA9L,EAAAiN,IAEA,KAAAjN,EAHAsN,IAAAA,GAAA,GAQAA,IACA,KAAAtN,GACAA,EAAAiN,IACA,KAAAjN,GAEAgN,KAIAA,MAMA,KAAAhN,GAAA,gBAAAA,IAAA,MAAA2I,EAAA3I,EAAAiL,OAAA,GAAAjL,EAAA,KAAA,KAAAiN,MACAD,IAEAlB,EAAA9L,EAAAwK,MAAA,IAAA6C,EAAAJ,IAEA,OAAAnB,GAGAkB,IAEA,MAAAhN,IAIAuN,EAAA,SAAAnB,EAAAlD,EAAA3L,GACA,GAAAwO,GAAAyB,EAAApB,EAAAlD,EAAA3L,EACAwO,KAAAvF,QACA4F,GAAAlD,GAEAkD,EAAAlD,GAAA6C,GAOAyB,EAAA,SAAApB,EAAAlD,EAAA3L,GACA,GAAA+D,GAAAtB,EAAAoM,EAAAlD,EACA,IAAA,gBAAAlJ,IAAAA,EAIA,GAAAiH,EAAA9G,KAAAH,IAAAyI,EACA,IAAAnH,EAAAtB,EAAAsB,OAAAA,KACAiM,EAAAvN,EAAAsB,EAAA/D,OAGAqK,GAAA5H,EAAA,SAAAkJ,GACAqE,EAAAvN,EAAAkJ,EAAA3L,IAIA,OAAAA,GAAA4C,KAAAiM,EAAAlD,EAAAlJ,GAIAqG,GAAAgB,MAAA,SAAA+E,EAAA7O,GACA,GAAAuB,GAAAkB,CAUA,OATAsM,GAAA,EACAC,EAAA,GAAAH,EACAtN,EAAAuO,EAAAJ,KAEA,KAAAA,KACAD,IAGAV,EAAAC,EAAA,KACAhP,GAAA0J,EAAA9G,KAAA5C,IAAA8K,EAAAmF,GAAAxN,KAAAA,EAAA,IAAAlB,EAAAkB,GAAA,GAAAzC,GAAAuB,IAMA,MADAuH,GAAA,aAAAF,EACAE,EA31BA,GAAAoH,GAAA,kBAAAxH,SAAAA,OAAAyH,IAGA9D,GACA+D,YAAA,EACAvO,QAAA,GAIAwO,EAAAhE,QAAAvD,WAAAA,UAAAA,QAAAwH,UAAAxH,QAMAkB,EAAAqC,QAAAtF,UAAAA,QAAAhG,KACAwP,EAAAF,GAAAhE,QAAA1D,UAAAA,SAAAA,OAAA2H,UAAA,gBAAArK,SAAAA,MA80BA,KA50BAsK,GAAAA,EAAA,SAAAA,GAAAA,EAAA,SAAAA,GAAAA,EAAA,OAAAA,IACAvG,EAAAuG,GA20BAF,IAAAH,EAEAtH,EAAAoB,EAAAqG,OACA,CAEA,GAAAlG,GAAAH,EAAAwG,KACAC,EAAAzG,EAAA,MACA0G,GAAA,EAEAC,EAAA/H,EAAAoB,EAAAA,EAAA,OAGA4G,WAAA,WAOA,MANAF,KACAA,GAAA,EACA1G,EAAAwG,KAAArG,EACAH,EAAA,MAAAyG,EACAtG,EAAAsG,EAAA,MAEAE,IAIA3G,GAAAwG,MACA1G,MAAA6G,EAAA7G,MACAV,UAAAuH,EAAAvH,WAKA8G,GACAxH,OAAA,WACA,MAAAiI,MAGA/N,KAAA7B,MCn4BA0E,MAAAC,UACAD,MAAAC,QAAA,SAAAxF,GACA,MAAA,mBAAAqG,OAAAC,UAAAC,SAAA7D,KAAA1C,KAIA,mBAAAoG,UACAuK,WAAApI,WAKAtC,SAAAK,UAAAsK,OACA3K,SAAAK,UAAAsK,KAAA,SAAAC,GACA,GAAA,kBAAAhQ,MACA,KAAA,IAAAmB,WAAA,uEAGA,IAAA8O,GAAAvL,MAAAe,UAAAyG,MAAArK,KAAAnB,UAAA,GACAwP,EAAAlQ,KACAmQ,EAAA,aAEAC,EAAA,WACA,MAAAF,GAAAG,MAAArQ,eAAAmQ,IAAAH,EAAAhQ,KAAAgQ,EACAC,EAAAK,OAAA5L,MAAAe,UAAAyG,MAAArK,KAAAnB,aAMA,OAHAyP,GAAA1K,UAAAzF,KAAAyF,UACA2K,EAAA3K,UAAA,GAAA0K,GAEAC,IAMA1L,MAAAe,UAAA8K,MACA7L,MAAAe,UAAA8K,IAAA,SAAAtR,EAAAuR,GACA,GAAA,SAAAxQ,MAAA,OAAAA,KACA,KAAA,IAAAmB,WAAA,8BAEA,IAEAsP,GAFAC,EAAAlL,OAAAxF,MACA2Q,EAAAD,EAAA1N,SAAA,CAEA,IAAA,kBAAA/D,GACA,KAAA,IAAAkC,WAAAlC,EAAA,qBAEAyB,WAAAsC,OAAA,IACAyN,EAAAD,EAMA,KAHA,GAAAI,GAAA,GAAAlM,OAAAiM,GACAE,EAAA,EAEAF,EAAAE,GAAA,CACA,GAAAC,GAAAC,CACAF,KAAAH,KACAI,EAAAJ,EAAAG,GACAE,EAAA9R,EAAA4C,KAAA4O,EAAAK,EAAAD,EAAAH,GACAE,EAAAC,GAAAE,GAEAF,IAGA,MAAAD,KAKAlM,MAAAe,UAAAsI,SACArJ,MAAAe,UAAAsI,OAAA,SAAA9O,GACA,GAAA,SAAAe,MAAA,OAAAA,KACA,KAAA,IAAAmB,WAAA,8BAGA,IAAA6P,GAAAxL,OAAAxF,MACA2Q,EAAAK,EAAAhO,SAAA,CACA,IAAA,kBAAA/D,GACA,KAAA,IAAAkC,WAAAlC,EAAA,qBAKA,KAAA,GAFAgS,MACAT,EAAA9P,UAAAsC,QAAA,EAAAtC,UAAA,GAAA,OACA3B,EAAA,EAAA4R,EAAA5R,EAAAA,IACA,GAAAA,IAAAiS,GAAA,CACA,GAAAE,GAAAF,EAAAjS,EACAE,GAAA4C,KAAA2O,EAAAU,EAAAnS,EAAAiS,IACAC,EAAAtD,KAAAuD,GAKA,MAAAD,KAKAvM,MAAAe,UAAA6D,UACA5E,MAAAe,UAAA6D,QAAA,SAAArK,EAAAuR,GACA,GAAAC,GAAAI,CACA,IAAA,OAAA7Q,MAAAZ,SAAAY,KACA,KAAA,IAAAmB,WAAA,+BAGA,IAAAuP,GAAAlL,OAAAxF,MACA2Q,EAAAD,EAAA1N,SAAA,CACA,IAAA,kBAAA/D,GACA,KAAA,IAAAkC,WAAAlC,EAAA,qBAOA,KAJAyB,UAAAsC,OAAA,IACAyN,EAAAD,GAEAK,EAAA,EACAF,EAAAE,GAAA,CACA,GAAAC,EACAD,KAAAH,KACAI,EAAAJ,EAAAG,GACA5R,EAAA4C,KAAA4O,EAAAK,EAAAD,EAAAH,IAEAG,QC1HA,SAAAlR,EAAAwR,GAAA,YAAA,mBAAAxJ,SAAAA,OAAAyH,IAAAzH,OAAA,gBAAAwJ,GAAA,gBAAApJ,SAAAH,OAAAG,QAAAoJ,IAAAxR,EAAAyR,WAAAD,KAAAnR,KAAA,WAAA,YAAA,SAAAL,GAAAA,GAAA,OAAA0R,MAAAC,WAAA3R,KAAA4R,SAAA5R,GAAA,QAAAwR,GAAAxR,EAAAwR,EAAA7R,EAAA0R,EAAAQ,EAAAzS,GAAA,SAAAY,GAAAK,KAAAyR,gBAAA9R,GAAA,SAAAwR,GAAAnR,KAAA0R,QAAAP,GAAA,SAAA7R,GAAAU,KAAA2R,YAAArS,GAAA,SAAA0R,GAAAhR,KAAA4R,cAAAZ,GAAA,SAAAQ,GAAAxR,KAAA6R,gBAAAL,GAAA,SAAAzS,GAAAiB,KAAA8R,UAAA/S,GAAA,MAAAoS,GAAA1L,WAAAsM,gBAAA,WAAA,MAAA/R,MAAAgS,cAAAP,gBAAA,SAAA9R,GAAAK,KAAAgS,aAAAtJ,OAAA/I,IAAAsS,QAAA,WAAA,MAAAjS,MAAAkS,MAAAR,QAAA,SAAA/R,GAAA,GAAA,mBAAA6F,OAAAC,UAAAC,SAAA7D,KAAAlC,GAAA,KAAA,IAAAwB,WAAA,wBAAAnB,MAAAkS,KAAAvS,GAAAwS,YAAA,WAAA,MAAAnS,MAAAoS,UAAAT,YAAA,SAAAhS,GAAAK,KAAAoS,SAAA1J,OAAA/I,IAAA0S,cAAA,WAAA,MAAArS,MAAAsS,YAAAV,cAAA,SAAAT,GAAA,IAAAxR,EAAAwR,GAAA,KAAA,IAAAhQ,WAAA,+BAAAnB,MAAAsS,WAAA7J,OAAA0I,IAAAoB,gBAAA,WAAA,MAAAvS,MAAAwS,cAAAX,gBAAA,SAAAV,GAAA,IAAAxR,EAAAwR,GAAA,KAAA,IAAAhQ,WAAA,iCAAAnB,MAAAwS,aAAA/J,OAAA0I,IAAAsB,UAAA,WAAA,MAAAzS,MAAA8N,QAAAgE,UAAA,SAAAnS,GAAAK,KAAA8N,OAAApF,OAAA/I,IAAA+F,SAAA,WAAA,GAAAyL,GAAAnR,KAAA+R,mBAAA,cAAAzS,EAAA,KAAAU,KAAAiS,eAAArE,KAAA,KAAA,IAAAoD,EAAAhR,KAAAmS,cAAA,IAAAnS,KAAAmS,cAAA,GAAAX,EAAA7R,EAAAK,KAAAqS,iBAAA,IAAArS,KAAAqS,gBAAA,GAAAtT,EAAAY,EAAAK,KAAAuS,mBAAA,IAAAvS,KAAAuS,kBAAA,EAAA,OAAApB,GAAA7R,EAAA0R,EAAAQ,EAAAzS,IAAAoS,GAAA,IAAAuB,WAAA,SAAA/S,GAAA,QAAAwR,GAAAH,GAAA,GAAA1R,EAAA0R,GAAA,MAAA1R,GAAA0R,GAAAjJ,OAAA,IAAAyJ,GAAAlS,EAAA0R,IAAAjJ,WAAA4K,GAAA3B,EAAA4B,QAAA,EAAA,OAAAjT,GAAAqR,GAAAnP,KAAA2P,EAAAzJ,QAAAyJ,EAAAA,EAAAzJ,QAAAoJ,GAAAK,EAAAoB,QAAA,EAAApB,EAAAzJ,QAAA,GAAAzI,KAAA,OAAA6R,GAAA0B,EAAAlT,EAAAwR,EAAA/J,EAAA9H,EAAA6R,EAAA2B,EAAA,GAAA3B,EAAA,KAAA,SAAAxR,EAAAwR,EAAA7R,GAAA,QAAA0R,GAAArR,GAAA,GAAAwR,GAAAxR,CAAA,OAAA,gBAAAA,KAAAwR,EAAA1B,KAAA1G,MAAApJ,EAAAoT,QAAA,WAAA,MAAA,MAAA5B,EAAA6B,SAAA,GAAAC,GAAA9B,GAAA,GAAAK,GAAAL,GAAA,QAAAK,GAAA7R,GAAA,GAAAwR,GAAAxR,CAAA,iBAAAA,KAAAwR,EAAA1B,KAAA1G,MAAApJ,EAAAoT,QAAA,WAAA,KAAA,IAAAzT,GAAAsJ,EAAAsK,OAAA/B,EAAA,WAAAH,EAAApI,EAAAsK,OAAA/B,EAAA,WAAAK,EAAA5I,EAAAsK,OAAA/B,EAAA,YAAApS,EAAA6J,EAAAsK,OAAA/B,EAAA,aAAA,MAAA8B,EAAArK,EAAAsK,OAAA/B,EAAA,iBAAA,MAAAgC,EAAAvK,EAAAsK,OAAA/B,EAAA,YAAA/J,EAAAwB,EAAAsK,OAAA/B,EAAA,OAAA,KAAA,IAAA7R,GAAAU,KAAAoT,SAAA,KAAA,IAAA/N,OAAA,wBAAA/F,EAAA0R,GAAAA,EAAAT,IAAA3H,EAAAyK,WAAA9C,IAAA,SAAA5Q,GAAA,MAAAZ,IAAA6J,EAAA0K,WAAAvU,IAAA6J,EAAA0K,WAAA3T,GAAAiJ,EAAA2K,SAAAxU,EAAAY,GAAAA,IAAAK,KAAAwT,OAAAC,EAAAC,UAAAlC,GAAA,GAAAxR,KAAA2T,SAAAF,EAAAC,UAAA1C,GAAA,GAAAhR,KAAA4T,WAAA7U,EAAAiB,KAAA6T,eAAAZ,EAAAjT,KAAA8T,UAAAX,EAAAnT,KAAA+T,KAAA3M,EAAA,QAAArI,KAAAiB,KAAAgU,cAAA,EAAAhU,KAAAiU,gBAAA,EAAAjU,KAAA8N,OAAA,KAAA9N,KAAAkU,aAAA,KAAAlU,KAAAmU,eAAA,KAAAnU,KAAAiI,KAAA,KAAA,QAAAgL,GAAAtT,GAAA,GAAAwR,GAAAxR,CAAA,iBAAAA,KAAAwR,EAAA1B,KAAA1G,MAAApJ,EAAAoT,QAAA,WAAA,KAAA,IAAAzT,GAAAsJ,EAAAsK,OAAA/B,EAAA,WAAAK,EAAA5I,EAAAsK,OAAA/B,EAAA,WAAA,IAAA7R,GAAAU,KAAAoT,SAAA,KAAA,IAAA/N,OAAA,wBAAA/F,EAAAU,MAAA2T,SAAA,GAAAF,GAAAzT,KAAAwT,OAAA,GAAAC,EAAA,IAAA1U,IAAAqV,KAAA,GAAAC,OAAA,EAAArU,MAAAsU,UAAA9C,EAAAjB,IAAA,SAAA5Q,GAAA,GAAAA,EAAA4U,IAAA,KAAA,IAAAlP,OAAA,qDAAA,IAAA8L,GAAAvI,EAAAsK,OAAAvT,EAAA,UAAAL,EAAAsJ,EAAAsK,OAAA/B,EAAA,QAAAK,EAAA5I,EAAAsK,OAAA/B,EAAA,SAAA,IAAA7R,EAAAP,EAAAqV,MAAA9U,IAAAP,EAAAqV,MAAA5C,EAAAzS,EAAAsV,OAAA,KAAA,IAAAhP,OAAA,uDAAA,OAAAtG,GAAAoS,GAAAqD,iBAAAR,cAAA1U,EAAA,EAAA2U,gBAAAzC,EAAA,GAAAiD,SAAA,GAAAzD,GAAApI,EAAAsK,OAAAvT,EAAA,WAAA,GAAAiJ,GAAAtJ,EAAA,GAAA6T,EAAA7T,EAAA,GAAAmU,EAAAnU,EAAA,GAAAoV,SAAAtN,EAAA9H,EAAA,GAAAqV,EAAArV,EAAA,GAAAsV,SAAA5D,GAAA6D,cAAA,SAAAlV,GAAA,MAAA6R,GAAAqD,cAAAlV,IAAAqR,EAAAvL,UAAA2N,SAAA,EAAApC,EAAAvL,UAAAqP,oBAAA,KAAAtP,OAAAuP,eAAA/D,EAAAvL,UAAA,sBAAAsJ,IAAA,WAAA,MAAA/O,MAAA8U,qBAAA9U,KAAAgV,eAAAhV,KAAA8T,UAAA9T,KAAA4T,YAAA5T,KAAA8U,uBAAA9D,EAAAvL,UAAAwP,mBAAA,KAAAzP,OAAAuP,eAAA/D,EAAAvL,UAAA,qBAAAsJ,IAAA,WAAA,MAAA/O,MAAAiV,oBAAAjV,KAAAgV,eAAAhV,KAAA8T,UAAA9T,KAAA4T,YAAA5T,KAAAiV,sBAAAjE,EAAAvL,UAAAyP,wBAAA,SAAAvV,EAAAwR,GAAA,GAAA7R,GAAAK,EAAAgN,OAAAwE,EAAA,OAAA,MAAA7R,GAAA,MAAAA,GAAA0R,EAAAvL,UAAAuP,eAAA,SAAArV,EAAAwR,GAAA,KAAA,IAAA9L,OAAA,6CAAA2L,EAAAmE,gBAAA,EAAAnE,EAAAoE,eAAA,EAAApE,EAAAqE,qBAAA,EAAArE,EAAAsE,kBAAA,EAAAtE,EAAAvL,UAAA8P,YAAA,SAAA5V,EAAAwR,EAAA7R,GAAA,GAAAkS,GAAAzS,EAAAoS,GAAA,KAAA8B,EAAA3T,GAAA0R,EAAAmE,eAAA,QAAAlC,GAAA,IAAAjC,GAAAmE,gBAAA3D,EAAAxR,KAAAwV,kBAAA,MAAA,KAAAxE,GAAAoE,eAAA5D,EAAAxR,KAAAyV,iBAAA,MAAA,SAAA,KAAA,IAAApQ,OAAA,+BAAA,GAAA8N,GAAAnT,KAAA4T,UAAApC,GAAAjB,IAAA,SAAA5Q,GAAA,GAAAwR,GAAA,OAAAxR,EAAAmO,OAAA,KAAA9N,KAAA2T,SAAA+B,GAAA/V,EAAAmO,OAAA,OAAA,OAAAqD,GAAA,MAAAgC,IAAAhC,EAAAvI,EAAAgF,KAAAuF,EAAAhC,KAAArD,OAAAqD,EAAA6C,cAAArU,EAAAqU,cAAAC,gBAAAtU,EAAAsU,gBAAAC,aAAAvU,EAAAuU,aAAAC,eAAAxU,EAAAwU,eAAAlM,KAAA,OAAAtI,EAAAsI,KAAA,KAAAjI,KAAAwT,OAAAkC,GAAA/V,EAAAsI,QAAAjI,MAAAsJ,QAAA3J,EAAAZ,IAAAiS,EAAAvL,UAAAkQ,yBAAA,SAAAhW,GAAA,GAAAwR,GAAAvI,EAAAsK,OAAAvT,EAAA,QAAAL,GAAAwO,OAAAlF,EAAAsK,OAAAvT,EAAA,UAAAuU,aAAA/C,EAAAgD,eAAAvL,EAAAsK,OAAAvT,EAAA,SAAA,GAAA,IAAA,MAAAK,KAAA4T,aAAAtU,EAAAwO,OAAAlF,EAAA2K,SAAAvT,KAAA4T,WAAAtU,EAAAwO,UAAA9N,KAAA2T,SAAA3L,IAAA1I,EAAAwO,QAAA,QAAAxO,GAAAwO,OAAA9N,KAAA2T,SAAAiC,QAAAtW,EAAAwO,OAAA,IAAAkD,MAAAQ,EAAAxR,KAAA6V,aAAAvW,EAAAU,KAAAyV,kBAAA,eAAA,iBAAA7M,EAAAkN,2BAAA3C,EAAAmC,kBAAA,IAAA9D,GAAA,EAAA,CAAA,GAAAzS,GAAAiB,KAAAyV,kBAAAjE,EAAA,IAAA,SAAA7R,EAAA0U,OAAA,IAAA,GAAApB,GAAAlU,EAAAmV,aAAAnV,GAAAA,EAAAmV,eAAAjB,GAAAjC,EAAArD,MAAAyG,KAAAxL,EAAAsK,OAAAnU,EAAA,gBAAA,MAAAsV,OAAAzL,EAAAsK,OAAAnU,EAAA,kBAAA,MAAAgX,WAAAnN,EAAAsK,OAAAnU,EAAA,sBAAA,QAAAA,EAAAiB,KAAAyV,oBAAAjE,OAAA,KAAA,GAAAiC,GAAA1U,EAAAoV,eAAApV,GAAAA,EAAAmV,eAAA/C,GAAApS,EAAAoV,gBAAAV,GAAAzC,EAAArD,MAAAyG,KAAAxL,EAAAsK,OAAAnU,EAAA,gBAAA,MAAAsV,OAAAzL,EAAAsK,OAAAnU,EAAA,kBAAA,MAAAgX,WAAAnN,EAAAsK,OAAAnU,EAAA,sBAAA,QAAAA,EAAAiB,KAAAyV,oBAAAjE,GAAA,MAAAR,IAAAG,EAAA6E,kBAAAhF,EAAAQ,EAAA/L,UAAAD,OAAAyQ,OAAAjF,EAAAvL,WAAA+L,EAAA/L,UAAAgP,SAAAzD,EAAAQ,EAAAqD,cAAA,SAAAlV,GAAA,GAAAwR,GAAA3L,OAAAyQ,OAAAzE,EAAA/L,WAAAnG,EAAA6R,EAAAqC,OAAAC,EAAAC,UAAA/T,EAAA6T,OAAA0C,WAAA,GAAAlF,EAAAG,EAAAwC,SAAAF,EAAAC,UAAA/T,EAAAgU,SAAAuC,WAAA,EAAA/E,GAAAyC,WAAAjU,EAAAwW,YAAAhF,EAAA0C,eAAAlU,EAAAyW,wBAAAjF,EAAAwC,SAAAuC,UAAA/E,EAAAyC,YAAAzC,EAAA4C,KAAApU,EAAA0W,KAAA,KAAA,GAAApD,GAAAtT,EAAAmU,UAAAoC,UAAAhK,QAAAiH,EAAAhC,EAAA2D,uBAAA1N,EAAA+J,EAAA8D,sBAAAnC,EAAA,EAAAwD,EAAArD,EAAAjQ,OAAAsT,EAAAxD,EAAAA,IAAA,CAAA,GAAAyD,GAAAtD,EAAAH,GAAAD,EAAA,GAAA9T,EAAA8T,GAAAmB,cAAAuC,EAAAvC,cAAAnB,EAAAoB,gBAAAsC,EAAAtC,gBAAAsC,EAAAzI,SAAA+E,EAAA/E,OAAAkD,EAAA4E,QAAAW,EAAAzI,QAAA+E,EAAAqB,aAAAqC,EAAArC,aAAArB,EAAAsB,eAAAoC,EAAApC,eAAAoC,EAAAtO,OAAA4K,EAAA5K,KAAA3I,EAAAsW,QAAAW,EAAAtO,OAAAb,EAAAuG,KAAAkF,IAAAM,EAAAxF,KAAAkF,GAAA,MAAA8B,GAAAxD,EAAA8D,mBAAArM,EAAAkN,4BAAA3E,GAAAK,EAAA/L,UAAA2N,SAAA,EAAA5N,OAAAuP,eAAAvD,EAAA/L,UAAA,WAAAsJ,IAAA,WAAA,MAAA/O,MAAA2T,SAAAuC,UAAA3F,IAAA,SAAA5Q,GAAA,MAAA,OAAAK,KAAA4T,WAAAhL,EAAAgF,KAAA5N,KAAA4T,WAAAjU,GAAAA,GAAAK,SAAAwR,EAAA/L,UAAAuP,eAAA,SAAArV,EAAAwR,GAAA,IAAA,GAAA7R,GAAA0R,EAAAQ,EAAAyB,EAAAE,EAAAM,EAAA,EAAAX,EAAA,EAAAwD,EAAA,EAAAC,EAAA,EAAA1D,EAAA,EAAA2D,EAAA,EAAAC,EAAA9W,EAAAqD,OAAA0T,EAAA,EAAAC,KAAAC,KAAAC,KAAAC,KAAAL,EAAAC,GAAA,GAAA,MAAA/W,EAAAgN,OAAA+J,GAAAjD,IAAAiD,IAAA5D,EAAA,MAAA,IAAA,MAAAnT,EAAAgN,OAAA+J,GAAAA,QAAA,CAAA,IAAApX,EAAA,GAAAP,GAAAO,EAAA0U,cAAAP,EAAAR,EAAAyD,EAAAD,EAAAxD,IAAAjT,KAAAkV,wBAAAvV,EAAAsT,GAAAA,KAAA,GAAAjC,EAAArR,EAAAuM,MAAAwK,EAAAzD,GAAAzB,EAAAmF,EAAA3F,GAAA0F,GAAA1F,EAAAhO,WAAA,CAAA,IAAAwO,KAAAyB,EAAAyD,GAAAtP,EAAA2P,OAAApX,EAAA+W,EAAAE,GAAAzD,EAAAyD,EAAAlV,MAAAgV,EAAAE,EAAAI,KAAAxF,EAAA7D,KAAAwF,EAAA,IAAA,IAAA3B,EAAAxO,OAAA,KAAA,IAAAqC,OAAA,yCAAA,IAAA,IAAAmM,EAAAxO,OAAA,KAAA,IAAAqC,OAAA,yCAAAsR,GAAA3F,GAAAQ,EAAAlS,EAAA2U,gBAAAnB,EAAAtB,EAAA,GAAAsB,EAAAxT,EAAA2U,gBAAAzC,EAAAxO,OAAA,IAAA1D,EAAAwO,OAAA+E,EAAArB,EAAA,GAAAqB,GAAArB,EAAA,GAAAlS,EAAA4U,aAAAoC,EAAA9E,EAAA,GAAA8E,EAAAhX,EAAA4U,aAAA5U,EAAA4U,cAAA,EAAA5U,EAAA6U,eAAAoC,EAAA/E,EAAA,GAAA+E,EAAAjX,EAAA6U,eAAA3C,EAAAxO,OAAA,IAAA1D,EAAA2I,KAAAuO,EAAAhF,EAAA,GAAAgF,GAAAhF,EAAA,KAAAsF,EAAAnJ,KAAArO,GAAA,gBAAAA,GAAA4U,cAAA2C,EAAAlJ,KAAArO,GAAAqV,EAAAmC,EAAAlO,EAAAqO,qCAAAjX,KAAA8U,oBAAAgC,EAAAnC,EAAAkC,EAAAjO,EAAAkN,4BAAA9V,KAAAiV,mBAAA4B,GAAArF,EAAA/L,UAAAoQ,aAAA,SAAAlW,EAAAwR,EAAA7R,EAAA0R,EAAAQ,EAAAzS,GAAA,GAAAY,EAAAL,IAAA,EAAA,KAAA,IAAA6B,WAAA,gDAAAxB,EAAAL,GAAA,IAAAK,EAAAqR,GAAA,EAAA,KAAA,IAAA7P,WAAA,kDAAAxB,EAAAqR,GAAA,OAAAmC,GAAA+D,OAAAvX,EAAAwR,EAAAK,EAAAzS,IAAAyS,EAAA/L,UAAA0R,mBAAA,WAAA,IAAA,GAAAxX,GAAA,EAAAA,EAAAK,KAAAwV,mBAAAxS,SAAArD,EAAA,CAAA,GAAAwR,GAAAnR,KAAAwV,mBAAA7V,EAAA,IAAAA,EAAA,EAAAK,KAAAwV,mBAAAxS,OAAA,CAAA,GAAA1D,GAAAU,KAAAwV,mBAAA7V,EAAA,EAAA,IAAAwR,EAAA6C,gBAAA1U,EAAA0U,cAAA,CAAA7C,EAAAiG,oBAAA9X,EAAA2U,gBAAA,CAAA,WAAA9C,EAAAiG,oBAAA,EAAA,IAAA5F,EAAA/L,UAAA4R,oBAAA,SAAA1X,GAAA,GAAAwR,IAAA6C,cAAApL,EAAAsK,OAAAvT,EAAA,QAAAsU,gBAAArL,EAAAsK,OAAAvT,EAAA,WAAAL,EAAAU,KAAA6V,aAAA1E,EAAAnR,KAAAwV,mBAAA,gBAAA,kBAAA5M,EAAAqO,oCAAArO,EAAAsK,OAAAvT,EAAA,OAAAqR,EAAAqE,sBAAA,IAAA/V,GAAA,EAAA,CAAA,GAAAkS,GAAAxR,KAAAwV,mBAAAlW,EAAA,IAAAkS,EAAAwC,gBAAA7C,EAAA6C,cAAA,CAAA,GAAAjV,GAAA6J,EAAAsK,OAAA1B,EAAA,SAAA,KAAA,QAAAzS,IAAAA,EAAAiB,KAAA2T,SAAA+B,GAAA3W,GAAA,MAAAiB,KAAA4T,aAAA7U,EAAA6J,EAAAgF,KAAA5N,KAAA4T,WAAA7U,IAAA,IAAAkU,GAAArK,EAAAsK,OAAA1B,EAAA,OAAA,KAAA,OAAA,QAAAyB,IAAAA,EAAAjT,KAAAwT,OAAAkC,GAAAzC,KAAAnF,OAAA/O,EAAAqV,KAAAxL,EAAAsK,OAAA1B,EAAA,eAAA,MAAA6C,OAAAzL,EAAAsK,OAAA1B,EAAA,iBAAA,MAAAvJ,KAAAgL,IAAA,OAAAnF,OAAA,KAAAsG,KAAA,KAAAC,OAAA,KAAApM,KAAA,OAAAuJ,EAAA/L,UAAA6R,wBAAA,WAAA,MAAAtX,MAAA6T,eAAA7T,KAAA6T,eAAA7Q,QAAAhD,KAAA2T,SAAA1I,SAAAjL,KAAA6T,eAAA0D,KAAA,SAAA5X,GAAA,MAAA,OAAAA,KAAA,GAAA6R,EAAA/L,UAAA+R,iBAAA,SAAA7X,EAAAwR,GAAA,IAAAnR,KAAA6T,eAAA,MAAA,KAAA,IAAA,MAAA7T,KAAA4T,aAAAjU,EAAAiJ,EAAA2K,SAAAvT,KAAA4T,WAAAjU,IAAAK,KAAA2T,SAAA3L,IAAArI,GAAA,MAAAK,MAAA6T,eAAA7T,KAAA2T,SAAAiC,QAAAjW,GAAA,IAAAL,EAAA,IAAA,MAAAU,KAAA4T,aAAAtU,EAAAsJ,EAAA6O,SAAAzX,KAAA4T,aAAA,CAAA,GAAA5C,GAAArR,EAAAoT,QAAA,aAAA,GAAA,IAAA,QAAAzT,EAAAoY,QAAA1X,KAAA2T,SAAA3L,IAAAgJ,GAAA,MAAAhR,MAAA6T,eAAA7T,KAAA2T,SAAAiC,QAAA5E,GAAA,MAAA1R,EAAAqY,MAAA,KAAArY,EAAAqY,OAAA3X,KAAA2T,SAAA3L,IAAA,IAAArI,GAAA,MAAAK,MAAA6T,eAAA7T,KAAA2T,SAAAiC,QAAA,IAAAjW,IAAA,GAAAwR,EAAA,MAAA,KAAA,MAAA,IAAA9L,OAAA,IAAA1F,EAAA,+BAAA6R,EAAA/L,UAAAmS,qBAAA,SAAAjY,GAAA,GAAAwR,GAAAvI,EAAAsK,OAAAvT,EAAA,SAAA,IAAA,MAAAK,KAAA4T,aAAAzC,EAAAvI,EAAA2K,SAAAvT,KAAA4T,WAAAzC,KAAAnR,KAAA2T,SAAA3L,IAAAmJ,GAAA,OAAAiD,KAAA,KAAAC,OAAA,KAAA0B,WAAA,KAAA5E,GAAAnR,KAAA2T,SAAAiC,QAAAzE,EAAA,IAAA7R,IAAAwO,OAAAqD,EAAA+C,aAAAtL,EAAAsK,OAAAvT,EAAA,QAAAwU,eAAAvL,EAAAsK,OAAAvT,EAAA,WAAA6R,EAAAxR,KAAA6V,aAAAvW,EAAAU,KAAAyV,kBAAA,eAAA,iBAAA7M,EAAAkN,2BAAAlN,EAAAsK,OAAAvT,EAAA,OAAAqR,EAAAqE,sBAAA,IAAA7D,GAAA,EAAA,CAAA,GAAAzS,GAAAiB,KAAAyV,kBAAAjE,EAAA,IAAAzS,EAAA+O,SAAAxO,EAAAwO,OAAA,OAAAsG,KAAAxL,EAAAsK,OAAAnU,EAAA,gBAAA,MAAAsV,OAAAzL,EAAAsK,OAAAnU,EAAA,kBAAA,MAAAgX,WAAAnN,EAAAsK,OAAAnU,EAAA,sBAAA,OAAA,OAAAqV,KAAA,KAAAC,OAAA,KAAA0B,WAAA,OAAA5E,EAAA0G,uBAAArG,EAAAyB,EAAAxN,UAAAD,OAAAyQ,OAAAjF,EAAAvL,WAAAwN,EAAAxN,UAAAnF,YAAA0Q,EAAAiC,EAAAxN,UAAA2N,SAAA,EAAA5N,OAAAuP,eAAA9B,EAAAxN,UAAA,WAAAsJ,IAAA,WAAA,IAAA,GAAApP,MAAAwR,EAAA,EAAAA,EAAAnR,KAAAsU,UAAAtR,OAAAmO,IAAA,IAAA,GAAA7R,GAAA,EAAAA,EAAAU,KAAAsU,UAAAnD,GAAAsD,SAAAqD,QAAA9U,OAAA1D,IAAAK,EAAAgO,KAAA3N,KAAAsU,UAAAnD,GAAAsD,SAAAqD,QAAAxY,GAAA,OAAAK,MAAAsT,EAAAxN,UAAA4R,oBAAA,SAAA1X,GAAA,GAAAwR,IAAA6C,cAAApL,EAAAsK,OAAAvT,EAAA,QAAAsU,gBAAArL,EAAAsK,OAAAvT,EAAA,WAAAL,EAAA6T,EAAA+D,OAAA/F,EAAAnR,KAAAsU,UAAA,SAAA3U,EAAAwR,GAAA,GAAA7R,GAAAK,EAAAqU,cAAA7C,EAAAqD,gBAAAR,aAAA,OAAA1U,GAAAA,EAAAK,EAAAsU,gBAAA9C,EAAAqD,gBAAAP,kBAAAjD,EAAAhR,KAAAsU,UAAAhV,EAAA,OAAA0R,GAAAA,EAAAyD,SAAA4C,qBAAAjD,KAAAjD,EAAA6C,eAAAhD,EAAAwD,gBAAAR,cAAA,GAAAK,OAAAlD,EAAA8C,iBAAAjD,EAAAwD,gBAAAR,gBAAA7C,EAAA6C,cAAAhD,EAAAwD,gBAAAP,gBAAA,EAAA,GAAA8D,KAAApY,EAAAoY,QAAAjK,OAAA,KAAAsG,KAAA,KAAAC,OAAA,KAAApM,KAAA,OAAAgL,EAAAxN,UAAA6R,wBAAA,WAAA,MAAAtX,MAAAsU,UAAA0D,MAAA,SAAArY,GAAA,MAAAA,GAAA8U,SAAA6C,6BAAArE,EAAAxN,UAAA+R,iBAAA,SAAA7X,EAAAwR,GAAA,IAAA,GAAA7R,GAAA,EAAAA,EAAAU,KAAAsU,UAAAtR,OAAA1D,IAAA,CAAA,GAAA0R,GAAAhR,KAAAsU,UAAAhV,GAAAkS,EAAAR,EAAAyD,SAAA+C,iBAAA7X,GAAA,EAAA,IAAA6R,EAAA,MAAAA,GAAA,GAAAL,EAAA,MAAA,KAAA,MAAA,IAAA9L,OAAA,IAAA1F,EAAA,+BAAAsT,EAAAxN,UAAAmS,qBAAA,SAAAjY,GAAA,IAAA,GAAAwR,GAAA,EAAAA,EAAAnR,KAAAsU,UAAAtR,OAAAmO,IAAA,CAAA,GAAA7R,GAAAU,KAAAsU,UAAAnD,EAAA,IAAA,KAAA7R,EAAAmV,SAAAqD,QAAAlC,QAAAhN,EAAAsK,OAAAvT,EAAA,WAAA,CAAA,GAAAqR,GAAA1R,EAAAmV,SAAAmD,qBAAAjY,EAAA,IAAAqR,EAAA,CAAA,GAAAQ,IAAA4C,KAAApD,EAAAoD,MAAA9U,EAAAkV,gBAAAR,cAAA,GAAAK,OAAArD,EAAAqD,QAAA/U,EAAAkV,gBAAAR,gBAAAhD,EAAAoD,KAAA9U,EAAAkV,gBAAAP,gBAAA,EAAA,GAAA,OAAAzC,KAAA,OAAA4C,KAAA,KAAAC,OAAA,OAAApB,EAAAxN,UAAAuP,eAAA,SAAArV,EAAAwR,GAAAnR,KAAA8U,uBAAA9U,KAAAiV,qBAAA,KAAA,GAAA3V,GAAA,EAAAA,EAAAU,KAAAsU,UAAAtR,OAAA1D,IAAA,IAAA,GAAA0R,GAAAhR,KAAAsU,UAAAhV,GAAAkS,EAAAR,EAAAyD,SAAAe,mBAAAzW,EAAA,EAAAA,EAAAyS,EAAAxO,OAAAjE,IAAA,CAAA,GAAAkU,GAAAzB,EAAAzS,GAAAoU,EAAAnC,EAAAyD,SAAAd,SAAA+B,GAAAzC,EAAAnF,OAAA,QAAAkD,EAAAyD,SAAAb,aAAAT,EAAAvK,EAAAgF,KAAAoD,EAAAyD,SAAAb,WAAAT,IAAAnT,KAAA2T,SAAAsE,IAAA9E,GAAAA,EAAAnT,KAAA2T,SAAAiC,QAAAzC,EAAA,IAAAM,GAAAzC,EAAAyD,SAAAjB,OAAAkC,GAAAzC,EAAAhL,KAAAjI,MAAAwT,OAAAyE,IAAAxE,GAAAA,EAAAzT,KAAAwT,OAAAoC,QAAAnC,EAAA,IAAArM,IAAA0G,OAAAqF,EAAAa,cAAAf,EAAAe,eAAAhD,EAAAwD,gBAAAR,cAAA,GAAAC,gBAAAhB,EAAAgB,iBAAAjD,EAAAwD,gBAAAR,gBAAAf,EAAAe,cAAAhD,EAAAwD,gBAAAP,gBAAA,EAAA,GAAAC,aAAAjB,EAAAiB,aAAAC,eAAAlB,EAAAkB,eAAAlM,KAAAwL,EAAAzT,MAAA8U,oBAAAnH,KAAAvG,GAAA,gBAAAA,GAAA8M,cAAAlU,KAAAiV,mBAAAtH,KAAAvG,GAAAuN,EAAA3U,KAAA8U,oBAAAlM,EAAAqO,qCAAAtC,EAAA3U,KAAAiV,mBAAArM,EAAAkN,6BAAA3E,EAAA+G,yBAAAjF,GAAA,SAAAtT,EAAAwR,GAAA,QAAA7R,GAAAK,EAAAwR,EAAA7R,GAAA,GAAA6R,IAAAxR,GAAA,MAAAA,GAAAwR,EAAA,IAAA,IAAAzQ,UAAAsC,OAAA,MAAA1D,EAAA,MAAA,IAAA+F,OAAA,IAAA8L,EAAA,6BAAA,QAAAH,GAAArR,GAAA,GAAAwR,GAAAxR,EAAAwY,MAAA5B,EAAA,OAAApF,IAAAuG,OAAAvG,EAAA,GAAAiH,KAAAjH,EAAA,GAAAkH,KAAAlH,EAAA,GAAAmH,KAAAnH,EAAA,GAAAwG,KAAAxG,EAAA,IAAA,KAAA,QAAAK,GAAA7R,GAAA,GAAAwR,GAAA,EAAA,OAAAxR,GAAA+X,SAAAvG,GAAAxR,EAAA+X,OAAA,KAAAvG,GAAA,KAAAxR,EAAAyY,OAAAjH,GAAAxR,EAAAyY,KAAA,KAAAzY,EAAA0Y,OAAAlH,GAAAxR,EAAA0Y,MAAA1Y,EAAA2Y,OAAAnH,GAAA,IAAAxR,EAAA2Y,MAAA3Y,EAAAgY,OAAAxG,GAAAxR,EAAAgY,MAAAxG,EAAA,QAAApS,GAAAY,GAAA,GAAAL,GAAAK,EAAAZ,EAAAiS,EAAArR,EAAA,IAAAZ,EAAA,CAAA,IAAAA,EAAA4Y,KAAA,MAAAhY,EAAAL,GAAAP,EAAA4Y,KAAA,IAAA,GAAA1E,GAAArK,EAAAuI,EAAAmC,WAAAhU,GAAA6T,EAAA7T,EAAAkN,MAAA,OAAAiH,EAAA,EAAArM,EAAA+L,EAAAnQ,OAAA,EAAAoE,GAAA,EAAAA,IAAA6L,EAAAE,EAAA/L,GAAA,MAAA6L,EAAAE,EAAAoF,OAAAnR,EAAA,GAAA,OAAA6L,EAAAQ,IAAAA,EAAA,IAAA,KAAAR,GAAAE,EAAAoF,OAAAnR,EAAA,EAAAqM,GAAAA,EAAA,IAAAN,EAAAoF,OAAAnR,EAAA,GAAAqM,KAAA,OAAAnU,GAAA6T,EAAAvF,KAAA,KAAA,KAAAtO,IAAAA,EAAAsJ,EAAA,IAAA,KAAA7J,GAAAA,EAAA4Y,KAAArY,EAAAkS,EAAAzS,IAAAO,EAAA,QAAA2T,GAAAtT,EAAAwR,GAAA,KAAAxR,IAAAA,EAAA,KAAA,KAAAwR,IAAAA,EAAA,IAAA,IAAA7R,GAAA0R,EAAAG,GAAA8B,EAAAjC,EAAArR,EAAA,IAAAsT,IAAAtT,EAAAsT,EAAA0E,MAAA,KAAArY,IAAAA,EAAAoY,OAAA,MAAAzE,KAAA3T,EAAAoY,OAAAzE,EAAAyE,QAAAlG,EAAAlS,EAAA,IAAAA,GAAA6R,EAAAgH,MAAAtF,GAAA,MAAA1B,EAAA,IAAA8B,IAAAA,EAAAoF,OAAApF,EAAA0E,KAAA,MAAA1E,GAAAoF,KAAAlH,EAAAK,EAAAyB,EAAA,IAAArK,GAAA,MAAAuI,EAAAxE,OAAA,GAAAwE,EAAApS,EAAAY,EAAAoT,QAAA,OAAA,IAAA,IAAA5B,EAAA,OAAA8B,IAAAA,EAAA0E,KAAA/O,EAAA4I,EAAAyB,IAAArK,EAAA,QAAAA,GAAAjJ,EAAAwR,GAAA,KAAAxR,IAAAA,EAAA,KAAAA,EAAAA,EAAAoT,QAAA,MAAA,GAAA,KAAA,GAAAzT,GAAA,EAAA,IAAA6R,EAAAyE,QAAAjW,EAAA,MAAA,CAAA,GAAAqR,GAAArR,EAAA6Y,YAAA,IAAA,IAAA,EAAAxH,EAAA,MAAAG,EAAA,IAAAxR,EAAAA,EAAAuM,MAAA,EAAA8E,GAAArR,EAAAwY,MAAA,qBAAA,MAAAhH,KAAA7R,EAAA,MAAAoF,OAAApF,EAAA,GAAAsO,KAAA,OAAAuD,EAAAsH,OAAA9Y,EAAAqD,OAAA,GAAA,QAAAmQ,GAAAxT,GAAA,MAAA,IAAAA,EAAA,QAAA8T,GAAA9T,GAAA,MAAAA,GAAA8Y,OAAA,GAAA,QAAArR,GAAAzH,EAAAwR,EAAA7R,GAAA,GAAA0R,GAAArR,EAAAmO,OAAAqD,EAAArD,MAAA,OAAA,KAAAkD,EAAAA,GAAAA,EAAArR,EAAAuU,aAAA/C,EAAA+C,aAAA,IAAAlD,EAAAA,GAAAA,EAAArR,EAAAwU,eAAAhD,EAAAgD,eAAA,IAAAnD,GAAA1R,EAAA0R,GAAAA,EAAArR,EAAAsU,gBAAA9C,EAAA8C,gBAAA,IAAAjD,EAAAA,GAAAA,EAAArR,EAAAqU,cAAA7C,EAAA6C,cAAA,IAAAhD,EAAAA,EAAArR,EAAAsI,KAAAkJ,EAAAlJ,SAAA,QAAA0M,GAAAhV,EAAAwR,EAAA7R,GAAA,GAAA0R,GAAArR,EAAAqU,cAAA7C,EAAA6C,aAAA,OAAA,KAAAhD,EAAAA,GAAAA,EAAArR,EAAAsU,gBAAA9C,EAAA8C,gBAAA,IAAAjD,GAAA1R,EAAA0R,GAAAA,EAAArR,EAAAmO,OAAAqD,EAAArD,OAAA,IAAAkD,EAAAA,GAAAA,EAAArR,EAAAuU,aAAA/C,EAAA+C,aAAA,IAAAlD,EAAAA,GAAAA,EAAArR,EAAAwU,eAAAhD,EAAAgD,eAAA,IAAAnD,EAAAA,EAAArR,EAAAsI,KAAAkJ,EAAAlJ,SAAA,QAAA6K,GAAAnT,EAAAwR,GAAA,MAAAxR,KAAAwR,EAAA,EAAAxR,EAAAwR,EAAA,EAAA,GAAA,QAAAmF,GAAA3W,EAAAwR,GAAA,GAAA7R,GAAAK,EAAAqU,cAAA7C,EAAA6C,aAAA,OAAA,KAAA1U,EAAAA,GAAAA,EAAAK,EAAAsU,gBAAA9C,EAAA8C,gBAAA,IAAA3U,EAAAA,GAAAA,EAAAwT,EAAAnT,EAAAmO,OAAAqD,EAAArD,QAAA,IAAAxO,EAAAA,GAAAA,EAAAK,EAAAuU,aAAA/C,EAAA+C,aAAA,IAAA5U,EAAAA,GAAAA,EAAAK,EAAAwU,eAAAhD,EAAAgD,eAAA,IAAA7U,EAAAA,EAAAwT,EAAAnT,EAAAsI,KAAAkJ,EAAAlJ,UAAAkJ,EAAA+B,OAAA5T,CAAA,IAAAiX,GAAA,iEAAA1D,EAAA,eAAA1B,GAAAsG,SAAAzG,EAAAG,EAAAuH,YAAAlH,EAAAL,EAAAkC,UAAAtU,EAAAoS,EAAAvD,KAAAqF,EAAA9B,EAAAmC,WAAA,SAAA3T,GAAA,MAAA,MAAAA,EAAAgN,OAAA,MAAAhN,EAAAwY,MAAA5B,IAAApF,EAAAoC,SAAA3K,EAAAuI,EAAAwH,YAAAxF,EAAAhC,EAAAyH,cAAAnF,EAAAtC,EAAA2E,2BAAA1O,EAAA+J,EAAA8F,oCAAAtC,EAAAxD,EAAA0H,oCAAAvC,GAAA,SAAA3W,EAAAwR,GAAA,QAAA7R,GAAAK,EAAAqR,EAAAQ,EAAAzS,EAAAkU,EAAArK,GAAA,GAAAuK,GAAAhK,KAAAmB,OAAA0G,EAAArR,GAAA,GAAAA,EAAA8T,EAAAR,EAAAzB,EAAAzS,EAAAoU,IAAA,EAAA,OAAA,KAAAM,EAAAN,EAAAM,EAAA,EAAAzC,EAAAmC,EAAA,EAAA7T,EAAA6T,EAAAnC,EAAAQ,EAAAzS,EAAAkU,EAAArK,GAAAA,GAAAuI,EAAAmE,kBAAAtE,EAAAjS,EAAAiE,OAAAgO,EAAA,GAAAmC,EAAAA,EAAAxT,EAAA,EAAAL,EAAAK,EAAAwT,EAAA3B,EAAAzS,EAAAkU,EAAArK,GAAAA,GAAAuI,EAAAmE,kBAAAnC,EAAA,EAAAxT,EAAA,GAAAA,EAAAwR,EAAAkE,qBAAA,EAAAlE,EAAAmE,kBAAA,EAAAnE,EAAA+F,OAAA,SAAAvX,EAAAqR,EAAAQ,EAAAzS,GAAA,GAAA,IAAAiS,EAAAhO,OAAA,MAAA,EAAA,IAAAiQ,GAAA3T,EAAA,GAAA0R,EAAAhO,OAAArD,EAAAqR,EAAAQ,EAAAzS,GAAAoS,EAAAkE,qBAAA,IAAA,EAAApC,EAAA,MAAA,EAAA,MAAAA,EAAA,GAAA,GAAA,IAAAzB,EAAAR,EAAAiC,GAAAjC,EAAAiC,EAAA,IAAA,MAAAA,CAAA,OAAAA,KAAA,SAAAtT,EAAAwR,EAAA7R,GAAA,QAAA0R,KAAAhR,KAAA8Y,UAAA9Y,KAAA+Y,QAAA,GAAAvH,GAAAlS,EAAA,EAAA0R,GAAA0C,UAAA,SAAA/T,EAAAwR,GAAA,IAAA,GAAA7R,GAAA,GAAA0R,GAAAQ,EAAA,EAAAzS,EAAAY,EAAAqD,OAAAjE,EAAAyS,EAAAA,IAAAlS,EAAA2Y,IAAAtY,EAAA6R,GAAAL,EAAA,OAAA7R,IAAA0R,EAAAvL,UAAAwF,KAAA,WAAA,MAAAzF,QAAAwT,oBAAAhZ,KAAA+Y,MAAA/V,QAAAgO,EAAAvL,UAAAwS,IAAA,SAAAtY,EAAAwR,GAAA,GAAA7R,GAAAkS,EAAAmH,YAAAhZ,GAAAqR,EAAAhR,KAAA+Y,KAAApO,eAAArL,GAAAP,EAAAiB,KAAA8Y,OAAA9V,SAAAgO,GAAAG,IAAAnR,KAAA8Y,OAAAnL,KAAAhO,GAAAqR,IAAAhR,KAAA+Y,KAAAzZ,GAAAP,IAAAiS,EAAAvL,UAAAuC,IAAA,SAAArI,GAAA,GAAAwR,GAAAK,EAAAmH,YAAAhZ,EAAA,OAAAK,MAAA+Y,KAAApO,eAAAwG,IAAAH,EAAAvL,UAAAmQ,QAAA,SAAAjW,GAAA,GAAAwR,GAAAK,EAAAmH,YAAAhZ;AAAA,GAAAK,KAAA+Y,KAAApO,eAAAwG,GAAA,MAAAnR,MAAA+Y,KAAA5H,EAAA,MAAA,IAAA9L,OAAA,IAAA1F,EAAA,yBAAAqR,EAAAvL,UAAAiQ,GAAA,SAAA/V,GAAA,GAAAA,GAAA,GAAAA,EAAAK,KAAA8Y,OAAA9V,OAAA,MAAAhD,MAAA8Y,OAAAnZ,EAAA,MAAA,IAAA0F,OAAA,yBAAA1F,IAAAqR,EAAAvL,UAAAyQ,QAAA,WAAA,MAAAlW,MAAA8Y,OAAA5M,SAAAiF,EAAAuD,SAAA1D,GAAA,SAAArR,EAAAwR,EAAA7R,GAAA,QAAA0R,GAAArR,GAAA,MAAA,GAAAA,IAAAA,GAAA,GAAA,GAAAA,GAAA,GAAA,EAAA,QAAA6R,GAAA7R,GAAA,GAAAwR,GAAA,KAAA,EAAAxR,GAAAL,EAAAK,GAAA,CAAA,OAAAwR,IAAA7R,EAAAA,EAAA,GAAAP,GAAAO,EAAA,GAAA2T,EAAA,EAAArK,EAAA,GAAAqK,EAAAE,EAAAvK,EAAA,EAAA6K,EAAA7K,CAAAuI,GAAA8H,OAAA,SAAAtZ,GAAA,GAAAwR,GAAA7R,EAAA,GAAAkS,EAAAR,EAAArR,EAAA,GAAAwR,GAAAK,EAAA2B,EAAA3B,KAAAyB,EAAAzB,EAAA,IAAAL,GAAAsC,GAAAnU,GAAAP,EAAAka,OAAA9H,SAAAK,EAAA,EAAA,OAAAlS,IAAA6R,EAAA4F,OAAA,SAAApX,EAAAwR,EAAA7R,GAAA,GAAA0R,GAAApI,EAAAxB,EAAAzH,EAAAqD,OAAA2R,EAAA,EAAA7B,EAAA,CAAA,GAAA,CAAA,GAAA3B,GAAA/J,EAAA,KAAA,IAAA/B,OAAA,6CAAA,IAAAuD,EAAA7J,EAAAgY,OAAApX,EAAA+M,WAAAyE,MAAA,KAAAvI,EAAA,KAAA,IAAAvD,OAAA,yBAAA1F,EAAAgN,OAAAwE,EAAA,GAAAH,MAAApI,EAAA6K,GAAA7K,GAAAuK,EAAAwB,GAAA/L,GAAAkK,EAAAA,GAAAG,QAAAjC,EAAA1R,GAAAoC,MAAA8P,EAAAmD,GAAArV,EAAA0X,KAAA7F,IAAA,SAAAxR,EAAAwR,GAAA,GAAA7R,GAAA,mEAAAkN,MAAA,GAAA2E,GAAA8H,OAAA,SAAAtZ,GAAA,GAAAA,GAAA,GAAAA,EAAAL,EAAA0D,OAAA,MAAA1D,GAAAK,EAAA,MAAA,IAAAwB,WAAA,6BAAAxB,IAAAwR,EAAA4F,OAAA,SAAApX,GAAA,GAAAwR,GAAA,GAAA7R,EAAA,GAAA0R,EAAA,GAAAQ,EAAA,IAAAzS,EAAA,GAAAkU,EAAA,GAAArK,EAAA,GAAAuK,EAAA,GAAAM,EAAA,GAAArM,EAAA,EAAA,OAAAzH,IAAAwR,GAAA7R,GAAAK,EAAAA,EAAAwR,EAAAxR,GAAAqR,GAAAQ,GAAA7R,EAAAA,EAAAqR,EAAAyC,EAAA9T,GAAAZ,GAAAkU,GAAAtT,EAAAA,EAAAZ,EAAAqI,EAAAzH,GAAAiJ,EAAA,GAAAjJ,GAAAwT,EAAA,GAAA,KAAA,SAAAxT,EAAAwR,GAAA,QAAA7R,GAAAK,EAAAwR,EAAA7R,GAAA,GAAA0R,GAAArR,EAAAwR,EAAAxR,GAAAwR,GAAAxR,EAAAL,GAAAK,EAAAL,GAAA0R,EAAA,QAAAA,GAAArR,EAAAwR,GAAA,MAAAhI,MAAA+P,MAAAvZ,EAAAwJ,KAAAgQ,UAAAhI,EAAAxR,IAAA,QAAA6R,GAAA7R,EAAAwR,EAAApS,EAAAkU,GAAA,GAAAA,EAAAlU,EAAA,CAAA,GAAA6J,GAAAoI,EAAAjS,EAAAkU,GAAAE,EAAApU,EAAA,CAAAO,GAAAK,EAAAiJ,EAAAqK,EAAA,KAAA,GAAAQ,GAAA9T,EAAAsT,GAAA7L,EAAArI,EAAAkU,EAAA7L,EAAAA,IAAA+J,EAAAxR,EAAAyH,GAAAqM,IAAA,IAAAN,GAAA,EAAA7T,EAAAK,EAAAwT,EAAA/L,GAAA9H,GAAAK,EAAAwT,EAAA,EAAA/L,EAAA,IAAAuN,GAAAxB,EAAA,CAAA3B,GAAA7R,EAAAwR,EAAApS,EAAA4V,EAAA,GAAAnD,EAAA7R,EAAAwR,EAAAwD,EAAA,EAAA1B,IAAA9B,EAAAyD,UAAA,SAAAjV,EAAAwR,GAAAK,EAAA7R,EAAAwR,EAAA,EAAAxR,EAAAqD,OAAA,QAAA,SAAArD,EAAAwR,GAAA,YAAA,mBAAAxJ,SAAAA,OAAAyH,IAAAzH,OAAA,kBAAA,aAAA,cAAAwJ,GAAA,gBAAApJ,SAAAH,OAAAG,QAAAoJ,EAAA5R,QAAA,sCAAAA,QAAA,eAAAI,EAAAyZ,cAAAjI,EAAAxR,EAAA+S,WAAA/S,EAAA0Z,UAAA1Z,EAAAyR,aAAApR,KAAA,SAAAL,EAAAwR,GAAA,YAAA,SAAA7R,GAAAK,GAAA,MAAA,IAAA4F,SAAA,SAAA4L,EAAA7R,GAAA,GAAA0R,GAAA,GAAAsI,eAAAtI,GAAAuI,KAAA,MAAA5Z,GAAAqR,EAAAwI,QAAAla,EAAA0R,EAAAyI,mBAAA,WAAA,IAAAzI,EAAA0I,aAAA1I,EAAA2I,QAAA,KAAA3I,EAAA2I,OAAA,IAAAxI,EAAAH,EAAA4I,cAAAta,EAAA,GAAA+F,OAAA,gBAAA2L,EAAA2I,OAAA,eAAAha,MAAAqR,EAAA6I,SAAA,QAAA7I,GAAArR,GAAA,GAAA,mBAAAqG,SAAAA,OAAA8T,KAAA,MAAA9T,QAAA8T,KAAAna,EAAA,MAAA,IAAA0F,OAAA,kEAAA,QAAAmM,GAAA7R,GAAA,GAAA,mBAAA8P,OAAAA,KAAA1G,MAAA,MAAA0G,MAAA1G,MAAApJ,EAAA,MAAA,IAAA0F,OAAA,iEAAA,QAAAtG,GAAAY,EAAAwR,GAAA,IAAA,GAAA7R,GAAA0R,EAAA,oCAAAQ,EAAA,2DAAAzS,EAAA,wEAAAkU,EAAAtT,EAAA6M,MAAA,MAAA5D,EAAA,GAAAuK,EAAAhK,KAAA4Q,IAAA5I,EAAA,IAAAsC,EAAA,EAAAN,EAAAM,IAAAA,EAAA,CAAA,GAAArM,GAAA6L,EAAA9B,EAAAsC,EAAA,GAAAkB,EAAAvN,EAAAwO,QAAA,KAAA,IAAAjB,GAAA,IAAAvN,EAAAA,EAAAqR,OAAA,EAAA9D,IAAAvN,EAAA,CAAA,GAAAwB,EAAAxB,EAAAwB,EAAAtJ,EAAAkS,EAAAwI,KAAApR,GAAAtJ,GAAAA,EAAA,GAAA,MAAAA,GAAA,EAAA,IAAAA,EAAA0R,EAAAgJ,KAAApR,GAAAtJ,GAAAA,EAAA,GAAA,MAAAA,GAAA,EAAA,IAAAA,EAAAP,EAAAib,KAAApR,GAAAtJ,GAAAA,EAAA,GAAA,MAAAA,GAAA,KAAA,QAAA2T,KAAA,GAAA,kBAAAzN,QAAAuP,gBAAA,kBAAAvP,QAAAyQ,OAAA,KAAA,IAAA5Q,OAAA,mDAAA,QAAAuD,GAAAjJ,GAAA,GAAA,gBAAAA,GAAA,KAAA,IAAAwB,WAAA,oCAAA,IAAA,gBAAAxB,GAAAyS,SAAA,KAAA,IAAAjR,WAAA,kCAAA,IAAA,gBAAAxB,GAAA2S,YAAA3S,EAAA2S,WAAA,IAAA,GAAA3S,EAAA2S,WAAA,EAAA,KAAA,IAAAnR,WAAA,+CAAA,IAAA,gBAAAxB,GAAA6S,cAAA7S,EAAA6S,aAAA,IAAA,GAAA7S,EAAA6S,aAAA,EAAA,KAAA,IAAArR,WAAA,qDAAA,QAAA,EAAA,QAAAgS,GAAAxT,GAAA,GAAAwR,GAAA,4CAAA6I,KAAAra,EAAA,IAAAwR,GAAAA,EAAA,GAAA,MAAAA,GAAA,EAAA,MAAA,IAAA9L,OAAA,8BAAA,QAAAoO,GAAAnU,EAAA0R,EAAAQ,EAAAzS,EAAAkU,GAAA,GAAArK,GAAA,GAAAjJ,GAAAqW,kBAAA1W,GAAA6T,EAAAvK,EAAAyO,qBAAAjD,KAAA5C,EAAA6C,OAAAtV,IAAA0U,EAAA7K,EAAA4O,iBAAArE,EAAArF,OAAA,OAAA2F,KAAAR,EAAAE,EAAArF,QAAA2F,GAAA,GAAAtC,GAAAgC,EAAAlL,KAAA+I,EAAAmC,EAAArF,OAAAqF,EAAAiB,KAAAjB,EAAAkB,QAAA,MAAA,SAAAjN,GAAAzH,GAAA,MAAAK,gBAAAoH,IAAAzH,EAAAA,MAAAK,KAAAia,YAAAta,EAAAsa,gBAAAja,KAAAka,KAAAva,EAAAua,MAAA5a,EAAAU,KAAAma,MAAAxa,EAAAma,MAAA9I,EAAAhR,KAAAoa,KAAA,SAAAjJ,GAAA,MAAA,IAAA5L,SAAA,SAAAjG,EAAA0R,GAAA,GAAAQ,GAAA,UAAAL,EAAAsH,OAAA,EAAA,EAAA,IAAAzY,KAAAia,YAAA9I,GAAA7R,EAAAU,KAAAia,YAAA9I,QAAA,IAAAxR,EAAA0a,UAAA7I,EAAAR,EAAA,GAAA3L,OAAA,qDAAA,IAAAmM,EAAA,CAAA,GAAAzS,GAAA,+CAAAkU,EAAA9B,EAAAgH,MAAApZ,EAAA,IAAAkU,EAAA,CAAA,GAAArK,GAAAqK,EAAA,GAAAjQ,OAAAmQ,EAAAhC,EAAAsH,OAAA7P,GAAA6K,EAAAzT,KAAAma,MAAAhH,EAAAnT,MAAAia,YAAA9I,GAAAsC,EAAAnU,EAAAmU,OAAAzC,GAAA,GAAA3L,OAAA,8DAAA,CAAA,GAAA+B,GAAApH,KAAAka,KAAA/I,GAAAmJ,OAAA,OAAAta,MAAAia,YAAA9I,GAAA/J,EAAAA,EAAA9F,KAAAhC,EAAA0R,KAAAjB,KAAA/P,QAAAA,KAAAua,SAAA,SAAA5a,GAAA,MAAA,IAAA4F,SAAA,SAAA4L,EAAA7R,GAAAU,KAAAwa,kBAAA7a,GAAA2B,KAAA,SAAA3B,GAAA,QAAAL,KAAA6R,EAAAxR,GAAAK,KAAAya,iBAAA9a,GAAA2B,KAAA6P,EAAA7R,GAAA,SAAAA,IAAAyQ,KAAA/P,MAAAV,IAAAyQ,KAAA/P,QAAAA,KAAAya,iBAAA,SAAA9a,GAAA,MAAA,IAAA4F,SAAA,SAAAjG,EAAA0R,GAAApI,EAAAjJ,GAAAK,KAAAoa,KAAAza,EAAAyS,UAAA9Q,KAAA,SAAA0P,GAAA,GAAAQ,GAAAzS,EAAAiS,EAAArR,EAAA2S,WAAA3S,EAAA6S,aAAAlT,GAAA,GAAA6R,GAAAK,EAAA7R,EAAAuS,KAAAvS,EAAAyS,SAAAzS,EAAA2S,WAAA3S,EAAA6S,gBAAAxB,GAAA,SAAAA,IAAAjB,KAAA/P,aAAAA,KAAAwa,kBAAA,SAAA7a,GAAA,MAAA,IAAA4F,SAAA,SAAA4L,EAAA7R,GAAA2T,IAAArK,EAAAjJ,EAAA,IAAAqR,GAAAhR,KAAAia,YAAAlb,EAAAY,EAAAyS,QAAApS,MAAAoa,KAAArb,GAAAuC,KAAA,SAAA2R,GAAA,GAAArK,GAAAuK,EAAAF,GAAA7L,EAAA,UAAAwB,EAAA6P,OAAA,EAAA,GAAA9D,EAAA5V,EAAA2b,UAAA,EAAA3b,EAAAyZ,YAAA,KAAA,EAAA,OAAA5P,EAAA,IAAAxB,GAAA,sBAAAuT,KAAA/R,KAAAA,EAAA+L,EAAA/L,GAAA5I,KAAAoa,KAAAxR,GAAAtH,KAAA,SAAAhC,GAAA,GAAAP,GAAAY,EAAA2S,WAAAW,EAAAtT,EAAA6S,YAAA,iBAAAlT,KAAAA,EAAAkS,EAAAlS,EAAAyT,QAAA,WAAA,MAAA,mBAAAzT,GAAAsU,aAAAtU,EAAAsU,WAAAe,GAAAxD,EAAAsC,EAAAnU,EAAAK,EAAAuS,KAAAnT,EAAAkU,EAAAjC,KAAA1R,GAAA,SAAAA,IAAAyQ,KAAA/P,MAAAV,GAAA,SAAAA,IAAAyQ,KAAA/P,UAAA,GAAAoH,GAAAzH,MCAA,SAAAsJ,EAAA2R,GACA,YAIA,mBAAAjT,SAAAA,OAAAyH,IACAzH,OAAA,mBAAA,cAAAiT,GACA,gBAAA7S,SACAH,OAAAG,QAAA6S,EAAArb,QAAA,eAEA0J,EAAA4R,eAAAD,EAAA3R,EAAAmI,aAEApR,KAAA,SAAAoR,GACA,OACA0J,UAAA,SAAAC,GACA,GAAA/N,MACAgO,EAAA,EAEA,iBAAAD,IAAA,gBAAAA,GAAAC,eACAA,EAAAD,EAAAC,aAIA,KADA,GAAAC,GAAAva,UAAAwa,OACAD,GAAAjO,EAAAhK,OAAAgY,GAAA,CAGA,IAAA,GADA9I,GAAA,GAAAxN,OAAAuW,EAAA,UAAAjY,QACAjE,EAAA,EAAAA,EAAAmT,EAAAlP,SAAAjE,EACAmT,EAAAnT,GAAAkc,EAAA,UAAAlc,EAEA,iCAAA4b,KAAAM,EAAAvV,YACAsH,EAAAW,KAAA,GAAAyD,GAAA+J,OAAAC,IAAAhc,OAAA8S,IAEAlF,EAAAW,KAAA,GAAAyD,GAAAhS,OAAA8S,GAGA,KACA+I,EAAAA,EAAAI,OACA,MAAA1b,GACA,OAGA,MAAAqN,OCzCA,SAAA/D,EAAA2R,GACA,YAIA,mBAAAjT,SAAAA,OAAAyH,IACAzH,OAAA,sBAAA,cAAAiT,GACA,gBAAA7S,SACAH,OAAAG,QAAA6S,EAAArb,QAAA,eAEA0J,EAAAqS,iBAAAV,EAAA3R,EAAAmI,aAEApR,KAAA,SAAAoR,GACA,YAMA,SAAAmK,GAAAC,EAAAC,EAAAjL,GACA,GAAA,kBAAA9L,OAAAe,UAAA8K,IACA,MAAAiL,GAAAjL,IAAAkL,EAAAjL,EAGA,KAAA,GADAkL,GAAA,GAAAhX,OAAA8W,EAAAxY,QACAjE,EAAA,EAAAA,EAAAyc,EAAAxY,OAAAjE,IACA2c,EAAA3c,GAAA0c,EAAA5Z,KAAA2O,EAAAgL,EAAAzc,GAEA,OAAA2c,GAIA,QAAAC,GAAAH,EAAAC,EAAAjL,GACA,GAAA,kBAAA9L,OAAAe,UAAAsI,OACA,MAAAyN,GAAAzN,OAAA0N,EAAAjL,EAGA,KAAA,GADAkL,MACA3c,EAAA,EAAAA,EAAAyc,EAAAxY,OAAAjE,IACA0c,EAAA5Z,KAAA2O,EAAAgL,EAAAzc,KACA2c,EAAA/N,KAAA6N,EAAAzc,GAGA,OAAA2c,GA1BA,GAAAE,GAAA,gBACAC,EAAA,kCACAC,EAAA,8BA4BA,QAOA/S,MAAA,SAAAxH,GACA,GAAA,mBAAAA,GAAAwa,YAAA,mBAAAxa,GAAA,mBACA,MAAAvB,MAAAgc,WAAAza,EACA,IAAAA,EAAAyL,OAAAzL,EAAAyL,MAAAmL,MAAA0D,GACA,MAAA7b,MAAAic,YAAA1a,EACA,IAAAA,EAAAyL,MACA,MAAAhN,MAAAkc,gBAAA3a,EAEA,MAAA,IAAA8D,OAAA,oCAUA8W,gBAAA,SAAAC,GAEA,GAAA,KAAAA,EAAAxG,QAAA,KACA,OAAAwG,EAGA,IAAAC,GAAAD,EAAArJ,QAAA,YAAA,IAAAvG,MAAA,KACA8P,EAAAD,EAAAxO,MACA0O,EAAAF,EAAAA,EAAArZ,OAAA,EACA,KAAAqO,MAAAC,WAAAiL,KAAAhL,SAAAgL,GAAA,CACA,GAAAjK,GAAA+J,EAAAxO,KACA,QAAAwO,EAAAzO,KAAA,KAAA0E,EAAAgK,GAEA,OAAAD,EAAAzO,KAAA,KAAA0O,EAAAld,SAIA6c,YAAA,SAAA1a,GACA,GAAAib,GAAAb,EAAApa,EAAAyL,MAAAR,MAAA,MAAA,SAAA4H,GACA,QAAAA,EAAA+D,MAAA0D,IACA7b,KAEA,OAAAub,GAAAiB,EAAA,SAAApI,GACAA,EAAAwB,QAAA,UAAA,KAEAxB,EAAAA,EAAArB,QAAA,aAAA,QAAAA,QAAA,iCAAA,IAEA,IAAA0J,GAAArI,EAAArB,QAAA,OAAA,IAAAA,QAAA,eAAA,KAAAvG,MAAA,OAAAN,MAAA,GACAmQ,EAAArc,KAAAmc,gBAAAM,EAAA5O,OACAmE,EAAAyK,EAAA7O,KAAA,MAAAxO,OACAgT,GAAA,OAAA,eAAAwD,QAAAyG,EAAA,IAAA,GAAAjd,OAAAid,EAAA,EAEA,OAAA,IAAAjL,GAAAY,EAAA5S,OAAAgT,EAAAiK,EAAA,GAAAA,EAAA,GAAAjI,IACApU,OAGAkc,gBAAA,SAAA3a,GACA,GAAAib,GAAAb,EAAApa,EAAAyL,MAAAR,MAAA,MAAA,SAAA4H,GACA,OAAAA,EAAA+D,MAAA2D,IACA9b,KAEA,OAAAub,GAAAiB,EAAA,SAAApI,GAMA,GAJAA,EAAAwB,QAAA,WAAA,KACAxB,EAAAA,EAAArB,QAAA,qDAAA,QAGA,KAAAqB,EAAAwB,QAAA,MAAA,KAAAxB,EAAAwB,QAAA,KAEA,MAAA,IAAAxE,GAAAgD,EAEA,IAAAqI,GAAArI,EAAA5H,MAAA,KACA6P,EAAArc,KAAAmc,gBAAAM,EAAA5O,OACAmE,EAAAyK,EAAA7O,KAAA,MAAAxO,MACA,OAAA,IAAAgS,GAAAY,EACA5S,OACAid,EAAA,GACAA,EAAA,GACAA,EAAA,GACAjI,IAEApU,OAGAgc,WAAA,SAAArc,GACA,OAAAA,EAAAoc,YAAApc,EAAA+c,QAAA9G,QAAA,MAAA,IACAjW,EAAA+c,QAAAlQ,MAAA,MAAAxJ,OAAArD,EAAAoc,WAAAvP,MAAA,MAAAxJ,OACAhD,KAAA2c,YAAAhd,GACAA,EAAAqN,MAGAhN,KAAA4c,aAAAjd,GAFAK,KAAA6c,aAAAld,IAMAgd,YAAA,SAAAhd,GAKA,IAAA,GAJAmd,GAAA,oCACAC,EAAApd,EAAA+c,QAAAlQ,MAAA,MACAhM,KAEAzB,EAAA,EAAA4R,EAAAoM,EAAA/Z,OAAA2N,EAAA5R,EAAAA,GAAA,EAAA,CACA,GAAAoZ,GAAA2E,EAAA9C,KAAA+C,EAAAhe,GACAoZ,IACA3X,EAAAmN,KAAA,GAAAyD,GAAAhS,OAAAA,OAAA+Y,EAAA,GAAAA,EAAA,GAAA/Y,OAAA2d,EAAAhe,KAIA,MAAAyB,IAGAqc,aAAA,SAAAld,GAKA,IAAA,GAJAmd,GAAA,6DACAC,EAAApd,EAAAoc,WAAAvP,MAAA,MACAhM,KAEAzB,EAAA,EAAA4R,EAAAoM,EAAA/Z,OAAA2N,EAAA5R,EAAAA,GAAA,EAAA,CACA,GAAAoZ,GAAA2E,EAAA9C,KAAA+C,EAAAhe,GACAoZ,IACA3X,EAAAmN,KACA,GAAAyD,GACA+G,EAAA,IAAA/Y,OACAA,OACA+Y,EAAA,GACAA,EAAA,GACA/Y,OACA2d,EAAAhe,KAMA,MAAAyB,IAIAoc,aAAA,SAAArb,GACA,GAAAib,GAAAb,EAAApa,EAAAyL,MAAAR,MAAA,MAAA,SAAA4H,GACA,QAAAA,EAAA+D,MAAAyD,KAAAxH,EAAA+D,MAAA,sBACAnY,KAEA,OAAAub,GAAAiB,EAAA,SAAApI,GACA,GAMA4I,GANAP,EAAArI,EAAA5H,MAAA,KACA6P,EAAArc,KAAAmc,gBAAAM,EAAA5O,OACAoP,EAAAR,EAAAS,SAAA,GACAlL,EAAAiL,EACAlK,QAAA,iCAAA,MACAA,QAAA,cAAA,KAAA3T,MAEA6d,GAAA9E,MAAA,kBACA6E,EAAAC,EAAAlK,QAAA,uBAAA,MAEA,IAAAb,GAAA9S,SAAA4d,GAAA,8BAAAA,EACA5d,OAAA4d,EAAAxQ,MAAA,IACA,OAAA,IAAA4E,GACAY,EACAE,EACAmK,EAAA,GACAA,EAAA,GACAA,EAAA,GACAjI,IACApU,UClNA,SAAAiJ,EAAA2R,GACA,YAIA,mBAAAjT,SAAAA,OAAAyH,IACAzH,OAAA,cAAA,qBAAA,kBAAA,kBAAAiT,GACA,gBAAA7S,SACAH,OAAAG,QAAA6S,EAAArb,QAAA,sBAAAA,QAAA,mBAAAA,QAAA,mBAEA0J,EAAAkU,WAAAvC,EAAA3R,EAAAqS,iBAAArS,EAAA4R,eAAA5R,EAAAmQ,gBAEApZ,KAAA,SAAAsb,EAAAT,EAAAzB,GAqBA,QAAAgE,GAAAC,EAAAC,GACA,GAAAC,KAWA,QATAF,EAAAC,GAAAhU,QAAA,SAAAkU,GACA,IAAA,GAAAC,KAAAD,GACAA,EAAA7S,eAAA8S,KACAF,EAAAE,GAAAD,EAAAC,GAGA,OAAAF,KAGAA,EAGA,QAAAG,GAAAC,GACA,MAAAA,GAAA3Q,OAAA2Q,EAAA,mBApCA,GAAAC,IACA7P,OAAA,SAAA8P,GAEA,MAAA,MAAAA,EAAA7L,cAAA,IAAA4D,QAAA,iBACA,MAAAiI,EAAA7L,cAAA,IAAA4D,QAAA,uBACA,MAAAiI,EAAA7L,cAAA,IAAA4D,QAAA,oBACA,MAAAiI,EAAA7L,cAAA,IAAA4D,QAAA,qBAEAqE,eA+BA,QAOAlL,IAAA,SAAAgM,GACA,IAEA,KAAA,IAAA1V,OACA,MAAAsY,GACA,MAAAD,GAAAC,GACA3d,KAAA8d,UAAAH,EAAA5C,GAEA/a,KAAA+d,qBAAAhD,KAYA+C,UAAA,SAAAvc,EAAAwZ,GACAA,EAAAqC,EAAAQ,EAAA7C,EACA,IAAAiD,GAAA,GAAA5E,GAAA2B,EACA,OAAA,IAAAxV,SAAA,SAAA9C,GACA,GAAAwb,GAAA3C,EAAAvS,MAAAxH,EACA,mBAAAwZ,GAAAhN,SACAkQ,EAAAA,EAAAlQ,OAAAgN,EAAAhN,SAEAtL,EAAA8C,QAAAoB,IAAAsX,EAAA1N,IAAA,SAAA2N,GACA,MAAA,IAAA3Y,SAAA,SAAA9C,GACA,QAAA0b,KACA1b,EAAAyb,GAGAF,EAAAzD,SAAA2D,GAAA5c,KAAAmB,EAAA0b,GAAA,SAAAA,UAGApO,KAAA/P,QASA+d,qBAAA,SAAAhD,GACAA,EAAAqC,EAAAQ,EAAA7C,EACA,IAAAqD,GAAAvD,EAAAC,UAAAC,EAIA,OAHA,kBAAAA,GAAAhN,SACAqQ,EAAAA,EAAArQ,OAAAgN,EAAAhN,SAEAxI,QAAA9C,QAAA2b,IAYAC,WAAA,SAAA5C,EAAAxc,EAAAqf,EAAA9N,GACA,GAAA,kBAAAiL,GACA,KAAA,IAAApW,OAAA,wCACA,IAAA,kBAAAoW,GAAA8C,uBAEA,MAAA9C,EAGA,IAAA+C,GAAA,WACA,IAEA,MADAxe,MAAA+O,MAAAzN,KAAArC,EAAAqf,GAAA,SAAAA,GACA7C,EAAApL,MAAAG,GAAAxQ,KAAAU,WACA,MAAAf,GAIA,KAHA+d,GAAA/d,IACAK,KAAA8d,UAAAne,GAAA2B,KAAArC,EAAAqf,GAAA,SAAAA,GAEA3e,IAEAoQ,KAAA/P,KAGA,OAFAwe,GAAAD,uBAAA9C,EAEA+C,GASAC,aAAA,SAAAhD,GACA,GAAA,kBAAAA,GACA,KAAA,IAAApW,OAAA,2CACA,OAAA,kBAAAoW,GAAA8C,uBACA9C,EAAA8C,uBAGA9C,GAUAiD,OAAA,SAAAT,EAAA1J,GACA,MAAA,IAAAhP,SAAA,SAAA9C,EAAAoE,GACA,GAAA8X,GAAA,GAAArF,eACAqF,GAAAnF,QAAA3S,EACA8X,EAAAlF,mBAAA,WACA,IAAAkF,EAAAjF,aACAiF,EAAAhF,QAAA,KAAAgF,EAAAhF,OAAA,IACAlX,EAAAkc,EAAA/E,cAEA/S,EAAA,GAAAxB,OAAA,WAAAkP,EAAA,wBAAAoK,EAAAhF,WAIAgF,EAAApF,KAAA,OAAAhF,GACAoK,EAAAC,iBAAA,eAAA,oBACAD,EAAA9E,KAAApK,KAAApH,WAAA2E,MAAAiR","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n *\n * @param {String} urlLike\n * @return {Array} 3-tuple of URL, Line Number, and Column Number\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes","92","34","8","12","10","13","9","leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes","47","98","116","110","102","114","abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","C","b","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","test","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","RegExp","$1","caller","ErrorStackParser","_map","array","fn","output","_filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","stackframes","sf","resolveOriginal","stackFrames","instrument","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.concat.js b/dist/stacktrace.concat.js index 7b6fc95..29f4fb2 100644 --- a/dist/stacktrace.concat.js +++ b/dist/stacktrace.concat.js @@ -1,4 +1,4 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",t=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(";"===e.charAt(v))l++,v++,p=0;else if(","===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),"number"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open("get",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r,t=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,s=e.split("\n"),a="",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf("//");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o="data:"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error("The encoding of the inline sourcemap is not supported"))}else{var c=this.ajax(n,{method:"get"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)["catch"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c="data:"===a.substr(0,5),g=i.substring(0,i.lastIndexOf("/")+1);"/"===a[0]||c||/^https?:\/\/|^\/\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;"string"==typeof r&&(r=o(r.replace(/^\)\]\}'/,""))),"undefined"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new c(e)}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",t=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(";"===e.charAt(v))l++,v++,p=0;else if(","===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),"number"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?"$"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open("get",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r,t=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,s=e.split("\n"),a="",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf("//");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o="data:"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error("The encoding of the inline sourcemap is not supported"))}else{var c=this.ajax(n,{method:"get"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)["catch"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c="data:"===a.substr(0,5),g=i.substring(0,i.lastIndexOf("/")+1);"/"===a[0]||c||/^https?:\/\/|^\/\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;"string"==typeof r&&(r=o(r.replace(/^\)\]\}'/,""))),"undefined"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new c(e)}}); //# sourceMappingURL=stacktrace-gps.min.js.map (function (root, factory) { @@ -92,6 +92,19 @@ } } + function _indexOf(array, target) { + if (typeof Array.prototype.indexOf === 'function') { + return array.indexOf(target); + } else { + for (var i = 0; i < array.length; i++) { + if (array[i] === target) { + return i; + } + } + return -1; + } + } + return { /** * Given an Error object, extract the most information from it. @@ -111,27 +124,16 @@ } }, - /** - * Separate line and column numbers from a URL-like string. - * - * @param {String} urlLike - * @return {Array} 3-tuple of URL, Line Number, and Column Number - */ + // Separate line and column numbers from a string of the form: (URI:Line:Column) extractLocation: function ErrorStackParser$$extractLocation(urlLike) { // Fail-fast but return locations like "(native)" if (urlLike.indexOf(':') === -1) { return [urlLike]; } - var locationParts = urlLike.replace(/[\(\)\s]/g, '').split(':'); - var lastNumber = locationParts.pop(); - var possibleNumber = locationParts[locationParts.length - 1]; - if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) { - var lineNumber = locationParts.pop(); - return [locationParts.join(':'), lineNumber, lastNumber]; - } else { - return [locationParts.join(':'), lastNumber, undefined]; - } + var regExp = /(.+?)(?:\:(\d+))?(?:\:(\d+))?$/; + var parts = regExp.exec(urlLike.replace(/[\(\)]/g, '')); + return [parts[1], parts[2] || undefined, parts[3] || undefined]; }, parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) { @@ -147,7 +149,7 @@ var tokens = line.replace(/^\s+/, '').replace(/\(eval code/g, '(').split(/\s+/).slice(1); var locationParts = this.extractLocation(tokens.pop()); var functionName = tokens.join(' ') || undefined; - var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0]; + var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0]; return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line); }, this); diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index a8b72bd..c8c3f10 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),r=s.getArg(n,"sources"),o=s.getArg(n,"names",[]),i=s.getArg(n,"sourceRoot",null),a=s.getArg(n,"sourcesContent",null),u=s.getArg(n,"mappings"),l=s.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o,!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),o=s.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=s.getArg(e,"offset"),t=s.getArg(n,"line"),o=s.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],O=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(t=new i,t.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(_,a),o=y[r])_+=r.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),O.push(t),"number"==typeof t.originalLine&&b.push(t)}f(O,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=O,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),i?(i.path=t,o(i)):t}function a(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),a=r(e);if(a&&(e=a.path||"/"),t&&!t.scheme)return a&&(t.scheme=a.scheme),o(t);if(t||n.match(m))return n;if(a&&!a.host&&!a.path)return a.host=n,o(a);var s="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return a?(a.path=s,o(a)):s}function s(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return"$"+e}function c(e){return e.substr(1)}function l(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function f(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function g(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=p(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:p(e.name,n.name)))))}n.getArg=t;var h=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,m=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=o,n.normalize=i,n.join=a,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(h)},n.relative=s,n.toSetString=u,n.fromSetString=c,n.compareByOriginalPositions=l,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=g},function(e,n){function t(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,o,i,a,s):s==n.LEAST_UPPER_BOUND?r1?t(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,o,i){if(0===r.length)return-1;var a=t(-1,r.length,e,r,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,n,t){function r(){this._array=[],this._set={}}var o=t(1);r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=this._set.hasOwnProperty(t),i=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=i)},r.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=t(5),a=5,s=1<>>=a,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},n.decode=function(e,n,t){var r,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(s&c),s&=u,f+=s<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,a){if(a>i){var s=r(i,a),u=i-1;t(e,s,a);for(var c=e[a],l=i;a>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,a)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var t,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,t=o.exec(s),t&&t[1])return t[1];if(t=r.exec(s),t&&t[1])return t[1];if(t=i.exec(s),t&&t[1])return t[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(t,r,o,i,a){var s=new e.SourceMapConsumer(t),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(t){var i=e.lineNumber,a=e.columnNumber;"string"==typeof t&&(t=o(t.replace(/^\)\]\}'/,""))),"undefined"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,a,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new l(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var t=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(t.pop()),o=t.join(" ")||void 0,i=["eval",""].indexOf(r[0])>-1?void 0:r[0];return new e(o,void 0,i,r[1],r[2],n)},this)},parseFFOrSafari:function(r){var o=t(r.stack.split("\n"),function(e){return!e.match(i)},this);return n(o,function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return new e(n);var t=n.split("@"),r=this.extractLocation(t.pop()),o=t.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(o){var i=t(o.stack.split("\n"),function(e){return!!e.match(r)&&!e.match(/^Error created at/)},this);return n(i,function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(a,s,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(n){return o(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,o){o=r(i,o);var a=new t(o);return new Promise(function(t){var r=e.parse(n);"function"==typeof o.filter&&(r=r.filter(o.filter)),t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}a.pinpoint(e).then(n,t)["catch"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?t(o.responseText):r(new Error("POST to "+n+" failed with status: "+o.status)))},o.open("post",n),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),r=s.getArg(n,"sources"),o=s.getArg(n,"names",[]),i=s.getArg(n,"sourceRoot",null),a=s.getArg(n,"sourcesContent",null),u=s.getArg(n,"mappings"),l=s.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),o=s.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=s.getArg(e,"offset"),t=s.getArg(n,"line"),o=s.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],C=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(t=new i,t.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(_,a),o=y[r])_+=r.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),i?(i.path=t,o(i)):t}function a(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),a=r(e);if(a&&(e=a.path||"/"),t&&!t.scheme)return a&&(t.scheme=a.scheme),o(t);if(t||n.match(v))return n;if(a&&!a.host&&!a.path)return a.host=n,o(a);var s="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return a?(a.path=s,o(a)):s}function s(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return e}function c(e){return f(e)?"$"+e:e}function l(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var t=n-10;t>=0;t--)if(36!==e.charCodeAt(t))return!1;return!0}function p(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function g(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=h(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:h(e.name,n.name)))))}n.getArg=t;var d=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,v=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=o,n.normalize=i,n.join=a,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(d)},n.relative=s;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?u:c,n.fromSetString=_?u:l,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},function(e,n){function t(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,o,i,a,s):s==n.LEAST_UPPER_BOUND?r1?t(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,o,i){if(0===r.length)return-1;var a=t(-1,r.length,e,r,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,n,t){function r(){this._array=[],this._set=Object.create(null)}var o=t(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=i.call(this._set,t),a=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=a)},r.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=t(5),a=5,s=1<>>=a,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},n.decode=function(e,n,t){var r,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(s&c),s&=u,f+=s<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,a){if(a>i){var s=r(i,a),u=i-1;t(e,s,a);for(var c=e[a],l=i;a>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,a)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var t,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,t=o.exec(s),t&&t[1])return t[1];if(t=r.exec(s),t&&t[1])return t[1];if(t=i.exec(s),t&&t[1])return t[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(t,r,o,i,a){var s=new e.SourceMapConsumer(t),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(t){var i=e.lineNumber,a=e.columnNumber;"string"==typeof t&&(t=o(t.replace(/^\)\]\}'/,""))),"undefined"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,a,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new l(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var t=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(t.pop()),i=t.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],n)},this)},parseFFOrSafari:function(r){var o=t(r.stack.split("\n"),function(e){return!e.match(a)},this);return n(o,function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return new e(n);var t=n.split("@"),r=this.extractLocation(t.pop()),o=t.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=t(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return n(i,function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(a,s,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(n){return o(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,o){o=r(i,o);var a=new t(o);return new Promise(function(t){var r=e.parse(n);"function"==typeof o.filter&&(r=r.filter(o.filter)),t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}a.pinpoint(e).then(n,t)["catch"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?t(o.responseText):r(new Error("POST to "+n+" failed with status: "+o.status)))},o.open("post",n),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 504880e..77a9d39 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","b","w","C","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","getOwnPropertyNames","hasOwnProperty","encode","charCodeAt","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","test","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","RegExp","$1","undefined","caller","ErrorStackParser","_map","array","fn","thisArg","output","_filter","filter","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","locationParts","lastNumber","pop","possibleNumber","filtered","tokens","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","shift","StackTrace","_merge","first","second","target","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","callback","errback","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o,!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},b={},w=[],C=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,b),u=b.value,v=b.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&w.push(r)}g(C,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,g(w,a.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(m))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return\"$\"+e}function l(e){return e.substr(1)}function c(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function p(e,n){return e===n?0:e>n?1:-1}function f(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=p(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:p(e.name,n.name)))))}n.getArg=r;var h=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,m=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(h)},n.relative=a,n.toSetString=u,n.fromSetString=l,n.compareByOriginalPositions=c,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=f},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set={}}var o=r(1);t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=this._set.hasOwnProperty(r),i=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=i)},t.prototype.has=function(e){var n=o.toSetString(e);return this._set.hasOwnProperty(n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(this._set.hasOwnProperty(n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n /**\n * Separate line and column numbers from a URL-like string.\n *\n * @param {String} urlLike\n * @return {Array} 3-tuple of URL, Line Number, and Column Number\n */\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var locationParts = urlLike.replace(/[\\(\\)\\s]/g, '').split(':');\n var lastNumber = locationParts.pop();\n var possibleNumber = locationParts[locationParts.length - 1];\n if (!isNaN(parseFloat(possibleNumber)) && isFinite(possibleNumber)) {\n var lineNumber = locationParts.pop();\n return [locationParts.join(':'), lineNumber, lastNumber];\n } else {\n return [locationParts.join(':'), lastNumber, undefined];\n }\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","C","b","A","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","charCodeAt","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","hasOwnProperty","getOwnPropertyNames","encode","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","test","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","RegExp","$1","undefined","caller","ErrorStackParser","_map","array","fn","thisArg","output","_filter","filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","pop","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","callback","errback","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/package.json b/package.json index 59d304f..73e1a12 100644 --- a/package.json +++ b/package.json @@ -21,9 +21,9 @@ "url": "git://github.com/stacktracejs/stacktrace.js.git" }, "dependencies": { - "error-stack-parser": "^1.3.5", + "error-stack-parser": "^1.3.6", "stack-generator": "^1.0.7", - "stacktrace-gps": "^2.4.1" + "stacktrace-gps": "^2.4.3" }, "devDependencies": { "colors": "^1.1.2", From 6fc3d4a5ec6e8b0249fc2099606e6f4b468bdd83 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 15 May 2016 14:51:49 -0700 Subject: [PATCH 046/110] 1.1.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 73e1a12..4dac7ed 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "Victor Homyakov (https://github.com/victor-homyakov)", "Oliver Salzburg (https://github.com/oliversalzburg)" ], - "version": "1.1.2", + "version": "1.1.3", "license": "Unlicense", "keywords": [ "stacktrace", From 1be9e927db64ebe92c4e971cc9a120b3b03bcf80 Mon Sep 17 00:00:00 2001 From: rhart Date: Thu, 19 May 2016 09:56:53 +0100 Subject: [PATCH 047/110] Add error message to report --- spec/stacktrace-spec.js | 8 +++++--- stacktrace.js | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/spec/stacktrace-spec.js b/spec/stacktrace-spec.js index 5850d9d..8b60d2e 100755 --- a/spec/stacktrace-spec.js +++ b/spec/stacktrace-spec.js @@ -194,15 +194,16 @@ describe('StackTrace', function() { it('sends POST request to given URL', function(done) { var url = 'http://domain.ext/endpoint'; + var errorMsg = 'BOOM'; var stackframes = [new StackFrame('fn', undefined, 'file.js', 32, 1)]; - StackTrace.report(stackframes, url).then(callback, done.fail)['catch'](done.fail); + StackTrace.report(errorMsg, stackframes, url).then(callback, done.fail)['catch'](done.fail); var postRequest = jasmine.Ajax.requests.mostRecent(); postRequest.respondWith({status: 201, contentType: 'text/plain', responseText: 'OK'}); function callback() { - expect(postRequest.data()).toEqual({stack: stackframes}); + expect(postRequest.data()).toEqual({message: errorMsg, stack: stackframes}); expect(postRequest.method).toBe('post'); expect(postRequest.url).toBe(url); done(); @@ -211,10 +212,11 @@ describe('StackTrace', function() { it('rejects if POST request fails', function(done) { var url = 'http://domain.ext/endpoint'; + var errorMsg = 'BOOM'; var stackframes = [new StackFrame('fn', undefined, 'file.js', 32, 1)]; jasmine.Ajax.stubRequest(url).andError(); - StackTrace.report(stackframes, url).then(done.fail, done)['catch'](done); + StackTrace.report(errorMsg, stackframes, url).then(done.fail, done)['catch'](done); }); }); }); diff --git a/stacktrace.js b/stacktrace.js index d7be057..65d0f7b 100644 --- a/stacktrace.js +++ b/stacktrace.js @@ -163,12 +163,12 @@ }, /** - * Given an Array of StackFrames, serialize and POST to given URL. + * Given an error message and Array of StackFrames, serialize and POST to given URL. * * @param {Array} stackframes * @param {String} url */ - report: function StackTrace$$report(stackframes, url) { + report: function StackTrace$$report(errorMsg, stackframes, url) { return new Promise(function(resolve, reject) { var req = new XMLHttpRequest(); req.onerror = reject; @@ -183,7 +183,7 @@ }; req.open('post', url); req.setRequestHeader('Content-Type', 'application/json'); - req.send(JSON.stringify({stack: stackframes})); + req.send(JSON.stringify({message: errorMsg, stack: stackframes})); }); } }; From f812877bed5b4bd89bca19a190bd03b41d24cfcc Mon Sep 17 00:00:00 2001 From: rhart Date: Thu, 19 May 2016 10:06:29 +0100 Subject: [PATCH 048/110] Update docs --- README.md | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index c15ed76..f19ffe1 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,8 @@ Generate, parse and enhance JavaScript stack traces in all browsers Debug and profile your JavaScript with a [stack trace](http://en.wikipedia.org/wiki/Stack_trace) of function calls leading to an error (or any condition you specify). -stacktrace.js uses browsers' `Error.stack` mechanism to generate stack traces, parses them, enhances them with -[source maps](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/) and uses +stacktrace.js uses browsers' `Error.stack` mechanism to generate stack traces, parses them, enhances them with +[source maps](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/) and uses [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) to return an Array of [StackFrames](https://github.com/stacktracejs/stackframe). @@ -16,10 +16,10 @@ to return an Array of [StackFrames](https://github.com/stacktracejs/stackframe). #### Get a stack trace from current location ```js var callback = function(stackframes) { - var stringifiedStack = stackframes.map(function(sf) { - return sf.toString(); - }).join('\n'); - console.log(stringifiedStack); + var stringifiedStack = stackframes.map(function(sf) { + return sf.toString(); + }).join('\n'); + console.log(stringifiedStack); }; var errback = function(err) { console.log(err.message); }; @@ -40,7 +40,7 @@ window.onerror = function(msg, file, line, col, error) { #### Get stack trace from an Error ```js -var error = new Error('BOOM!'); +var error = new Error('BOOM!'); StackTrace.fromError(error).then(callback).catch(errback) => Promise(Array[StackFrame], Error) @@ -81,21 +81,21 @@ http://cdnjs.com/libraries/stacktrace.js Generate a backtrace from invocation point, then parse and enhance it. **(Optional) options: Object** -* *filter: Function([StackFrame](https://github.com/stacktracejs/stackframe) => Boolean)* - Only include stack entries matching for which `filter` returns `true` +* *filter: Function([StackFrame](https://github.com/stacktracejs/stackframe) => Boolean)* - Only include stack entries matching for which `filter` returns `true` * *sourceCache: Object (String URL => String Source)* - Pre-populate source cache to avoid network requests * *offline: Boolean (default: false)* - Set to `true` to prevent all network requests - + #### `StackTrace.fromError(error, /*optional*/ options)` => [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)(Array[[StackFrame](https://github.com/stacktracejs/stackframe)]) Given an Error object, use [error-stack-parser](https://github.com/stacktracejs/error-stack-parser) to parse it and enhance location information with [stacktrace-gps](https://github.com/stacktracejs/stacktrace-gps). - + **error: Error** **(Optional) options: Object** * *filter: Function([StackFrame](https://github.com/stacktracejs/stackframe) => Boolean)* - Only include stack entries matching for which `filter` returns `true` * *sourceCache: Object (String URL => String Source)* - Pre-populate source cache to avoid network requests * *offline: Boolean (default: false)* - Set to `true` to prevent all network requests - + #### `StackTrace.generateArtificially(/*optional*/ options)` => [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)(Array[[StackFrame](https://github.com/stacktracejs/stackframe)]) Use [stack-generator](https://github.com/stacktracejs/stack-generator) to generate a backtrace by walking the `arguments.callee.caller` chain. @@ -103,26 +103,27 @@ Use [stack-generator](https://github.com/stacktracejs/stack-generator) to genera * *filter: Function([StackFrame](https://github.com/stacktracejs/stackframe) => Boolean)* - Only include stack entries matching for which `filter` returns `true` * *sourceCache: Object (String URL => String Source)* - Pre-populate source cache to avoid network requests * *offline: Boolean (default: false)* - Set to `true` to prevent all network requests - + #### `StackTrace.instrument(fn, callback, /*optional*/ errback)` => Function * Given a function, wrap it such that invocations trigger a callback that is called with a stack trace. * **fn: Function** - to wrap, call callback on invocation and call-through * **callback: Function** - to call with stack trace (generated by `StackTrace.get()`) when fn is called -* **(Optional) errback: Function** - to call with Error object if there was a problem getting a stack trace. +* **(Optional) errback: Function** - to call with Error object if there was a problem getting a stack trace. Fails silently (though `fn` is still called) if a stack trace couldn't be generated. - + #### `StackTrace.deinstrument(fn)` => Function Given a function that has been instrumented, revert the function to it's original (non-instrumented) state. * **fn: Function** - Instrumented Function -#### `StackTrace.report(stackframes, url)` => [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)(String) -Given an Array of StackFrames, serialize and POST to given URL. Promise is resolved with response text from POST request. +#### `StackTrace.report(message, stackframes, url)` => [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)(String) +Given an an error message and Array of StackFrames, serialize and POST to given URL. Promise is resolved with response text from POST request. Example JSON POST data: ``` { + message: 'BOOM', stack: [ {functionName: 'fn', fileName: 'file.js', lineNumber: 32, columnNumber: 1}, {functionName: 'fn2', fileName: 'file.js', lineNumber: 543, columnNumber: 32}, @@ -131,6 +132,7 @@ Example JSON POST data: } ``` +* **message: String** - The error message * **stackframes: Array([StackFrame](https://github.com/stacktracejs/stackframe))** - Previously wrapped Function * **url: String** - URL to POST stack JSON to @@ -140,8 +142,8 @@ Example JSON POST data: > **HEADS UP**: You won't get the benefit of [source maps](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/) in IE9- or other very old browsers. -## Using node.js/io.js only? -I recommend the [stack-trace node package](https://www.npmjs.com/package/stack-trace) specifically built for node. +## Using node.js/io.js only? +I recommend the [stack-trace node package](https://www.npmjs.com/package/stack-trace) specifically built for node. It has a very similar API and also supports source maps. ## Contributing From 6d2b6cb4b4f1a59bf44a11ffeb40aef0c8dd972c Mon Sep 17 00:00:00 2001 From: rhart Date: Wed, 25 May 2016 18:46:06 +0100 Subject: [PATCH 049/110] Make error message optional when reporting --- README.md | 2 +- spec/stacktrace-spec.js | 24 ++++++++++++++++++++---- stacktrace.js | 11 +++++++++-- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index f19ffe1..680e3be 100644 --- a/README.md +++ b/README.md @@ -117,7 +117,7 @@ Given a function that has been instrumented, revert the function to it's origina * **fn: Function** - Instrumented Function -#### `StackTrace.report(message, stackframes, url)` => [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)(String) +#### `StackTrace.report(stackframes, url, message)` => [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)(String) Given an an error message and Array of StackFrames, serialize and POST to given URL. Promise is resolved with response text from POST request. Example JSON POST data: diff --git a/spec/stacktrace-spec.js b/spec/stacktrace-spec.js index 8b60d2e..942f9c1 100755 --- a/spec/stacktrace-spec.js +++ b/spec/stacktrace-spec.js @@ -192,12 +192,12 @@ describe('StackTrace', function() { jasmine.Ajax.uninstall(); }); - it('sends POST request to given URL', function(done) { + it('sends POST request to given URL with a message', function(done) { var url = 'http://domain.ext/endpoint'; var errorMsg = 'BOOM'; var stackframes = [new StackFrame('fn', undefined, 'file.js', 32, 1)]; - StackTrace.report(errorMsg, stackframes, url).then(callback, done.fail)['catch'](done.fail); + StackTrace.report(stackframes, url, errorMsg).then(callback, done.fail)['catch'](done.fail); var postRequest = jasmine.Ajax.requests.mostRecent(); postRequest.respondWith({status: 201, contentType: 'text/plain', responseText: 'OK'}); @@ -210,13 +210,29 @@ describe('StackTrace', function() { } }); + it('sends POST request to given URL without a message', function(done) { + var url = 'http://domain.ext/endpoint'; + var stackframes = [new StackFrame('fn', undefined, 'file.js', 32, 1)]; + + StackTrace.report(stackframes, url).then(callback, done.fail)['catch'](done.fail); + + var postRequest = jasmine.Ajax.requests.mostRecent(); + postRequest.respondWith({status: 201, contentType: 'text/plain', responseText: 'OK'}); + + function callback() { + expect(postRequest.data()).toEqual({stack: stackframes}); + expect(postRequest.method).toBe('post'); + expect(postRequest.url).toBe(url); + done(); + } + }); + it('rejects if POST request fails', function(done) { var url = 'http://domain.ext/endpoint'; - var errorMsg = 'BOOM'; var stackframes = [new StackFrame('fn', undefined, 'file.js', 32, 1)]; jasmine.Ajax.stubRequest(url).andError(); - StackTrace.report(errorMsg, stackframes, url).then(done.fail, done)['catch'](done); + StackTrace.report(stackframes, url).then(done.fail, done)['catch'](done); }); }); }); diff --git a/stacktrace.js b/stacktrace.js index 65d0f7b..5b06ee9 100644 --- a/stacktrace.js +++ b/stacktrace.js @@ -167,8 +167,9 @@ * * @param {Array} stackframes * @param {String} url + * @param {String} errorMsg */ - report: function StackTrace$$report(errorMsg, stackframes, url) { + report: function StackTrace$$report(stackframes, url, errorMsg) { return new Promise(function(resolve, reject) { var req = new XMLHttpRequest(); req.onerror = reject; @@ -183,7 +184,13 @@ }; req.open('post', url); req.setRequestHeader('Content-Type', 'application/json'); - req.send(JSON.stringify({message: errorMsg, stack: stackframes})); + + var reportPayload = {stack: stackframes}; + if (errorMsg != undefined) { + reportPayload.message = errorMsg; + } + + req.send(JSON.stringify(reportPayload)); }); } }; From 61ffe511aed13723e4da485ed84da399358548e1 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 28 May 2016 12:23:32 -0700 Subject: [PATCH 050/110] Add v1.2 to CHANGELOG --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd693b6..4af6ef9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## v1.2.0 + +* `StackTrace.report` now accepts an error message argument, and will add a `message: "given thing"` to the JSON payload if it is provided. +* Various bug fixes from v1.1.0 + ## v1.1.0 ### Better parsing From eb21e6c5904ee0ee4970255dd8c2ae0253ca9b6c Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 28 May 2016 12:23:48 -0700 Subject: [PATCH 051/110] Formatting cleanup --- stacktrace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stacktrace.js b/stacktrace.js index 5b06ee9..9c061f7 100644 --- a/stacktrace.js +++ b/stacktrace.js @@ -187,7 +187,7 @@ var reportPayload = {stack: stackframes}; if (errorMsg != undefined) { - reportPayload.message = errorMsg; + reportPayload.message = errorMsg; } req.send(JSON.stringify(reportPayload)); From d04b0d7a4054a3b22bd8683f883b37b4fb82b1af Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 28 May 2016 12:24:59 -0700 Subject: [PATCH 052/110] Update dist with improvements from #163 --- dist/stacktrace-with-promises-and-json-polyfills.js | 13 ++++++++++--- ...acktrace-with-promises-and-json-polyfills.min.js | 2 +- ...race-with-promises-and-json-polyfills.min.js.map | 2 +- dist/stacktrace.concat.js | 13 ++++++++++--- dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- 6 files changed, 24 insertions(+), 10 deletions(-) diff --git a/dist/stacktrace-with-promises-and-json-polyfills.js b/dist/stacktrace-with-promises-and-json-polyfills.js index 99b8fff..7f720cb 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.js @@ -2415,12 +2415,13 @@ if (!Array.prototype.forEach) { }, /** - * Given an Array of StackFrames, serialize and POST to given URL. + * Given an error message and Array of StackFrames, serialize and POST to given URL. * * @param {Array} stackframes * @param {String} url + * @param {String} errorMsg */ - report: function StackTrace$$report(stackframes, url) { + report: function StackTrace$$report(stackframes, url, errorMsg) { return new Promise(function(resolve, reject) { var req = new XMLHttpRequest(); req.onerror = reject; @@ -2435,7 +2436,13 @@ if (!Array.prototype.forEach) { }; req.open('post', url); req.setRequestHeader('Content-Type', 'application/json'); - req.send(JSON.stringify({stack: stackframes})); + + var reportPayload = {stack: stackframes}; + if (errorMsg != undefined) { + reportPayload.message = errorMsg; + } + + req.send(JSON.stringify(reportPayload)); }); } }; diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index 5cc3aa8..4535372 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ (function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){B=e}function r(e){z=e}function o(){return function(){process.nextTick(c)}}function i(){return function(){D(c)}}function a(){var e=0,t=new H(c),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function s(){var e=new MessageChannel;return e.port1.onmessage=c,function(){e.port2.postMessage(0)}}function u(){return function(){setTimeout(c,1)}}function c(){for(var e=0;I>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}I=0}function l(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,i()}catch(n){return u()}}function f(e,t){var n=this,r=n._state;if(r===te&&!e||r===ne&&!t)return this;var o=new this.constructor(h),i=n._result;if(r){var a=arguments[r-1];z(function(){j(r,o,a,i)})}else S(n,o,e,t);return o}function p(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(h);return b(n,e),n}function h(){}function g(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return re.error=t,re}}function y(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){z(function(e){var r=!1,o=y(n,t,function(n){r||(r=!0,t!==n?b(e,n):C(e,n))},function(t){r||(r=!0,O(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,O(e,o))},e)}function _(e,t){t._state===te?C(e,t._result):t._state===ne?O(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){O(e,t)})}function w(e,n,r){n.constructor===e.constructor&&r===K&&constructor.resolve===Q?_(e,n):r===re?O(e,re.error):void 0===r?C(e,n):t(r)?v(e,n,r):C(e,n)}function b(t,n){t===n?O(t,g()):e(n)?w(t,n,m(n)):C(t,n)}function A(e){e._onerror&&e._onerror(e._result),E(e)}function C(e,t){e._state===ee&&(e._result=t,e._state=te,0!==e._subscribers.length&&z(E,e))}function O(e,t){e._state===ee&&(e._state=ne,e._result=t,z(A,e))}function S(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+te]=n,o[i+ne]=r,0===i&&e._state&&z(E,e)}function E(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)S(r.resolve(e[a]),void 0,t,n);return o}function k(e){var t=this,n=new t(h);return O(n,e),n}function P(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],h!==e&&("function"!=typeof e&&P(),this instanceof F?M(this,e):R())}function U(e,t){this._instanceConstructor=e,this.promise=new e(h),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?C(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&C(this.promise,this._result))):O(this.promise,this._validationError())}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,B,J,q=$,I=0,z=function(e,t){X[I]=e,X[I+1]=t,I+=2,2===I&&(B?B(c):J())},Z="undefined"!=typeof window?window:void 0,Y=Z||{},H=Y.MutationObserver||Y.WebKitMutationObserver,W="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);J=W?o():H?a():V?s():void 0===Z&&"function"==typeof require?l():u();var K=f,Q=p,ee=void 0,te=1,ne=2,re=new N,oe=new N,ie=x,ae=T,se=k,ue=0,ce=F;F.all=ie,F.race=ae,F.resolve=Q,F.reject=se,F._setScheduler=n,F._setAsap=r,F._asap=z,F.prototype={constructor:F,then:K,"catch":function(e){return this.then(null,e)}};var le=U;U.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},U.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ee&&e>n;n++)this._eachEntry(t[n],n)},U.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===Q){var o=m(e);if(o===K&&e._state!==ee)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ce){var i=new n(h);w(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},U.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ee&&(this._remaining--,e===ne?O(r,n):this._result[t]=n),0===this._remaining&&C(r,this._result)},U.prototype._willSettleAt=function(e,t){var n=this;S(e,void 0,function(e){n._settledAt(te,t,e)},function(e){n._settledAt(ne,t,e)})};var fe=G,pe={Promise:ce,polyfill:fe};"function"==typeof define&&define.amd?define(function(){return pe}):"undefined"!=typeof module&&module.exports?module.exports=pe:"undefined"!=typeof this&&(this.ES6Promise=pe),fe()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==m)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===m&&u(m)===m&&u()===m&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([m])&&"null"==u(null)&&"[null,null,null]"==u([m,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,d,m,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!i("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,j=[0,31,59,90,120,151,181,212,243,273,304,334],M=function(e,t){return j[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?d=2==a?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var r,i,a=v.call(e)==b,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),d(e,t)},!i("json-stringify")){var x={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},T="000000",k=function(e,t){return(T+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=x[a];break;default:if(32>a){t+=P+k(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,N,j,x,T,P,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(M){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=L((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,w=L(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+k(6,0>c?-c:c):k(4,c))+"-"+k(2,l+1)+"-"+k(2,p)+"T"+k(2,y)+":"+k(2,_)+":"+k(2,w)+"."+k(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(T=a.length;T--;)if(a[T]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==S){for(x=0,T=s.length;T>x;x++)j=F(x,s,n,r,o,i,a),N.push(j===m?"null":j);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+P+"]":"["+N.join(",")+"]":"[]"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+P+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==b)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=q(J()),"$"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(y))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return e}function c(e){return f(e)?"$"+e:e}function l(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var t=e.length;if(9>t)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function p(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function h(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function g(e,t){return e===t?0:e>t?1:-1}function d(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=g(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:g(e.name,t.name)))))}t.getArg=n;var m=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(m)},t.relative=s;var v=function(){var e=Object.create(null);return!("__proto__"in e)}();t.toSetString=v?u:c,t.fromSetString=v?u:l,t.compareByOriginalPositions=p,t.compareByGeneratedPositionsDeflated=h,t.compareByGeneratedPositionsInflated=d},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){ -this._array=[],this._set=Object.create(null)}var o=n(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){o=r(i,o);var a=new n(o);return new Promise(function(n){var r=e.parse(t);"function"==typeof o.filter&&(r=r.filter(o.filter)),n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}a.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t){return new Promise(function(n,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?n(o.responseText):r(new Error("POST to "+t+" failed with status: "+o.status)))},o.open("post",t),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +this._array=[],this._set=Object.create(null)}var o=n(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){o=r(i,o);var a=new n(o);return new Promise(function(n){var r=e.parse(t);"function"==typeof o.filter&&(r=r.filter(o.filter)),n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}a.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t,n){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+t+" failed with status: "+i.status)))},i.open("post",t),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!=n&&(a.message=n),i.send(JSON.stringify(a))})}}}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map index e113c51..a79e536 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes","92","34","8","12","10","13","9","leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes","47","98","116","110","102","114","abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","C","b","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","test","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","RegExp","$1","caller","ErrorStackParser","_map","array","fn","output","_filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","stackframes","sf","resolveOriginal","stackFrames","instrument","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","req","setRequestHeader"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes","92","34","8","12","10","13","9","leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes","47","98","116","110","102","114","abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","C","b","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","test","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","RegExp","$1","caller","ErrorStackParser","_map","array","fn","output","_filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","stackframes","sf","resolveOriginal","stackFrames","instrument","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","errorMsg","req","setRequestHeader","reportPayload"],"mappings":"CAQA,WACA,YACA,SAAAA,GAAAC,GACA,MAAA,kBAAAA,IAAA,gBAAAA,IAAA,OAAAA,EAGA,QAAAC,GAAAD,GACA,MAAA,kBAAAA,GAqCA,QAAAE,GAAAC,GACAC,EAAAD,EAGA,QAAAE,GAAAC,GACAC,EAAAD,EAcA,QAAAE,KAGA,MAAA,YACAC,QAAAC,SAAAC,IAKA,QAAAC,KACA,MAAA,YACAC,EAAAF,IAIA,QAAAG,KACA,GAAAC,GAAA,EACAC,EAAA,GAAAC,GAAAN,GACAO,EAAAC,SAAAC,eAAA,GAGA,OAFAJ,GAAAK,QAAAH,GAAAI,eAAA,IAEA,WACAJ,EAAAK,KAAAR,IAAAA,EAAA,GAKA,QAAAS,KACA,GAAAC,GAAA,GAAAC,eAEA,OADAD,GAAAE,MAAAC,UAAAjB,EACA,WACAc,EAAAI,MAAAC,YAAA,IAIA,QAAAC,KACA,MAAA,YACAC,WAAArB,EAAA,IAKA,QAAAA,KACA,IAAA,GAAAsB,GAAA,EAAAC,EAAAD,EAAAA,GAAA,EAAA,CACA,GAAAE,GAAAC,EAAAH,GACAI,EAAAD,EAAAH,EAAA,EAEAE,GAAAE,GAEAD,EAAAH,GAAAK,OACAF,EAAAH,EAAA,GAAAK,OAGAJ,EAAA,EAGA,QAAAK,KACA,IACA,GAAAC,GAAAC,QACAC,EAAAF,EAAA,QAEA,OADA3B,GAAA6B,EAAAC,WAAAD,EAAAE,aACAhC,IACA,MAAAiC,GACA,MAAAd,MAiBA,QAAAe,GAAAC,EAAAC,GACA,GAAAC,GAAAC,KACAC,EAAAF,EAAAG,MAEA,IAAAD,IAAAE,KAAAN,GAAAI,IAAAG,KAAAN,EACA,MAAAE,KAGA,IAAAK,GAAA,GAAAL,MAAAM,YAAAC,GACAC,EAAAT,EAAAU,OAEA,IAAAR,EAAA,CACA,GAAAhB,GAAAyB,UAAAT,EAAA,EACA5C,GAAA,WACAsD,EAAAV,EAAAI,EAAApB,EAAAuB,SAGAI,GAAAb,EAAAM,EAAAR,EAAAC,EAGA,OAAAO,GAGA,QAAAQ,GAAAC,GAEA,GAAAC,GAAAf,IAEA,IAAAc,GAAA,gBAAAA,IAAAA,EAAAR,cAAAS,EACA,MAAAD,EAGA,IAAAE,GAAA,GAAAD,GAAAR,EAEA,OADAU,GAAAD,EAAAF,GACAE,EAIA,QAAAT,MAQA,QAAAW,KACA,MAAA,IAAAC,WAAA,4CAGA,QAAAC,KACA,MAAA,IAAAD,WAAA,wDAGA,QAAAE,GAAAL,GACA,IACA,MAAAA,GAAAM,KACA,MAAAC,GAEA,MADAC,IAAAD,MAAAA,EACAC,IAIA,QAAAC,GAAAH,EAAAI,EAAAC,EAAAC,GACA,IACAN,EAAAO,KAAAH,EAAAC,EAAAC,GACA,MAAAjC,GACA,MAAAA,IAIA,QAAAmC,GAAAd,EAAAe,EAAAT,GACAjE,EAAA,SAAA2D,GACA,GAAAgB,IAAA,EACAT,EAAAE,EAAAH,EAAAS,EAAA,SAAAL,GACAM,IACAA,GAAA,EACAD,IAAAL,EACAT,EAAAD,EAAAU,GAEAO,EAAAjB,EAAAU,KAEA,SAAAQ,GACAF,IACAA,GAAA,EAEAG,EAAAnB,EAAAkB,KACA,YAAAlB,EAAAoB,QAAA,sBAEAJ,GAAAT,IACAS,GAAA,EACAG,EAAAnB,EAAAO,KAEAP,GAGA,QAAAqB,GAAArB,EAAAe,GACAA,EAAA7B,SAAAC,GACA8B,EAAAjB,EAAAe,EAAAtB,SACAsB,EAAA7B,SAAAE,GACA+B,EAAAnB,EAAAe,EAAAtB,SAEAG,EAAAmB,EAAA3C,OAAA,SAAAsC,GACAT,EAAAD,EAAAU,IACA,SAAAQ,GACAC,EAAAnB,EAAAkB,KAKA,QAAAI,GAAAtB,EAAAuB,EAAAjB,GACAiB,EAAAjC,cAAAU,EAAAV,aACAgB,IAAAkB,GACAlC,YAAAmC,UAAAC,EACAL,EAAArB,EAAAuB,GAEAjB,IAAAE,GACAW,EAAAnB,EAAAQ,GAAAD,OACAnC,SAAAkC,EACAW,EAAAjB,EAAAuB,GACAxF,EAAAuE,GACAQ,EAAAd,EAAAuB,EAAAjB,GAEAW,EAAAjB,EAAAuB,GAKA,QAAAtB,GAAAD,EAAAU,GACAV,IAAAU,EACAS,EAAAnB,EAAAE,KACArE,EAAA6E,GACAY,EAAAtB,EAAAU,EAAAL,EAAAK,IAEAO,EAAAjB,EAAAU,GAIA,QAAAiB,GAAA3B,GACAA,EAAA4B,UACA5B,EAAA4B,SAAA5B,EAAAP,SAGAoC,EAAA7B,GAGA,QAAAiB,GAAAjB,EAAAU,GACAV,EAAAd,SAAA4C,KAEA9B,EAAAP,QAAAiB,EACAV,EAAAd,OAAAC,GAEA,IAAAa,EAAA+B,aAAAC,QACA3F,EAAAwF,EAAA7B,IAIA,QAAAmB,GAAAnB,EAAAkB,GACAlB,EAAAd,SAAA4C,KACA9B,EAAAd,OAAAE,GACAY,EAAAP,QAAAyB,EAEA7E,EAAAsF,EAAA3B,IAGA,QAAAJ,GAAAb,EAAAM,EAAAR,EAAAC,GACA,GAAAmD,GAAAlD,EAAAgD,aACAC,EAAAC,EAAAD,MAEAjD,GAAA6C,SAAA,KAEAK,EAAAD,GAAA3C,EACA4C,EAAAD,EAAA7C,IAAAN,EACAoD,EAAAD,EAAA5C,IAAAN,EAEA,IAAAkD,GAAAjD,EAAAG,QACA7C,EAAAwF,EAAA9C,GAIA,QAAA8C,GAAA7B,GACA,GAAAiC,GAAAjC,EAAA+B,aACAG,EAAAlC,EAAAd,MAEA,IAAA,IAAA+C,EAAAD,OAAA,CAIA,IAAA,GAFA3C,GAAApB,EAAAkE,EAAAnC,EAAAP,QAEA1B,EAAA,EAAAA,EAAAkE,EAAAD,OAAAjE,GAAA,EACAsB,EAAA4C,EAAAlE,GACAE,EAAAgE,EAAAlE,EAAAmE,GAEA7C,EACAM,EAAAuC,EAAA7C,EAAApB,EAAAkE,GAEAlE,EAAAkE,EAIAnC,GAAA+B,aAAAC,OAAA,GAGA,QAAAI,KACApD,KAAAuB,MAAA,KAKA,QAAA8B,GAAApE,EAAAkE,GACA,IACA,MAAAlE,GAAAkE,GACA,MAAAxD,GAEA,MADA2D,IAAA/B,MAAA5B,EACA2D,IAIA,QAAA3C,GAAAuC,EAAAlC,EAAA/B,EAAAkE,GACA,GACAzB,GAAAH,EAAAgC,EAAAC,EADAC,EAAA1G,EAAAkC,EAGA,IAAAwE,GAWA,GAVA/B,EAAA2B,EAAApE,EAAAkE,GAEAzB,IAAA4B,IACAE,GAAA,EACAjC,EAAAG,EAAAH,MACAG,EAAA,MAEA6B,GAAA,EAGAvC,IAAAU,EAEA,WADAS,GAAAnB,EAAAI,SAKAM,GAAAyB,EACAI,GAAA,CAGAvC,GAAAd,SAAA4C,KAEAW,GAAAF,EACAtC,EAAAD,EAAAU,GACA8B,EACArB,EAAAnB,EAAAO,GACA2B,IAAA/C,GACA8B,EAAAjB,EAAAU,GACAwB,IAAA9C,IACA+B,EAAAnB,EAAAU,IAIA,QAAAgC,GAAA1C,EAAA2C,GACA,IACAA,EAAA,SAAAjC,GACAT,EAAAD,EAAAU,IACA,SAAAQ,GACAC,EAAAnB,EAAAkB,KAEA,MAAAvC,GACAwC,EAAAnB,EAAArB,IAIA,QAAAiE,GAAAC,GACA,MAAA,IAAAC,IAAA9D,KAAA6D,GAAA7C,QAGA,QAAA+C,GAAAF,GAaA,QAAAhE,GAAA6B,GACAT,EAAAD,EAAAU,GAGA,QAAA5B,GAAAoC,GACAC,EAAAnB,EAAAkB,GAhBA,GAAAnB,GAAAf,KAEAgB,EAAA,GAAAD,GAAAR,EAEA,KAAAyD,EAAAH,GAEA,MADA1B,GAAAnB,EAAA,GAAAG,WAAA,oCACAH,CAaA,KAAA,GAVAgC,GAAAa,EAAAb,OAUAjE,EAAA,EAAAiC,EAAAd,SAAA4C,IAAAE,EAAAjE,EAAAA,IACA6B,EAAAG,EAAA0B,QAAAoB,EAAA9E,IAAAK,OAAAS,EAAAC,EAGA,OAAAkB,GAGA,QAAAiD,GAAA/B,GAEA,GAAAnB,GAAAf,KACAgB,EAAA,GAAAD,GAAAR,EAEA,OADA4B,GAAAnB,EAAAkB,GACAlB,EAMA,QAAAkD,KACA,KAAA,IAAA/C,WAAA,sFAGA,QAAAgD,KACA,KAAA,IAAAhD,WAAA,yHA2GA,QAAAiD,GAAAT,GACA3D,KAAAqE,IAAAC,KACAtE,KAAAE,OAAAd,OACAY,KAAAS,QAAArB,OACAY,KAAA+C,gBAEAxC,IAAAoD,IACA,kBAAAA,IAAAO,IACAlE,eAAAoE,GAAAV,EAAA1D,KAAA2D,GAAAQ,KAkPA,QAAAI,GAAAxD,EAAAyD,GACAxE,KAAAyE,qBAAA1D,EACAf,KAAAgB,QAAA,GAAAD,GAAAR,GAEAmE,MAAAC,QAAAH,IACAxE,KAAA4E,OAAAJ,EACAxE,KAAAgD,OAAAwB,EAAAxB,OACAhD,KAAA6E,WAAAL,EAAAxB,OAEAhD,KAAAS,QAAA,GAAAiE,OAAA1E,KAAAgD,QAEA,IAAAhD,KAAAgD,OACAf,EAAAjC,KAAAgB,QAAAhB,KAAAS,UAEAT,KAAAgD,OAAAhD,KAAAgD,QAAA,EACAhD,KAAA8E,aACA,IAAA9E,KAAA6E,YACA5C,EAAAjC,KAAAgB,QAAAhB,KAAAS,WAIA0B,EAAAnC,KAAAgB,QAAAhB,KAAA+E,oBAqEA,QAAAC,KACA,GAAAC,EAEA,IAAA,mBAAAC,QACAD,EAAAC,WACA,IAAA,mBAAAC,MACAF,EAAAE,SAEA,KACAF,EAAAG,SAAA,iBACA,MAAAzF,GACA,KAAA,IAAA0F,OAAA,4EAIA,GAAAC,GAAAL,EAAAM,UAEAD,GAAA,qBAAAE,OAAAC,UAAAC,SAAA7D,KAAAyD,EAAA7C,YAAA6C,EAAAK,QAIAV,EAAAM,QAAAK,IA/4BA,GAAAC,EAMAA,GALAnB,MAAAC,QAKAD,MAAAC,QAJA,SAAA7H,GACA,MAAA,mBAAA0I,OAAAC,UAAAC,SAAA7D,KAAA/E,GAMA,IAEAa,GACAT,EAwGA4I,EA3GA9B,EAAA6B,EACA7G,EAAA,EAIA3B,EAAA,SAAA4B,EAAAE,GACAD,EAAAF,GAAAC,EACAC,EAAAF,EAAA,GAAAG,EACAH,GAAA,EACA,IAAAA,IAIA9B,EACAA,EAAAO,GAEAqI,MAaAC,EAAA,mBAAAC,QAAAA,OAAA5G,OACA6G,EAAAF,MACAhI,EAAAkI,EAAAC,kBAAAD,EAAAE,uBACAC,EAAA,mBAAA7I,UAAA,wBAAAmI,SAAA7D,KAAAtE,SAGA8I,EAAA,mBAAAC,oBACA,mBAAAC,gBACA,mBAAA/H,gBA4CAU,EAAA,GAAAwF,OAAA,IA6BAoB,GADAM,EACA9I,IACAS,EACAH,IACAyI,EACA/H,IACAc,SAAA2G,GAAA,kBAAAxG,SACAF,IAEAR,GAwBA,IAAA2D,GAAA5C,EAaA8C,EAAA7B,EAIAiC,GAAA,OACA3C,GAAA,EACAC,GAAA,EAEAoB,GAAA,GAAA4B,GAkKAE,GAAA,GAAAF,GAgEAoD,GAAA5C,EA4BA6C,GAAA1C,EAQA2C,GAAAzC,EAEAK,GAAA,EAUAsB,GAAAxB,CAoHAA,GAAAuC,IAAAH,GACApC,EAAAwC,KAAAH,GACArC,EAAA3B,QAAAC,EACA0B,EAAAyC,OAAAH,GACAtC,EAAA0C,cAAA9J,EACAoH,EAAA2C,SAAA5J,EACAiH,EAAA4C,MAAA3J,EAEA+G,EAAAqB,WACAnF,YAAA8D,EAmMA9C,KAAAkB,EA6BAyE,QAAA,SAAAnH,GACA,MAAAE,MAAAsB,KAAA,KAAAxB,IAGA,IAAAgE,IAAAS,CA0BAA,GAAAkB,UAAAV,iBAAA,WACA,MAAA,IAAAM,OAAA,4CAGAd,EAAAkB,UAAAX,WAAA,WAIA,IAAA,GAHA9B,GAAAhD,KAAAgD,OACAwB,EAAAxE,KAAA4E,OAEA7F,EAAA,EAAAiB,KAAAE,SAAA4C,IAAAE,EAAAjE,EAAAA,IACAiB,KAAAkH,WAAA1C,EAAAzF,GAAAA,IAIAwF,EAAAkB,UAAAyB,WAAA,SAAAC,EAAApI,GACA,GAAAqI,GAAApH,KAAAyE,qBACAhC,EAAA2E,EAAA3E,OAEA,IAAAA,IAAAC,EAAA,CACA,GAAApB,GAAAD,EAAA8F,EAEA,IAAA7F,IAAAkB,GACA2E,EAAAjH,SAAA4C,GACA9C,KAAAqH,WAAAF,EAAAjH,OAAAnB,EAAAoI,EAAA1G,aACA,IAAA,kBAAAa,GACAtB,KAAA6E,aACA7E,KAAAS,QAAA1B,GAAAoI,MACA,IAAAC,IAAAxB,GAAA,CACA,GAAA5E,GAAA,GAAAoG,GAAA7G,EACA+B,GAAAtB,EAAAmG,EAAA7F,GACAtB,KAAAsH,cAAAtG,EAAAjC,OAEAiB,MAAAsH,cAAA,GAAAF,GAAA,SAAA3E,GAAAA,EAAA0E,KAAApI,OAGAiB,MAAAsH,cAAA7E,EAAA0E,GAAApI,IAIAwF,EAAAkB,UAAA4B,WAAA,SAAApH,EAAAlB,EAAA2C,GACA,GAAAV,GAAAhB,KAAAgB,OAEAA,GAAAd,SAAA4C,KACA9C,KAAA6E,aAEA5E,IAAAG,GACA+B,EAAAnB,EAAAU,GAEA1B,KAAAS,QAAA1B,GAAA2C,GAIA,IAAA1B,KAAA6E,YACA5C,EAAAjB,EAAAhB,KAAAS,UAIA8D,EAAAkB,UAAA6B,cAAA,SAAAtG,EAAAjC,GACA,GAAAwI,GAAAvH,IAEAY,GAAAI,EAAA5B,OAAA,SAAAsC,GACA6F,EAAAF,WAAAlH,GAAApB,EAAA2C,IACA,SAAAQ,GACAqF,EAAAF,WAAAjH,GAAArB,EAAAmD,KA0BA,IAAAsF,IAAAxC,EAEAyC,IACAlC,QAAAK,GACA8B,SAAAF,GAIA,mBAAAG,SAAAA,OAAA,IACAA,OAAA,WAAA,MAAAF,MACA,mBAAAG,SAAAA,OAAA,QACAA,OAAA,QAAAH,GACA,mBAAAzH,QACAA,KAAA,WAAAyH,IAGAD,OACA3F,KAAA7B,MCv7BA,WA2BA,QAAA6H,GAAAC,EAAAC,GAuCA,QAAAC,GAAAC,GACA,GAAAD,EAAAC,KAAAC,EAEA,MAAAF,GAAAC,EAEA,IAAAE,EACA,IAAA,yBAAAF,EAGAE,EAAA,KAAA,IAAA,OACA,IAAA,QAAAF,EAGAE,EAAAH,EAAA,mBAAAA,EAAA,kBACA,CACA,GAAAtG,GAAA0G,EAAA,oDAEA,IAAA,kBAAAH,EAAA,CACA,GAAAI,GAAAN,EAAAM,UAAAC,EAAA,kBAAAD,IAAAE,CACA,IAAAD,EAAA,EAEA5G,EAAA,WACA,MAAA,KACA8G,OAAA9G,CACA,KACA4G,EAGA,MAAAD,EAAA,IAGA,MAAAA,EAAA,GAAAI,KACA,MAAAJ,EAAA,GAAAK,KAKAL,EAAAM,KAAAT,GAGAG,EAAAH,KAAAA,GAGAG,MAAAH,GAMA,MAAAG,EAAA3G,IACA,OAAA2G,GAAA3G,KAGA,UAAA2G,GAAAH,KAEA,QAAAG,EAAA,OAKA,oBAAAA,GAAAH,EAAAS,EAAA,QAGAN,GAAAO,GAAAlH,GAAA,GAAA,EAAA,KAAA,oBAAA0G,GAEA,MAAAC,EAAA,KAAA3G,IACA,iBAAA2G,GAAA,EAAA,GAAA,KAAA,IAGA,iCAAAA,EAAA,GAAAQ,GAAA,WAEA,iCAAAR,EAAA,GAAAQ,GAAA,UAGA,iCAAAR,EAAA,GAAAQ,GAAA,gBAGA,8BAAAR,EAAA,GAAAQ,GAAA,KACA,MAAAC,GACAR,GAAA,GAGAH,EAAAG,EAGA,GAAA,cAAAL,EAAA,CACA,GAAAc,GAAAhB,EAAAgB,KACA,IAAA,kBAAAA,GACA,IAIA,GAAA,IAAAA,EAAA,OAAAA,GAAA,GAAA,CAEArH,EAAAqH,EAAAX,EACA,IAAAY,GAAA,GAAAtH,EAAA,EAAAsB,QAAA,IAAAtB,EAAA,EAAA,EACA,IAAAsH,EAAA,CACA,IAEAA,GAAAD,EAAA,OACA,MAAAD,IACA,GAAAE,EACA,IAIAA,EAAA,IAAAD,EAAA,MACA,MAAAD,IAEA,GAAAE,EACA,IAIAA,EAAA,IAAAD,EAAA,MACA,MAAAD,OAIA,MAAAA,GACAE,GAAA,EAGAb,EAAAa,GAGA,MAAAhB,GAAAC,KAAAE,EApKAL,IAAAA,EAAAmB,EAAA,UACAlB,IAAAA,EAAAkB,EAAA,SAGA,IAAAR,GAAAX,EAAA,QAAAmB,EAAA,OACAP,EAAAZ,EAAA,QAAAmB,EAAA,OACAzD,EAAAsC,EAAA,QAAAmB,EAAA,OACAJ,EAAAf,EAAA,MAAAmB,EAAA,KACAC,EAAApB,EAAA,aAAAmB,EAAA,YACA9H,EAAA2G,EAAA,WAAAmB,EAAA,UACAE,EAAArB,EAAA,MAAAmB,EAAA,KACAG,EAAAtB,EAAA,MAAAmB,EAAA,IAGA,iBAAAG,IAAAA,IACArB,EAAAM,UAAAe,EAAAf,UACAN,EAAAgB,MAAAK,EAAAL,MAIA,IAEAM,GAAAC,EAAApB,EAFAqB,EAAA/D,EAAAC,UACAkD,EAAAY,EAAA7D,SAIA6C,EAAA,GAAAM,GAAA,iBACA,KAGAN,EAAA,SAAAA,EAAAiB,kBAAA,IAAAjB,EAAAkB,eAAA,IAAAlB,EAAAmB,cAIA,IAAAnB,EAAAoB,eAAA,IAAApB,EAAAqB,iBAAA,GAAArB,EAAAsB,iBAAA,KAAAtB,EAAAuB,qBACA,MAAAhB,IAqIA,IAAAd,EAAA,QAAA,CAEA,GAAA+B,GAAA,oBACAC,EAAA,gBACAC,EAAA,kBACAC,EAAA,kBACAC,EAAA,iBACAC,EAAA,mBAGAC,EAAArC,EAAA,wBAGA,KAAAO,EACA,GAAA+B,GAAAnB,EAAAmB,MAGAC,GAAA,EAAA,GAAA,GAAA,GAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,KAGAC,EAAA,SAAAC,EAAAC,GACA,MAAAH,GAAAG,GAAA,KAAAD,EAAA,MAAAH,GAAAG,EAAA,MAAAC,IAAAA,EAAA,KAAA,GAAAJ,GAAAG,EAAA,KAAAC,GAAA,KAAAJ,GAAAG,EAAA,KAAAC,GAAA,KAwHA,KAlHArB,EAAAE,EAAAoB,kBACAtB,EAAA,SAAAuB,GACA,GAAAtK,GAAAuK,IA4BA,QA3BAA,EAAAC,UAAA,KAAAD,EAAAC,WAGApF,SAAA,GACAmF,GAAAnF,UAAAiD,EAGAU,EAAA,SAAAuB,GAIA,GAAAG,GAAA/K,KAAA8K,UAAAtK,EAAAoK,KAAA5K,KAAA8K,UAAA,KAAA9K,KAGA,OADAA,MAAA8K,UAAAC,EACAvK,IAIAF,EAAAuK,EAAAvK,YAGA+I,EAAA,SAAAuB,GACA,GAAA7K,IAAAC,KAAAM,aAAAA,GAAAmF,SACA,OAAAmF,KAAA5K,SAAA4K,IAAA7K,IAAAC,KAAA4K,KAAA7K,EAAA6K,MAGAC,EAAA,KACAxB,EAAAxH,KAAA7B,KAAA4K,KAMAtB,EAAA,SAAAxI,EAAA7B,GACA,GAAA+L,GAAAH,EAAAD,EAAAK,EAAA,GAKAD,EAAA,WACAhL,KAAAkL,QAAA,IACAzF,UAAAyF,QAAA,EAGAL,EAAA,GAAAG,EACA,KAAAJ,IAAAC,GAEAxB,EAAAxH,KAAAgJ,EAAAD,IACAK,GAsDA,OAnDAD,GAAAH,EAAA,KAGAI,EAoBA3B,EAFA,GAAA2B,EAEA,SAAAnK,EAAA7B,GAEA,GAAA2L,GAAAC,KAAAM,EAAAxC,EAAA9G,KAAAf,IAAAiJ,CACA,KAAAa,IAAA9J,GAIAqK,GAAA,aAAAP,GAAAvB,EAAAxH,KAAAgJ,EAAAD,MAAAC,EAAAD,GAAA,KAAAvB,EAAAxH,KAAAf,EAAA8J,IACA3L,EAAA2L,IAMA,SAAA9J,EAAA7B,GACA,GAAA2L,GAAAQ,EAAAD,EAAAxC,EAAA9G,KAAAf,IAAAiJ,CACA,KAAAa,IAAA9J,GACAqK,GAAA,aAAAP,IAAAvB,EAAAxH,KAAAf,EAAA8J,KAAAQ,EAAA,gBAAAR,IACA3L,EAAA2L,IAKAQ,GAAA/B,EAAAxH,KAAAf,EAAA8J,EAAA,iBACA3L,EAAA2L,KA1CAC,GAAA,UAAA,WAAA,iBAAA,uBAAA,gBAAA,iBAAA,eAGAvB,EAAA,SAAAxI,EAAA7B,GACA,GAAA2L,GAAA5H,EAAAmI,EAAAxC,EAAA9G,KAAAf,IAAAiJ,EACAsB,GAAAF,GAAA,kBAAArK,GAAAR,aAAAgL,QAAAxK,GAAA6J,iBAAA7J,EAAA6J,gBAAAtB,CACA,KAAAuB,IAAA9J,GAGAqK,GAAA,aAAAP,IAAAS,EAAAxJ,KAAAf,EAAA8J,IACA3L,EAAA2L,EAIA,KAAA5H,EAAA6H,EAAA7H,OAAA4H,EAAAC,IAAA7H,GAAAqI,EAAAxJ,KAAAf,EAAA8J,IAAA3L,EAAA2L,OAgCAtB,EAAAxI,EAAA7B,KASA+I,EAAA,kBAAA,CAEA,GAAAuD,IACAC,GAAA,OACAC,GAAA,MACAC,EAAA,MACAC,GAAA,MACAC,GAAA,MACAC,GAAA,MACAC,EAAA,OAKAC,EAAA,SACAC,EAAA,SAAAC,EAAAvK,GAGA,OAAAqK,GAAArK,GAAA,IAAAwK,OAAAD,IAOAE,EAAA,QACAC,EAAA,SAAA1K,GAGA,IAFA,GAAAlB,GAAA,IAAA6L,EAAA,EAAArJ,EAAAtB,EAAAsB,OAAAsJ,GAAAjC,GAAArH,EAAA,GACAuJ,EAAAD,IAAAjC,EAAA3I,EAAA8K,MAAA,IAAA9K,GACAsB,EAAAqJ,EAAAA,IAAA,CACA,GAAAI,GAAA/K,EAAAgL,WAAAL,EAGA,QAAAI,GACA,IAAA,GAAA,IAAA,GAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IACAjM,GAAA+K,EAAAkB,EACA,MACA,SACA,GAAA,GAAAA,EAAA,CACAjM,GAAA2L,EAAAH,EAAA,EAAAS,EAAA/G,SAAA,IACA,OAEAlF,GAAA8L,EAAAC,EAAAF,GAAA3K,EAAAiL,OAAAN,IAGA,MAAA7L,GAAA,KAKAoM,EAAA,SAAAhC,EAAA9J,EAAA7B,EAAA4N,EAAAC,EAAAC,EAAAC,GACA,GAAAtL,GAAAuL,EAAAxC,EAAAC,EAAAwC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAApB,EAAArJ,EAAA0K,EAAAlN,CACA,KAEAkB,EAAAZ,EAAA8J,GACA,MAAA9B,IACA,GAAA,gBAAApH,IAAAA,EAEA,GADAuL,EAAAtE,EAAA9G,KAAAH,GACAuL,GAAAjD,GAAAX,EAAAxH,KAAAH,EAAA,UA4CA,kBAAAA,GAAA8G,SAAAyE,GAAAhD,GAAAgD,GAAA/C,GAAA+C,GAAA9C,GAAAd,EAAAxH,KAAAH,EAAA,aAKAA,EAAAA,EAAA8G,OAAAoC,QAhDA,IAAAlJ,EAAA,GAAA,GAAA,EAAA,EAAAA,EAAA,CAIA,GAAA8I,EAAA,CAKA,IADA0C,EAAA5C,EAAA5I,EAAA,OACA+I,EAAAH,EAAA4C,EAAA,UAAA,KAAA,EAAA1C,EAAAC,EAAA,EAAA,IAAAyC,EAAAzC,KACA,IAAAC,EAAAJ,GAAA4C,EAAA1C,EAAAC,EAAA,IAAA,OAAAD,EAAAC,EAAAC,EAAA,IAAAwC,EAAAxC,KACAwC,EAAA,EAAAA,EAAA1C,EAAAC,EAAAC,GAKAyC,GAAAzL,EAAA,MAAA,OAAA,MAGA0L,EAAA9C,EAAA6C,EAAA,MAAA,GACAE,EAAA/C,EAAA6C,EAAA,KAAA,GACAG,EAAAhD,EAAA6C,EAAA,KAAA,GACAI,EAAAJ,EAAA,QAEA1C,GAAA/I,EAAA8H,iBACAkB,EAAAhJ,EAAA+H,cACAyD,EAAAxL,EAAAgI,aACA0D,EAAA1L,EAAAiI,cACA0D,EAAA3L,EAAAkI,gBACA0D,EAAA5L,EAAAmI,gBACA0D,EAAA7L,EAAAoI,oBAGApI,IAAA,GAAA+I,GAAAA,GAAA,KAAA,EAAAA,EAAA,IAAA,KAAAuB,EAAA,EAAA,EAAAvB,GAAAA,EAAAA,GAAAuB,EAAA,EAAAvB,IACA,IAAAuB,EAAA,EAAAtB,EAAA,GAAA,IAAAsB,EAAA,EAAAkB,GAGA,IAAAlB,EAAA,EAAAoB,GAAA,IAAApB,EAAA,EAAAqB,GAAA,IAAArB,EAAA,EAAAsB,GAEA,IAAAtB,EAAA,EAAAuB,GAAA,QAEA7L,GAAA,IAeA,IALAzC,IAGAyC,EAAAzC,EAAA4C,KAAAf,EAAA8J,EAAAlJ,IAEA,OAAAA,EACA,MAAA,MAGA,IADAuL,EAAAtE,EAAA9G,KAAAH,GACAuL,GAAA7C,EAEA,MAAA,GAAA1I,CACA,IAAAuL,GAAAhD,EAGA,MAAAvI,GAAA,GAAA,GAAA,EAAA,EAAAA,EAAA,GAAAA,EAAA,MACA,IAAAuL,GAAA/C,EAEA,MAAAkC,GAAA,GAAA1K,EAGA,IAAA,gBAAAA,GAAA,CAGA,IAAAsB,EAAAgK,EAAAhK,OAAAA,KACA,GAAAgK,EAAAhK,KAAAtB,EAEA,KAAAP,IASA,IALA6L,EAAAW,KAAAjM,GACA8L,KAEAE,EAAAX,EACAA,GAAAD,EACAG,GAAA9C,EAAA,CAEA,IAAAkC,EAAA,EAAArJ,EAAAtB,EAAAsB,OAAAA,EAAAqJ,EAAAA,IACAoB,EAAAb,EAAAP,EAAA3K,EAAAzC,EAAA4N,EAAAC,EAAAC,EAAAC,GACAQ,EAAAG,KAAAF,IAAAvF,EAAA,OAAAuF,EAEAjN,GAAAgN,EAAAxK,OAAA8J,EAAA,MAAAC,EAAAS,EAAAI,KAAA,MAAAb,GAAA,KAAAW,EAAA,IAAA,IAAAF,EAAAI,KAAA,KAAA,IAAA,SAKAtE,GAAAuD,GAAAnL,EAAA,SAAAkJ,GACA,GAAA6C,GAAAb,EAAAhC,EAAAlJ,EAAAzC,EAAA4N,EAAAC,EAAAC,EAAAC,EACAS,KAAAvF,GAOAsF,EAAAG,KAAAvB,EAAAxB,GAAA,KAAAkC,EAAA,IAAA,IAAAW,KAGAjN,EAAAgN,EAAAxK,OAAA8J,EAAA,MAAAC,EAAAS,EAAAI,KAAA,MAAAb,GAAA,KAAAW,EAAA,IAAA,IAAAF,EAAAI,KAAA,KAAA,IAAA,IAIA,OADAZ,GAAAa,MACArN,GAKAuH,GAAAM,UAAA,SAAAyF,EAAAC,EAAA9B,GACA,GAAAa,GAAA7N,EAAA4N,EAAAI,CACA,IAAA3B,QAAAyC,KAAAA,EACA,IAAAd,EAAAtE,EAAA9G,KAAAkM,KAAAhE,EACA9K,EAAA8O,MACA,IAAAd,GAAA9C,EAAA,CAEA0C,IACA,KAAA,GAAAnL,GAAA2K,EAAA,EAAArJ,EAAA+K,EAAA/K,OAAAA,EAAAqJ,EAAA3K,EAAAqM,EAAA1B,KAAAY,EAAAtE,EAAA9G,KAAAH,IAAAuL,GAAA/C,GAAA+C,GAAAhD,KAAA4C,EAAAnL,GAAA,KAGA,GAAAuK,EACA,IAAAgB,EAAAtE,EAAA9G,KAAAoK,KAAAhC,GAGA,IAAAgC,GAAAA,EAAA,GAAA,EACA,IAAAa,EAAA,GAAAb,EAAA,KAAAA,EAAA,IAAAa,EAAA9J,OAAAiJ,EAAAa,GAAA,UAEAG,IAAA/C,IACA4C,EAAAb,EAAAjJ,QAAA,GAAAiJ,EAAAA,EAAAC,MAAA,EAAA,IAMA,OAAAU,GAAA,IAAAlL,KAAAA,EAAA,IAAAoM,EAAApM,GAAAzC,EAAA4N,EAAAC,EAAA,QAKA,IAAA9E,EAAA,cAAA,CACA,GAgBAgG,GAAAC,EAhBAC,EAAAxF,EAAAwF,aAIAC,GACA3C,GAAA,KACAC,GAAA,IACA2C,GAAA,IACAC,GAAA,KACAC,IAAA,IACAC,IAAA,KACAC,IAAA,KACAC,IAAA,MAOAC,EAAA,WAEA,KADAV,GAAAC,EAAA,KACA/E,KAMAyF,EAAA,WAEA,IADA,GAAAjN,GAAAkN,EAAAC,EAAAC,EAAArC,EAAAqB,EAAAG,EAAAjL,EAAA8K,EAAA9K,OACAA,EAAAgL,GAEA,OADAvB,EAAAqB,EAAApB,WAAAsB,IAEA,IAAA,GAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAGAA,GACA,MACA,KAAA,KAAA,IAAA,KAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAKA,MAFAtM,GAAA2I,EAAAyD,EAAAnB,OAAAqB,GAAAF,EAAAE,GACAA,IACAtM,CACA,KAAA,IAKA,IAAAA,EAAA,IAAAsM,IAAAhL,EAAAgL,GAEA,GADAvB,EAAAqB,EAAApB,WAAAsB,GACA,GAAAvB,EAGAiC,QACA,IAAA,IAAAjC,EAKA,OADAA,EAAAqB,EAAApB,aAAAsB,IAEA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,KAAA,IAAA,KAAA,IAAA,KAAA,IAAA,KAEAtM,GAAAyM,EAAA1B,GACAuB,GACA,MACA,KAAA,KAKA,IADAY,IAAAZ,EACAa,EAAAb,EAAA,EAAAa,EAAAb,EAAAA,IACAvB,EAAAqB,EAAApB,WAAAsB,GAGAvB,GAAA,IAAA,IAAAA,GAAAA,GAAA,IAAA,KAAAA,GAAAA,GAAA,IAAA,IAAAA,GAEAiC,GAIAhN,IAAAwM,EAAA,KAAAJ,EAAA5B,MAAA0C,EAAAZ,GACA,MACA,SAEAU,QAEA,CACA,GAAA,IAAAjC,EAGA,KAKA,KAHAA,EAAAqB,EAAApB,WAAAsB,GACAY,EAAAZ,EAEAvB,GAAA,IAAA,IAAAA,GAAA,IAAAA,GACAA,EAAAqB,EAAApB,aAAAsB,EAGAtM,IAAAoM,EAAA5B,MAAA0C,EAAAZ,GAGA,GAAA,IAAAF,EAAApB,WAAAsB,GAGA,MADAA,KACAtM,CAGAgN,IACA,SASA,GAPAE,EAAAZ,EAEA,IAAAvB,IACAqC,GAAA,EACArC,EAAAqB,EAAApB,aAAAsB,IAGAvB,GAAA,IAAA,IAAAA,EAAA,CAQA,IANA,IAAAA,IAAAA,EAAAqB,EAAApB,WAAAsB,EAAA,GAAAvB,GAAA,IAAA,IAAAA,IAEAiC,IAEAI,GAAA,EAEA9L,EAAAgL,IAAAvB,EAAAqB,EAAApB,WAAAsB,GAAAvB,GAAA,IAAA,IAAAA,GAAAuB,KAGA,GAAA,IAAAF,EAAApB,WAAAsB,GAAA,CAGA,IAFAa,IAAAb,EAEAhL,EAAA6L,IAAApC,EAAAqB,EAAApB,WAAAmC,GAAApC,GAAA,IAAA,IAAAA,GAAAoC,KACAA,GAAAb,GAEAU,IAEAV,EAAAa,EAKA,GADApC,EAAAqB,EAAApB,WAAAsB,GACA,KAAAvB,GAAA,IAAAA,EAAA,CAQA,IAPAA,EAAAqB,EAAApB,aAAAsB,IAGA,IAAAvB,GAAA,IAAAA,IACAuB,IAGAa,EAAAb,EAAAhL,EAAA6L,IAAApC,EAAAqB,EAAApB,WAAAmC,GAAApC,GAAA,IAAA,IAAAA,GAAAoC,KACAA,GAAAb,GAEAU,IAEAV,EAAAa,EAGA,OAAAf,EAAA5B,MAAA0C,EAAAZ,GAOA,GAJAc,GACAJ,IAGA,QAAAZ,EAAA5B,MAAA8B,EAAAA,EAAA,GAEA,MADAA,IAAA,GACA,CACA,IAAA,SAAAF,EAAA5B,MAAA8B,EAAAA,EAAA,GAEA,MADAA,IAAA,GACA,CACA,IAAA,QAAAF,EAAA5B,MAAA8B,EAAAA,EAAA,GAEA,MADAA,IAAA,EACA,IAGAU,KAKA,MAAA,KAIAK,EAAA,SAAArN,GACA,GAAA8L,GAAAwB,CAKA,IAJA,KAAAtN,GAEAgN,IAEA,gBAAAhN,GAAA,CACA,GAAA,MAAA2I,EAAA3I,EAAAiL,OAAA,GAAAjL,EAAA,IAEA,MAAAA,GAAAwK,MAAA,EAGA,IAAA,KAAAxK,EAAA,CAGA,IADA8L,KAEA9L,EAAAiN,IAEA,KAAAjN,EAHAsN,IAAAA,GAAA,GASAA,IACA,KAAAtN,GACAA,EAAAiN,IACA,KAAAjN,GAEAgN,KAIAA,KAIA,KAAAhN,GACAgN,IAEAlB,EAAAG,KAAAoB,EAAArN,GAEA,OAAA8L,GACA,GAAA,KAAA9L,EAAA,CAGA,IADA8L,KAEA9L,EAAAiN,IAEA,KAAAjN,EAHAsN,IAAAA,GAAA,GAQAA,IACA,KAAAtN,GACAA,EAAAiN,IACA,KAAAjN,GAEAgN,KAIAA,MAMA,KAAAhN,GAAA,gBAAAA,IAAA,MAAA2I,EAAA3I,EAAAiL,OAAA,GAAAjL,EAAA,KAAA,KAAAiN,MACAD,IAEAlB,EAAA9L,EAAAwK,MAAA,IAAA6C,EAAAJ,IAEA,OAAAnB,GAGAkB,IAEA,MAAAhN,IAIAuN,EAAA,SAAAnB,EAAAlD,EAAA3L,GACA,GAAAwO,GAAAyB,EAAApB,EAAAlD,EAAA3L,EACAwO,KAAAvF,QACA4F,GAAAlD,GAEAkD,EAAAlD,GAAA6C,GAOAyB,EAAA,SAAApB,EAAAlD,EAAA3L,GACA,GAAA+D,GAAAtB,EAAAoM,EAAAlD,EACA,IAAA,gBAAAlJ,IAAAA,EAIA,GAAAiH,EAAA9G,KAAAH,IAAAyI,EACA,IAAAnH,EAAAtB,EAAAsB,OAAAA,KACAiM,EAAAvN,EAAAsB,EAAA/D,OAGAqK,GAAA5H,EAAA,SAAAkJ,GACAqE,EAAAvN,EAAAkJ,EAAA3L,IAIA,OAAAA,GAAA4C,KAAAiM,EAAAlD,EAAAlJ,GAIAqG,GAAAgB,MAAA,SAAA+E,EAAA7O,GACA,GAAAuB,GAAAkB,CAUA,OATAsM,GAAA,EACAC,EAAA,GAAAH,EACAtN,EAAAuO,EAAAJ,KAEA,KAAAA,KACAD,IAGAV,EAAAC,EAAA,KACAhP,GAAA0J,EAAA9G,KAAA5C,IAAA8K,EAAAmF,GAAAxN,KAAAA,EAAA,IAAAlB,EAAAkB,GAAA,GAAAzC,GAAAuB,IAMA,MADAuH,GAAA,aAAAF,EACAE,EA31BA,GAAAoH,GAAA,kBAAAxH,SAAAA,OAAAyH,IAGA9D,GACA+D,YAAA,EACAvO,QAAA,GAIAwO,EAAAhE,QAAAvD,WAAAA,UAAAA,QAAAwH,UAAAxH,QAMAkB,EAAAqC,QAAAtF,UAAAA,QAAAhG,KACAwP,EAAAF,GAAAhE,QAAA1D,UAAAA,SAAAA,OAAA2H,UAAA,gBAAArK,SAAAA,MA80BA,KA50BAsK,GAAAA,EAAA,SAAAA,GAAAA,EAAA,SAAAA,GAAAA,EAAA,OAAAA,IACAvG,EAAAuG,GA20BAF,IAAAH,EAEAtH,EAAAoB,EAAAqG,OACA,CAEA,GAAAlG,GAAAH,EAAAwG,KACAC,EAAAzG,EAAA,MACA0G,GAAA,EAEAC,EAAA/H,EAAAoB,EAAAA,EAAA,OAGA4G,WAAA,WAOA,MANAF,KACAA,GAAA,EACA1G,EAAAwG,KAAArG,EACAH,EAAA,MAAAyG,EACAtG,EAAAsG,EAAA,MAEAE,IAIA3G,GAAAwG,MACA1G,MAAA6G,EAAA7G,MACAV,UAAAuH,EAAAvH,WAKA8G,GACAxH,OAAA,WACA,MAAAiI,MAGA/N,KAAA7B,MCn4BA0E,MAAAC,UACAD,MAAAC,QAAA,SAAAxF,GACA,MAAA,mBAAAqG,OAAAC,UAAAC,SAAA7D,KAAA1C,KAIA,mBAAAoG,UACAuK,WAAApI,WAKAtC,SAAAK,UAAAsK,OACA3K,SAAAK,UAAAsK,KAAA,SAAAC,GACA,GAAA,kBAAAhQ,MACA,KAAA,IAAAmB,WAAA,uEAGA,IAAA8O,GAAAvL,MAAAe,UAAAyG,MAAArK,KAAAnB,UAAA,GACAwP,EAAAlQ,KACAmQ,EAAA,aAEAC,EAAA,WACA,MAAAF,GAAAG,MAAArQ,eAAAmQ,IAAAH,EAAAhQ,KAAAgQ,EACAC,EAAAK,OAAA5L,MAAAe,UAAAyG,MAAArK,KAAAnB,aAMA,OAHAyP,GAAA1K,UAAAzF,KAAAyF,UACA2K,EAAA3K,UAAA,GAAA0K,GAEAC,IAMA1L,MAAAe,UAAA8K,MACA7L,MAAAe,UAAA8K,IAAA,SAAAtR,EAAAuR,GACA,GAAA,SAAAxQ,MAAA,OAAAA,KACA,KAAA,IAAAmB,WAAA,8BAEA,IAEAsP,GAFAC,EAAAlL,OAAAxF,MACA2Q,EAAAD,EAAA1N,SAAA,CAEA,IAAA,kBAAA/D,GACA,KAAA,IAAAkC,WAAAlC,EAAA,qBAEAyB,WAAAsC,OAAA,IACAyN,EAAAD,EAMA,KAHA,GAAAI,GAAA,GAAAlM,OAAAiM,GACAE,EAAA,EAEAF,EAAAE,GAAA,CACA,GAAAC,GAAAC,CACAF,KAAAH,KACAI,EAAAJ,EAAAG,GACAE,EAAA9R,EAAA4C,KAAA4O,EAAAK,EAAAD,EAAAH,GACAE,EAAAC,GAAAE,GAEAF,IAGA,MAAAD,KAKAlM,MAAAe,UAAAsI,SACArJ,MAAAe,UAAAsI,OAAA,SAAA9O,GACA,GAAA,SAAAe,MAAA,OAAAA,KACA,KAAA,IAAAmB,WAAA,8BAGA,IAAA6P,GAAAxL,OAAAxF,MACA2Q,EAAAK,EAAAhO,SAAA,CACA,IAAA,kBAAA/D,GACA,KAAA,IAAAkC,WAAAlC,EAAA,qBAKA,KAAA,GAFAgS,MACAT,EAAA9P,UAAAsC,QAAA,EAAAtC,UAAA,GAAA,OACA3B,EAAA,EAAA4R,EAAA5R,EAAAA,IACA,GAAAA,IAAAiS,GAAA,CACA,GAAAE,GAAAF,EAAAjS,EACAE,GAAA4C,KAAA2O,EAAAU,EAAAnS,EAAAiS,IACAC,EAAAtD,KAAAuD,GAKA,MAAAD,KAKAvM,MAAAe,UAAA6D,UACA5E,MAAAe,UAAA6D,QAAA,SAAArK,EAAAuR,GACA,GAAAC,GAAAI,CACA,IAAA,OAAA7Q,MAAAZ,SAAAY,KACA,KAAA,IAAAmB,WAAA,+BAGA,IAAAuP,GAAAlL,OAAAxF,MACA2Q,EAAAD,EAAA1N,SAAA,CACA,IAAA,kBAAA/D,GACA,KAAA,IAAAkC,WAAAlC,EAAA,qBAOA,KAJAyB,UAAAsC,OAAA,IACAyN,EAAAD,GAEAK,EAAA,EACAF,EAAAE,GAAA,CACA,GAAAC,EACAD,KAAAH,KACAI,EAAAJ,EAAAG,GACA5R,EAAA4C,KAAA4O,EAAAK,EAAAD,EAAAH,IAEAG,QC1HA,SAAAlR,EAAAwR,GAAA,YAAA,mBAAAxJ,SAAAA,OAAAyH,IAAAzH,OAAA,gBAAAwJ,GAAA,gBAAApJ,SAAAH,OAAAG,QAAAoJ,IAAAxR,EAAAyR,WAAAD,KAAAnR,KAAA,WAAA,YAAA,SAAAL,GAAAA,GAAA,OAAA0R,MAAAC,WAAA3R,KAAA4R,SAAA5R,GAAA,QAAAwR,GAAAxR,EAAAwR,EAAA7R,EAAA0R,EAAAQ,EAAAzS,GAAA,SAAAY,GAAAK,KAAAyR,gBAAA9R,GAAA,SAAAwR,GAAAnR,KAAA0R,QAAAP,GAAA,SAAA7R,GAAAU,KAAA2R,YAAArS,GAAA,SAAA0R,GAAAhR,KAAA4R,cAAAZ,GAAA,SAAAQ,GAAAxR,KAAA6R,gBAAAL,GAAA,SAAAzS,GAAAiB,KAAA8R,UAAA/S,GAAA,MAAAoS,GAAA1L,WAAAsM,gBAAA,WAAA,MAAA/R,MAAAgS,cAAAP,gBAAA,SAAA9R,GAAAK,KAAAgS,aAAAtJ,OAAA/I,IAAAsS,QAAA,WAAA,MAAAjS,MAAAkS,MAAAR,QAAA,SAAA/R,GAAA,GAAA,mBAAA6F,OAAAC,UAAAC,SAAA7D,KAAAlC,GAAA,KAAA,IAAAwB,WAAA,wBAAAnB,MAAAkS,KAAAvS,GAAAwS,YAAA,WAAA,MAAAnS,MAAAoS,UAAAT,YAAA,SAAAhS,GAAAK,KAAAoS,SAAA1J,OAAA/I,IAAA0S,cAAA,WAAA,MAAArS,MAAAsS,YAAAV,cAAA,SAAAT,GAAA,IAAAxR,EAAAwR,GAAA,KAAA,IAAAhQ,WAAA,+BAAAnB,MAAAsS,WAAA7J,OAAA0I,IAAAoB,gBAAA,WAAA,MAAAvS,MAAAwS,cAAAX,gBAAA,SAAAV,GAAA,IAAAxR,EAAAwR,GAAA,KAAA,IAAAhQ,WAAA,iCAAAnB,MAAAwS,aAAA/J,OAAA0I,IAAAsB,UAAA,WAAA,MAAAzS,MAAA8N,QAAAgE,UAAA,SAAAnS,GAAAK,KAAA8N,OAAApF,OAAA/I,IAAA+F,SAAA,WAAA,GAAAyL,GAAAnR,KAAA+R,mBAAA,cAAAzS,EAAA,KAAAU,KAAAiS,eAAArE,KAAA,KAAA,IAAAoD,EAAAhR,KAAAmS,cAAA,IAAAnS,KAAAmS,cAAA,GAAAX,EAAA7R,EAAAK,KAAAqS,iBAAA,IAAArS,KAAAqS,gBAAA,GAAAtT,EAAAY,EAAAK,KAAAuS,mBAAA,IAAAvS,KAAAuS,kBAAA,EAAA,OAAApB,GAAA7R,EAAA0R,EAAAQ,EAAAzS,IAAAoS,GAAA,IAAAuB,WAAA,SAAA/S,GAAA,QAAAwR,GAAAH,GAAA,GAAA1R,EAAA0R,GAAA,MAAA1R,GAAA0R,GAAAjJ,OAAA,IAAAyJ,GAAAlS,EAAA0R,IAAAjJ,WAAA4K,GAAA3B,EAAA4B,QAAA,EAAA,OAAAjT,GAAAqR,GAAAnP,KAAA2P,EAAAzJ,QAAAyJ,EAAAA,EAAAzJ,QAAAoJ,GAAAK,EAAAoB,QAAA,EAAApB,EAAAzJ,QAAA,GAAAzI,KAAA,OAAA6R,GAAA0B,EAAAlT,EAAAwR,EAAA/J,EAAA9H,EAAA6R,EAAA2B,EAAA,GAAA3B,EAAA,KAAA,SAAAxR,EAAAwR,EAAA7R,GAAA,QAAA0R,GAAArR,GAAA,GAAAwR,GAAAxR,CAAA,OAAA,gBAAAA,KAAAwR,EAAA1B,KAAA1G,MAAApJ,EAAAoT,QAAA,WAAA,MAAA,MAAA5B,EAAA6B,SAAA,GAAAC,GAAA9B,GAAA,GAAAK,GAAAL,GAAA,QAAAK,GAAA7R,GAAA,GAAAwR,GAAAxR,CAAA,iBAAAA,KAAAwR,EAAA1B,KAAA1G,MAAApJ,EAAAoT,QAAA,WAAA,KAAA,IAAAzT,GAAAsJ,EAAAsK,OAAA/B,EAAA,WAAAH,EAAApI,EAAAsK,OAAA/B,EAAA,WAAAK,EAAA5I,EAAAsK,OAAA/B,EAAA,YAAApS,EAAA6J,EAAAsK,OAAA/B,EAAA,aAAA,MAAA8B,EAAArK,EAAAsK,OAAA/B,EAAA,iBAAA,MAAAgC,EAAAvK,EAAAsK,OAAA/B,EAAA,YAAA/J,EAAAwB,EAAAsK,OAAA/B,EAAA,OAAA,KAAA,IAAA7R,GAAAU,KAAAoT,SAAA,KAAA,IAAA/N,OAAA,wBAAA/F,EAAA0R,GAAAA,EAAAT,IAAA7H,QAAA6H,IAAA3H,EAAAyK,WAAA9C,IAAA,SAAA5Q,GAAA,MAAAZ,IAAA6J,EAAA0K,WAAAvU,IAAA6J,EAAA0K,WAAA3T,GAAAiJ,EAAA2K,SAAAxU,EAAAY,GAAAA,IAAAK,KAAAwT,OAAAC,EAAAC,UAAAlC,EAAAjB,IAAA7H,SAAA,GAAA1I,KAAA2T,SAAAF,EAAAC,UAAA1C,GAAA,GAAAhR,KAAA4T,WAAA7U,EAAAiB,KAAA6T,eAAAZ,EAAAjT,KAAA8T,UAAAX,EAAAnT,KAAA+T,KAAA3M,EAAA,QAAArI,KAAAiB,KAAAgU,cAAA,EAAAhU,KAAAiU,gBAAA,EAAAjU,KAAA8N,OAAA,KAAA9N,KAAAkU,aAAA,KAAAlU,KAAAmU,eAAA,KAAAnU,KAAAiI,KAAA,KAAA,QAAAgL,GAAAtT,GAAA,GAAAwR,GAAAxR,CAAA,iBAAAA,KAAAwR,EAAA1B,KAAA1G,MAAApJ,EAAAoT,QAAA,WAAA,KAAA,IAAAzT,GAAAsJ,EAAAsK,OAAA/B,EAAA,WAAAK,EAAA5I,EAAAsK,OAAA/B,EAAA,WAAA,IAAA7R,GAAAU,KAAAoT,SAAA,KAAA,IAAA/N,OAAA,wBAAA/F,EAAAU,MAAA2T,SAAA,GAAAF,GAAAzT,KAAAwT,OAAA,GAAAC,EAAA,IAAA1U,IAAAqV,KAAA,GAAAC,OAAA,EAAArU,MAAAsU,UAAA9C,EAAAjB,IAAA,SAAA5Q,GAAA,GAAAA,EAAA4U,IAAA,KAAA,IAAAlP,OAAA,qDAAA,IAAA8L,GAAAvI,EAAAsK,OAAAvT,EAAA,UAAAL,EAAAsJ,EAAAsK,OAAA/B,EAAA,QAAAK,EAAA5I,EAAAsK,OAAA/B,EAAA,SAAA,IAAA7R,EAAAP,EAAAqV,MAAA9U,IAAAP,EAAAqV,MAAA5C,EAAAzS,EAAAsV,OAAA,KAAA,IAAAhP,OAAA,uDAAA,OAAAtG,GAAAoS,GAAAqD,iBAAAR,cAAA1U,EAAA,EAAA2U,gBAAAzC,EAAA,GAAAiD,SAAA,GAAAzD,GAAApI,EAAAsK,OAAAvT,EAAA,WAAA,GAAAiJ,GAAAtJ,EAAA,GAAA6T,EAAA7T,EAAA,GAAAmU,EAAAnU,EAAA,GAAAoV,SAAAtN,EAAA9H,EAAA,GAAAqV,EAAArV,EAAA,GAAAsV,SAAA5D,GAAA6D,cAAA,SAAAlV,GAAA,MAAA6R,GAAAqD,cAAAlV,IAAAqR,EAAAvL,UAAA2N,SAAA,EAAApC,EAAAvL,UAAAqP,oBAAA,KAAAtP,OAAAuP,eAAA/D,EAAAvL,UAAA,sBAAAsJ,IAAA,WAAA,MAAA/O,MAAA8U,qBAAA9U,KAAAgV,eAAAhV,KAAA8T,UAAA9T,KAAA4T,YAAA5T,KAAA8U,uBAAA9D,EAAAvL,UAAAwP,mBAAA,KAAAzP,OAAAuP,eAAA/D,EAAAvL,UAAA,qBAAAsJ,IAAA,WAAA,MAAA/O,MAAAiV,oBAAAjV,KAAAgV,eAAAhV,KAAA8T,UAAA9T,KAAA4T,YAAA5T,KAAAiV,sBAAAjE,EAAAvL,UAAAyP,wBAAA,SAAAvV,EAAAwR,GAAA,GAAA7R,GAAAK,EAAAgN,OAAAwE,EAAA,OAAA,MAAA7R,GAAA,MAAAA,GAAA0R,EAAAvL,UAAAuP,eAAA,SAAArV,EAAAwR,GAAA,KAAA,IAAA9L,OAAA,6CAAA2L,EAAAmE,gBAAA,EAAAnE,EAAAoE,eAAA,EAAApE,EAAAqE,qBAAA,EAAArE,EAAAsE,kBAAA,EAAAtE,EAAAvL,UAAA8P,YAAA,SAAA5V,EAAAwR,EAAA7R,GAAA,GAAAkS,GAAAzS,EAAAoS,GAAA,KAAA8B,EAAA3T,GAAA0R,EAAAmE,eAAA,QAAAlC,GAAA,IAAAjC,GAAAmE,gBAAA3D,EAAAxR,KAAAwV,kBAAA,MAAA,KAAAxE,GAAAoE,eAAA5D,EAAAxR,KAAAyV,iBAAA,MAAA,SAAA,KAAA,IAAApQ,OAAA,+BAAA,GAAA8N,GAAAnT,KAAA4T,UAAApC,GAAAjB,IAAA,SAAA5Q,GAAA,GAAAwR,GAAA,OAAAxR,EAAAmO,OAAA,KAAA9N,KAAA2T,SAAA+B,GAAA/V,EAAAmO,OAAA,OAAA,OAAAqD,GAAA,MAAAgC,IAAAhC,EAAAvI,EAAAgF,KAAAuF,EAAAhC,KAAArD,OAAAqD,EAAA6C,cAAArU,EAAAqU,cAAAC,gBAAAtU,EAAAsU,gBAAAC,aAAAvU,EAAAuU,aAAAC,eAAAxU,EAAAwU,eAAAlM,KAAA,OAAAtI,EAAAsI,KAAA,KAAAjI,KAAAwT,OAAAkC,GAAA/V,EAAAsI,QAAAjI,MAAAsJ,QAAA3J,EAAAZ,IAAAiS,EAAAvL,UAAAkQ,yBAAA,SAAAhW,GAAA,GAAAwR,GAAAvI,EAAAsK,OAAAvT,EAAA,QAAAL,GAAAwO,OAAAlF,EAAAsK,OAAAvT,EAAA,UAAAuU,aAAA/C,EAAAgD,eAAAvL,EAAAsK,OAAAvT,EAAA,SAAA,GAAA,IAAA,MAAAK,KAAA4T,aAAAtU,EAAAwO,OAAAlF,EAAA2K,SAAAvT,KAAA4T,WAAAtU,EAAAwO,UAAA9N,KAAA2T,SAAA3L,IAAA1I,EAAAwO,QAAA,QAAAxO,GAAAwO,OAAA9N,KAAA2T,SAAAiC,QAAAtW,EAAAwO,OAAA,IAAAkD,MAAAQ,EAAAxR,KAAA6V,aAAAvW,EAAAU,KAAAyV,kBAAA,eAAA,iBAAA7M,EAAAkN,2BAAA3C,EAAAmC,kBAAA,IAAA9D,GAAA,EAAA,CAAA,GAAAzS,GAAAiB,KAAAyV,kBAAAjE,EAAA,IAAA,SAAA7R,EAAA0U,OAAA,IAAA,GAAApB,GAAAlU,EAAAmV,aAAAnV,GAAAA,EAAAmV,eAAAjB,GAAAjC,EAAArD,MAAAyG,KAAAxL,EAAAsK,OAAAnU,EAAA,gBAAA,MAAAsV,OAAAzL,EAAAsK,OAAAnU,EAAA,kBAAA,MAAAgX,WAAAnN,EAAAsK,OAAAnU,EAAA,sBAAA,QAAAA,EAAAiB,KAAAyV,oBAAAjE,OAAA,KAAA,GAAAiC,GAAA1U,EAAAoV,eAAApV,GAAAA,EAAAmV,eAAA/C,GAAApS,EAAAoV,gBAAAV,GAAAzC,EAAArD,MAAAyG,KAAAxL,EAAAsK,OAAAnU,EAAA,gBAAA,MAAAsV,OAAAzL,EAAAsK,OAAAnU,EAAA,kBAAA,MAAAgX,WAAAnN,EAAAsK,OAAAnU,EAAA,sBAAA,QAAAA,EAAAiB,KAAAyV,oBAAAjE,GAAA,MAAAR,IAAAG,EAAA6E,kBAAAhF,EAAAQ,EAAA/L,UAAAD,OAAAyQ,OAAAjF,EAAAvL,WAAA+L,EAAA/L,UAAAgP,SAAAzD,EAAAQ,EAAAqD,cAAA,SAAAlV,GAAA,GAAAwR,GAAA3L,OAAAyQ,OAAAzE,EAAA/L,WAAAnG,EAAA6R,EAAAqC,OAAAC,EAAAC,UAAA/T,EAAA6T,OAAA0C,WAAA,GAAAlF,EAAAG,EAAAwC,SAAAF,EAAAC,UAAA/T,EAAAgU,SAAAuC,WAAA,EAAA/E,GAAAyC,WAAAjU,EAAAwW,YAAAhF,EAAA0C,eAAAlU,EAAAyW,wBAAAjF,EAAAwC,SAAAuC,UAAA/E,EAAAyC,YAAAzC,EAAA4C,KAAApU,EAAA0W,KAAA,KAAA,GAAApD,GAAAtT,EAAAmU,UAAAoC,UAAAhK,QAAAiH,EAAAhC,EAAA2D,uBAAA1N,EAAA+J,EAAA8D,sBAAAnC,EAAA,EAAAwD,EAAArD,EAAAjQ,OAAAsT,EAAAxD,EAAAA,IAAA,CAAA,GAAAyD,GAAAtD,EAAAH,GAAAD,EAAA,GAAA9T,EAAA8T,GAAAmB,cAAAuC,EAAAvC,cAAAnB,EAAAoB,gBAAAsC,EAAAtC,gBAAAsC,EAAAzI,SAAA+E,EAAA/E,OAAAkD,EAAA4E,QAAAW,EAAAzI,QAAA+E,EAAAqB,aAAAqC,EAAArC,aAAArB,EAAAsB,eAAAoC,EAAApC,eAAAoC,EAAAtO,OAAA4K,EAAA5K,KAAA3I,EAAAsW,QAAAW,EAAAtO,OAAAb,EAAAuG,KAAAkF,IAAAM,EAAAxF,KAAAkF,GAAA,MAAA8B,GAAAxD,EAAA8D,mBAAArM,EAAAkN,4BAAA3E,GAAAK,EAAA/L,UAAA2N,SAAA,EAAA5N,OAAAuP,eAAAvD,EAAA/L,UAAA,WAAAsJ,IAAA,WAAA,MAAA/O,MAAA2T,SAAAuC,UAAA3F,IAAA,SAAA5Q,GAAA,MAAA,OAAAK,KAAA4T,WAAAhL,EAAAgF,KAAA5N,KAAA4T,WAAAjU,GAAAA,GAAAK,SAAAwR,EAAA/L,UAAAuP,eAAA,SAAArV,EAAAwR,GAAA,IAAA,GAAA7R,GAAA0R,EAAAQ,EAAAyB,EAAAE,EAAAM,EAAA,EAAAX,EAAA,EAAAwD,EAAA,EAAAC,EAAA,EAAA1D,EAAA,EAAA2D,EAAA,EAAAC,EAAA9W,EAAAqD,OAAA0T,EAAA,EAAAC,KAAAC,KAAAC,KAAAjG,KAAA6F,EAAAC,GAAA,GAAA,MAAA/W,EAAAgN,OAAA+J,GAAAjD,IAAAiD,IAAA5D,EAAA,MAAA,IAAA,MAAAnT,EAAAgN,OAAA+J,GAAAA,QAAA,CAAA,IAAApX,EAAA,GAAAP,GAAAO,EAAA0U,cAAAP,EAAAR,EAAAyD,EAAAD,EAAAxD,IAAAjT,KAAAkV,wBAAAvV,EAAAsT,GAAAA,KAAA,GAAAjC,EAAArR,EAAAuM,MAAAwK,EAAAzD,GAAAzB,EAAAmF,EAAA3F,GAAA0F,GAAA1F,EAAAhO,WAAA,CAAA,IAAAwO,KAAAyB,EAAAyD,GAAAtP,EAAA0P,OAAAnX,EAAA+W,EAAAE,GAAAzD,EAAAyD,EAAAlV,MAAAgV,EAAAE,EAAAG,KAAAvF,EAAA7D,KAAAwF,EAAA,IAAA,IAAA3B,EAAAxO,OAAA,KAAA,IAAAqC,OAAA,yCAAA,IAAA,IAAAmM,EAAAxO,OAAA,KAAA,IAAAqC,OAAA,yCAAAsR,GAAA3F,GAAAQ,EAAAlS,EAAA2U,gBAAAnB,EAAAtB,EAAA,GAAAsB,EAAAxT,EAAA2U,gBAAAzC,EAAAxO,OAAA,IAAA1D,EAAAwO,OAAA+E,EAAArB,EAAA,GAAAqB,GAAArB,EAAA,GAAAlS,EAAA4U,aAAAoC,EAAA9E,EAAA,GAAA8E,EAAAhX,EAAA4U,aAAA5U,EAAA4U,cAAA,EAAA5U,EAAA6U,eAAAoC,EAAA/E,EAAA,GAAA+E,EAAAjX,EAAA6U,eAAA3C,EAAAxO,OAAA,IAAA1D,EAAA2I,KAAAuO,EAAAhF,EAAA,GAAAgF,GAAAhF,EAAA,KAAAZ,EAAAjD,KAAArO,GAAA,gBAAAA,GAAA4U,cAAA2C,EAAAlJ,KAAArO,GAAAqV,EAAA/D,EAAAhI,EAAAoO,qCAAAhX,KAAA8U,oBAAAlE,EAAA+D,EAAAkC,EAAAjO,EAAAkN,4BAAA9V,KAAAiV,mBAAA4B,GAAArF,EAAA/L,UAAAoQ,aAAA,SAAAlW,EAAAwR,EAAA7R,EAAA0R,EAAAQ,EAAAzS,GAAA,GAAAY,EAAAL,IAAA,EAAA,KAAA,IAAA6B,WAAA,gDAAAxB,EAAAL,GAAA,IAAAK,EAAAqR,GAAA,EAAA,KAAA,IAAA7P,WAAA,kDAAAxB,EAAAqR,GAAA,OAAAmC,GAAA8D,OAAAtX,EAAAwR,EAAAK,EAAAzS,IAAAyS,EAAA/L,UAAAyR,mBAAA,WAAA,IAAA,GAAAvX,GAAA,EAAAA,EAAAK,KAAAwV,mBAAAxS,SAAArD,EAAA,CAAA,GAAAwR,GAAAnR,KAAAwV,mBAAA7V,EAAA,IAAAA,EAAA,EAAAK,KAAAwV,mBAAAxS,OAAA,CAAA,GAAA1D,GAAAU,KAAAwV,mBAAA7V,EAAA,EAAA,IAAAwR,EAAA6C,gBAAA1U,EAAA0U,cAAA,CAAA7C,EAAAgG,oBAAA7X,EAAA2U,gBAAA,CAAA,WAAA9C,EAAAgG,oBAAA,EAAA,IAAA3F,EAAA/L,UAAA2R,oBAAA,SAAAzX,GAAA,GAAAwR,IAAA6C,cAAApL,EAAAsK,OAAAvT,EAAA,QAAAsU,gBAAArL,EAAAsK,OAAAvT,EAAA,WAAAL,EAAAU,KAAA6V,aAAA1E,EAAAnR,KAAAwV,mBAAA,gBAAA,kBAAA5M,EAAAoO,oCAAApO,EAAAsK,OAAAvT,EAAA,OAAAqR,EAAAqE,sBAAA,IAAA/V,GAAA,EAAA,CAAA,GAAAkS,GAAAxR,KAAAwV,mBAAAlW,EAAA,IAAAkS,EAAAwC,gBAAA7C,EAAA6C,cAAA,CAAA,GAAAjV,GAAA6J,EAAAsK,OAAA1B,EAAA,SAAA,KAAA,QAAAzS,IAAAA,EAAAiB,KAAA2T,SAAA+B,GAAA3W,GAAA,MAAAiB,KAAA4T,aAAA7U,EAAA6J,EAAAgF,KAAA5N,KAAA4T,WAAA7U,IAAA,IAAAkU,GAAArK,EAAAsK,OAAA1B,EAAA,OAAA,KAAA,OAAA,QAAAyB,IAAAA,EAAAjT,KAAAwT,OAAAkC,GAAAzC,KAAAnF,OAAA/O,EAAAqV,KAAAxL,EAAAsK,OAAA1B,EAAA,eAAA,MAAA6C,OAAAzL,EAAAsK,OAAA1B,EAAA,iBAAA,MAAAvJ,KAAAgL,IAAA,OAAAnF,OAAA,KAAAsG,KAAA,KAAAC,OAAA,KAAApM,KAAA,OAAAuJ,EAAA/L,UAAA4R,wBAAA,WAAA,MAAArX,MAAA6T,eAAA7T,KAAA6T,eAAA7Q,QAAAhD,KAAA2T,SAAA1I,SAAAjL,KAAA6T,eAAAyD,KAAA,SAAA3X,GAAA,MAAA,OAAAA,KAAA,GAAA6R,EAAA/L,UAAA8R,iBAAA,SAAA5X,EAAAwR,GAAA,IAAAnR,KAAA6T,eAAA,MAAA,KAAA,IAAA,MAAA7T,KAAA4T,aAAAjU,EAAAiJ,EAAA2K,SAAAvT,KAAA4T,WAAAjU,IAAAK,KAAA2T,SAAA3L,IAAArI,GAAA,MAAAK,MAAA6T,eAAA7T,KAAA2T,SAAAiC,QAAAjW,GAAA,IAAAL,EAAA,IAAA,MAAAU,KAAA4T,aAAAtU,EAAAsJ,EAAA4O,SAAAxX,KAAA4T,aAAA,CAAA,GAAA5C,GAAArR,EAAAoT,QAAA,aAAA,GAAA,IAAA,QAAAzT,EAAAmY,QAAAzX,KAAA2T,SAAA3L,IAAAgJ,GAAA,MAAAhR,MAAA6T,eAAA7T,KAAA2T,SAAAiC,QAAA5E,GAAA,MAAA1R,EAAAoY,MAAA,KAAApY,EAAAoY,OAAA1X,KAAA2T,SAAA3L,IAAA,IAAArI,GAAA,MAAAK,MAAA6T,eAAA7T,KAAA2T,SAAAiC,QAAA,IAAAjW,IAAA,GAAAwR,EAAA,MAAA,KAAA,MAAA,IAAA9L,OAAA,IAAA1F,EAAA,+BAAA6R,EAAA/L,UAAAkS,qBAAA,SAAAhY,GAAA,GAAAwR,GAAAvI,EAAAsK,OAAAvT,EAAA,SAAA,IAAA,MAAAK,KAAA4T,aAAAzC,EAAAvI,EAAA2K,SAAAvT,KAAA4T,WAAAzC,KAAAnR,KAAA2T,SAAA3L,IAAAmJ,GAAA,OAAAiD,KAAA,KAAAC,OAAA,KAAA0B,WAAA,KAAA5E,GAAAnR,KAAA2T,SAAAiC,QAAAzE,EAAA,IAAA7R,IAAAwO,OAAAqD,EAAA+C,aAAAtL,EAAAsK,OAAAvT,EAAA,QAAAwU,eAAAvL,EAAAsK,OAAAvT,EAAA,WAAA6R,EAAAxR,KAAA6V,aAAAvW,EAAAU,KAAAyV,kBAAA,eAAA,iBAAA7M,EAAAkN,2BAAAlN,EAAAsK,OAAAvT,EAAA,OAAAqR,EAAAqE,sBAAA,IAAA7D,GAAA,EAAA,CAAA,GAAAzS,GAAAiB,KAAAyV,kBAAAjE,EAAA,IAAAzS,EAAA+O,SAAAxO,EAAAwO,OAAA,OAAAsG,KAAAxL,EAAAsK,OAAAnU,EAAA,gBAAA,MAAAsV,OAAAzL,EAAAsK,OAAAnU,EAAA,kBAAA,MAAAgX,WAAAnN,EAAAsK,OAAAnU,EAAA,sBAAA,OAAA,OAAAqV,KAAA,KAAAC,OAAA,KAAA0B,WAAA,OAAA5E,EAAAyG,uBAAApG,EAAAyB,EAAAxN,UAAAD,OAAAyQ,OAAAjF,EAAAvL,WAAAwN,EAAAxN,UAAAnF,YAAA0Q,EAAAiC,EAAAxN,UAAA2N,SAAA,EAAA5N,OAAAuP,eAAA9B,EAAAxN,UAAA,WAAAsJ,IAAA,WAAA,IAAA,GAAApP,MAAAwR,EAAA,EAAAA,EAAAnR,KAAAsU,UAAAtR,OAAAmO,IAAA,IAAA,GAAA7R,GAAA,EAAAA,EAAAU,KAAAsU,UAAAnD,GAAAsD,SAAAoD,QAAA7U,OAAA1D,IAAAK,EAAAgO,KAAA3N,KAAAsU,UAAAnD,GAAAsD,SAAAoD,QAAAvY,GAAA,OAAAK,MAAAsT,EAAAxN,UAAA2R,oBAAA,SAAAzX,GAAA,GAAAwR,IAAA6C,cAAApL,EAAAsK,OAAAvT,EAAA,QAAAsU,gBAAArL,EAAAsK,OAAAvT,EAAA,WAAAL,EAAA6T,EAAA8D,OAAA9F,EAAAnR,KAAAsU,UAAA,SAAA3U,EAAAwR,GAAA,GAAA7R,GAAAK,EAAAqU,cAAA7C,EAAAqD,gBAAAR,aAAA,OAAA1U,GAAAA,EAAAK,EAAAsU,gBAAA9C,EAAAqD,gBAAAP,kBAAAjD,EAAAhR,KAAAsU,UAAAhV,EAAA,OAAA0R,GAAAA,EAAAyD,SAAA2C,qBAAAhD,KAAAjD,EAAA6C,eAAAhD,EAAAwD,gBAAAR,cAAA,GAAAK,OAAAlD,EAAA8C,iBAAAjD,EAAAwD,gBAAAR,gBAAA7C,EAAA6C,cAAAhD,EAAAwD,gBAAAP,gBAAA,EAAA,GAAA6D,KAAAnY,EAAAmY,QAAAhK,OAAA,KAAAsG,KAAA,KAAAC,OAAA,KAAApM,KAAA,OAAAgL,EAAAxN,UAAA4R,wBAAA,WAAA,MAAArX,MAAAsU,UAAAyD,MAAA,SAAApY,GAAA,MAAAA,GAAA8U,SAAA4C,6BAAApE,EAAAxN,UAAA8R,iBAAA,SAAA5X,EAAAwR,GAAA,IAAA,GAAA7R,GAAA,EAAAA,EAAAU,KAAAsU,UAAAtR,OAAA1D,IAAA,CAAA,GAAA0R,GAAAhR,KAAAsU,UAAAhV,GAAAkS,EAAAR,EAAAyD,SAAA8C,iBAAA5X,GAAA,EAAA,IAAA6R,EAAA,MAAAA,GAAA,GAAAL,EAAA,MAAA,KAAA,MAAA,IAAA9L,OAAA,IAAA1F,EAAA,+BAAAsT,EAAAxN,UAAAkS,qBAAA,SAAAhY,GAAA,IAAA,GAAAwR,GAAA,EAAAA,EAAAnR,KAAAsU,UAAAtR,OAAAmO,IAAA,CAAA,GAAA7R,GAAAU,KAAAsU,UAAAnD,EAAA,IAAA,KAAA7R,EAAAmV,SAAAoD,QAAAjC,QAAAhN,EAAAsK,OAAAvT,EAAA,WAAA,CAAA,GAAAqR,GAAA1R,EAAAmV,SAAAkD,qBAAAhY,EAAA,IAAAqR,EAAA,CAAA,GAAAQ,IAAA4C,KAAApD,EAAAoD,MAAA9U,EAAAkV,gBAAAR,cAAA,GAAAK,OAAArD,EAAAqD,QAAA/U,EAAAkV,gBAAAR,gBAAAhD,EAAAoD,KAAA9U,EAAAkV,gBAAAP,gBAAA,EAAA,GAAA,OAAAzC,KAAA,OAAA4C,KAAA,KAAAC,OAAA,OAAApB,EAAAxN,UAAAuP,eAAA,SAAArV,EAAAwR,GAAAnR,KAAA8U,uBAAA9U,KAAAiV,qBAAA,KAAA,GAAA3V,GAAA,EAAAA,EAAAU,KAAAsU,UAAAtR,OAAA1D,IAAA,IAAA,GAAA0R,GAAAhR,KAAAsU,UAAAhV,GAAAkS,EAAAR,EAAAyD,SAAAe,mBAAAzW,EAAA,EAAAA,EAAAyS,EAAAxO,OAAAjE,IAAA,CAAA,GAAAkU,GAAAzB,EAAAzS,GAAAoU,EAAAnC,EAAAyD,SAAAd,SAAA+B,GAAAzC,EAAAnF,OAAA,QAAAkD,EAAAyD,SAAAb,aAAAT,EAAAvK,EAAAgF,KAAAoD,EAAAyD,SAAAb,WAAAT,IAAAnT,KAAA2T,SAAAqE,IAAA7E,GAAAA,EAAAnT,KAAA2T,SAAAiC,QAAAzC,EAAA,IAAAM,GAAAzC,EAAAyD,SAAAjB,OAAAkC,GAAAzC,EAAAhL,KAAAjI,MAAAwT,OAAAwE,IAAAvE,GAAAA,EAAAzT,KAAAwT,OAAAoC,QAAAnC,EAAA,IAAArM,IAAA0G,OAAAqF,EAAAa,cAAAf,EAAAe,eAAAhD,EAAAwD,gBAAAR,cAAA,GAAAC,gBAAAhB,EAAAgB,iBAAAjD,EAAAwD,gBAAAR,gBAAAf,EAAAe,cAAAhD,EAAAwD,gBAAAP,gBAAA,EAAA,GAAAC,aAAAjB,EAAAiB,aAAAC,eAAAlB,EAAAkB,eAAAlM,KAAAwL,EAAAzT,MAAA8U,oBAAAnH,KAAAvG,GAAA,gBAAAA,GAAA8M,cAAAlU,KAAAiV,mBAAAtH,KAAAvG,GAAAuN,EAAA3U,KAAA8U,oBAAAlM,EAAAoO,qCAAArC,EAAA3U,KAAAiV,mBAAArM,EAAAkN,6BAAA3E,EAAA8G,yBAAAhF,GAAA,SAAAtT,EAAAwR,GAAA,QAAA7R,GAAAK,EAAAwR,EAAA7R,GAAA,GAAA6R,IAAAxR,GAAA,MAAAA,GAAAwR,EAAA,IAAA,IAAAzQ,UAAAsC,OAAA,MAAA1D,EAAA,MAAA,IAAA+F,OAAA,IAAA8L,EAAA,6BAAA,QAAAH,GAAArR,GAAA,GAAAwR,GAAAxR,EAAAuY,MAAA1B,EAAA,OAAArF,IAAAsG,OAAAtG,EAAA,GAAAgH,KAAAhH,EAAA,GAAAiH,KAAAjH,EAAA,GAAAkH,KAAAlH,EAAA,GAAAuG,KAAAvG,EAAA,IAAA,KAAA,QAAAK,GAAA7R,GAAA,GAAAwR,GAAA,EAAA,OAAAxR,GAAA8X,SAAAtG,GAAAxR,EAAA8X,OAAA,KAAAtG,GAAA,KAAAxR,EAAAwY,OAAAhH,GAAAxR,EAAAwY,KAAA,KAAAxY,EAAAyY,OAAAjH,GAAAxR,EAAAyY,MAAAzY,EAAA0Y,OAAAlH,GAAA,IAAAxR,EAAA0Y,MAAA1Y,EAAA+X,OAAAvG,GAAAxR,EAAA+X,MAAAvG,EAAA,QAAApS,GAAAY,GAAA,GAAAL,GAAAK,EAAAZ,EAAAiS,EAAArR,EAAA,IAAAZ,EAAA,CAAA,IAAAA,EAAA2Y,KAAA,MAAA/X,EAAAL,GAAAP,EAAA2Y,KAAA,IAAA,GAAAzE,GAAArK,EAAAuI,EAAAmC,WAAAhU,GAAA6T,EAAA7T,EAAAkN,MAAA,OAAAiH,EAAA,EAAArM,EAAA+L,EAAAnQ,OAAA,EAAAoE,GAAA,EAAAA,IAAA6L,EAAAE,EAAA/L,GAAA,MAAA6L,EAAAE,EAAAmF,OAAAlR,EAAA,GAAA,OAAA6L,EAAAQ,IAAAA,EAAA,IAAA,KAAAR,GAAAE,EAAAmF,OAAAlR,EAAA,EAAAqM,GAAAA,EAAA,IAAAN,EAAAmF,OAAAlR,EAAA,GAAAqM,KAAA,OAAAnU,GAAA6T,EAAAvF,KAAA,KAAA,KAAAtO,IAAAA,EAAAsJ,EAAA,IAAA,KAAA7J,GAAAA,EAAA2Y,KAAApY,EAAAkS,EAAAzS,IAAAO,EAAA,QAAA2T,GAAAtT,EAAAwR,GAAA,KAAAxR,IAAAA,EAAA,KAAA,KAAAwR,IAAAA,EAAA,IAAA,IAAA7R,GAAA0R,EAAAG,GAAA8B,EAAAjC,EAAArR,EAAA,IAAAsT,IAAAtT,EAAAsT,EAAAyE,MAAA,KAAApY,IAAAA,EAAAmY,OAAA,MAAAxE,KAAA3T,EAAAmY,OAAAxE,EAAAwE,QAAAjG,EAAAlS,EAAA,IAAAA,GAAA6R,EAAA+G,MAAAzB,GAAA,MAAAtF,EAAA,IAAA8B,IAAAA,EAAAmF,OAAAnF,EAAAyE,KAAA,MAAAzE,GAAAmF,KAAAjH,EAAAK,EAAAyB,EAAA,IAAArK,GAAA,MAAAuI,EAAAxE,OAAA,GAAAwE,EAAApS,EAAAY,EAAAoT,QAAA,OAAA,IAAA,IAAA5B,EAAA,OAAA8B,IAAAA,EAAAyE,KAAA9O,EAAA4I,EAAAyB,IAAArK,EAAA,QAAAA,GAAAjJ,EAAAwR,GAAA,KAAAxR,IAAAA,EAAA,KAAAA,EAAAA,EAAAoT,QAAA,MAAA,GAAA,KAAA,GAAAzT,GAAA,EAAA,IAAA6R,EAAAyE,QAAAjW,EAAA,MAAA,CAAA,GAAAqR,GAAArR,EAAA4Y,YAAA,IAAA,IAAA,EAAAvH,EAAA,MAAAG,EAAA,IAAAxR,EAAAA,EAAAuM,MAAA,EAAA8E,GAAArR,EAAAuY,MAAA,qBAAA,MAAA/G,KAAA7R,EAAA,MAAAoF,OAAApF,EAAA,GAAAsO,KAAA,OAAAuD,EAAAqH,OAAA7Y,EAAAqD,OAAA,GAAA,QAAAmQ,GAAAxT,GAAA,MAAAA,GAAA,QAAA8T,GAAA9T,GAAA,MAAAgV,GAAAhV,GAAA,IAAAA,EAAAA,EAAA,QAAAyH,GAAAzH,GAAA,MAAAgV,GAAAhV,GAAAA,EAAAuM,MAAA,GAAAvM,EAAA,QAAAgV,GAAAhV,GAAA,IAAAA,EAAA,OAAA,CAAA,IAAAwR,GAAAxR,EAAAqD,MAAA,IAAA,EAAAmO,EAAA,OAAA,CAAA,IAAA,KAAAxR,EAAA+M,WAAAyE,EAAA,IAAA,KAAAxR,EAAA+M,WAAAyE,EAAA,IAAA,MAAAxR,EAAA+M,WAAAyE,EAAA,IAAA,MAAAxR,EAAA+M,WAAAyE,EAAA,IAAA,MAAAxR,EAAA+M,WAAAyE,EAAA,IAAA,MAAAxR,EAAA+M,WAAAyE,EAAA,IAAA,MAAAxR,EAAA+M,WAAAyE,EAAA,IAAA,KAAAxR,EAAA+M,WAAAyE,EAAA,IAAA,KAAAxR,EAAA+M,WAAAyE,EAAA,GAAA,OAAA,CAAA,KAAA,GAAA7R,GAAA6R,EAAA,GAAA7R,GAAA,EAAAA,IAAA,GAAA,KAAAK,EAAA+M,WAAApN,GAAA,OAAA,CAAA,QAAA,EAAA,QAAAwT,GAAAnT,EAAAwR,EAAA7R,GAAA,GAAA0R,GAAArR,EAAAmO,OAAAqD,EAAArD,MAAA,OAAA,KAAAkD,EAAAA,GAAAA,EAAArR,EAAAuU,aAAA/C,EAAA+C,aAAA,IAAAlD,EAAAA,GAAAA,EAAArR,EAAAwU,eAAAhD,EAAAgD,eAAA,IAAAnD,GAAA1R,EAAA0R,GAAAA,EAAArR,EAAAsU,gBAAA9C,EAAA8C,gBAAA,IAAAjD,EAAAA,GAAAA,EAAArR,EAAAqU,cAAA7C,EAAA6C,cAAA,IAAAhD,EAAAA,EAAArR,EAAAsI,KAAAkJ,EAAAlJ,SAAA,QAAAqO,GAAA3W,EAAAwR,EAAA7R,GAAA,GAAA0R,GAAArR,EAAAqU,cAAA7C,EAAA6C,aAAA,OAAA,KAAAhD,EAAAA,GAAAA,EAAArR,EAAAsU,gBAAA9C,EAAA8C,gBAAA,IAAAjD,GAAA1R,EAAA0R,GAAAA,EAAArR,EAAAmO,OAAAqD,EAAArD,OAAA,IAAAkD,EAAAA,GAAAA,EAAArR,EAAAuU,aAAA/C,EAAA+C,aAAA,IAAAlD,EAAAA,GAAAA,EAAArR,EAAAwU,eAAAhD,EAAAgD,eAAA,IAAAnD,EAAAA,EAAArR,EAAAsI,KAAAkJ,EAAAlJ,SAAA,QAAAsO,GAAA5W,EAAAwR,GAAA,MAAAxR,KAAAwR,EAAA,EAAAxR,EAAAwR,EAAA,EAAA,GAAA,QAAA0B,GAAAlT,EAAAwR,GAAA,GAAA7R,GAAAK,EAAAqU,cAAA7C,EAAA6C,aAAA,OAAA,KAAA1U,EAAAA,GAAAA,EAAAK,EAAAsU,gBAAA9C,EAAA8C,gBAAA,IAAA3U,EAAAA,GAAAA,EAAAiX,EAAA5W,EAAAmO,OAAAqD,EAAArD,QAAA,IAAAxO,EAAAA,GAAAA,EAAAK,EAAAuU,aAAA/C,EAAA+C,aAAA,IAAA5U,EAAAA,GAAAA,EAAAK,EAAAwU,eAAAhD,EAAAgD,eAAA,IAAA7U,EAAAA,EAAAiX,EAAA5W,EAAAsI,KAAAkJ,EAAAlJ,UAAAkJ,EAAA+B,OAAA5T,CAAA,IAAAkX,GAAA,iEAAAC,EAAA,eAAAtF,GAAAqG,SAAAxG,EAAAG,EAAAsH,YAAAjH,EAAAL,EAAAkC,UAAAtU,EAAAoS,EAAAvD,KAAAqF,EAAA9B,EAAAmC,WAAA,SAAA3T,GAAA,MAAA,MAAAA,EAAAgN,OAAA,MAAAhN,EAAAuY,MAAA1B,IAAArF,EAAAoC,SAAA3K,CAAA,IAAA8N,GAAA,WAAA,GAAA/W,GAAA6F,OAAAyQ,OAAA,KAAA,SAAA,aAAAtW,MAAAwR,GAAAuH,YAAAhC,EAAAvD,EAAAM,EAAAtC,EAAAwH,cAAAjC,EAAAvD,EAAA/L,EAAA+J,EAAA2E,2BAAAhD,EAAA3B,EAAA6F,oCAAAV,EAAAnF,EAAAyH,oCAAA/F,GAAA,SAAAlT,EAAAwR,GAAA,QAAA7R,GAAAK,EAAAqR,EAAAQ,EAAAzS,EAAAkU,EAAArK,GAAA,GAAAuK,GAAAhK,KAAAmB,OAAA0G,EAAArR,GAAA,GAAAA,EAAA8T,EAAAR,EAAAzB,EAAAzS,EAAAoU,IAAA,EAAA,OAAA,KAAAM,EAAAN,EAAAM,EAAA,EAAAzC,EAAAmC,EAAA,EAAA7T,EAAA6T,EAAAnC,EAAAQ,EAAAzS,EAAAkU,EAAArK,GAAAA,GAAAuI,EAAAmE,kBAAAtE,EAAAjS,EAAAiE,OAAAgO,EAAA,GAAAmC,EAAAA,EAAAxT,EAAA,EAAAL,EAAAK,EAAAwT,EAAA3B,EAAAzS,EAAAkU,EAAArK,GAAAA,GAAAuI,EAAAmE,kBAAAnC,EAAA,EAAAxT,EAAA,GAAAA,EAAAwR,EAAAkE,qBAAA,EAAAlE,EAAAmE,kBAAA,EAAAnE,EAAA8F,OAAA,SAAAtX,EAAAqR,EAAAQ,EAAAzS,GAAA,GAAA,IAAAiS,EAAAhO,OAAA,MAAA,EAAA,IAAAiQ,GAAA3T,EAAA,GAAA0R,EAAAhO,OAAArD,EAAAqR,EAAAQ,EAAAzS,GAAAoS,EAAAkE,qBAAA,IAAA,EAAApC,EAAA,MAAA,EAAA,MAAAA,EAAA,GAAA,GAAA,IAAAzB,EAAAR,EAAAiC,GAAAjC,EAAAiC,EAAA,IAAA,MAAAA,CAAA,OAAAA,KAAA,SAAAtT,EAAAwR,EAAA7R,GAAA,QAAA0R;AAAAhR,KAAA6Y,UAAA7Y,KAAA8Y,KAAAtT,OAAAyQ,OAAA,MAAA,GAAAzE,GAAAlS,EAAA,GAAAP,EAAAyG,OAAAC,UAAAkF,cAAAqG,GAAA0C,UAAA,SAAA/T,EAAAwR,GAAA,IAAA,GAAA7R,GAAA,GAAA0R,GAAAQ,EAAA,EAAAzS,EAAAY,EAAAqD,OAAAjE,EAAAyS,EAAAA,IAAAlS,EAAA0Y,IAAArY,EAAA6R,GAAAL,EAAA,OAAA7R,IAAA0R,EAAAvL,UAAAwF,KAAA,WAAA,MAAAzF,QAAAuT,oBAAA/Y,KAAA8Y,MAAA9V,QAAAgO,EAAAvL,UAAAuS,IAAA,SAAArY,EAAAwR,GAAA,GAAA7R,GAAAkS,EAAAkH,YAAA/Y,GAAAqR,EAAAjS,EAAA8C,KAAA7B,KAAA8Y,KAAAxZ,GAAA2T,EAAAjT,KAAA6Y,OAAA7V,SAAAgO,GAAAG,IAAAnR,KAAA6Y,OAAAlL,KAAAhO,GAAAqR,IAAAhR,KAAA8Y,KAAAxZ,GAAA2T,IAAAjC,EAAAvL,UAAAuC,IAAA,SAAArI,GAAA,GAAAwR,GAAAK,EAAAkH,YAAA/Y,EAAA,OAAAZ,GAAA8C,KAAA7B,KAAA8Y,KAAA3H,IAAAH,EAAAvL,UAAAmQ,QAAA,SAAAjW,GAAA,GAAAwR,GAAAK,EAAAkH,YAAA/Y,EAAA,IAAAZ,EAAA8C,KAAA7B,KAAA8Y,KAAA3H,GAAA,MAAAnR,MAAA8Y,KAAA3H,EAAA,MAAA,IAAA9L,OAAA,IAAA1F,EAAA,yBAAAqR,EAAAvL,UAAAiQ,GAAA,SAAA/V,GAAA,GAAAA,GAAA,GAAAA,EAAAK,KAAA6Y,OAAA7V,OAAA,MAAAhD,MAAA6Y,OAAAlZ,EAAA,MAAA,IAAA0F,OAAA,yBAAA1F,IAAAqR,EAAAvL,UAAAyQ,QAAA,WAAA,MAAAlW,MAAA6Y,OAAA3M,SAAAiF,EAAAuD,SAAA1D,GAAA,SAAArR,EAAAwR,EAAA7R,GAAA,QAAA0R,GAAArR,GAAA,MAAA,GAAAA,IAAAA,GAAA,GAAA,GAAAA,GAAA,GAAA,EAAA,QAAA6R,GAAA7R,GAAA,GAAAwR,GAAA,KAAA,EAAAxR,GAAAL,EAAAK,GAAA,CAAA,OAAAwR,IAAA7R,EAAAA,EAAA,GAAAP,GAAAO,EAAA,GAAA2T,EAAA,EAAArK,EAAA,GAAAqK,EAAAE,EAAAvK,EAAA,EAAA6K,EAAA7K,CAAAuI,GAAA6H,OAAA,SAAArZ,GAAA,GAAAwR,GAAA7R,EAAA,GAAAkS,EAAAR,EAAArR,EAAA,GAAAwR,GAAAK,EAAA2B,EAAA3B,KAAAyB,EAAAzB,EAAA,IAAAL,GAAAsC,GAAAnU,GAAAP,EAAAia,OAAA7H,SAAAK,EAAA,EAAA,OAAAlS,IAAA6R,EAAA2F,OAAA,SAAAnX,EAAAwR,EAAA7R,GAAA,GAAA0R,GAAApI,EAAAxB,EAAAzH,EAAAqD,OAAA2R,EAAA,EAAA7B,EAAA,CAAA,GAAA,CAAA,GAAA3B,GAAA/J,EAAA,KAAA,IAAA/B,OAAA,6CAAA,IAAAuD,EAAA7J,EAAA+X,OAAAnX,EAAA+M,WAAAyE,MAAA,KAAAvI,EAAA,KAAA,IAAAvD,OAAA,yBAAA1F,EAAAgN,OAAAwE,EAAA,GAAAH,MAAApI,EAAA6K,GAAA7K,GAAAuK,EAAAwB,GAAA/L,GAAAkK,EAAAA,GAAAG,QAAAjC,EAAA1R,GAAAoC,MAAA8P,EAAAmD,GAAArV,EAAAyX,KAAA5F,IAAA,SAAAxR,EAAAwR,GAAA,GAAA7R,GAAA,mEAAAkN,MAAA,GAAA2E,GAAA6H,OAAA,SAAArZ,GAAA,GAAAA,GAAA,GAAAA,EAAAL,EAAA0D,OAAA,MAAA1D,GAAAK,EAAA,MAAA,IAAAwB,WAAA,6BAAAxB,IAAAwR,EAAA2F,OAAA,SAAAnX,GAAA,GAAAwR,GAAA,GAAA7R,EAAA,GAAA0R,EAAA,GAAAQ,EAAA,IAAAzS,EAAA,GAAAkU,EAAA,GAAArK,EAAA,GAAAuK,EAAA,GAAAM,EAAA,GAAArM,EAAA,EAAA,OAAAzH,IAAAwR,GAAA7R,GAAAK,EAAAA,EAAAwR,EAAAxR,GAAAqR,GAAAQ,GAAA7R,EAAAA,EAAAqR,EAAAyC,EAAA9T,GAAAZ,GAAAkU,GAAAtT,EAAAA,EAAAZ,EAAAqI,EAAAzH,GAAAiJ,EAAA,GAAAjJ,GAAAwT,EAAA,GAAA,KAAA,SAAAxT,EAAAwR,GAAA,QAAA7R,GAAAK,EAAAwR,EAAA7R,GAAA,GAAA0R,GAAArR,EAAAwR,EAAAxR,GAAAwR,GAAAxR,EAAAL,GAAAK,EAAAL,GAAA0R,EAAA,QAAAA,GAAArR,EAAAwR,GAAA,MAAAhI,MAAA8P,MAAAtZ,EAAAwJ,KAAA+P,UAAA/H,EAAAxR,IAAA,QAAA6R,GAAA7R,EAAAwR,EAAApS,EAAAkU,GAAA,GAAAA,EAAAlU,EAAA,CAAA,GAAA6J,GAAAoI,EAAAjS,EAAAkU,GAAAE,EAAApU,EAAA,CAAAO,GAAAK,EAAAiJ,EAAAqK,EAAA,KAAA,GAAAQ,GAAA9T,EAAAsT,GAAA7L,EAAArI,EAAAkU,EAAA7L,EAAAA,IAAA+J,EAAAxR,EAAAyH,GAAAqM,IAAA,IAAAN,GAAA,EAAA7T,EAAAK,EAAAwT,EAAA/L,GAAA9H,GAAAK,EAAAwT,EAAA,EAAA/L,EAAA,IAAAuN,GAAAxB,EAAA,CAAA3B,GAAA7R,EAAAwR,EAAApS,EAAA4V,EAAA,GAAAnD,EAAA7R,EAAAwR,EAAAwD,EAAA,EAAA1B,IAAA9B,EAAAyD,UAAA,SAAAjV,EAAAwR,GAAAK,EAAA7R,EAAAwR,EAAA,EAAAxR,EAAAqD,OAAA,QAAA,SAAArD,EAAAwR,GAAA,YAAA,mBAAAxJ,SAAAA,OAAAyH,IAAAzH,OAAA,kBAAA,aAAA,cAAAwJ,GAAA,gBAAApJ,SAAAH,OAAAG,QAAAoJ,EAAA5R,QAAA,sCAAAA,QAAA,eAAAI,EAAAwZ,cAAAhI,EAAAxR,EAAA+S,WAAA/S,EAAAyZ,UAAAzZ,EAAAyR,aAAApR,KAAA,SAAAL,EAAAwR,GAAA,YAAA,SAAA7R,GAAAK,GAAA,MAAA,IAAA4F,SAAA,SAAA4L,EAAA7R,GAAA,GAAA0R,GAAA,GAAAqI,eAAArI,GAAAsI,KAAA,MAAA3Z,GAAAqR,EAAAuI,QAAAja,EAAA0R,EAAAwI,mBAAA,WAAA,IAAAxI,EAAAyI,aAAAzI,EAAA0I,QAAA,KAAA1I,EAAA0I,OAAA,IAAAvI,EAAAH,EAAA2I,cAAAra,EAAA,GAAA+F,OAAA,gBAAA2L,EAAA0I,OAAA,eAAA/Z,MAAAqR,EAAA4I,SAAA,QAAA5I,GAAArR,GAAA,GAAA,mBAAAqG,SAAAA,OAAA6T,KAAA,MAAA7T,QAAA6T,KAAAla,EAAA,MAAA,IAAA0F,OAAA,kEAAA,QAAAmM,GAAA7R,GAAA,GAAA,mBAAA8P,OAAAA,KAAA1G,MAAA,MAAA0G,MAAA1G,MAAApJ,EAAA,MAAA,IAAA0F,OAAA,iEAAA,QAAAtG,GAAAY,EAAAwR,GAAA,IAAA,GAAA7R,GAAA0R,EAAA,oCAAAQ,EAAA,2DAAAzS,EAAA,wEAAAkU,EAAAtT,EAAA6M,MAAA,MAAA5D,EAAA,GAAAuK,EAAAhK,KAAA2Q,IAAA3I,EAAA,IAAAsC,EAAA,EAAAN,EAAAM,IAAAA,EAAA,CAAA,GAAArM,GAAA6L,EAAA9B,EAAAsC,EAAA,GAAAkB,EAAAvN,EAAAwO,QAAA,KAAA,IAAAjB,GAAA,IAAAvN,EAAAA,EAAAoR,OAAA,EAAA7D,IAAAvN,EAAA,CAAA,GAAAwB,EAAAxB,EAAAwB,EAAAtJ,EAAAkS,EAAAuI,KAAAnR,GAAAtJ,GAAAA,EAAA,GAAA,MAAAA,GAAA,EAAA,IAAAA,EAAA0R,EAAA+I,KAAAnR,GAAAtJ,GAAAA,EAAA,GAAA,MAAAA,GAAA,EAAA,IAAAA,EAAAP,EAAAgb,KAAAnR,GAAAtJ,GAAAA,EAAA,GAAA,MAAAA,GAAA,KAAA,QAAA2T,KAAA,GAAA,kBAAAzN,QAAAuP,gBAAA,kBAAAvP,QAAAyQ,OAAA,KAAA,IAAA5Q,OAAA,mDAAA,QAAAuD,GAAAjJ,GAAA,GAAA,gBAAAA,GAAA,KAAA,IAAAwB,WAAA,oCAAA,IAAA,gBAAAxB,GAAAyS,SAAA,KAAA,IAAAjR,WAAA,kCAAA,IAAA,gBAAAxB,GAAA2S,YAAA3S,EAAA2S,WAAA,IAAA,GAAA3S,EAAA2S,WAAA,EAAA,KAAA,IAAAnR,WAAA,+CAAA,IAAA,gBAAAxB,GAAA6S,cAAA7S,EAAA6S,aAAA,IAAA,GAAA7S,EAAA6S,aAAA,EAAA,KAAA,IAAArR,WAAA,qDAAA,QAAA,EAAA,QAAAgS,GAAAxT,GAAA,GAAAwR,GAAA,4CAAA4I,KAAApa,EAAA,IAAAwR,GAAAA,EAAA,GAAA,MAAAA,GAAA,EAAA,MAAA,IAAA9L,OAAA,8BAAA,QAAAoO,GAAAnU,EAAA0R,EAAAQ,EAAAzS,EAAAkU,GAAA,GAAArK,GAAA,GAAAjJ,GAAAqW,kBAAA1W,GAAA6T,EAAAvK,EAAAwO,qBAAAhD,KAAA5C,EAAA6C,OAAAtV,IAAA0U,EAAA7K,EAAA2O,iBAAApE,EAAArF,OAAA,OAAA2F,KAAAR,EAAAE,EAAArF,QAAA2F,GAAA,GAAAtC,GAAAgC,EAAAlL,KAAA+I,EAAAmC,EAAArF,OAAAqF,EAAAiB,KAAAjB,EAAAkB,QAAA,MAAA,SAAAjN,GAAAzH,GAAA,MAAAK,gBAAAoH,IAAAzH,EAAAA,MAAAK,KAAAga,YAAAra,EAAAqa,gBAAAha,KAAAia,KAAAta,EAAAsa,MAAA3a,EAAAU,KAAAka,MAAAva,EAAAka,MAAA7I,EAAAhR,KAAAma,KAAA,SAAAhJ,GAAA,MAAA,IAAA5L,SAAA,SAAAjG,EAAA0R,GAAA,GAAAQ,GAAA,UAAAL,EAAAqH,OAAA,EAAA,EAAA,IAAAxY,KAAAga,YAAA7I,GAAA7R,EAAAU,KAAAga,YAAA7I,QAAA,IAAAxR,EAAAya,UAAA5I,EAAAR,EAAA,GAAA3L,OAAA,qDAAA,IAAAmM,EAAA,CAAA,GAAAzS,GAAA,+CAAAkU,EAAA9B,EAAA+G,MAAAnZ,EAAA,IAAAkU,EAAA,CAAA,GAAArK,GAAAqK,EAAA,GAAAjQ,OAAAmQ,EAAAhC,EAAAqH,OAAA5P,GAAA6K,EAAAzT,KAAAka,MAAA/G,EAAAnT,MAAAga,YAAA7I,GAAAsC,EAAAnU,EAAAmU,OAAAzC,GAAA,GAAA3L,OAAA,8DAAA,CAAA,GAAA+B,GAAApH,KAAAia,KAAA9I,GAAAkJ,OAAA,OAAAra,MAAAga,YAAA7I,GAAA/J,EAAAA,EAAA9F,KAAAhC,EAAA0R,KAAAjB,KAAA/P,QAAAA,KAAAsa,SAAA,SAAA3a,GAAA,MAAA,IAAA4F,SAAA,SAAA4L,EAAA7R,GAAAU,KAAAua,kBAAA5a,GAAA2B,KAAA,SAAA3B,GAAA,QAAAL,KAAA6R,EAAAxR,GAAAK,KAAAwa,iBAAA7a,GAAA2B,KAAA6P,EAAA7R,GAAA,SAAAA,IAAAyQ,KAAA/P,MAAAV,IAAAyQ,KAAA/P,QAAAA,KAAAwa,iBAAA,SAAA7a,GAAA,MAAA,IAAA4F,SAAA,SAAAjG,EAAA0R,GAAApI,EAAAjJ,GAAAK,KAAAma,KAAAxa,EAAAyS,UAAA9Q,KAAA,SAAA0P,GAAA,GAAAQ,GAAAzS,EAAAiS,EAAArR,EAAA2S,WAAA3S,EAAA6S,aAAAlT,GAAA,GAAA6R,GAAAK,EAAA7R,EAAAuS,KAAAvS,EAAAyS,SAAAzS,EAAA2S,WAAA3S,EAAA6S,gBAAAxB,GAAA,SAAAA,IAAAjB,KAAA/P,aAAAA,KAAAua,kBAAA,SAAA5a,GAAA,MAAA,IAAA4F,SAAA,SAAA4L,EAAA7R,GAAA2T,IAAArK,EAAAjJ,EAAA,IAAAqR,GAAAhR,KAAAga,YAAAjb,EAAAY,EAAAyS,QAAApS,MAAAma,KAAApb,GAAAuC,KAAA,SAAA2R,GAAA,GAAArK,GAAAuK,EAAAF,GAAA7L,EAAA,UAAAwB,EAAA4P,OAAA,EAAA,GAAA7D,EAAA5V,EAAA0b,UAAA,EAAA1b,EAAAwZ,YAAA,KAAA,EAAA,OAAA3P,EAAA,IAAAxB,GAAA,sBAAAsT,KAAA9R,KAAAA,EAAA+L,EAAA/L,GAAA5I,KAAAma,KAAAvR,GAAAtH,KAAA,SAAAhC,GAAA,GAAAP,GAAAY,EAAA2S,WAAAW,EAAAtT,EAAA6S,YAAA,iBAAAlT,KAAAA,EAAAkS,EAAAlS,EAAAyT,QAAA,WAAA,MAAA,mBAAAzT,GAAAsU,aAAAtU,EAAAsU,WAAAe,GAAAxD,EAAAsC,EAAAnU,EAAAK,EAAAuS,KAAAnT,EAAAkU,EAAAjC,KAAA1R,GAAA,SAAAA,IAAAyQ,KAAA/P,MAAAV,GAAA,SAAAA,IAAAyQ,KAAA/P,UAAA,GAAAoH,GAAAzH,MCAA,SAAAsJ,EAAA0R,GACA,YAIA,mBAAAhT,SAAAA,OAAAyH,IACAzH,OAAA,mBAAA,cAAAgT,GACA,gBAAA5S,SACAH,OAAAG,QAAA4S,EAAApb,QAAA,eAEA0J,EAAA2R,eAAAD,EAAA1R,EAAAmI,aAEApR,KAAA,SAAAoR,GACA,OACAyJ,UAAA,SAAAC,GACA,GAAA9N,MACA+N,EAAA,EAEA,iBAAAD,IAAA,gBAAAA,GAAAC,eACAA,EAAAD,EAAAC,aAIA,KADA,GAAAC,GAAAta,UAAAua,OACAD,GAAAhO,EAAAhK,OAAA+X,GAAA,CAGA,IAAA,GADA7I,GAAA,GAAAxN,OAAAsW,EAAA,UAAAhY,QACAjE,EAAA,EAAAA,EAAAmT,EAAAlP,SAAAjE,EACAmT,EAAAnT,GAAAic,EAAA,UAAAjc,EAEA,iCAAA2b,KAAAM,EAAAtV,YACAsH,EAAAW,KAAA,GAAAyD,GAAA8J,OAAAC,IAAA/b,OAAA8S,IAEAlF,EAAAW,KAAA,GAAAyD,GAAAhS,OAAA8S,GAGA,KACA8I,EAAAA,EAAAI,OACA,MAAAzb,GACA,OAGA,MAAAqN,OCzCA,SAAA/D,EAAA0R,GACA,YAIA,mBAAAhT,SAAAA,OAAAyH,IACAzH,OAAA,sBAAA,cAAAgT,GACA,gBAAA5S,SACAH,OAAAG,QAAA4S,EAAApb,QAAA,eAEA0J,EAAAoS,iBAAAV,EAAA1R,EAAAmI,aAEApR,KAAA,SAAAoR,GACA,YAMA,SAAAkK,GAAAC,EAAAC,EAAAhL,GACA,GAAA,kBAAA9L,OAAAe,UAAA8K,IACA,MAAAgL,GAAAhL,IAAAiL,EAAAhL,EAGA,KAAA,GADAiL,GAAA,GAAA/W,OAAA6W,EAAAvY,QACAjE,EAAA,EAAAA,EAAAwc,EAAAvY,OAAAjE,IACA0c,EAAA1c,GAAAyc,EAAA3Z,KAAA2O,EAAA+K,EAAAxc,GAEA,OAAA0c,GAIA,QAAAC,GAAAH,EAAAC,EAAAhL,GACA,GAAA,kBAAA9L,OAAAe,UAAAsI,OACA,MAAAwN,GAAAxN,OAAAyN,EAAAhL,EAGA,KAAA,GADAiL,MACA1c,EAAA,EAAAA,EAAAwc,EAAAvY,OAAAjE,IACAyc,EAAA3Z,KAAA2O,EAAA+K,EAAAxc,KACA0c,EAAA9N,KAAA4N,EAAAxc,GAGA,OAAA0c,GAIA,QAAAE,GAAAJ,EAAAK,GACA,GAAA,kBAAAlX,OAAAe,UAAAmQ,QACA,MAAA2F,GAAA3F,QAAAgG,EAEA,KAAA,GAAA7c,GAAA,EAAAA,EAAAwc,EAAAvY,OAAAjE,IACA,GAAAwc,EAAAxc,KAAA6c,EACA,MAAA7c,EAGA,OAAA,GAvCA,GAAA8c,GAAA,gBACAC,EAAA,kCACAC,EAAA,8BAyCA,QAOAhT,MAAA,SAAAxH,GACA,GAAA,mBAAAA,GAAAya,YAAA,mBAAAza,GAAA,mBACA,MAAAvB,MAAAic,WAAA1a,EACA,IAAAA,EAAAyL,OAAAzL,EAAAyL,MAAAkL,MAAA4D,GACA,MAAA9b,MAAAkc,YAAA3a,EACA,IAAAA,EAAAyL,MACA,MAAAhN,MAAAmc,gBAAA5a,EAEA,MAAA,IAAA8D,OAAA,oCAKA+W,gBAAA,SAAAC,GAEA,GAAA,KAAAA,EAAAzG,QAAA,KACA,OAAAyG,EAGA,IAAAC,GAAA,iCACAC,EAAAD,EAAAvC,KAAAsC,EAAAtJ,QAAA,UAAA,IACA,QAAAwJ,EAAA,GAAAA,EAAA,IAAAnd,OAAAmd,EAAA,IAAAnd,SAGA8c,YAAA,SAAA3a,GACA,GAAAib,GAAAd,EAAAna,EAAAyL,MAAAR,MAAA,MAAA,SAAA4H,GACA,QAAAA,EAAA8D,MAAA4D,IACA9b,KAEA,OAAAsb,GAAAkB,EAAA,SAAApI,GACAA,EAAAwB,QAAA,UAAA,KAEAxB,EAAAA,EAAArB,QAAA,aAAA,QAAAA,QAAA,iCAAA,IAEA,IAAA0J,GAAArI,EAAArB,QAAA,OAAA,IAAAA,QAAA,eAAA,KAAAvG,MAAA,OAAAN,MAAA,GACAwQ,EAAA1c,KAAAoc,gBAAAK,EAAA5O,OACAmE,EAAAyK,EAAA7O,KAAA,MAAAxO,OACAgT,EAAAuJ,GAAA,OAAA,eAAAe,EAAA,IAAA,GAAAtd,OAAAsd,EAAA,EAEA,OAAA,IAAAtL,GAAAY,EAAA5S,OAAAgT,EAAAsK,EAAA,GAAAA,EAAA,GAAAtI,IACApU,OAGAmc,gBAAA,SAAA5a,GACA,GAAAib,GAAAd,EAAAna,EAAAyL,MAAAR,MAAA,MAAA,SAAA4H,GACA,OAAAA,EAAA8D,MAAA6D,IACA/b,KAEA,OAAAsb,GAAAkB,EAAA,SAAApI,GAMA,GAJAA,EAAAwB,QAAA,WAAA,KACAxB,EAAAA,EAAArB,QAAA,qDAAA,QAGA,KAAAqB,EAAAwB,QAAA,MAAA,KAAAxB,EAAAwB,QAAA,KAEA,MAAA,IAAAxE,GAAAgD,EAEA,IAAAqI,GAAArI,EAAA5H,MAAA,KACAkQ,EAAA1c,KAAAoc,gBAAAK,EAAA5O,OACAmE,EAAAyK,EAAA7O,KAAA,MAAAxO,MACA,OAAA,IAAAgS,GAAAY,EACA5S,OACAsd,EAAA,GACAA,EAAA,GACAA,EAAA,GACAtI,IAEApU,OAGAic,WAAA,SAAAtc,GACA,OAAAA,EAAAqc,YAAArc,EAAAgd,QAAA/G,QAAA,MAAA,IACAjW,EAAAgd,QAAAnQ,MAAA,MAAAxJ,OAAArD,EAAAqc,WAAAxP,MAAA,MAAAxJ,OACAhD,KAAA4c,YAAAjd,GACAA,EAAAqN,MAGAhN,KAAA6c,aAAAld,GAFAK,KAAA8c,aAAAnd,IAMAid,YAAA,SAAAjd,GAKA,IAAA,GAJAod,GAAA,oCACAC,EAAArd,EAAAgd,QAAAnQ,MAAA,MACAhM,KAEAzB,EAAA,EAAA4R,EAAAqM,EAAAha,OAAA2N,EAAA5R,EAAAA,GAAA,EAAA,CACA,GAAAmZ,GAAA6E,EAAAhD,KAAAiD,EAAAje,GACAmZ,IACA1X,EAAAmN,KAAA,GAAAyD,GAAAhS,OAAAA,OAAA8Y,EAAA,GAAAA,EAAA,GAAA9Y,OAAA4d,EAAAje,KAIA,MAAAyB,IAGAsc,aAAA,SAAAnd,GAKA,IAAA,GAJAod,GAAA,6DACAC,EAAArd,EAAAqc,WAAAxP,MAAA,MACAhM,KAEAzB,EAAA,EAAA4R,EAAAqM,EAAAha,OAAA2N,EAAA5R,EAAAA,GAAA,EAAA,CACA,GAAAmZ,GAAA6E,EAAAhD,KAAAiD,EAAAje,GACAmZ,IACA1X,EAAAmN,KACA,GAAAyD,GACA8G,EAAA,IAAA9Y,OACAA,OACA8Y,EAAA,GACAA,EAAA,GACA9Y,OACA4d,EAAAje,KAMA,MAAAyB,IAIAqc,aAAA,SAAAtb,GACA,GAAAib,GAAAd,EAAAna,EAAAyL,MAAAR,MAAA,MAAA,SAAA4H,GACA,QAAAA,EAAA8D,MAAA2D,KAAAzH,EAAA8D,MAAA,sBACAlY,KAEA,OAAAsb,GAAAkB,EAAA,SAAApI,GACA,GAMA6I,GANAR,EAAArI,EAAA5H,MAAA,KACAkQ,EAAA1c,KAAAoc,gBAAAK,EAAA5O,OACAqP,EAAAT,EAAAU,SAAA,GACAnL,EAAAkL,EACAnK,QAAA,iCAAA,MACAA,QAAA,cAAA,KAAA3T,MAEA8d,GAAAhF,MAAA,kBACA+E,EAAAC,EAAAnK,QAAA,uBAAA,MAEA,IAAAb,GAAA9S,SAAA6d,GAAA,8BAAAA,EACA7d,OAAA6d,EAAAzQ,MAAA,IACA,OAAA,IAAA4E,GACAY,EACAE,EACAwK,EAAA,GACAA,EAAA,GACAA,EAAA,GACAtI,IACApU,UCpNA,SAAAiJ,EAAA0R,GACA,YAIA,mBAAAhT,SAAAA,OAAAyH,IACAzH,OAAA,cAAA,qBAAA,kBAAA,kBAAAgT,GACA,gBAAA5S,SACAH,OAAAG,QAAA4S,EAAApb,QAAA,sBAAAA,QAAA,mBAAAA,QAAA,mBAEA0J,EAAAmU,WAAAzC,EAAA1R,EAAAoS,iBAAApS,EAAA2R,eAAA3R,EAAAkQ,gBAEAnZ,KAAA,SAAAqb,EAAAT,EAAAzB,GAqBA,QAAAkE,GAAAC,EAAAC,GACA,GAAA3B,KAWA,QATA0B,EAAAC,GAAAjU,QAAA,SAAAkU,GACA,IAAA,GAAAC,KAAAD,GACAA,EAAA7S,eAAA8S,KACA7B,EAAA6B,GAAAD,EAAAC,GAGA,OAAA7B,KAGAA,EAGA,QAAA8B,GAAAC,GACA,MAAAA,GAAA3Q,OAAA2Q,EAAA,mBApCA,GAAAC,IACA7P,OAAA,SAAA8P,GAEA,MAAA,MAAAA,EAAA7L,cAAA,IAAA4D,QAAA,iBACA,MAAAiI,EAAA7L,cAAA,IAAA4D,QAAA,uBACA,MAAAiI,EAAA7L,cAAA,IAAA4D,QAAA,oBACA,MAAAiI,EAAA7L,cAAA,IAAA4D,QAAA,qBAEAoE,eA+BA,QAOAjL,IAAA,SAAA+L,GACA,IAEA,KAAA,IAAAzV,OACA,MAAAsY,GACA,MAAAD,GAAAC,GACA3d,KAAA8d,UAAAH,EAAA7C,GAEA9a,KAAA+d,qBAAAjD,KAYAgD,UAAA,SAAAvc,EAAAuZ,GACAA,EAAAuC,EAAAO,EAAA9C,EACA,IAAAkD,GAAA,GAAA7E,GAAA2B,EACA,OAAA,IAAAvV,SAAA,SAAA9C,GACA,GAAAwb,GAAA5C,EAAAtS,MAAAxH,EACA,mBAAAuZ,GAAA/M,SACAkQ,EAAAA,EAAAlQ,OAAA+M,EAAA/M,SAEAtL,EAAA8C,QAAAoB,IAAAsX,EAAA1N,IAAA,SAAA2N,GACA,MAAA,IAAA3Y,SAAA,SAAA9C,GACA,QAAA0b,KACA1b,EAAAyb,GAGAF,EAAA1D,SAAA4D,GAAA5c,KAAAmB,EAAA0b,GAAA,SAAAA,UAGApO,KAAA/P,QASA+d,qBAAA,SAAAjD,GACAA,EAAAuC,EAAAO,EAAA9C,EACA,IAAAsD,GAAAxD,EAAAC,UAAAC,EAIA,OAHA,kBAAAA,GAAA/M,SACAqQ,EAAAA,EAAArQ,OAAA+M,EAAA/M,SAEAxI,QAAA9C,QAAA2b,IAYAC,WAAA,SAAA7C,EAAAvc,EAAAqf,EAAA9N,GACA,GAAA,kBAAAgL,GACA,KAAA,IAAAnW,OAAA,wCACA,IAAA,kBAAAmW,GAAA+C,uBAEA,MAAA/C,EAGA,IAAAgD,GAAA,WACA,IAEA,MADAxe,MAAA+O,MAAAzN,KAAArC,EAAAqf,GAAA,SAAAA,GACA9C,EAAAnL,MAAAG,GAAAxQ,KAAAU,WACA,MAAAf,GAIA,KAHA+d,GAAA/d,IACAK,KAAA8d,UAAAne,GAAA2B,KAAArC,EAAAqf,GAAA,SAAAA,GAEA3e,IAEAoQ,KAAA/P,KAGA,OAFAwe,GAAAD,uBAAA/C,EAEAgD,GASAC,aAAA,SAAAjD,GACA,GAAA,kBAAAA,GACA,KAAA,IAAAnW,OAAA,2CACA,OAAA,kBAAAmW,GAAA+C,uBACA/C,EAAA+C,uBAGA/C,GAWAkD,OAAA,SAAAT,EAAA1J,EAAAoK,GACA,MAAA,IAAApZ,SAAA,SAAA9C,EAAAoE,GACA,GAAA+X,GAAA,GAAAvF,eACAuF,GAAArF,QAAA1S,EACA+X,EAAApF,mBAAA,WACA,IAAAoF,EAAAnF,aACAmF,EAAAlF,QAAA,KAAAkF,EAAAlF,OAAA,IACAjX,EAAAmc,EAAAjF,cAEA9S,EAAA,GAAAxB,OAAA,WAAAkP,EAAA,wBAAAqK,EAAAlF,WAIAkF,EAAAtF,KAAA,OAAA/E,GACAqK,EAAAC,iBAAA,eAAA,mBAEA,IAAAC,IAAA9R,MAAAiR,EACA7e,SAAAuf,IACAG,EAAAnC,QAAAgC,GAGAC,EAAAhF,KAAAnK,KAAApH,UAAAyW","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n */\n report: function StackTrace$$report(stackframes, url, errorMsg) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n\n var reportPayload = {stack: stackframes};\n if (errorMsg != undefined) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.concat.js b/dist/stacktrace.concat.js index 29f4fb2..3951447 100644 --- a/dist/stacktrace.concat.js +++ b/dist/stacktrace.concat.js @@ -430,12 +430,13 @@ }, /** - * Given an Array of StackFrames, serialize and POST to given URL. + * Given an error message and Array of StackFrames, serialize and POST to given URL. * * @param {Array} stackframes * @param {String} url + * @param {String} errorMsg */ - report: function StackTrace$$report(stackframes, url) { + report: function StackTrace$$report(stackframes, url, errorMsg) { return new Promise(function(resolve, reject) { var req = new XMLHttpRequest(); req.onerror = reject; @@ -450,7 +451,13 @@ }; req.open('post', url); req.setRequestHeader('Content-Type', 'application/json'); - req.send(JSON.stringify({stack: stackframes})); + + var reportPayload = {stack: stackframes}; + if (errorMsg != undefined) { + reportPayload.message = errorMsg; + } + + req.send(JSON.stringify(reportPayload)); }); } }; diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index c8c3f10..99bcc06 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),r=s.getArg(n,"sources"),o=s.getArg(n,"names",[]),i=s.getArg(n,"sourceRoot",null),a=s.getArg(n,"sourcesContent",null),u=s.getArg(n,"mappings"),l=s.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),o=s.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=s.getArg(e,"offset"),t=s.getArg(n,"line"),o=s.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],C=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(t=new i,t.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(_,a),o=y[r])_+=r.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),i?(i.path=t,o(i)):t}function a(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),a=r(e);if(a&&(e=a.path||"/"),t&&!t.scheme)return a&&(t.scheme=a.scheme),o(t);if(t||n.match(v))return n;if(a&&!a.host&&!a.path)return a.host=n,o(a);var s="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return a?(a.path=s,o(a)):s}function s(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return e}function c(e){return f(e)?"$"+e:e}function l(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var t=n-10;t>=0;t--)if(36!==e.charCodeAt(t))return!1;return!0}function p(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function g(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=h(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:h(e.name,n.name)))))}n.getArg=t;var d=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,v=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=o,n.normalize=i,n.join=a,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(d)},n.relative=s;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?u:c,n.fromSetString=_?u:l,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},function(e,n){function t(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,o,i,a,s):s==n.LEAST_UPPER_BOUND?r1?t(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,o,i){if(0===r.length)return-1;var a=t(-1,r.length,e,r,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,n,t){function r(){this._array=[],this._set=Object.create(null)}var o=t(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=i.call(this._set,t),a=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=a)},r.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=t(5),a=5,s=1<>>=a,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},n.decode=function(e,n,t){var r,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(s&c),s&=u,f+=s<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,a){if(a>i){var s=r(i,a),u=i-1;t(e,s,a);for(var c=e[a],l=i;a>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,a)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var t,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,t=o.exec(s),t&&t[1])return t[1];if(t=r.exec(s),t&&t[1])return t[1];if(t=i.exec(s),t&&t[1])return t[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(t,r,o,i,a){var s=new e.SourceMapConsumer(t),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(t){var i=e.lineNumber,a=e.columnNumber;"string"==typeof t&&(t=o(t.replace(/^\)\]\}'/,""))),"undefined"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,a,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new l(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var t=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(t.pop()),i=t.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],n)},this)},parseFFOrSafari:function(r){var o=t(r.stack.split("\n"),function(e){return!e.match(a)},this);return n(o,function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return new e(n);var t=n.split("@"),r=this.extractLocation(t.pop()),o=t.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=t(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return n(i,function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(a,s,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(n){return o(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,o){o=r(i,o);var a=new t(o);return new Promise(function(t){var r=e.parse(n);"function"==typeof o.filter&&(r=r.filter(o.filter)),t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}a.pinpoint(e).then(n,t)["catch"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n){return new Promise(function(t,r){var o=new XMLHttpRequest;o.onerror=r,o.onreadystatechange=function(){4===o.readyState&&(o.status>=200&&o.status<400?t(o.responseText):r(new Error("POST to "+n+" failed with status: "+o.status)))},o.open("post",n),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify({stack:e}))})}}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),r=s.getArg(n,"sources"),o=s.getArg(n,"names",[]),i=s.getArg(n,"sourceRoot",null),a=s.getArg(n,"sourcesContent",null),u=s.getArg(n,"mappings"),l=s.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),o=s.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=s.getArg(e,"offset"),t=s.getArg(n,"line"),o=s.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],C=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(t=new i,t.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(_,a),o=y[r])_+=r.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),i?(i.path=t,o(i)):t}function a(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),a=r(e);if(a&&(e=a.path||"/"),t&&!t.scheme)return a&&(t.scheme=a.scheme),o(t);if(t||n.match(v))return n;if(a&&!a.host&&!a.path)return a.host=n,o(a);var s="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return a?(a.path=s,o(a)):s}function s(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return e}function c(e){return f(e)?"$"+e:e}function l(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var t=n-10;t>=0;t--)if(36!==e.charCodeAt(t))return!1;return!0}function p(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function g(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=h(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:h(e.name,n.name)))))}n.getArg=t;var d=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,v=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=o,n.normalize=i,n.join=a,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(d)},n.relative=s;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?u:c,n.fromSetString=_?u:l,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},function(e,n){function t(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,o,i,a,s):s==n.LEAST_UPPER_BOUND?r1?t(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,o,i){if(0===r.length)return-1;var a=t(-1,r.length,e,r,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,n,t){function r(){this._array=[],this._set=Object.create(null)}var o=t(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=i.call(this._set,t),a=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=a)},r.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=t(5),a=5,s=1<>>=a,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},n.decode=function(e,n,t){var r,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(s&c),s&=u,f+=s<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,a){if(a>i){var s=r(i,a),u=i-1;t(e,s,a);for(var c=e[a],l=i;a>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,a)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var t,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,t=o.exec(s),t&&t[1])return t[1];if(t=r.exec(s),t&&t[1])return t[1];if(t=i.exec(s),t&&t[1])return t[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(t,r,o,i,a){var s=new e.SourceMapConsumer(t),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(t){var i=e.lineNumber,a=e.columnNumber;"string"==typeof t&&(t=o(t.replace(/^\)\]\}'/,""))),"undefined"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,a,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new l(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var t=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(t.pop()),i=t.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],n)},this)},parseFFOrSafari:function(r){var o=t(r.stack.split("\n"),function(e){return!e.match(a)},this);return n(o,function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return new e(n);var t=n.split("@"),r=this.extractLocation(t.pop()),o=t.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=t(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return n(i,function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(a,s,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(n){return o(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,o){o=r(i,o);var a=new t(o);return new Promise(function(t){var r=e.parse(n);"function"==typeof o.filter&&(r=r.filter(o.filter)),t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}a.pinpoint(e).then(n,t)["catch"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n,t){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!=t&&(a.message=t),i.send(JSON.stringify(a))})}}}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 77a9d39..889da7c 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","C","b","A","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","charCodeAt","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","hasOwnProperty","getOwnPropertyNames","encode","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","test","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","RegExp","$1","undefined","caller","ErrorStackParser","_map","array","fn","thisArg","output","_filter","filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","pop","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","callback","errback","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","reject","req","setRequestHeader","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n */\n report: function StackTrace$$report(stackframes, url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n req.send(JSON.stringify({stack: stackframes}));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","C","b","A","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","charCodeAt","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","hasOwnProperty","getOwnPropertyNames","encode","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","test","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","RegExp","$1","undefined","caller","ErrorStackParser","_map","array","fn","thisArg","output","_filter","filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","pop","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","callback","errback","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","errorMsg","reject","req","setRequestHeader","reportPayload","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n */\n report: function StackTrace$$report(stackframes, url, errorMsg) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n\n var reportPayload = {stack: stackframes};\n if (errorMsg != undefined) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file From 2016cb9c58914e7b6e09b7c90bfef64e97de5f04 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 28 May 2016 12:25:12 -0700 Subject: [PATCH 053/110] 1.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4dac7ed..2355274 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "Victor Homyakov (https://github.com/victor-homyakov)", "Oliver Salzburg (https://github.com/oliversalzburg)" ], - "version": "1.1.3", + "version": "1.2.0", "license": "Unlicense", "keywords": [ "stacktrace", From 94bf1022fd7abf2402cedb6b5abfd77518e78d45 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 29 May 2016 13:35:18 -0700 Subject: [PATCH 054/110] Fix JSHint warning. --- stacktrace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stacktrace.js b/stacktrace.js index 9c061f7..7cf07b1 100644 --- a/stacktrace.js +++ b/stacktrace.js @@ -186,7 +186,7 @@ req.setRequestHeader('Content-Type', 'application/json'); var reportPayload = {stack: stackframes}; - if (errorMsg != undefined) { + if (errorMsg !== undefined) { reportPayload.message = errorMsg; } From b4077c1041cea7cbd2264283ea21bf309356791e Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 29 May 2016 13:35:53 -0700 Subject: [PATCH 055/110] Ensure we run linting for PRs. --- .travis.yml | 2 +- gulpfile.js | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index ec20015..82cdaee 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,4 +17,4 @@ before_install: before_script: - npm install script: -- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then gulp ci; else gulp test-pr; fi +- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then gulp ci; else gulp pr; fi diff --git a/gulpfile.js b/gulpfile.js index 19c87bb..0f20b69 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -58,7 +58,7 @@ gulp.task('dist', function() { .pipe(concat(sources.replace('.js', '-with-promises-and-json-polyfills.js'))) .pipe(gulp.dest('dist')) .pipe(uglify()) - .pipe(rename({extname:'.min.js'})) + .pipe(rename({extname: '.min.js'})) .pipe(sourcemaps.write('./')) .pipe(gulp.dest('dist')); @@ -74,6 +74,11 @@ gulp.task('dist', function() { gulp.task('clean', del.bind(null, ['build', 'coverage', 'dist'])); +gulp.task('pr', ['lint', 'test-pr'], function() { + gulp.src('./coverage/**/lcov.info') + .pipe(coveralls()); +}); + gulp.task('ci', ['lint', 'test-ci'], function() { gulp.src('./coverage/**/lcov.info') .pipe(coveralls()); From 6b8efd4272a89176d5a6566542af3530ca955eb3 Mon Sep 17 00:00:00 2001 From: Benjamin Gruenbaum Date: Mon, 6 Jun 2016 00:10:46 +0300 Subject: [PATCH 056/110] remove explicit construction The promise usage left some to be desired and I felt like I should help by refactoring out [explicit construction](http://stackoverflow.com/questions/23803743/what-is-the-explicit-promise-construction-antipattern-and-how-do-i-avoid-it/23803744#23803744) which I used to do myself when I started with promises. Thanks for the library. --- stacktrace.js | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/stacktrace.js b/stacktrace.js index 7cf07b1..e2bc945 100644 --- a/stacktrace.js +++ b/stacktrace.js @@ -80,21 +80,15 @@ fromError: function StackTrace$$fromError(error, opts) { opts = _merge(_options, opts); var gps = new StackTraceGPS(opts); - return new Promise(function(resolve) { - var stackframes = ErrorStackParser.parse(error); - if (typeof opts.filter === 'function') { - stackframes = stackframes.filter(opts.filter); - } - resolve(Promise.all(stackframes.map(function(sf) { - return new Promise(function(resolve) { - function resolveOriginal() { - resolve(sf); - } - - gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal); - }); - }))); - }.bind(this)); + var stackframes = ErrorStackParser.parse(error); + if (typeof opts.filter === 'function') { + stackframes = stackframes.filter(opts.filter); + } + return Promise.all(stackframes.map(function(sf) { + return gps.pinpoint(sf); + }).catch(function(error) { + return sf; + })); }, /** From a84b7b7e6e6f2ef9a1521798ede6f613502a4c16 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 5 Jun 2016 18:18:30 -0700 Subject: [PATCH 057/110] Revert "Merge pull request #166 from benjamingr/patch-1" This reverts commit 11df1103e1a1d131a27c6265a6deb9019ec6ab2f, reversing changes made to b4077c1041cea7cbd2264283ea21bf309356791e. --- stacktrace.js | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/stacktrace.js b/stacktrace.js index e2bc945..7cf07b1 100644 --- a/stacktrace.js +++ b/stacktrace.js @@ -80,15 +80,21 @@ fromError: function StackTrace$$fromError(error, opts) { opts = _merge(_options, opts); var gps = new StackTraceGPS(opts); - var stackframes = ErrorStackParser.parse(error); - if (typeof opts.filter === 'function') { - stackframes = stackframes.filter(opts.filter); - } - return Promise.all(stackframes.map(function(sf) { - return gps.pinpoint(sf); - }).catch(function(error) { - return sf; - })); + return new Promise(function(resolve) { + var stackframes = ErrorStackParser.parse(error); + if (typeof opts.filter === 'function') { + stackframes = stackframes.filter(opts.filter); + } + resolve(Promise.all(stackframes.map(function(sf) { + return new Promise(function(resolve) { + function resolveOriginal() { + resolve(sf); + } + + gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal); + }); + }))); + }.bind(this)); }, /** From 76cc6dc461f459c42730e936c0c9737745681c13 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 5 Jun 2016 18:19:09 -0700 Subject: [PATCH 058/110] Update dist from previous changes. --- dist/stacktrace-with-promises-and-json-polyfills.js | 2 +- dist/stacktrace-with-promises-and-json-polyfills.min.js | 2 +- dist/stacktrace-with-promises-and-json-polyfills.min.js.map | 2 +- dist/stacktrace.concat.js | 2 +- dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dist/stacktrace-with-promises-and-json-polyfills.js b/dist/stacktrace-with-promises-and-json-polyfills.js index 7f720cb..bb881b6 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.js @@ -2438,7 +2438,7 @@ if (!Array.prototype.forEach) { req.setRequestHeader('Content-Type', 'application/json'); var reportPayload = {stack: stackframes}; - if (errorMsg != undefined) { + if (errorMsg !== undefined) { reportPayload.message = errorMsg; } diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index 4535372..e1d8c21 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ (function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){B=e}function r(e){z=e}function o(){return function(){process.nextTick(c)}}function i(){return function(){D(c)}}function a(){var e=0,t=new H(c),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function s(){var e=new MessageChannel;return e.port1.onmessage=c,function(){e.port2.postMessage(0)}}function u(){return function(){setTimeout(c,1)}}function c(){for(var e=0;I>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}I=0}function l(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,i()}catch(n){return u()}}function f(e,t){var n=this,r=n._state;if(r===te&&!e||r===ne&&!t)return this;var o=new this.constructor(h),i=n._result;if(r){var a=arguments[r-1];z(function(){j(r,o,a,i)})}else S(n,o,e,t);return o}function p(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(h);return b(n,e),n}function h(){}function g(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return re.error=t,re}}function y(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){z(function(e){var r=!1,o=y(n,t,function(n){r||(r=!0,t!==n?b(e,n):C(e,n))},function(t){r||(r=!0,O(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,O(e,o))},e)}function _(e,t){t._state===te?C(e,t._result):t._state===ne?O(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){O(e,t)})}function w(e,n,r){n.constructor===e.constructor&&r===K&&constructor.resolve===Q?_(e,n):r===re?O(e,re.error):void 0===r?C(e,n):t(r)?v(e,n,r):C(e,n)}function b(t,n){t===n?O(t,g()):e(n)?w(t,n,m(n)):C(t,n)}function A(e){e._onerror&&e._onerror(e._result),E(e)}function C(e,t){e._state===ee&&(e._result=t,e._state=te,0!==e._subscribers.length&&z(E,e))}function O(e,t){e._state===ee&&(e._state=ne,e._result=t,z(A,e))}function S(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+te]=n,o[i+ne]=r,0===i&&e._state&&z(E,e)}function E(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)S(r.resolve(e[a]),void 0,t,n);return o}function k(e){var t=this,n=new t(h);return O(n,e),n}function P(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],h!==e&&("function"!=typeof e&&P(),this instanceof F?M(this,e):R())}function U(e,t){this._instanceConstructor=e,this.promise=new e(h),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?C(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&C(this.promise,this._result))):O(this.promise,this._validationError())}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,B,J,q=$,I=0,z=function(e,t){X[I]=e,X[I+1]=t,I+=2,2===I&&(B?B(c):J())},Z="undefined"!=typeof window?window:void 0,Y=Z||{},H=Y.MutationObserver||Y.WebKitMutationObserver,W="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);J=W?o():H?a():V?s():void 0===Z&&"function"==typeof require?l():u();var K=f,Q=p,ee=void 0,te=1,ne=2,re=new N,oe=new N,ie=x,ae=T,se=k,ue=0,ce=F;F.all=ie,F.race=ae,F.resolve=Q,F.reject=se,F._setScheduler=n,F._setAsap=r,F._asap=z,F.prototype={constructor:F,then:K,"catch":function(e){return this.then(null,e)}};var le=U;U.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},U.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ee&&e>n;n++)this._eachEntry(t[n],n)},U.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===Q){var o=m(e);if(o===K&&e._state!==ee)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ce){var i=new n(h);w(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},U.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ee&&(this._remaining--,e===ne?O(r,n):this._result[t]=n),0===this._remaining&&C(r,this._result)},U.prototype._willSettleAt=function(e,t){var n=this;S(e,void 0,function(e){n._settledAt(te,t,e)},function(e){n._settledAt(ne,t,e)})};var fe=G,pe={Promise:ce,polyfill:fe};"function"==typeof define&&define.amd?define(function(){return pe}):"undefined"!=typeof module&&module.exports?module.exports=pe:"undefined"!=typeof this&&(this.ES6Promise=pe),fe()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==m)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===m&&u(m)===m&&u()===m&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([m])&&"null"==u(null)&&"[null,null,null]"==u([m,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,d,m,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!i("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,j=[0,31,59,90,120,151,181,212,243,273,304,334],M=function(e,t){return j[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?d=2==a?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var r,i,a=v.call(e)==b,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),d(e,t)},!i("json-stringify")){var x={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},T="000000",k=function(e,t){return(T+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=x[a];break;default:if(32>a){t+=P+k(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,N,j,x,T,P,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(M){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=L((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,w=L(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+k(6,0>c?-c:c):k(4,c))+"-"+k(2,l+1)+"-"+k(2,p)+"T"+k(2,y)+":"+k(2,_)+":"+k(2,w)+"."+k(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(T=a.length;T--;)if(a[T]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==S){for(x=0,T=s.length;T>x;x++)j=F(x,s,n,r,o,i,a),N.push(j===m?"null":j);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+P+"]":"["+N.join(",")+"]":"[]"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+P+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==b)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=q(J()),"$"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(y))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return e}function c(e){return f(e)?"$"+e:e}function l(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var t=e.length;if(9>t)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function p(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function h(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function g(e,t){return e===t?0:e>t?1:-1}function d(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=g(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:g(e.name,t.name)))))}t.getArg=n;var m=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(m)},t.relative=s;var v=function(){var e=Object.create(null);return!("__proto__"in e)}();t.toSetString=v?u:c,t.fromSetString=v?u:l,t.compareByOriginalPositions=p,t.compareByGeneratedPositionsDeflated=h,t.compareByGeneratedPositionsInflated=d},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){ -this._array=[],this._set=Object.create(null)}var o=n(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){o=r(i,o);var a=new n(o);return new Promise(function(n){var r=e.parse(t);"function"==typeof o.filter&&(r=r.filter(o.filter)),n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}a.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t,n){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+t+" failed with status: "+i.status)))},i.open("post",t),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!=n&&(a.message=n),i.send(JSON.stringify(a))})}}}); +this._array=[],this._set=Object.create(null)}var o=n(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){o=r(i,o);var a=new n(o);return new Promise(function(n){var r=e.parse(t);"function"==typeof o.filter&&(r=r.filter(o.filter)),n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}a.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t,n){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+t+" failed with status: "+i.status)))},i.open("post",t),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==n&&(a.message=n),i.send(JSON.stringify(a))})}}}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map index a79e536..8583f17 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes","92","34","8","12","10","13","9","leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes","47","98","116","110","102","114","abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","C","b","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","test","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","RegExp","$1","caller","ErrorStackParser","_map","array","fn","output","_filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","stackframes","sf","resolveOriginal","stackFrames","instrument","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","errorMsg","req","setRequestHeader","reportPayload"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n */\n report: function StackTrace$$report(stackframes, url, errorMsg) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n\n var reportPayload = {stack: stackframes};\n if (errorMsg != undefined) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes","92","34","8","12","10","13","9","leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes","47","98","116","110","102","114","abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","C","b","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","test","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","RegExp","$1","caller","ErrorStackParser","_map","array","fn","output","_filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","stackframes","sf","resolveOriginal","stackFrames","instrument","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","errorMsg","req","setRequestHeader","reportPayload"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n */\n report: function StackTrace$$report(stackframes, url, errorMsg) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n\n var reportPayload = {stack: stackframes};\n if (errorMsg !== undefined) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.concat.js b/dist/stacktrace.concat.js index 3951447..b798e6a 100644 --- a/dist/stacktrace.concat.js +++ b/dist/stacktrace.concat.js @@ -453,7 +453,7 @@ req.setRequestHeader('Content-Type', 'application/json'); var reportPayload = {stack: stackframes}; - if (errorMsg != undefined) { + if (errorMsg !== undefined) { reportPayload.message = errorMsg; } diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index 99bcc06..2438ee8 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),r=s.getArg(n,"sources"),o=s.getArg(n,"names",[]),i=s.getArg(n,"sourceRoot",null),a=s.getArg(n,"sourcesContent",null),u=s.getArg(n,"mappings"),l=s.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),o=s.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=s.getArg(e,"offset"),t=s.getArg(n,"line"),o=s.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],C=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(t=new i,t.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(_,a),o=y[r])_+=r.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),i?(i.path=t,o(i)):t}function a(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),a=r(e);if(a&&(e=a.path||"/"),t&&!t.scheme)return a&&(t.scheme=a.scheme),o(t);if(t||n.match(v))return n;if(a&&!a.host&&!a.path)return a.host=n,o(a);var s="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return a?(a.path=s,o(a)):s}function s(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return e}function c(e){return f(e)?"$"+e:e}function l(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var t=n-10;t>=0;t--)if(36!==e.charCodeAt(t))return!1;return!0}function p(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function g(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=h(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:h(e.name,n.name)))))}n.getArg=t;var d=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,v=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=o,n.normalize=i,n.join=a,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(d)},n.relative=s;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?u:c,n.fromSetString=_?u:l,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},function(e,n){function t(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,o,i,a,s):s==n.LEAST_UPPER_BOUND?r1?t(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,o,i){if(0===r.length)return-1;var a=t(-1,r.length,e,r,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,n,t){function r(){this._array=[],this._set=Object.create(null)}var o=t(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=i.call(this._set,t),a=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=a)},r.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=t(5),a=5,s=1<>>=a,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},n.decode=function(e,n,t){var r,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(s&c),s&=u,f+=s<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,a){if(a>i){var s=r(i,a),u=i-1;t(e,s,a);for(var c=e[a],l=i;a>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,a)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var t,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,t=o.exec(s),t&&t[1])return t[1];if(t=r.exec(s),t&&t[1])return t[1];if(t=i.exec(s),t&&t[1])return t[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(t,r,o,i,a){var s=new e.SourceMapConsumer(t),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(t){var i=e.lineNumber,a=e.columnNumber;"string"==typeof t&&(t=o(t.replace(/^\)\]\}'/,""))),"undefined"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,a,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new l(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var t=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(t.pop()),i=t.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],n)},this)},parseFFOrSafari:function(r){var o=t(r.stack.split("\n"),function(e){return!e.match(a)},this);return n(o,function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return new e(n);var t=n.split("@"),r=this.extractLocation(t.pop()),o=t.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=t(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return n(i,function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(a,s,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(n){return o(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,o){o=r(i,o);var a=new t(o);return new Promise(function(t){var r=e.parse(n);"function"==typeof o.filter&&(r=r.filter(o.filter)),t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}a.pinpoint(e).then(n,t)["catch"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n,t){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!=t&&(a.message=t),i.send(JSON.stringify(a))})}}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),r=s.getArg(n,"sources"),o=s.getArg(n,"names",[]),i=s.getArg(n,"sourceRoot",null),a=s.getArg(n,"sourcesContent",null),u=s.getArg(n,"mappings"),l=s.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),o=s.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=s.getArg(e,"offset"),t=s.getArg(n,"line"),o=s.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],C=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(t=new i,t.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(_,a),o=y[r])_+=r.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),i?(i.path=t,o(i)):t}function a(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),a=r(e);if(a&&(e=a.path||"/"),t&&!t.scheme)return a&&(t.scheme=a.scheme),o(t);if(t||n.match(v))return n;if(a&&!a.host&&!a.path)return a.host=n,o(a);var s="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return a?(a.path=s,o(a)):s}function s(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return e}function c(e){return f(e)?"$"+e:e}function l(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var t=n-10;t>=0;t--)if(36!==e.charCodeAt(t))return!1;return!0}function p(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function g(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=h(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:h(e.name,n.name)))))}n.getArg=t;var d=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,v=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=o,n.normalize=i,n.join=a,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(d)},n.relative=s;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?u:c,n.fromSetString=_?u:l,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},function(e,n){function t(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,o,i,a,s):s==n.LEAST_UPPER_BOUND?r1?t(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,o,i){if(0===r.length)return-1;var a=t(-1,r.length,e,r,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,n,t){function r(){this._array=[],this._set=Object.create(null)}var o=t(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=i.call(this._set,t),a=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=a)},r.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=t(5),a=5,s=1<>>=a,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},n.decode=function(e,n,t){var r,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(s&c),s&=u,f+=s<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,a){if(a>i){var s=r(i,a),u=i-1;t(e,s,a);for(var c=e[a],l=i;a>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,a)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var t,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,t=o.exec(s),t&&t[1])return t[1];if(t=r.exec(s),t&&t[1])return t[1];if(t=i.exec(s),t&&t[1])return t[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(t,r,o,i,a){var s=new e.SourceMapConsumer(t),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(t){var i=e.lineNumber,a=e.columnNumber;"string"==typeof t&&(t=o(t.replace(/^\)\]\}'/,""))),"undefined"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,a,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new l(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var t=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(t.pop()),i=t.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],n)},this)},parseFFOrSafari:function(r){var o=t(r.stack.split("\n"),function(e){return!e.match(a)},this);return n(o,function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return new e(n);var t=n.split("@"),r=this.extractLocation(t.pop()),o=t.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=t(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return n(i,function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(a,s,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(n){return o(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,o){o=r(i,o);var a=new t(o);return new Promise(function(t){var r=e.parse(n);"function"==typeof o.filter&&(r=r.filter(o.filter)),t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}a.pinpoint(e).then(n,t)["catch"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n,t){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==t&&(a.message=t),i.send(JSON.stringify(a))})}}}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 889da7c..aeb9475 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","C","b","A","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","charCodeAt","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","hasOwnProperty","getOwnPropertyNames","encode","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","test","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","RegExp","$1","undefined","caller","ErrorStackParser","_map","array","fn","thisArg","output","_filter","filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","pop","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","callback","errback","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","errorMsg","reject","req","setRequestHeader","reportPayload","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n */\n report: function StackTrace$$report(stackframes, url, errorMsg) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n\n var reportPayload = {stack: stackframes};\n if (errorMsg != undefined) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","C","b","A","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","charCodeAt","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","hasOwnProperty","getOwnPropertyNames","encode","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","test","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","RegExp","$1","undefined","caller","ErrorStackParser","_map","array","fn","thisArg","output","_filter","filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","pop","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","callback","errback","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","errorMsg","reject","req","setRequestHeader","reportPayload","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n */\n report: function StackTrace$$report(stackframes, url, errorMsg) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n\n var reportPayload = {stack: stackframes};\n if (errorMsg !== undefined) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file From 392301d2120e189886874a8cb1006235af5b414b Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 12 Jun 2016 21:07:44 -0700 Subject: [PATCH 059/110] Add StackTrace.getSync() convenience method that gets stacktrace without doing async enhancing. Fixes #165. --- README.md | 6 +++ ...ktrace-with-promises-and-json-polyfills.js | 47 +++++++++++++++---- ...ce-with-promises-and-json-polyfills.min.js | 2 +- ...ith-promises-and-json-polyfills.min.js.map | 2 +- dist/stacktrace.concat.js | 47 +++++++++++++++---- dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- spec/stacktrace-spec.js | 7 +++ stacktrace.js | 47 +++++++++++++++---- 9 files changed, 131 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 680e3be..d9d9bfc 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,12 @@ Generate a backtrace from invocation point, then parse and enhance it. * *sourceCache: Object (String URL => String Source)* - Pre-populate source cache to avoid network requests * *offline: Boolean (default: false)* - Set to `true` to prevent all network requests +#### `StackTrace.getSync(/*optional*/ options)` => Array[[StackFrame](https://github.com/stacktracejs/stackframe)] +Generate a backtrace from invocation point, then parse it. **HEADS UP:** This method does not use source maps or guess anonymous functions. + +**(Optional) options: Object** +* *filter: Function([StackFrame](https://github.com/stacktracejs/stackframe) => Boolean)* - Only include stack entries matching for which `filter` returns `true` + #### `StackTrace.fromError(error, /*optional*/ options)` => [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)(Array[[StackFrame](https://github.com/stacktracejs/stackframe)]) Given an Error object, use [error-stack-parser](https://github.com/stacktracejs/error-stack-parser) to parse it and enhance location information with [stacktrace-gps](https://github.com/stacktracejs/stacktrace-gps). diff --git a/dist/stacktrace-with-promises-and-json-polyfills.js b/dist/stacktrace-with-promises-and-json-polyfills.js index bb881b6..648f776 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.js @@ -2274,6 +2274,15 @@ if (!Array.prototype.forEach) { sourceCache: {} }; + var _generateError = function StackTrace$$GenerateError() { + try { + // Error must be thrown to get stack in IE + throw new Error(); + } catch (err) { + return err; + } + }; + /** * Merge 2 given Objects. If a conflict occurs the second object wins. * Does not do deep merges. @@ -2310,16 +2319,36 @@ if (!Array.prototype.forEach) { * @returns {Array} of StackFrame */ get: function StackTrace$$get(opts) { - try { - // Error must be thrown to get stack in IE - throw new Error(); - } catch (err) { - if (_isShapedLikeParsableError(err)) { - return this.fromError(err, opts); - } else { - return this.generateArtificially(opts); - } + var err = _generateError(); + if (_isShapedLikeParsableError(err)) { + return this.fromError(err, opts); + } else { + return this.generateArtificially(opts); + } + }, + + /** + * Get a backtrace from invocation point. + * IMPORTANT: Does not handle source maps or guess function names! + * + * @param {Object} opts + * @returns {Array} of StackFrame + */ + getSync: function StackTrace$$getSync(opts) { + opts = _merge(_options, opts); + var err = _generateError(); + var stackframes; + + if (_isShapedLikeParsableError(err)) { + stackframes = ErrorStackParser.parse(err); + } else { + stackframes = StackGenerator.backtrace(opts); + } + + if (typeof opts.filter === 'function') { + stackframes = stackframes.filter(opts.filter); } + return stackframes; }, /** diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index e1d8c21..3014f05 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ (function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){B=e}function r(e){z=e}function o(){return function(){process.nextTick(c)}}function i(){return function(){D(c)}}function a(){var e=0,t=new H(c),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function s(){var e=new MessageChannel;return e.port1.onmessage=c,function(){e.port2.postMessage(0)}}function u(){return function(){setTimeout(c,1)}}function c(){for(var e=0;I>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}I=0}function l(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,i()}catch(n){return u()}}function f(e,t){var n=this,r=n._state;if(r===te&&!e||r===ne&&!t)return this;var o=new this.constructor(h),i=n._result;if(r){var a=arguments[r-1];z(function(){j(r,o,a,i)})}else S(n,o,e,t);return o}function p(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(h);return b(n,e),n}function h(){}function g(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return re.error=t,re}}function y(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){z(function(e){var r=!1,o=y(n,t,function(n){r||(r=!0,t!==n?b(e,n):C(e,n))},function(t){r||(r=!0,O(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,O(e,o))},e)}function _(e,t){t._state===te?C(e,t._result):t._state===ne?O(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){O(e,t)})}function w(e,n,r){n.constructor===e.constructor&&r===K&&constructor.resolve===Q?_(e,n):r===re?O(e,re.error):void 0===r?C(e,n):t(r)?v(e,n,r):C(e,n)}function b(t,n){t===n?O(t,g()):e(n)?w(t,n,m(n)):C(t,n)}function A(e){e._onerror&&e._onerror(e._result),E(e)}function C(e,t){e._state===ee&&(e._result=t,e._state=te,0!==e._subscribers.length&&z(E,e))}function O(e,t){e._state===ee&&(e._state=ne,e._result=t,z(A,e))}function S(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+te]=n,o[i+ne]=r,0===i&&e._state&&z(E,e)}function E(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)S(r.resolve(e[a]),void 0,t,n);return o}function k(e){var t=this,n=new t(h);return O(n,e),n}function P(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],h!==e&&("function"!=typeof e&&P(),this instanceof F?M(this,e):R())}function U(e,t){this._instanceConstructor=e,this.promise=new e(h),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?C(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&C(this.promise,this._result))):O(this.promise,this._validationError())}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,B,J,q=$,I=0,z=function(e,t){X[I]=e,X[I+1]=t,I+=2,2===I&&(B?B(c):J())},Z="undefined"!=typeof window?window:void 0,Y=Z||{},H=Y.MutationObserver||Y.WebKitMutationObserver,W="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);J=W?o():H?a():V?s():void 0===Z&&"function"==typeof require?l():u();var K=f,Q=p,ee=void 0,te=1,ne=2,re=new N,oe=new N,ie=x,ae=T,se=k,ue=0,ce=F;F.all=ie,F.race=ae,F.resolve=Q,F.reject=se,F._setScheduler=n,F._setAsap=r,F._asap=z,F.prototype={constructor:F,then:K,"catch":function(e){return this.then(null,e)}};var le=U;U.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},U.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ee&&e>n;n++)this._eachEntry(t[n],n)},U.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===Q){var o=m(e);if(o===K&&e._state!==ee)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ce){var i=new n(h);w(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},U.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ee&&(this._remaining--,e===ne?O(r,n):this._result[t]=n),0===this._remaining&&C(r,this._result)},U.prototype._willSettleAt=function(e,t){var n=this;S(e,void 0,function(e){n._settledAt(te,t,e)},function(e){n._settledAt(ne,t,e)})};var fe=G,pe={Promise:ce,polyfill:fe};"function"==typeof define&&define.amd?define(function(){return pe}):"undefined"!=typeof module&&module.exports?module.exports=pe:"undefined"!=typeof this&&(this.ES6Promise=pe),fe()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==m)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===m&&u(m)===m&&u()===m&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([m])&&"null"==u(null)&&"[null,null,null]"==u([m,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,d,m,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!i("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,j=[0,31,59,90,120,151,181,212,243,273,304,334],M=function(e,t){return j[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?d=2==a?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var r,i,a=v.call(e)==b,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),d(e,t)},!i("json-stringify")){var x={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},T="000000",k=function(e,t){return(T+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=x[a];break;default:if(32>a){t+=P+k(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,N,j,x,T,P,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(M){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=L((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,w=L(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+k(6,0>c?-c:c):k(4,c))+"-"+k(2,l+1)+"-"+k(2,p)+"T"+k(2,y)+":"+k(2,_)+":"+k(2,w)+"."+k(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(T=a.length;T--;)if(a[T]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==S){for(x=0,T=s.length;T>x;x++)j=F(x,s,n,r,o,i,a),N.push(j===m?"null":j);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+P+"]":"["+N.join(",")+"]":"[]"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+P+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==b)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=q(J()),"$"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(y))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return e}function c(e){return f(e)?"$"+e:e}function l(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var t=e.length;if(9>t)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function p(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function h(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function g(e,t){return e===t?0:e>t?1:-1}function d(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=g(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:g(e.name,t.name)))))}t.getArg=n;var m=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(m)},t.relative=s;var v=function(){var e=Object.create(null);return!("__proto__"in e)}();t.toSetString=v?u:c,t.fromSetString=v?u:l,t.compareByOriginalPositions=p,t.compareByGeneratedPositionsDeflated=h,t.compareByGeneratedPositionsInflated=d},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){ -this._array=[],this._set=Object.create(null)}var o=n(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(t){return o(t)?this.fromError(t,e):this.generateArtificially(e)}},fromError:function(t,o){o=r(i,o);var a=new n(o);return new Promise(function(n){var r=e.parse(t);"function"==typeof o.filter&&(r=r.filter(o.filter)),n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}a.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t,n){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+t+" failed with status: "+i.status)))},i.open("post",t),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==n&&(a.message=n),i.send(JSON.stringify(a))})}}}); +this._array=[],this._set=Object.create(null)}var o=n(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}},a=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var t=a();return o(t)?this.fromError(t,e):this.generateArtificially(e)},getSync:function(n){n=r(i,n);var s,u=a();return s=o(u)?e.parse(u):t.backtrace(n),"function"==typeof n.filter&&(s=s.filter(n.filter)),s},fromError:function(t,o){o=r(i,o);var a=new n(o);return new Promise(function(n){var r=e.parse(t);"function"==typeof o.filter&&(r=r.filter(o.filter)),n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}a.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t,n){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+t+" failed with status: "+i.status)))},i.open("post",t),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==n&&(a.message=n),i.send(JSON.stringify(a))})}}}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map index 8583f17..fedcbec 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes","92","34","8","12","10","13","9","leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes","47","98","116","110","102","114","abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","C","b","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","test","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","RegExp","$1","caller","ErrorStackParser","_map","array","fn","output","_filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","stackframes","sf","resolveOriginal","stackFrames","instrument","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","errorMsg","req","setRequestHeader","reportPayload"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n */\n report: function StackTrace$$report(stackframes, url, errorMsg) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n\n var reportPayload = {stack: stackframes};\n if (errorMsg !== undefined) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes","92","34","8","12","10","13","9","leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes","47","98","116","110","102","114","abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","C","b","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","test","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","RegExp","$1","caller","ErrorStackParser","_map","array","fn","output","_filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","_generateError","fromError","generateArtificially","getSync","stackframes","gps","sf","resolveOriginal","stackFrames","instrument","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","errorMsg","req","setRequestHeader","reportPayload"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n var _generateError = function StackTrace$$GenerateError() {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n return err;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n var err = _generateError();\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n },\n\n /**\n * Get a backtrace from invocation point.\n * IMPORTANT: Does not handle source maps or guess function names!\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n getSync: function StackTrace$$getSync(opts) {\n opts = _merge(_options, opts);\n var err = _generateError();\n var stackframes;\n\n if (_isShapedLikeParsableError(err)) {\n stackframes = ErrorStackParser.parse(err);\n } else {\n stackframes = StackGenerator.backtrace(opts);\n }\n\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n return stackframes;\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n */\n report: function StackTrace$$report(stackframes, url, errorMsg) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n\n var reportPayload = {stack: stackframes};\n if (errorMsg !== undefined) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.concat.js b/dist/stacktrace.concat.js index b798e6a..90f0b6a 100644 --- a/dist/stacktrace.concat.js +++ b/dist/stacktrace.concat.js @@ -289,6 +289,15 @@ sourceCache: {} }; + var _generateError = function StackTrace$$GenerateError() { + try { + // Error must be thrown to get stack in IE + throw new Error(); + } catch (err) { + return err; + } + }; + /** * Merge 2 given Objects. If a conflict occurs the second object wins. * Does not do deep merges. @@ -325,16 +334,36 @@ * @returns {Array} of StackFrame */ get: function StackTrace$$get(opts) { - try { - // Error must be thrown to get stack in IE - throw new Error(); - } catch (err) { - if (_isShapedLikeParsableError(err)) { - return this.fromError(err, opts); - } else { - return this.generateArtificially(opts); - } + var err = _generateError(); + if (_isShapedLikeParsableError(err)) { + return this.fromError(err, opts); + } else { + return this.generateArtificially(opts); + } + }, + + /** + * Get a backtrace from invocation point. + * IMPORTANT: Does not handle source maps or guess function names! + * + * @param {Object} opts + * @returns {Array} of StackFrame + */ + getSync: function StackTrace$$getSync(opts) { + opts = _merge(_options, opts); + var err = _generateError(); + var stackframes; + + if (_isShapedLikeParsableError(err)) { + stackframes = ErrorStackParser.parse(err); + } else { + stackframes = StackGenerator.backtrace(opts); + } + + if (typeof opts.filter === 'function') { + stackframes = stackframes.filter(opts.filter); } + return stackframes; }, /** diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index 2438ee8..53e3622 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),r=s.getArg(n,"sources"),o=s.getArg(n,"names",[]),i=s.getArg(n,"sourceRoot",null),a=s.getArg(n,"sourcesContent",null),u=s.getArg(n,"mappings"),l=s.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),o=s.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=s.getArg(e,"offset"),t=s.getArg(n,"line"),o=s.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],C=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(t=new i,t.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(_,a),o=y[r])_+=r.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),i?(i.path=t,o(i)):t}function a(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),a=r(e);if(a&&(e=a.path||"/"),t&&!t.scheme)return a&&(t.scheme=a.scheme),o(t);if(t||n.match(v))return n;if(a&&!a.host&&!a.path)return a.host=n,o(a);var s="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return a?(a.path=s,o(a)):s}function s(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return e}function c(e){return f(e)?"$"+e:e}function l(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var t=n-10;t>=0;t--)if(36!==e.charCodeAt(t))return!1;return!0}function p(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function g(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=h(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:h(e.name,n.name)))))}n.getArg=t;var d=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,v=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=o,n.normalize=i,n.join=a,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(d)},n.relative=s;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?u:c,n.fromSetString=_?u:l,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},function(e,n){function t(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,o,i,a,s):s==n.LEAST_UPPER_BOUND?r1?t(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,o,i){if(0===r.length)return-1;var a=t(-1,r.length,e,r,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,n,t){function r(){this._array=[],this._set=Object.create(null)}var o=t(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=i.call(this._set,t),a=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=a)},r.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=t(5),a=5,s=1<>>=a,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},n.decode=function(e,n,t){var r,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(s&c),s&=u,f+=s<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,a){if(a>i){var s=r(i,a),u=i-1;t(e,s,a);for(var c=e[a],l=i;a>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,a)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var t,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,t=o.exec(s),t&&t[1])return t[1];if(t=r.exec(s),t&&t[1])return t[1];if(t=i.exec(s),t&&t[1])return t[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(t,r,o,i,a){var s=new e.SourceMapConsumer(t),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(t){var i=e.lineNumber,a=e.columnNumber;"string"==typeof t&&(t=o(t.replace(/^\)\]\}'/,""))),"undefined"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,a,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new l(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var t=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(t.pop()),i=t.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],n)},this)},parseFFOrSafari:function(r){var o=t(r.stack.split("\n"),function(e){return!e.match(a)},this);return n(o,function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return new e(n);var t=n.split("@"),r=this.extractLocation(t.pop()),o=t.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=t(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return n(i,function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(a,s,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}};return{get:function(e){try{throw new Error}catch(n){return o(n)?this.fromError(n,e):this.generateArtificially(e)}},fromError:function(n,o){o=r(i,o);var a=new t(o);return new Promise(function(t){var r=e.parse(n);"function"==typeof o.filter&&(r=r.filter(o.filter)),t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}a.pinpoint(e).then(n,t)["catch"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n,t){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==t&&(a.message=t),i.send(JSON.stringify(a))})}}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),r=s.getArg(n,"sources"),o=s.getArg(n,"names",[]),i=s.getArg(n,"sourceRoot",null),a=s.getArg(n,"sourcesContent",null),u=s.getArg(n,"mappings"),l=s.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),o=s.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=s.getArg(e,"offset"),t=s.getArg(n,"line"),o=s.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],C=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(t=new i,t.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(_,a),o=y[r])_+=r.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),i?(i.path=t,o(i)):t}function a(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),a=r(e);if(a&&(e=a.path||"/"),t&&!t.scheme)return a&&(t.scheme=a.scheme),o(t);if(t||n.match(v))return n;if(a&&!a.host&&!a.path)return a.host=n,o(a);var s="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return a?(a.path=s,o(a)):s}function s(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return e}function c(e){return f(e)?"$"+e:e}function l(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var t=n-10;t>=0;t--)if(36!==e.charCodeAt(t))return!1;return!0}function p(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function g(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=h(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:h(e.name,n.name)))))}n.getArg=t;var d=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,v=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=o,n.normalize=i,n.join=a,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(d)},n.relative=s;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?u:c,n.fromSetString=_?u:l,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},function(e,n){function t(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,o,i,a,s):s==n.LEAST_UPPER_BOUND?r1?t(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,o,i){if(0===r.length)return-1;var a=t(-1,r.length,e,r,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,n,t){function r(){this._array=[],this._set=Object.create(null)}var o=t(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=i.call(this._set,t),a=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=a)},r.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=t(5),a=5,s=1<>>=a,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},n.decode=function(e,n,t){var r,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(s&c),s&=u,f+=s<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,a){if(a>i){var s=r(i,a),u=i-1;t(e,s,a);for(var c=e[a],l=i;a>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,a)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var t,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,t=o.exec(s),t&&t[1])return t[1];if(t=r.exec(s),t&&t[1])return t[1];if(t=i.exec(s),t&&t[1])return t[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(t,r,o,i,a){var s=new e.SourceMapConsumer(t),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(t){var i=e.lineNumber,a=e.columnNumber;"string"==typeof t&&(t=o(t.replace(/^\)\]\}'/,""))),"undefined"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,a,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new l(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var t=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(t.pop()),i=t.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],n)},this)},parseFFOrSafari:function(r){var o=t(r.stack.split("\n"),function(e){return!e.match(a)},this);return n(o,function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return new e(n);var t=n.split("@"),r=this.extractLocation(t.pop()),o=t.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=t(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return n(i,function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(a,s,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}},a=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var n=a();return o(n)?this.fromError(n,e):this.generateArtificially(e)},getSync:function(t){t=r(i,t);var s,u=a();return s=o(u)?e.parse(u):n.backtrace(t),"function"==typeof t.filter&&(s=s.filter(t.filter)),s},fromError:function(n,o){o=r(i,o);var a=new t(o);return new Promise(function(t){var r=e.parse(n);"function"==typeof o.filter&&(r=r.filter(o.filter)),t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}a.pinpoint(e).then(n,t)["catch"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n,t){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==t&&(a.message=t),i.send(JSON.stringify(a))})}}}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index aeb9475..12928a6 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","C","b","A","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","charCodeAt","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","hasOwnProperty","getOwnPropertyNames","encode","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","test","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","RegExp","$1","undefined","caller","ErrorStackParser","_map","array","fn","thisArg","output","_filter","filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","pop","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","fromError","generateArtificially","gps","resolve","stackframes","all","sf","resolveOriginal","stackFrames","instrument","callback","errback","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","errorMsg","reject","req","setRequestHeader","reportPayload","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n }\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n */\n report: function StackTrace$$report(stackframes, url, errorMsg) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n\n var reportPayload = {stack: stackframes};\n if (errorMsg !== undefined) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","C","b","A","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","charCodeAt","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","hasOwnProperty","getOwnPropertyNames","encode","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","test","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","RegExp","$1","undefined","caller","ErrorStackParser","_map","array","fn","thisArg","output","_filter","filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","pop","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","_generateError","fromError","generateArtificially","getSync","stackframes","gps","resolve","all","sf","resolveOriginal","stackFrames","instrument","callback","errback","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","errorMsg","reject","req","setRequestHeader","reportPayload","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n var _generateError = function StackTrace$$GenerateError() {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n return err;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n var err = _generateError();\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n },\n\n /**\n * Get a backtrace from invocation point.\n * IMPORTANT: Does not handle source maps or guess function names!\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n getSync: function StackTrace$$getSync(opts) {\n opts = _merge(_options, opts);\n var err = _generateError();\n var stackframes;\n\n if (_isShapedLikeParsableError(err)) {\n stackframes = ErrorStackParser.parse(err);\n } else {\n stackframes = StackGenerator.backtrace(opts);\n }\n\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n return stackframes;\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n */\n report: function StackTrace$$report(stackframes, url, errorMsg) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n\n var reportPayload = {stack: stackframes};\n if (errorMsg !== undefined) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/spec/stacktrace-spec.js b/spec/stacktrace-spec.js index 942f9c1..a1fed25 100755 --- a/spec/stacktrace-spec.js +++ b/spec/stacktrace-spec.js @@ -19,6 +19,13 @@ describe('StackTrace', function() { }); }); + describe('#getSync', function() { + it('gets stacktrace from current location', function testStackTraceGetSync() { + var stackframes = StackTrace.getSync(); + expect(stackframes[0].functionName).toMatch(/.*testStackTraceGetSync/); + }); + }); + describe('#fromError', function() { beforeEach(function() { jasmine.Ajax.install(); diff --git a/stacktrace.js b/stacktrace.js index 7cf07b1..bea3dcd 100644 --- a/stacktrace.js +++ b/stacktrace.js @@ -22,6 +22,15 @@ sourceCache: {} }; + var _generateError = function StackTrace$$GenerateError() { + try { + // Error must be thrown to get stack in IE + throw new Error(); + } catch (err) { + return err; + } + }; + /** * Merge 2 given Objects. If a conflict occurs the second object wins. * Does not do deep merges. @@ -58,16 +67,36 @@ * @returns {Array} of StackFrame */ get: function StackTrace$$get(opts) { - try { - // Error must be thrown to get stack in IE - throw new Error(); - } catch (err) { - if (_isShapedLikeParsableError(err)) { - return this.fromError(err, opts); - } else { - return this.generateArtificially(opts); - } + var err = _generateError(); + if (_isShapedLikeParsableError(err)) { + return this.fromError(err, opts); + } else { + return this.generateArtificially(opts); + } + }, + + /** + * Get a backtrace from invocation point. + * IMPORTANT: Does not handle source maps or guess function names! + * + * @param {Object} opts + * @returns {Array} of StackFrame + */ + getSync: function StackTrace$$getSync(opts) { + opts = _merge(_options, opts); + var err = _generateError(); + var stackframes; + + if (_isShapedLikeParsableError(err)) { + stackframes = ErrorStackParser.parse(err); + } else { + stackframes = StackGenerator.backtrace(opts); + } + + if (typeof opts.filter === 'function') { + stackframes = stackframes.filter(opts.filter); } + return stackframes; }, /** From fb41489322d98a7c1d380957ef06299a4d91fe34 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 12 Jun 2016 21:39:15 -0700 Subject: [PATCH 060/110] Refactoring --- stacktrace.js | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/stacktrace.js b/stacktrace.js index bea3dcd..fae85c9 100644 --- a/stacktrace.js +++ b/stacktrace.js @@ -59,6 +59,13 @@ return err.stack || err['opera#sourceloc']; } + function _filtered(stackframes, filter) { + if (typeof filter === 'function') { + return stackframes.filter(filter); + } + return stackframes; + } + return { /** * Get a backtrace from invocation point. @@ -68,11 +75,7 @@ */ get: function StackTrace$$get(opts) { var err = _generateError(); - if (_isShapedLikeParsableError(err)) { - return this.fromError(err, opts); - } else { - return this.generateArtificially(opts); - } + return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts); }, /** @@ -85,18 +88,8 @@ getSync: function StackTrace$$getSync(opts) { opts = _merge(_options, opts); var err = _generateError(); - var stackframes; - - if (_isShapedLikeParsableError(err)) { - stackframes = ErrorStackParser.parse(err); - } else { - stackframes = StackGenerator.backtrace(opts); - } - - if (typeof opts.filter === 'function') { - stackframes = stackframes.filter(opts.filter); - } - return stackframes; + var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts); + return _filtered(stack, opts.filter); }, /** @@ -110,10 +103,7 @@ opts = _merge(_options, opts); var gps = new StackTraceGPS(opts); return new Promise(function(resolve) { - var stackframes = ErrorStackParser.parse(error); - if (typeof opts.filter === 'function') { - stackframes = stackframes.filter(opts.filter); - } + var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter); resolve(Promise.all(stackframes.map(function(sf) { return new Promise(function(resolve) { function resolveOriginal() { From d0d72fbc29a11acb7a17330ddab22dc560b3364e Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 12 Jun 2016 21:39:48 -0700 Subject: [PATCH 061/110] 1.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2355274..6b66617 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "Victor Homyakov (https://github.com/victor-homyakov)", "Oliver Salzburg (https://github.com/oliversalzburg)" ], - "version": "1.2.0", + "version": "1.3.0", "license": "Unlicense", "keywords": [ "stacktrace", From 9388ad8138da647d56e07b09fcf65b95904aeebf Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 12 Jun 2016 21:40:08 -0700 Subject: [PATCH 062/110] Update dist --- ...ktrace-with-promises-and-json-polyfills.js | 32 +++++++------------ ...ce-with-promises-and-json-polyfills.min.js | 2 +- ...ith-promises-and-json-polyfills.min.js.map | 2 +- dist/stacktrace.concat.js | 32 +++++++------------ dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- 6 files changed, 26 insertions(+), 46 deletions(-) diff --git a/dist/stacktrace-with-promises-and-json-polyfills.js b/dist/stacktrace-with-promises-and-json-polyfills.js index 648f776..62140d2 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.js @@ -2311,6 +2311,13 @@ if (!Array.prototype.forEach) { return err.stack || err['opera#sourceloc']; } + function _filtered(stackframes, filter) { + if (typeof filter === 'function') { + return stackframes.filter(filter); + } + return stackframes; + } + return { /** * Get a backtrace from invocation point. @@ -2320,11 +2327,7 @@ if (!Array.prototype.forEach) { */ get: function StackTrace$$get(opts) { var err = _generateError(); - if (_isShapedLikeParsableError(err)) { - return this.fromError(err, opts); - } else { - return this.generateArtificially(opts); - } + return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts); }, /** @@ -2337,18 +2340,8 @@ if (!Array.prototype.forEach) { getSync: function StackTrace$$getSync(opts) { opts = _merge(_options, opts); var err = _generateError(); - var stackframes; - - if (_isShapedLikeParsableError(err)) { - stackframes = ErrorStackParser.parse(err); - } else { - stackframes = StackGenerator.backtrace(opts); - } - - if (typeof opts.filter === 'function') { - stackframes = stackframes.filter(opts.filter); - } - return stackframes; + var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts); + return _filtered(stack, opts.filter); }, /** @@ -2362,10 +2355,7 @@ if (!Array.prototype.forEach) { opts = _merge(_options, opts); var gps = new StackTraceGPS(opts); return new Promise(function(resolve) { - var stackframes = ErrorStackParser.parse(error); - if (typeof opts.filter === 'function') { - stackframes = stackframes.filter(opts.filter); - } + var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter); resolve(Promise.all(stackframes.map(function(sf) { return new Promise(function(resolve) { function resolveOriginal() { diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index 3014f05..441f8f0 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ (function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){B=e}function r(e){z=e}function o(){return function(){process.nextTick(c)}}function i(){return function(){D(c)}}function a(){var e=0,t=new H(c),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function s(){var e=new MessageChannel;return e.port1.onmessage=c,function(){e.port2.postMessage(0)}}function u(){return function(){setTimeout(c,1)}}function c(){for(var e=0;I>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}I=0}function l(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,i()}catch(n){return u()}}function f(e,t){var n=this,r=n._state;if(r===te&&!e||r===ne&&!t)return this;var o=new this.constructor(h),i=n._result;if(r){var a=arguments[r-1];z(function(){j(r,o,a,i)})}else S(n,o,e,t);return o}function p(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(h);return b(n,e),n}function h(){}function g(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return re.error=t,re}}function y(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){z(function(e){var r=!1,o=y(n,t,function(n){r||(r=!0,t!==n?b(e,n):C(e,n))},function(t){r||(r=!0,O(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,O(e,o))},e)}function _(e,t){t._state===te?C(e,t._result):t._state===ne?O(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){O(e,t)})}function w(e,n,r){n.constructor===e.constructor&&r===K&&constructor.resolve===Q?_(e,n):r===re?O(e,re.error):void 0===r?C(e,n):t(r)?v(e,n,r):C(e,n)}function b(t,n){t===n?O(t,g()):e(n)?w(t,n,m(n)):C(t,n)}function A(e){e._onerror&&e._onerror(e._result),E(e)}function C(e,t){e._state===ee&&(e._result=t,e._state=te,0!==e._subscribers.length&&z(E,e))}function O(e,t){e._state===ee&&(e._state=ne,e._result=t,z(A,e))}function S(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+te]=n,o[i+ne]=r,0===i&&e._state&&z(E,e)}function E(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)S(r.resolve(e[a]),void 0,t,n);return o}function k(e){var t=this,n=new t(h);return O(n,e),n}function P(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],h!==e&&("function"!=typeof e&&P(),this instanceof F?M(this,e):R())}function U(e,t){this._instanceConstructor=e,this.promise=new e(h),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?C(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&C(this.promise,this._result))):O(this.promise,this._validationError())}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,B,J,q=$,I=0,z=function(e,t){X[I]=e,X[I+1]=t,I+=2,2===I&&(B?B(c):J())},Z="undefined"!=typeof window?window:void 0,Y=Z||{},H=Y.MutationObserver||Y.WebKitMutationObserver,W="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);J=W?o():H?a():V?s():void 0===Z&&"function"==typeof require?l():u();var K=f,Q=p,ee=void 0,te=1,ne=2,re=new N,oe=new N,ie=x,ae=T,se=k,ue=0,ce=F;F.all=ie,F.race=ae,F.resolve=Q,F.reject=se,F._setScheduler=n,F._setAsap=r,F._asap=z,F.prototype={constructor:F,then:K,"catch":function(e){return this.then(null,e)}};var le=U;U.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},U.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ee&&e>n;n++)this._eachEntry(t[n],n)},U.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===Q){var o=m(e);if(o===K&&e._state!==ee)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ce){var i=new n(h);w(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},U.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ee&&(this._remaining--,e===ne?O(r,n):this._result[t]=n),0===this._remaining&&C(r,this._result)},U.prototype._willSettleAt=function(e,t){var n=this;S(e,void 0,function(e){n._settledAt(te,t,e)},function(e){n._settledAt(ne,t,e)})};var fe=G,pe={Promise:ce,polyfill:fe};"function"==typeof define&&define.amd?define(function(){return pe}):"undefined"!=typeof module&&module.exports?module.exports=pe:"undefined"!=typeof this&&(this.ES6Promise=pe),fe()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==m)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===m&&u(m)===m&&u()===m&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([m])&&"null"==u(null)&&"[null,null,null]"==u([m,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,d,m,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!i("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,j=[0,31,59,90,120,151,181,212,243,273,304,334],M=function(e,t){return j[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?d=2==a?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var r,i,a=v.call(e)==b,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),d(e,t)},!i("json-stringify")){var x={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},T="000000",k=function(e,t){return(T+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=x[a];break;default:if(32>a){t+=P+k(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,N,j,x,T,P,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(M){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=L((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,w=L(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+k(6,0>c?-c:c):k(4,c))+"-"+k(2,l+1)+"-"+k(2,p)+"T"+k(2,y)+":"+k(2,_)+":"+k(2,w)+"."+k(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(T=a.length;T--;)if(a[T]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==S){for(x=0,T=s.length;T>x;x++)j=F(x,s,n,r,o,i,a),N.push(j===m?"null":j);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+P+"]":"["+N.join(",")+"]":"[]"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+P+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==b)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=q(J()),"$"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(y))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return e}function c(e){return f(e)?"$"+e:e}function l(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var t=e.length;if(9>t)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function p(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function h(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function g(e,t){return e===t?0:e>t?1:-1}function d(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=g(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:g(e.name,t.name)))))}t.getArg=n;var m=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(m)},t.relative=s;var v=function(){var e=Object.create(null);return!("__proto__"in e)}();t.toSetString=v?u:c,t.fromSetString=v?u:l,t.compareByOriginalPositions=p,t.compareByGeneratedPositionsDeflated=h,t.compareByGeneratedPositionsInflated=d},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){ -this._array=[],this._set=Object.create(null)}var o=n(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}},a=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var t=a();return o(t)?this.fromError(t,e):this.generateArtificially(e)},getSync:function(n){n=r(i,n);var s,u=a();return s=o(u)?e.parse(u):t.backtrace(n),"function"==typeof n.filter&&(s=s.filter(n.filter)),s},fromError:function(t,o){o=r(i,o);var a=new n(o);return new Promise(function(n){var r=e.parse(t);"function"==typeof o.filter&&(r=r.filter(o.filter)),n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}a.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t,n){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+t+" failed with status: "+i.status)))},i.open("post",t),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==n&&(a.message=n),i.send(JSON.stringify(a))})}}}); +this._array=[],this._set=Object.create(null)}var o=n(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}function i(e,t){return"function"==typeof t?e.filter(t):e}var a={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}},s=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var t=s();return o(t)?this.fromError(t,e):this.generateArtificially(e)},getSync:function(n){n=r(a,n);var u=s(),c=o(u)?e.parse(u):t.backtrace(n);return i(c,n.filter)},fromError:function(t,o){o=r(a,o);var s=new n(o);return new Promise(function(n){var r=i(e.parse(t),o.filter);n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}s.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(a,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t,n){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+t+" failed with status: "+i.status)))},i.open("post",t),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==n&&(a.message=n),i.send(JSON.stringify(a))})}}}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map index fedcbec..eb6e9c1 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes","92","34","8","12","10","13","9","leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes","47","98","116","110","102","114","abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","C","b","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","test","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","RegExp","$1","caller","ErrorStackParser","_map","array","fn","output","_filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","_generateError","fromError","generateArtificially","getSync","stackframes","gps","sf","resolveOriginal","stackFrames","instrument","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","errorMsg","req","setRequestHeader","reportPayload"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n var _generateError = function StackTrace$$GenerateError() {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n return err;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n var err = _generateError();\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n },\n\n /**\n * Get a backtrace from invocation point.\n * IMPORTANT: Does not handle source maps or guess function names!\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n getSync: function StackTrace$$getSync(opts) {\n opts = _merge(_options, opts);\n var err = _generateError();\n var stackframes;\n\n if (_isShapedLikeParsableError(err)) {\n stackframes = ErrorStackParser.parse(err);\n } else {\n stackframes = StackGenerator.backtrace(opts);\n }\n\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n return stackframes;\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n */\n report: function StackTrace$$report(stackframes, url, errorMsg) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n\n var reportPayload = {stack: stackframes};\n if (errorMsg !== undefined) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes","92","34","8","12","10","13","9","leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes","47","98","116","110","102","114","abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","C","b","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","test","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","RegExp","$1","caller","ErrorStackParser","_map","array","fn","output","_filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_filtered","stackframes","_options","stackframe","_generateError","fromError","generateArtificially","getSync","gps","sf","resolveOriginal","stackFrames","instrument","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","errorMsg","req","setRequestHeader","reportPayload"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n var _generateError = function StackTrace$$GenerateError() {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n return err;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n function _filtered(stackframes, filter) {\n if (typeof filter === 'function') {\n return stackframes.filter(filter);\n }\n return stackframes;\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n var err = _generateError();\n return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts);\n },\n\n /**\n * Get a backtrace from invocation point.\n * IMPORTANT: Does not handle source maps or guess function names!\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n getSync: function StackTrace$$getSync(opts) {\n opts = _merge(_options, opts);\n var err = _generateError();\n var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts);\n return _filtered(stack, opts.filter);\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter);\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n */\n report: function StackTrace$$report(stackframes, url, errorMsg) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n\n var reportPayload = {stack: stackframes};\n if (errorMsg !== undefined) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.concat.js b/dist/stacktrace.concat.js index 90f0b6a..ff87eba 100644 --- a/dist/stacktrace.concat.js +++ b/dist/stacktrace.concat.js @@ -326,6 +326,13 @@ return err.stack || err['opera#sourceloc']; } + function _filtered(stackframes, filter) { + if (typeof filter === 'function') { + return stackframes.filter(filter); + } + return stackframes; + } + return { /** * Get a backtrace from invocation point. @@ -335,11 +342,7 @@ */ get: function StackTrace$$get(opts) { var err = _generateError(); - if (_isShapedLikeParsableError(err)) { - return this.fromError(err, opts); - } else { - return this.generateArtificially(opts); - } + return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts); }, /** @@ -352,18 +355,8 @@ getSync: function StackTrace$$getSync(opts) { opts = _merge(_options, opts); var err = _generateError(); - var stackframes; - - if (_isShapedLikeParsableError(err)) { - stackframes = ErrorStackParser.parse(err); - } else { - stackframes = StackGenerator.backtrace(opts); - } - - if (typeof opts.filter === 'function') { - stackframes = stackframes.filter(opts.filter); - } - return stackframes; + var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts); + return _filtered(stack, opts.filter); }, /** @@ -377,10 +370,7 @@ opts = _merge(_options, opts); var gps = new StackTraceGPS(opts); return new Promise(function(resolve) { - var stackframes = ErrorStackParser.parse(error); - if (typeof opts.filter === 'function') { - stackframes = stackframes.filter(opts.filter); - } + var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter); resolve(Promise.all(stackframes.map(function(sf) { return new Promise(function(resolve) { function resolveOriginal() { diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index 53e3622..1ca4d62 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n});var SourceMap=function(e){function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var t={};return n.m=e,n.c=t,n.p="",n(0)}([function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),r=s.getArg(n,"sources"),o=s.getArg(n,"names",[]),i=s.getArg(n,"sourceRoot",null),a=s.getArg(n,"sourcesContent",null),u=s.getArg(n,"mappings"),l=s.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),o=s.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=s.getArg(e,"offset"),t=s.getArg(n,"line"),o=s.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],C=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(t=new i,t.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(_,a),o=y[r])_+=r.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),i?(i.path=t,o(i)):t}function a(e,n){""===e&&(e="."),""===n&&(n=".");var t=r(n),a=r(e);if(a&&(e=a.path||"/"),t&&!t.scheme)return a&&(t.scheme=a.scheme),o(t);if(t||n.match(v))return n;if(a&&!a.host&&!a.path)return a.host=n,o(a);var s="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return a?(a.path=s,o(a)):s}function s(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function u(e){return e}function c(e){return f(e)?"$"+e:e}function l(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var t=n-10;t>=0;t--)if(36!==e.charCodeAt(t))return!1;return!0}function p(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function g(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=h(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:h(e.name,n.name)))))}n.getArg=t;var d=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,v=/^data:.+\,.+$/;n.urlParse=r,n.urlGenerate=o,n.normalize=i,n.join=a,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(d)},n.relative=s;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?u:c,n.fromSetString=_?u:l,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},function(e,n){function t(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?t(u,r,o,i,a,s):s==n.LEAST_UPPER_BOUND?r1?t(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,r,o,i){if(0===r.length)return-1;var a=t(-1,r.length,e,r,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,n,t){function r(){this._array=[],this._set=Object.create(null)}var o=t(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=i.call(this._set,t),a=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=a)},r.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=t(5),a=5,s=1<>>=a,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},n.decode=function(e,n,t){var r,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(s&c),s&=u,f+=s<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,n){function t(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function r(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,a){if(a>i){var s=r(i,a),u=i-1;t(e,s,a);for(var c=e[a],l=i;a>l;l++)n(e[l],c)<=0&&(u+=1,t(e,u,l));t(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,a)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function t(e){return new Promise(function(n,t){var r=new XMLHttpRequest;r.open("get",e),r.onerror=t,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var t,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,t=o.exec(s),t&&t[1])return t[1];if(t=r.exec(s),t&&t[1])return t[1];if(t=i.exec(s),t&&t[1])return t[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(t,r,o,i,a){var s=new e.SourceMapConsumer(t),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);t(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(t){var i=e.lineNumber,a=e.columnNumber;"string"==typeof t&&(t=o(t.replace(/^\)\]\}'/,""))),"undefined"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,a,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new l(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var t=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(t.pop()),i=t.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],n)},this)},parseFFOrSafari:function(r){var o=t(r.stack.split("\n"),function(e){return!e.match(a)},this);return n(o,function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return new e(n);var t=n.split("@"),r=this.extractLocation(t.pop()),o=t.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=t(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return n(i,function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(a,s,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}var i={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}},a=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var n=a();return o(n)?this.fromError(n,e):this.generateArtificially(e)},getSync:function(t){t=r(i,t);var s,u=a();return s=o(u)?e.parse(u):n.backtrace(t),"function"==typeof t.filter&&(s=s.filter(t.filter)),s},fromError:function(n,o){o=r(i,o);var a=new t(o);return new Promise(function(t){var r=e.parse(n);"function"==typeof o.filter&&(r=r.filter(o.filter)),t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}a.pinpoint(e).then(n,t)["catch"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(i,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n,t){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==t&&(a.message=t),i.send(JSON.stringify(a))})}}}); +!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",t=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=s.getArg(n,"version"),t=s.getArg(n,"sources"),o=s.getArg(n,"names",[]),i=s.getArg(n,"sourceRoot",null),a=s.getArg(n,"sourcesContent",null),u=s.getArg(n,"mappings"),l=s.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=s.getArg(n,"version"),o=s.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=s.getArg(e,"offset"),r=s.getArg(n,"line"),o=s.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=c.fromArray(e._names.toArray(),!0),t=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],C=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(r=new i,r.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(t=e.slice(_,a),o=y[t])_+=t.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=g+o[2],g=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),"number"==typeof r.originalLine&&b.push(r)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=s.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(t.prototype),a.prototype.constructor=t,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return r=u.join("/"),""===r&&(r=s?"/":"."),i?(i.path=r,o(i)):r}function a(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),a=t(e);if(a&&(e=a.path||"/"),r&&!r.scheme)return a&&(r.scheme=a.scheme),o(r);if(r||n.match(v))return n;if(a&&!a.host&&!a.path)return a.host=n,o(a);var s="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return a?(a.path=s,o(a)):s}function s(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return e}function c(e){return f(e)?"$"+e:e}function l(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,v=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=a,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(d)},n.relative=s;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?u:c,n.fromSetString=_?u:l,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,a,s){var u=Math.floor((t-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),a=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=a)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),a=5,s=1<>>=a,o>0&&(n|=c),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(s&c),s&=u,f+=s<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,a){if(a>i){var s=t(i,a),u=i-1;r(e,s,a);for(var c=e[a],l=i;a>l;l++)n(e[l],c)<=0&&(u+=1,r(e,u,l));r(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,a)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open("get",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r,t=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,r=o.exec(s),r&&r[1])return r[1];if(r=t.exec(s),r&&r[1])return r[1];if(r=i.exec(s),r&&r[1])return r[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(r,t,o,i,a){var s=new e.SourceMapConsumer(r),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,t,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o="data:"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,r(c)}else t(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){s(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)["catch"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){a(),s(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(r){var i=e.lineNumber,a=e.columnNumber;"string"==typeof r&&(r=o(r.replace(/^\)\]\}'/,""))),"undefined"==typeof r.sourceRoot&&(r.sourceRoot=f),n(c(r,e.args,i,a,t))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new l(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var r=[],t=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(t=n.maxStackSize);for(var o=arguments.callee;o&&r.length-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var r=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(r.pop()),i=r.join(" ")||void 0,a=t(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],n)},this)},parseFFOrSafari:function(t){var o=r(t.stack.split("\n"),function(e){return!e.match(a)},this);return n(o,function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return new e(n);var r=n.split("@"),t=this.extractLocation(r.pop()),o=r.join("@")||void 0;return new e(o,void 0,t[0],t[1],t[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,t=n.message.split("\n"),o=[],i=2,a=t.length;a>i;i+=2){var s=r.exec(t[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,t[i]))}return o},parseOpera10:function(n){for(var r=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,t=n.stacktrace.split("\n"),o=[],i=0,a=t.length;a>i;i+=2){var s=r.exec(t[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,t[i]))}return o},parseOpera11:function(t){var i=r(t.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return n(i,function(n){var r,t=n.split("@"),o=this.extractLocation(t.pop()),i=t.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new e(a,s,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,r){function t(e,n){var r={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(r[n]=e[n]);return r}),r}function o(e){return e.stack||e["opera#sourceloc"]}function i(e,n){return"function"==typeof n?e.filter(n):e}var a={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}},s=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var n=s();return o(n)?this.fromError(n,e):this.generateArtificially(e)},getSync:function(r){r=t(a,r);var u=s(),c=o(u)?e.parse(u):n.backtrace(r);return i(c,r.filter)},fromError:function(n,o){o=t(a,o);var s=new r(o);return new Promise(function(r){var t=i(e.parse(n),o.filter);r(Promise.all(t.map(function(e){return new Promise(function(n){function r(){n(e)}s.pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=t(a,e);var r=n.backtrace(e);return"function"==typeof e.filter&&(r=r.filter(e.filter)),Promise.resolve(r)},instrument:function(e,n,r,t){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,r)["catch"](r),e.apply(t||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,r)["catch"](r),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n,r){return new Promise(function(t,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):o(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==r&&(a.message=r),i.send(JSON.stringify(a))})}}}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 12928a6..4b7a08d 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","C","b","A","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","charCodeAt","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","hasOwnProperty","getOwnPropertyNames","encode","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","test","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","RegExp","$1","undefined","caller","ErrorStackParser","_map","array","fn","thisArg","output","_filter","filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","pop","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_options","stackframe","_generateError","fromError","generateArtificially","getSync","stackframes","gps","resolve","all","sf","resolveOriginal","stackFrames","instrument","callback","errback","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","errorMsg","reject","req","setRequestHeader","reportPayload","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n var _generateError = function StackTrace$$GenerateError() {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n return err;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n var err = _generateError();\n if (_isShapedLikeParsableError(err)) {\n return this.fromError(err, opts);\n } else {\n return this.generateArtificially(opts);\n }\n },\n\n /**\n * Get a backtrace from invocation point.\n * IMPORTANT: Does not handle source maps or guess function names!\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n getSync: function StackTrace$$getSync(opts) {\n opts = _merge(_options, opts);\n var err = _generateError();\n var stackframes;\n\n if (_isShapedLikeParsableError(err)) {\n stackframes = ErrorStackParser.parse(err);\n } else {\n stackframes = StackGenerator.backtrace(opts);\n }\n\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n return stackframes;\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = ErrorStackParser.parse(error);\n if (typeof opts.filter === 'function') {\n stackframes = stackframes.filter(opts.filter);\n }\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n */\n report: function StackTrace$$report(stackframes, url, errorMsg) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n\n var reportPayload = {stack: stackframes};\n if (errorMsg !== undefined) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","C","b","A","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","charCodeAt","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","hasOwnProperty","getOwnPropertyNames","encode","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","test","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","RegExp","$1","undefined","caller","ErrorStackParser","_map","array","fn","thisArg","output","_filter","filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","pop","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_filtered","stackframes","_options","stackframe","_generateError","fromError","generateArtificially","getSync","gps","resolve","all","sf","resolveOriginal","stackFrames","instrument","callback","errback","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","errorMsg","reject","req","setRequestHeader","reportPayload","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n var _generateError = function StackTrace$$GenerateError() {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n return err;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n function _filtered(stackframes, filter) {\n if (typeof filter === 'function') {\n return stackframes.filter(filter);\n }\n return stackframes;\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n var err = _generateError();\n return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts);\n },\n\n /**\n * Get a backtrace from invocation point.\n * IMPORTANT: Does not handle source maps or guess function names!\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n getSync: function StackTrace$$getSync(opts) {\n opts = _merge(_options, opts);\n var err = _generateError();\n var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts);\n return _filtered(stack, opts.filter);\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter);\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n */\n report: function StackTrace$$report(stackframes, url, errorMsg) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n\n var reportPayload = {stack: stackframes};\n if (errorMsg !== undefined) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file From 98574f0dfe3d831cde75772fd34e972e7b7f95f1 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 12 Jun 2016 21:55:03 -0700 Subject: [PATCH 063/110] Add missing test case --- spec/stacktrace-spec.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spec/stacktrace-spec.js b/spec/stacktrace-spec.js index a1fed25..0341d42 100755 --- a/spec/stacktrace-spec.js +++ b/spec/stacktrace-spec.js @@ -24,6 +24,11 @@ describe('StackTrace', function() { var stackframes = StackTrace.getSync(); expect(stackframes[0].functionName).toMatch(/.*testStackTraceGetSync/); }); + + it('does not filter if filter is explictly disabled', function() { + var stackframes = StackTrace.getSync({filter: null}); + expect(stackframes[0].functionName).toEqual('StackTrace$$GenerateError'); + }); }); describe('#fromError', function() { From eb03054362624dc2f6a22672669866ba51c5381b Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 12 Jun 2016 22:09:11 -0700 Subject: [PATCH 064/110] Fix new test for old IEs --- spec/stacktrace-spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/stacktrace-spec.js b/spec/stacktrace-spec.js index 0341d42..626370e 100755 --- a/spec/stacktrace-spec.js +++ b/spec/stacktrace-spec.js @@ -27,7 +27,7 @@ describe('StackTrace', function() { it('does not filter if filter is explictly disabled', function() { var stackframes = StackTrace.getSync({filter: null}); - expect(stackframes[0].functionName).toEqual('StackTrace$$GenerateError'); + expect(stackframes[0].functionName).toMatch(/(StackGenerator\$\$backtrace|StackTrace\$\$GenerateError)/); }); }); From d1dc81135f714d9ae5b5e7b5c9cb53f2dbcbcff7 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Mon, 8 Aug 2016 22:05:26 -0700 Subject: [PATCH 065/110] Properly bundle for module loaders. --- ...ktrace-with-promises-and-json-polyfills.js | 2471 +------------- ...ce-with-promises-and-json-polyfills.js.map | 1 + ...ce-with-promises-and-json-polyfills.min.js | 4 +- ...ith-promises-and-json-polyfills.min.js.map | 2 +- dist/stacktrace.concat.js | 483 --- dist/stacktrace.js | 2942 +++++++++++++++++ dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- gulpfile.js | 37 +- package.json | 5 +- 10 files changed, 2978 insertions(+), 2971 deletions(-) create mode 100644 dist/stacktrace-with-promises-and-json-polyfills.js.map delete mode 100644 dist/stacktrace.concat.js create mode 100644 dist/stacktrace.js diff --git a/dist/stacktrace-with-promises-and-json-polyfills.js b/dist/stacktrace-with-promises-and-json-polyfills.js index 62140d2..54e9baa 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.js @@ -1,2468 +1,3 @@ -/*! - * @overview es6-promise - a tiny implementation of Promises/A+. - * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) - * @license Licensed under MIT license - * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE - * @version 3.1.2 - */ - -(function() { - "use strict"; - function lib$es6$promise$utils$$objectOrFunction(x) { - return typeof x === 'function' || (typeof x === 'object' && x !== null); - } - - function lib$es6$promise$utils$$isFunction(x) { - return typeof x === 'function'; - } - - function lib$es6$promise$utils$$isMaybeThenable(x) { - return typeof x === 'object' && x !== null; - } - - var lib$es6$promise$utils$$_isArray; - if (!Array.isArray) { - lib$es6$promise$utils$$_isArray = function (x) { - return Object.prototype.toString.call(x) === '[object Array]'; - }; - } else { - lib$es6$promise$utils$$_isArray = Array.isArray; - } - - var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray; - var lib$es6$promise$asap$$len = 0; - var lib$es6$promise$asap$$vertxNext; - var lib$es6$promise$asap$$customSchedulerFn; - - var lib$es6$promise$asap$$asap = function asap(callback, arg) { - lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback; - lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg; - lib$es6$promise$asap$$len += 2; - if (lib$es6$promise$asap$$len === 2) { - // If len is 2, that means that we need to schedule an async flush. - // If additional callbacks are queued before the queue is flushed, they - // will be processed by this flush that we are scheduling. - if (lib$es6$promise$asap$$customSchedulerFn) { - lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush); - } else { - lib$es6$promise$asap$$scheduleFlush(); - } - } - } - - function lib$es6$promise$asap$$setScheduler(scheduleFn) { - lib$es6$promise$asap$$customSchedulerFn = scheduleFn; - } - - function lib$es6$promise$asap$$setAsap(asapFn) { - lib$es6$promise$asap$$asap = asapFn; - } - - var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined; - var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {}; - var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver; - var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]'; - - // test for web worker but not in IE10 - var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' && - typeof importScripts !== 'undefined' && - typeof MessageChannel !== 'undefined'; - - // node - function lib$es6$promise$asap$$useNextTick() { - // node version 0.10.x displays a deprecation warning when nextTick is used recursively - // see https://github.com/cujojs/when/issues/410 for details - return function() { - process.nextTick(lib$es6$promise$asap$$flush); - }; - } - - // vertx - function lib$es6$promise$asap$$useVertxTimer() { - return function() { - lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush); - }; - } - - function lib$es6$promise$asap$$useMutationObserver() { - var iterations = 0; - var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush); - var node = document.createTextNode(''); - observer.observe(node, { characterData: true }); - - return function() { - node.data = (iterations = ++iterations % 2); - }; - } - - // web worker - function lib$es6$promise$asap$$useMessageChannel() { - var channel = new MessageChannel(); - channel.port1.onmessage = lib$es6$promise$asap$$flush; - return function () { - channel.port2.postMessage(0); - }; - } - - function lib$es6$promise$asap$$useSetTimeout() { - return function() { - setTimeout(lib$es6$promise$asap$$flush, 1); - }; - } - - var lib$es6$promise$asap$$queue = new Array(1000); - function lib$es6$promise$asap$$flush() { - for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) { - var callback = lib$es6$promise$asap$$queue[i]; - var arg = lib$es6$promise$asap$$queue[i+1]; - - callback(arg); - - lib$es6$promise$asap$$queue[i] = undefined; - lib$es6$promise$asap$$queue[i+1] = undefined; - } - - lib$es6$promise$asap$$len = 0; - } - - function lib$es6$promise$asap$$attemptVertx() { - try { - var r = require; - var vertx = r('vertx'); - lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext; - return lib$es6$promise$asap$$useVertxTimer(); - } catch(e) { - return lib$es6$promise$asap$$useSetTimeout(); - } - } - - var lib$es6$promise$asap$$scheduleFlush; - // Decide what async method to use to triggering processing of queued callbacks: - if (lib$es6$promise$asap$$isNode) { - lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick(); - } else if (lib$es6$promise$asap$$BrowserMutationObserver) { - lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver(); - } else if (lib$es6$promise$asap$$isWorker) { - lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel(); - } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') { - lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx(); - } else { - lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout(); - } - function lib$es6$promise$then$$then(onFulfillment, onRejection) { - var parent = this; - var state = parent._state; - - if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) { - return this; - } - - var child = new this.constructor(lib$es6$promise$$internal$$noop); - var result = parent._result; - - if (state) { - var callback = arguments[state - 1]; - lib$es6$promise$asap$$asap(function(){ - lib$es6$promise$$internal$$invokeCallback(state, child, callback, result); - }); - } else { - lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection); - } - - return child; - } - var lib$es6$promise$then$$default = lib$es6$promise$then$$then; - function lib$es6$promise$promise$resolve$$resolve(object) { - /*jshint validthis:true */ - var Constructor = this; - - if (object && typeof object === 'object' && object.constructor === Constructor) { - return object; - } - - var promise = new Constructor(lib$es6$promise$$internal$$noop); - lib$es6$promise$$internal$$resolve(promise, object); - return promise; - } - var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve; - - function lib$es6$promise$$internal$$noop() {} - - var lib$es6$promise$$internal$$PENDING = void 0; - var lib$es6$promise$$internal$$FULFILLED = 1; - var lib$es6$promise$$internal$$REJECTED = 2; - - var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject(); - - function lib$es6$promise$$internal$$selfFulfillment() { - return new TypeError("You cannot resolve a promise with itself"); - } - - function lib$es6$promise$$internal$$cannotReturnOwn() { - return new TypeError('A promises callback cannot return that same promise.'); - } - - function lib$es6$promise$$internal$$getThen(promise) { - try { - return promise.then; - } catch(error) { - lib$es6$promise$$internal$$GET_THEN_ERROR.error = error; - return lib$es6$promise$$internal$$GET_THEN_ERROR; - } - } - - function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) { - try { - then.call(value, fulfillmentHandler, rejectionHandler); - } catch(e) { - return e; - } - } - - function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) { - lib$es6$promise$asap$$asap(function(promise) { - var sealed = false; - var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) { - if (sealed) { return; } - sealed = true; - if (thenable !== value) { - lib$es6$promise$$internal$$resolve(promise, value); - } else { - lib$es6$promise$$internal$$fulfill(promise, value); - } - }, function(reason) { - if (sealed) { return; } - sealed = true; - - lib$es6$promise$$internal$$reject(promise, reason); - }, 'Settle: ' + (promise._label || ' unknown promise')); - - if (!sealed && error) { - sealed = true; - lib$es6$promise$$internal$$reject(promise, error); - } - }, promise); - } - - function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) { - if (thenable._state === lib$es6$promise$$internal$$FULFILLED) { - lib$es6$promise$$internal$$fulfill(promise, thenable._result); - } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) { - lib$es6$promise$$internal$$reject(promise, thenable._result); - } else { - lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) { - lib$es6$promise$$internal$$resolve(promise, value); - }, function(reason) { - lib$es6$promise$$internal$$reject(promise, reason); - }); - } - } - - function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) { - if (maybeThenable.constructor === promise.constructor && - then === lib$es6$promise$then$$default && - constructor.resolve === lib$es6$promise$promise$resolve$$default) { - lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable); - } else { - if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) { - lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error); - } else if (then === undefined) { - lib$es6$promise$$internal$$fulfill(promise, maybeThenable); - } else if (lib$es6$promise$utils$$isFunction(then)) { - lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then); - } else { - lib$es6$promise$$internal$$fulfill(promise, maybeThenable); - } - } - } - - function lib$es6$promise$$internal$$resolve(promise, value) { - if (promise === value) { - lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment()); - } else if (lib$es6$promise$utils$$objectOrFunction(value)) { - lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value)); - } else { - lib$es6$promise$$internal$$fulfill(promise, value); - } - } - - function lib$es6$promise$$internal$$publishRejection(promise) { - if (promise._onerror) { - promise._onerror(promise._result); - } - - lib$es6$promise$$internal$$publish(promise); - } - - function lib$es6$promise$$internal$$fulfill(promise, value) { - if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; } - - promise._result = value; - promise._state = lib$es6$promise$$internal$$FULFILLED; - - if (promise._subscribers.length !== 0) { - lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise); - } - } - - function lib$es6$promise$$internal$$reject(promise, reason) { - if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; } - promise._state = lib$es6$promise$$internal$$REJECTED; - promise._result = reason; - - lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise); - } - - function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) { - var subscribers = parent._subscribers; - var length = subscribers.length; - - parent._onerror = null; - - subscribers[length] = child; - subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment; - subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection; - - if (length === 0 && parent._state) { - lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent); - } - } - - function lib$es6$promise$$internal$$publish(promise) { - var subscribers = promise._subscribers; - var settled = promise._state; - - if (subscribers.length === 0) { return; } - - var child, callback, detail = promise._result; - - for (var i = 0; i < subscribers.length; i += 3) { - child = subscribers[i]; - callback = subscribers[i + settled]; - - if (child) { - lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail); - } else { - callback(detail); - } - } - - promise._subscribers.length = 0; - } - - function lib$es6$promise$$internal$$ErrorObject() { - this.error = null; - } - - var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject(); - - function lib$es6$promise$$internal$$tryCatch(callback, detail) { - try { - return callback(detail); - } catch(e) { - lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e; - return lib$es6$promise$$internal$$TRY_CATCH_ERROR; - } - } - - function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) { - var hasCallback = lib$es6$promise$utils$$isFunction(callback), - value, error, succeeded, failed; - - if (hasCallback) { - value = lib$es6$promise$$internal$$tryCatch(callback, detail); - - if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) { - failed = true; - error = value.error; - value = null; - } else { - succeeded = true; - } - - if (promise === value) { - lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn()); - return; - } - - } else { - value = detail; - succeeded = true; - } - - if (promise._state !== lib$es6$promise$$internal$$PENDING) { - // noop - } else if (hasCallback && succeeded) { - lib$es6$promise$$internal$$resolve(promise, value); - } else if (failed) { - lib$es6$promise$$internal$$reject(promise, error); - } else if (settled === lib$es6$promise$$internal$$FULFILLED) { - lib$es6$promise$$internal$$fulfill(promise, value); - } else if (settled === lib$es6$promise$$internal$$REJECTED) { - lib$es6$promise$$internal$$reject(promise, value); - } - } - - function lib$es6$promise$$internal$$initializePromise(promise, resolver) { - try { - resolver(function resolvePromise(value){ - lib$es6$promise$$internal$$resolve(promise, value); - }, function rejectPromise(reason) { - lib$es6$promise$$internal$$reject(promise, reason); - }); - } catch(e) { - lib$es6$promise$$internal$$reject(promise, e); - } - } - - function lib$es6$promise$promise$all$$all(entries) { - return new lib$es6$promise$enumerator$$default(this, entries).promise; - } - var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all; - function lib$es6$promise$promise$race$$race(entries) { - /*jshint validthis:true */ - var Constructor = this; - - var promise = new Constructor(lib$es6$promise$$internal$$noop); - - if (!lib$es6$promise$utils$$isArray(entries)) { - lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.')); - return promise; - } - - var length = entries.length; - - function onFulfillment(value) { - lib$es6$promise$$internal$$resolve(promise, value); - } - - function onRejection(reason) { - lib$es6$promise$$internal$$reject(promise, reason); - } - - for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) { - lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection); - } - - return promise; - } - var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race; - function lib$es6$promise$promise$reject$$reject(reason) { - /*jshint validthis:true */ - var Constructor = this; - var promise = new Constructor(lib$es6$promise$$internal$$noop); - lib$es6$promise$$internal$$reject(promise, reason); - return promise; - } - var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject; - - var lib$es6$promise$promise$$counter = 0; - - function lib$es6$promise$promise$$needsResolver() { - throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); - } - - function lib$es6$promise$promise$$needsNew() { - throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); - } - - var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise; - /** - Promise objects represent the eventual result of an asynchronous operation. The - primary way of interacting with a promise is through its `then` method, which - registers callbacks to receive either a promise's eventual value or the reason - why the promise cannot be fulfilled. - - Terminology - ----------- - - - `promise` is an object or function with a `then` method whose behavior conforms to this specification. - - `thenable` is an object or function that defines a `then` method. - - `value` is any legal JavaScript value (including undefined, a thenable, or a promise). - - `exception` is a value that is thrown using the throw statement. - - `reason` is a value that indicates why a promise was rejected. - - `settled` the final resting state of a promise, fulfilled or rejected. - - A promise can be in one of three states: pending, fulfilled, or rejected. - - Promises that are fulfilled have a fulfillment value and are in the fulfilled - state. Promises that are rejected have a rejection reason and are in the - rejected state. A fulfillment value is never a thenable. - - Promises can also be said to *resolve* a value. If this value is also a - promise, then the original promise's settled state will match the value's - settled state. So a promise that *resolves* a promise that rejects will - itself reject, and a promise that *resolves* a promise that fulfills will - itself fulfill. - - - Basic Usage: - ------------ - - ```js - var promise = new Promise(function(resolve, reject) { - // on success - resolve(value); - - // on failure - reject(reason); - }); - - promise.then(function(value) { - // on fulfillment - }, function(reason) { - // on rejection - }); - ``` - - Advanced Usage: - --------------- - - Promises shine when abstracting away asynchronous interactions such as - `XMLHttpRequest`s. - - ```js - function getJSON(url) { - return new Promise(function(resolve, reject){ - var xhr = new XMLHttpRequest(); - - xhr.open('GET', url); - xhr.onreadystatechange = handler; - xhr.responseType = 'json'; - xhr.setRequestHeader('Accept', 'application/json'); - xhr.send(); - - function handler() { - if (this.readyState === this.DONE) { - if (this.status === 200) { - resolve(this.response); - } else { - reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']')); - } - } - }; - }); - } - - getJSON('/posts.json').then(function(json) { - // on fulfillment - }, function(reason) { - // on rejection - }); - ``` - - Unlike callbacks, promises are great composable primitives. - - ```js - Promise.all([ - getJSON('/posts'), - getJSON('/comments') - ]).then(function(values){ - values[0] // => postsJSON - values[1] // => commentsJSON - - return values; - }); - ``` - - @class Promise - @param {function} resolver - Useful for tooling. - @constructor - */ - function lib$es6$promise$promise$$Promise(resolver) { - this._id = lib$es6$promise$promise$$counter++; - this._state = undefined; - this._result = undefined; - this._subscribers = []; - - if (lib$es6$promise$$internal$$noop !== resolver) { - typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver(); - this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew(); - } - } - - lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default; - lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default; - lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default; - lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default; - lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler; - lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap; - lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap; - - lib$es6$promise$promise$$Promise.prototype = { - constructor: lib$es6$promise$promise$$Promise, - - /** - The primary way of interacting with a promise is through its `then` method, - which registers callbacks to receive either a promise's eventual value or the - reason why the promise cannot be fulfilled. - - ```js - findUser().then(function(user){ - // user is available - }, function(reason){ - // user is unavailable, and you are given the reason why - }); - ``` - - Chaining - -------- - - The return value of `then` is itself a promise. This second, 'downstream' - promise is resolved with the return value of the first promise's fulfillment - or rejection handler, or rejected if the handler throws an exception. - - ```js - findUser().then(function (user) { - return user.name; - }, function (reason) { - return 'default name'; - }).then(function (userName) { - // If `findUser` fulfilled, `userName` will be the user's name, otherwise it - // will be `'default name'` - }); - - findUser().then(function (user) { - throw new Error('Found user, but still unhappy'); - }, function (reason) { - throw new Error('`findUser` rejected and we're unhappy'); - }).then(function (value) { - // never reached - }, function (reason) { - // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. - // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'. - }); - ``` - If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. - - ```js - findUser().then(function (user) { - throw new PedagogicalException('Upstream error'); - }).then(function (value) { - // never reached - }).then(function (value) { - // never reached - }, function (reason) { - // The `PedgagocialException` is propagated all the way down to here - }); - ``` - - Assimilation - ------------ - - Sometimes the value you want to propagate to a downstream promise can only be - retrieved asynchronously. This can be achieved by returning a promise in the - fulfillment or rejection handler. The downstream promise will then be pending - until the returned promise is settled. This is called *assimilation*. - - ```js - findUser().then(function (user) { - return findCommentsByAuthor(user); - }).then(function (comments) { - // The user's comments are now available - }); - ``` - - If the assimliated promise rejects, then the downstream promise will also reject. - - ```js - findUser().then(function (user) { - return findCommentsByAuthor(user); - }).then(function (comments) { - // If `findCommentsByAuthor` fulfills, we'll have the value here - }, function (reason) { - // If `findCommentsByAuthor` rejects, we'll have the reason here - }); - ``` - - Simple Example - -------------- - - Synchronous Example - - ```javascript - var result; - - try { - result = findResult(); - // success - } catch(reason) { - // failure - } - ``` - - Errback Example - - ```js - findResult(function(result, err){ - if (err) { - // failure - } else { - // success - } - }); - ``` - - Promise Example; - - ```javascript - findResult().then(function(result){ - // success - }, function(reason){ - // failure - }); - ``` - - Advanced Example - -------------- - - Synchronous Example - - ```javascript - var author, books; - - try { - author = findAuthor(); - books = findBooksByAuthor(author); - // success - } catch(reason) { - // failure - } - ``` - - Errback Example - - ```js - - function foundBooks(books) { - - } - - function failure(reason) { - - } - - findAuthor(function(author, err){ - if (err) { - failure(err); - // failure - } else { - try { - findBoooksByAuthor(author, function(books, err) { - if (err) { - failure(err); - } else { - try { - foundBooks(books); - } catch(reason) { - failure(reason); - } - } - }); - } catch(error) { - failure(err); - } - // success - } - }); - ``` - - Promise Example; - - ```javascript - findAuthor(). - then(findBooksByAuthor). - then(function(books){ - // found books - }).catch(function(reason){ - // something went wrong - }); - ``` - - @method then - @param {Function} onFulfilled - @param {Function} onRejected - Useful for tooling. - @return {Promise} - */ - then: lib$es6$promise$then$$default, - - /** - `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same - as the catch block of a try/catch statement. - - ```js - function findAuthor(){ - throw new Error('couldn't find that author'); - } - - // synchronous - try { - findAuthor(); - } catch(reason) { - // something went wrong - } - - // async with promises - findAuthor().catch(function(reason){ - // something went wrong - }); - ``` - - @method catch - @param {Function} onRejection - Useful for tooling. - @return {Promise} - */ - 'catch': function(onRejection) { - return this.then(null, onRejection); - } - }; - var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator; - function lib$es6$promise$enumerator$$Enumerator(Constructor, input) { - this._instanceConstructor = Constructor; - this.promise = new Constructor(lib$es6$promise$$internal$$noop); - - if (Array.isArray(input)) { - this._input = input; - this.length = input.length; - this._remaining = input.length; - - this._result = new Array(this.length); - - if (this.length === 0) { - lib$es6$promise$$internal$$fulfill(this.promise, this._result); - } else { - this.length = this.length || 0; - this._enumerate(); - if (this._remaining === 0) { - lib$es6$promise$$internal$$fulfill(this.promise, this._result); - } - } - } else { - lib$es6$promise$$internal$$reject(this.promise, this._validationError()); - } - } - - lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() { - return new Error('Array Methods must be provided an Array'); - }; - - lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() { - var length = this.length; - var input = this._input; - - for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) { - this._eachEntry(input[i], i); - } - }; - - lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) { - var c = this._instanceConstructor; - var resolve = c.resolve; - - if (resolve === lib$es6$promise$promise$resolve$$default) { - var then = lib$es6$promise$$internal$$getThen(entry); - - if (then === lib$es6$promise$then$$default && - entry._state !== lib$es6$promise$$internal$$PENDING) { - this._settledAt(entry._state, i, entry._result); - } else if (typeof then !== 'function') { - this._remaining--; - this._result[i] = entry; - } else if (c === lib$es6$promise$promise$$default) { - var promise = new c(lib$es6$promise$$internal$$noop); - lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then); - this._willSettleAt(promise, i); - } else { - this._willSettleAt(new c(function(resolve) { resolve(entry); }), i); - } - } else { - this._willSettleAt(resolve(entry), i); - } - }; - - lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) { - var promise = this.promise; - - if (promise._state === lib$es6$promise$$internal$$PENDING) { - this._remaining--; - - if (state === lib$es6$promise$$internal$$REJECTED) { - lib$es6$promise$$internal$$reject(promise, value); - } else { - this._result[i] = value; - } - } - - if (this._remaining === 0) { - lib$es6$promise$$internal$$fulfill(promise, this._result); - } - }; - - lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) { - var enumerator = this; - - lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) { - enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value); - }, function(reason) { - enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason); - }); - }; - function lib$es6$promise$polyfill$$polyfill() { - var local; - - if (typeof global !== 'undefined') { - local = global; - } else if (typeof self !== 'undefined') { - local = self; - } else { - try { - local = Function('return this')(); - } catch (e) { - throw new Error('polyfill failed because global object is unavailable in this environment'); - } - } - - var P = local.Promise; - - if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) { - return; - } - - local.Promise = lib$es6$promise$promise$$default; - } - var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill; - - var lib$es6$promise$umd$$ES6Promise = { - 'Promise': lib$es6$promise$promise$$default, - 'polyfill': lib$es6$promise$polyfill$$default - }; - - /* global define:true module:true window: true */ - if (typeof define === 'function' && define['amd']) { - define(function() { return lib$es6$promise$umd$$ES6Promise; }); - } else if (typeof module !== 'undefined' && module['exports']) { - module['exports'] = lib$es6$promise$umd$$ES6Promise; - } else if (typeof this !== 'undefined') { - this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise; - } - - lib$es6$promise$polyfill$$default(); -}).call(this); - - -/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */ -;(function () { - // Detect the `define` function exposed by asynchronous module loaders. The - // strict `define` check is necessary for compatibility with `r.js`. - var isLoader = typeof define === "function" && define.amd; - - // A set of types used to distinguish objects from primitives. - var objectTypes = { - "function": true, - "object": true - }; - - // Detect the `exports` object exposed by CommonJS implementations. - var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; - - // Use the `global` object exposed by Node (including Browserify via - // `insert-module-globals`), Narwhal, and Ringo as the default context, - // and the `window` object in browsers. Rhino exports a `global` function - // instead. - var root = objectTypes[typeof window] && window || this, - freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == "object" && global; - - if (freeGlobal && (freeGlobal["global"] === freeGlobal || freeGlobal["window"] === freeGlobal || freeGlobal["self"] === freeGlobal)) { - root = freeGlobal; - } - - // Public: Initializes JSON 3 using the given `context` object, attaching the - // `stringify` and `parse` functions to the specified `exports` object. - function runInContext(context, exports) { - context || (context = root["Object"]()); - exports || (exports = root["Object"]()); - - // Native constructor aliases. - var Number = context["Number"] || root["Number"], - String = context["String"] || root["String"], - Object = context["Object"] || root["Object"], - Date = context["Date"] || root["Date"], - SyntaxError = context["SyntaxError"] || root["SyntaxError"], - TypeError = context["TypeError"] || root["TypeError"], - Math = context["Math"] || root["Math"], - nativeJSON = context["JSON"] || root["JSON"]; - - // Delegate to the native `stringify` and `parse` implementations. - if (typeof nativeJSON == "object" && nativeJSON) { - exports.stringify = nativeJSON.stringify; - exports.parse = nativeJSON.parse; - } - - // Convenience aliases. - var objectProto = Object.prototype, - getClass = objectProto.toString, - isProperty, forEach, undef; - - // Test the `Date#getUTC*` methods. Based on work by @Yaffle. - var isExtended = new Date(-3509827334573292); - try { - // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical - // results for certain dates in Opera >= 10.53. - isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 && - // Safari < 2.0.2 stores the internal millisecond time value correctly, - // but clips the values returned by the date methods to the range of - // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]). - isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708; - } catch (exception) {} - - // Internal: Determines whether the native `JSON.stringify` and `parse` - // implementations are spec-compliant. Based on work by Ken Snyder. - function has(name) { - if (has[name] !== undef) { - // Return cached feature test result. - return has[name]; - } - var isSupported; - if (name == "bug-string-char-index") { - // IE <= 7 doesn't support accessing string characters using square - // bracket notation. IE 8 only supports this for primitives. - isSupported = "a"[0] != "a"; - } else if (name == "json") { - // Indicates whether both `JSON.stringify` and `JSON.parse` are - // supported. - isSupported = has("json-stringify") && has("json-parse"); - } else { - var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}'; - // Test `JSON.stringify`. - if (name == "json-stringify") { - var stringify = exports.stringify, stringifySupported = typeof stringify == "function" && isExtended; - if (stringifySupported) { - // A test function object with a custom `toJSON` method. - (value = function () { - return 1; - }).toJSON = value; - try { - stringifySupported = - // Firefox 3.1b1 and b2 serialize string, number, and boolean - // primitives as object literals. - stringify(0) === "0" && - // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object - // literals. - stringify(new Number()) === "0" && - stringify(new String()) == '""' && - // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or - // does not define a canonical JSON representation (this applies to - // objects with `toJSON` properties as well, *unless* they are nested - // within an object or array). - stringify(getClass) === undef && - // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and - // FF 3.1b3 pass this test. - stringify(undef) === undef && - // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s, - // respectively, if the value is omitted entirely. - stringify() === undef && - // FF 3.1b1, 2 throw an error if the given value is not a number, - // string, array, object, Boolean, or `null` literal. This applies to - // objects with custom `toJSON` methods as well, unless they are nested - // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON` - // methods entirely. - stringify(value) === "1" && - stringify([value]) == "[1]" && - // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of - // `"[null]"`. - stringify([undef]) == "[null]" && - // YUI 3.0.0b1 fails to serialize `null` literals. - stringify(null) == "null" && - // FF 3.1b1, 2 halts serialization if an array contains a function: - // `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3 - // elides non-JSON values from objects and arrays, unless they - // define custom `toJSON` methods. - stringify([undef, getClass, null]) == "[null,null,null]" && - // Simple serialization test. FF 3.1b1 uses Unicode escape sequences - // where character escape codes are expected (e.g., `\b` => `\u0008`). - stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized && - // FF 3.1b1 and b2 ignore the `filter` and `width` arguments. - stringify(null, value) === "1" && - stringify([1, 2], null, 1) == "[\n 1,\n 2\n]" && - // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly - // serialize extended years. - stringify(new Date(-8.64e15)) == '"-271821-04-20T00:00:00.000Z"' && - // The milliseconds are optional in ES 5, but required in 5.1. - stringify(new Date(8.64e15)) == '"+275760-09-13T00:00:00.000Z"' && - // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative - // four-digit years instead of six-digit years. Credits: @Yaffle. - stringify(new Date(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' && - // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond - // values less than 1000. Credits: @Yaffle. - stringify(new Date(-1)) == '"1969-12-31T23:59:59.999Z"'; - } catch (exception) { - stringifySupported = false; - } - } - isSupported = stringifySupported; - } - // Test `JSON.parse`. - if (name == "json-parse") { - var parse = exports.parse; - if (typeof parse == "function") { - try { - // FF 3.1b1, b2 will throw an exception if a bare literal is provided. - // Conforming implementations should also coerce the initial argument to - // a string prior to parsing. - if (parse("0") === 0 && !parse(false)) { - // Simple parsing test. - value = parse(serialized); - var parseSupported = value["a"].length == 5 && value["a"][0] === 1; - if (parseSupported) { - try { - // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings. - parseSupported = !parse('"\t"'); - } catch (exception) {} - if (parseSupported) { - try { - // FF 4.0 and 4.0.1 allow leading `+` signs and leading - // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow - // certain octal literals. - parseSupported = parse("01") !== 1; - } catch (exception) {} - } - if (parseSupported) { - try { - // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal - // points. These environments, along with FF 3.1b1 and 2, - // also allow trailing commas in JSON objects and arrays. - parseSupported = parse("1.") !== 1; - } catch (exception) {} - } - } - } - } catch (exception) { - parseSupported = false; - } - } - isSupported = parseSupported; - } - } - return has[name] = !!isSupported; - } - - if (!has("json")) { - // Common `[[Class]]` name aliases. - var functionClass = "[object Function]", - dateClass = "[object Date]", - numberClass = "[object Number]", - stringClass = "[object String]", - arrayClass = "[object Array]", - booleanClass = "[object Boolean]"; - - // Detect incomplete support for accessing string characters by index. - var charIndexBuggy = has("bug-string-char-index"); - - // Define additional utility methods if the `Date` methods are buggy. - if (!isExtended) { - var floor = Math.floor; - // A mapping between the months of the year and the number of days between - // January 1st and the first of the respective month. - var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; - // Internal: Calculates the number of days between the Unix epoch and the - // first day of the given month. - var getDay = function (year, month) { - return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400); - }; - } - - // Internal: Determines if a property is a direct property of the given - // object. Delegates to the native `Object#hasOwnProperty` method. - if (!(isProperty = objectProto.hasOwnProperty)) { - isProperty = function (property) { - var members = {}, constructor; - if ((members.__proto__ = null, members.__proto__ = { - // The *proto* property cannot be set multiple times in recent - // versions of Firefox and SeaMonkey. - "toString": 1 - }, members).toString != getClass) { - // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but - // supports the mutable *proto* property. - isProperty = function (property) { - // Capture and break the object's prototype chain (see section 8.6.2 - // of the ES 5.1 spec). The parenthesized expression prevents an - // unsafe transformation by the Closure Compiler. - var original = this.__proto__, result = property in (this.__proto__ = null, this); - // Restore the original prototype chain. - this.__proto__ = original; - return result; - }; - } else { - // Capture a reference to the top-level `Object` constructor. - constructor = members.constructor; - // Use the `constructor` property to simulate `Object#hasOwnProperty` in - // other environments. - isProperty = function (property) { - var parent = (this.constructor || constructor).prototype; - return property in this && !(property in parent && this[property] === parent[property]); - }; - } - members = null; - return isProperty.call(this, property); - }; - } - - // Internal: Normalizes the `for...in` iteration algorithm across - // environments. Each enumerated key is yielded to a `callback` function. - forEach = function (object, callback) { - var size = 0, Properties, members, property; - - // Tests for bugs in the current environment's `for...in` algorithm. The - // `valueOf` property inherits the non-enumerable flag from - // `Object.prototype` in older versions of IE, Netscape, and Mozilla. - (Properties = function () { - this.valueOf = 0; - }).prototype.valueOf = 0; - - // Iterate over a new instance of the `Properties` class. - members = new Properties(); - for (property in members) { - // Ignore all properties inherited from `Object.prototype`. - if (isProperty.call(members, property)) { - size++; - } - } - Properties = members = null; - - // Normalize the iteration algorithm. - if (!size) { - // A list of non-enumerable properties inherited from `Object.prototype`. - members = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"]; - // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable - // properties. - forEach = function (object, callback) { - var isFunction = getClass.call(object) == functionClass, property, length; - var hasProperty = !isFunction && typeof object.constructor != "function" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty; - for (property in object) { - // Gecko <= 1.0 enumerates the `prototype` property of functions under - // certain conditions; IE does not. - if (!(isFunction && property == "prototype") && hasProperty.call(object, property)) { - callback(property); - } - } - // Manually invoke the callback for each non-enumerable property. - for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property)); - }; - } else if (size == 2) { - // Safari <= 2.0.4 enumerates shadowed properties twice. - forEach = function (object, callback) { - // Create a set of iterated properties. - var members = {}, isFunction = getClass.call(object) == functionClass, property; - for (property in object) { - // Store each property name to prevent double enumeration. The - // `prototype` property of functions is not enumerated due to cross- - // environment inconsistencies. - if (!(isFunction && property == "prototype") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) { - callback(property); - } - } - }; - } else { - // No bugs detected; use the standard `for...in` algorithm. - forEach = function (object, callback) { - var isFunction = getClass.call(object) == functionClass, property, isConstructor; - for (property in object) { - if (!(isFunction && property == "prototype") && isProperty.call(object, property) && !(isConstructor = property === "constructor")) { - callback(property); - } - } - // Manually invoke the callback for the `constructor` property due to - // cross-environment inconsistencies. - if (isConstructor || isProperty.call(object, (property = "constructor"))) { - callback(property); - } - }; - } - return forEach(object, callback); - }; - - // Public: Serializes a JavaScript `value` as a JSON string. The optional - // `filter` argument may specify either a function that alters how object and - // array members are serialized, or an array of strings and numbers that - // indicates which properties should be serialized. The optional `width` - // argument may be either a string or number that specifies the indentation - // level of the output. - if (!has("json-stringify")) { - // Internal: A map of control characters and their escaped equivalents. - var Escapes = { - 92: "\\\\", - 34: '\\"', - 8: "\\b", - 12: "\\f", - 10: "\\n", - 13: "\\r", - 9: "\\t" - }; - - // Internal: Converts `value` into a zero-padded string such that its - // length is at least equal to `width`. The `width` must be <= 6. - var leadingZeroes = "000000"; - var toPaddedString = function (width, value) { - // The `|| 0` expression is necessary to work around a bug in - // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`. - return (leadingZeroes + (value || 0)).slice(-width); - }; - - // Internal: Double-quotes a string `value`, replacing all ASCII control - // characters (characters with code unit values between 0 and 31) with - // their escaped equivalents. This is an implementation of the - // `Quote(value)` operation defined in ES 5.1 section 15.12.3. - var unicodePrefix = "\\u00"; - var quote = function (value) { - var result = '"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10; - var symbols = useCharIndex && (charIndexBuggy ? value.split("") : value); - for (; index < length; index++) { - var charCode = value.charCodeAt(index); - // If the character is a control character, append its Unicode or - // shorthand escape sequence; otherwise, append the character as-is. - switch (charCode) { - case 8: case 9: case 10: case 12: case 13: case 34: case 92: - result += Escapes[charCode]; - break; - default: - if (charCode < 32) { - result += unicodePrefix + toPaddedString(2, charCode.toString(16)); - break; - } - result += useCharIndex ? symbols[index] : value.charAt(index); - } - } - return result + '"'; - }; - - // Internal: Recursively serializes an object. Implements the - // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations. - var serialize = function (property, object, callback, properties, whitespace, indentation, stack) { - var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result; - try { - // Necessary for host object support. - value = object[property]; - } catch (exception) {} - if (typeof value == "object" && value) { - className = getClass.call(value); - if (className == dateClass && !isProperty.call(value, "toJSON")) { - if (value > -1 / 0 && value < 1 / 0) { - // Dates are serialized according to the `Date#toJSON` method - // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15 - // for the ISO 8601 date time string format. - if (getDay) { - // Manually compute the year, month, date, hours, minutes, - // seconds, and milliseconds if the `getUTC*` methods are - // buggy. Adapted from @Yaffle's `date-shim` project. - date = floor(value / 864e5); - for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++); - for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++); - date = 1 + date - getDay(year, month); - // The `time` value specifies the time within the day (see ES - // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used - // to compute `A modulo B`, as the `%` operator does not - // correspond to the `modulo` operation for negative numbers. - time = (value % 864e5 + 864e5) % 864e5; - // The hours, minutes, seconds, and milliseconds are obtained by - // decomposing the time within the day. See section 15.9.1.10. - hours = floor(time / 36e5) % 24; - minutes = floor(time / 6e4) % 60; - seconds = floor(time / 1e3) % 60; - milliseconds = time % 1e3; - } else { - year = value.getUTCFullYear(); - month = value.getUTCMonth(); - date = value.getUTCDate(); - hours = value.getUTCHours(); - minutes = value.getUTCMinutes(); - seconds = value.getUTCSeconds(); - milliseconds = value.getUTCMilliseconds(); - } - // Serialize extended years correctly. - value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) + - "-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) + - // Months, dates, hours, minutes, and seconds should have two - // digits; milliseconds should have three. - "T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) + - // Milliseconds are optional in ES 5.0, but required in 5.1. - "." + toPaddedString(3, milliseconds) + "Z"; - } else { - value = null; - } - } else if (typeof value.toJSON == "function" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, "toJSON"))) { - // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the - // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3 - // ignores all `toJSON` methods on these objects unless they are - // defined directly on an instance. - value = value.toJSON(property); - } - } - if (callback) { - // If a replacement function was provided, call it to obtain the value - // for serialization. - value = callback.call(object, property, value); - } - if (value === null) { - return "null"; - } - className = getClass.call(value); - if (className == booleanClass) { - // Booleans are represented literally. - return "" + value; - } else if (className == numberClass) { - // JSON numbers must be finite. `Infinity` and `NaN` are serialized as - // `"null"`. - return value > -1 / 0 && value < 1 / 0 ? "" + value : "null"; - } else if (className == stringClass) { - // Strings are double-quoted and escaped. - return quote("" + value); - } - // Recursively serialize objects and arrays. - if (typeof value == "object") { - // Check for cyclic structures. This is a linear search; performance - // is inversely proportional to the number of unique nested objects. - for (length = stack.length; length--;) { - if (stack[length] === value) { - // Cyclic structures cannot be serialized by `JSON.stringify`. - throw TypeError(); - } - } - // Add the object to the stack of traversed objects. - stack.push(value); - results = []; - // Save the current indentation level and indent one additional level. - prefix = indentation; - indentation += whitespace; - if (className == arrayClass) { - // Recursively serialize array elements. - for (index = 0, length = value.length; index < length; index++) { - element = serialize(index, value, callback, properties, whitespace, indentation, stack); - results.push(element === undef ? "null" : element); - } - result = results.length ? (whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : ("[" + results.join(",") + "]")) : "[]"; - } else { - // Recursively serialize object members. Members are selected from - // either a user-specified list of property names, or the object - // itself. - forEach(properties || value, function (property) { - var element = serialize(property, value, callback, properties, whitespace, indentation, stack); - if (element !== undef) { - // According to ES 5.1 section 15.12.3: "If `gap` {whitespace} - // is not the empty string, let `member` {quote(property) + ":"} - // be the concatenation of `member` and the `space` character." - // The "`space` character" refers to the literal space - // character, not the `space` {width} argument provided to - // `JSON.stringify`. - results.push(quote(property) + ":" + (whitespace ? " " : "") + element); - } - }); - result = results.length ? (whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : ("{" + results.join(",") + "}")) : "{}"; - } - // Remove the object from the traversed object stack. - stack.pop(); - return result; - } - }; - - // Public: `JSON.stringify`. See ES 5.1 section 15.12.3. - exports.stringify = function (source, filter, width) { - var whitespace, callback, properties, className; - if (objectTypes[typeof filter] && filter) { - if ((className = getClass.call(filter)) == functionClass) { - callback = filter; - } else if (className == arrayClass) { - // Convert the property names array into a makeshift set. - properties = {}; - for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1)); - } - } - if (width) { - if ((className = getClass.call(width)) == numberClass) { - // Convert the `width` to an integer and create a string containing - // `width` number of space characters. - if ((width -= width % 1) > 0) { - for (whitespace = "", width > 10 && (width = 10); whitespace.length < width; whitespace += " "); - } - } else if (className == stringClass) { - whitespace = width.length <= 10 ? width : width.slice(0, 10); - } - } - // Opera <= 7.54u2 discards the values associated with empty string keys - // (`""`) only if they are used directly within an object member list - // (e.g., `!("" in { "": 1})`). - return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []); - }; - } - - // Public: Parses a JSON source string. - if (!has("json-parse")) { - var fromCharCode = String.fromCharCode; - - // Internal: A map of escaped control characters and their unescaped - // equivalents. - var Unescapes = { - 92: "\\", - 34: '"', - 47: "/", - 98: "\b", - 116: "\t", - 110: "\n", - 102: "\f", - 114: "\r" - }; - - // Internal: Stores the parser state. - var Index, Source; - - // Internal: Resets the parser state and throws a `SyntaxError`. - var abort = function () { - Index = Source = null; - throw SyntaxError(); - }; - - // Internal: Returns the next token, or `"$"` if the parser has reached - // the end of the source string. A token may be a string, number, `null` - // literal, or Boolean literal. - var lex = function () { - var source = Source, length = source.length, value, begin, position, isSigned, charCode; - while (Index < length) { - charCode = source.charCodeAt(Index); - switch (charCode) { - case 9: case 10: case 13: case 32: - // Skip whitespace tokens, including tabs, carriage returns, line - // feeds, and space characters. - Index++; - break; - case 123: case 125: case 91: case 93: case 58: case 44: - // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at - // the current position. - value = charIndexBuggy ? source.charAt(Index) : source[Index]; - Index++; - return value; - case 34: - // `"` delimits a JSON string; advance to the next character and - // begin parsing the string. String tokens are prefixed with the - // sentinel `@` character to distinguish them from punctuators and - // end-of-string tokens. - for (value = "@", Index++; Index < length;) { - charCode = source.charCodeAt(Index); - if (charCode < 32) { - // Unescaped ASCII control characters (those with a code unit - // less than the space character) are not permitted. - abort(); - } else if (charCode == 92) { - // A reverse solidus (`\`) marks the beginning of an escaped - // control character (including `"`, `\`, and `/`) or Unicode - // escape sequence. - charCode = source.charCodeAt(++Index); - switch (charCode) { - case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114: - // Revive escaped control characters. - value += Unescapes[charCode]; - Index++; - break; - case 117: - // `\u` marks the beginning of a Unicode escape sequence. - // Advance to the first character and validate the - // four-digit code point. - begin = ++Index; - for (position = Index + 4; Index < position; Index++) { - charCode = source.charCodeAt(Index); - // A valid sequence comprises four hexdigits (case- - // insensitive) that form a single hexadecimal value. - if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) { - // Invalid Unicode escape sequence. - abort(); - } - } - // Revive the escaped character. - value += fromCharCode("0x" + source.slice(begin, Index)); - break; - default: - // Invalid escape sequence. - abort(); - } - } else { - if (charCode == 34) { - // An unescaped double-quote character marks the end of the - // string. - break; - } - charCode = source.charCodeAt(Index); - begin = Index; - // Optimize for the common case where a string is valid. - while (charCode >= 32 && charCode != 92 && charCode != 34) { - charCode = source.charCodeAt(++Index); - } - // Append the string as-is. - value += source.slice(begin, Index); - } - } - if (source.charCodeAt(Index) == 34) { - // Advance to the next character and return the revived string. - Index++; - return value; - } - // Unterminated string. - abort(); - default: - // Parse numbers and literals. - begin = Index; - // Advance past the negative sign, if one is specified. - if (charCode == 45) { - isSigned = true; - charCode = source.charCodeAt(++Index); - } - // Parse an integer or floating-point value. - if (charCode >= 48 && charCode <= 57) { - // Leading zeroes are interpreted as octal literals. - if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) { - // Illegal octal literal. - abort(); - } - isSigned = false; - // Parse the integer component. - for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++); - // Floats cannot contain a leading decimal point; however, this - // case is already accounted for by the parser. - if (source.charCodeAt(Index) == 46) { - position = ++Index; - // Parse the decimal component. - for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++); - if (position == Index) { - // Illegal trailing decimal. - abort(); - } - Index = position; - } - // Parse exponents. The `e` denoting the exponent is - // case-insensitive. - charCode = source.charCodeAt(Index); - if (charCode == 101 || charCode == 69) { - charCode = source.charCodeAt(++Index); - // Skip past the sign following the exponent, if one is - // specified. - if (charCode == 43 || charCode == 45) { - Index++; - } - // Parse the exponential component. - for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++); - if (position == Index) { - // Illegal empty exponent. - abort(); - } - Index = position; - } - // Coerce the parsed value to a JavaScript number. - return +source.slice(begin, Index); - } - // A negative sign may only precede numbers. - if (isSigned) { - abort(); - } - // `true`, `false`, and `null` literals. - if (source.slice(Index, Index + 4) == "true") { - Index += 4; - return true; - } else if (source.slice(Index, Index + 5) == "false") { - Index += 5; - return false; - } else if (source.slice(Index, Index + 4) == "null") { - Index += 4; - return null; - } - // Unrecognized token. - abort(); - } - } - // Return the sentinel `$` character if the parser has reached the end - // of the source string. - return "$"; - }; - - // Internal: Parses a JSON `value` token. - var get = function (value) { - var results, hasMembers; - if (value == "$") { - // Unexpected end of input. - abort(); - } - if (typeof value == "string") { - if ((charIndexBuggy ? value.charAt(0) : value[0]) == "@") { - // Remove the sentinel `@` character. - return value.slice(1); - } - // Parse object and array literals. - if (value == "[") { - // Parses a JSON array, returning a new JavaScript array. - results = []; - for (;; hasMembers || (hasMembers = true)) { - value = lex(); - // A closing square bracket marks the end of the array literal. - if (value == "]") { - break; - } - // If the array literal contains elements, the current token - // should be a comma separating the previous element from the - // next. - if (hasMembers) { - if (value == ",") { - value = lex(); - if (value == "]") { - // Unexpected trailing `,` in array literal. - abort(); - } - } else { - // A `,` must separate each array element. - abort(); - } - } - // Elisions and leading commas are not permitted. - if (value == ",") { - abort(); - } - results.push(get(value)); - } - return results; - } else if (value == "{") { - // Parses a JSON object, returning a new JavaScript object. - results = {}; - for (;; hasMembers || (hasMembers = true)) { - value = lex(); - // A closing curly brace marks the end of the object literal. - if (value == "}") { - break; - } - // If the object literal contains members, the current token - // should be a comma separator. - if (hasMembers) { - if (value == ",") { - value = lex(); - if (value == "}") { - // Unexpected trailing `,` in object literal. - abort(); - } - } else { - // A `,` must separate each object member. - abort(); - } - } - // Leading commas are not permitted, object property names must be - // double-quoted strings, and a `:` must separate each property - // name and value. - if (value == "," || typeof value != "string" || (charIndexBuggy ? value.charAt(0) : value[0]) != "@" || lex() != ":") { - abort(); - } - results[value.slice(1)] = get(lex()); - } - return results; - } - // Unexpected token encountered. - abort(); - } - return value; - }; - - // Internal: Updates a traversed object member. - var update = function (source, property, callback) { - var element = walk(source, property, callback); - if (element === undef) { - delete source[property]; - } else { - source[property] = element; - } - }; - - // Internal: Recursively traverses a parsed JSON object, invoking the - // `callback` function for each value. This is an implementation of the - // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2. - var walk = function (source, property, callback) { - var value = source[property], length; - if (typeof value == "object" && value) { - // `forEach` can't be used to traverse an array in Opera <= 8.54 - // because its `Object#hasOwnProperty` implementation returns `false` - // for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`). - if (getClass.call(value) == arrayClass) { - for (length = value.length; length--;) { - update(value, length, callback); - } - } else { - forEach(value, function (property) { - update(value, property, callback); - }); - } - } - return callback.call(source, property, value); - }; - - // Public: `JSON.parse`. See ES 5.1 section 15.12.2. - exports.parse = function (source, callback) { - var result, value; - Index = 0; - Source = "" + source; - result = get(lex()); - // If a JSON string contains multiple tokens, it is invalid. - if (lex() != "$") { - abort(); - } - // Reset the parser state. - Index = Source = null; - return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[""] = result, value), "", callback) : result; - }; - } - } - - exports["runInContext"] = runInContext; - return exports; - } - - if (freeExports && !isLoader) { - // Export for CommonJS environments. - runInContext(root, freeExports); - } else { - // Export for web browsers and JavaScript engines. - var nativeJSON = root.JSON, - previousJSON = root["JSON3"], - isRestored = false; - - var JSON3 = runInContext(root, (root["JSON3"] = { - // Public: Restores the original value of the global `JSON` object and - // returns a reference to the `JSON3` object. - "noConflict": function () { - if (!isRestored) { - isRestored = true; - root.JSON = nativeJSON; - root["JSON3"] = previousJSON; - nativeJSON = previousJSON = null; - } - return JSON3; - } - })); - - root.JSON = { - "parse": JSON3.parse, - "stringify": JSON3.stringify - }; - } - - // Export for asynchronous module loaders. - if (isLoader) { - define(function () { - return JSON3; - }); - } -}).call(this); - -// Polyfill for old browsers -// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray -if (!Array.isArray) { - Array.isArray = function(arg) { - return Object.prototype.toString.call(arg) === '[object Array]'; - }; -} - -if (typeof Promise === 'undefined') { - ES6Promise.polyfill(); -} - -// ES5 Polyfills -// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind -if (!Function.prototype.bind) { - Function.prototype.bind = function (oThis) { - if (typeof this !== 'function') { - throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable'); - } - - var aArgs = Array.prototype.slice.call(arguments, 1); - var fToBind = this; - var NoOp = function () { - }; - var fBound = function () { - return fToBind.apply(this instanceof NoOp && oThis ? this : oThis, - aArgs.concat(Array.prototype.slice.call(arguments))); - }; - - NoOp.prototype = this.prototype; - fBound.prototype = new NoOp(); - - return fBound; - }; -} - - -// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map -if (!Array.prototype.map) { - Array.prototype.map = function(callback, thisArg) { - if (this === void 0 || this === null) { - throw new TypeError('this is null or not defined'); - } - var O = Object(this); - var len = O.length >>> 0; - var T; - if (typeof callback !== 'function') { - throw new TypeError(callback + ' is not a function'); - } - if (arguments.length > 1) { - T = thisArg; - } - - var A = new Array(len); - var k = 0; - - while (k < len) { - var kValue, mappedValue; - if (k in O) { - kValue = O[k]; - mappedValue = callback.call(T, kValue, k, O); - A[k] = mappedValue; - } - k++; - } - - return A; - }; -} - -// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter -if (!Array.prototype.filter) { - Array.prototype.filter = function(callback/*, thisArg*/) { - if (this === void 0 || this === null) { - throw new TypeError('this is null or not defined'); - } - - var t = Object(this); - var len = t.length >>> 0; - if (typeof callback !== 'function') { - throw new TypeError(callback + ' is not a function'); - } - - var res = []; - var thisArg = arguments.length >= 2 ? arguments[1] : void 0; - for (var i = 0; i < len; i++) { - if (i in t) { - var val = t[i]; - if (callback.call(thisArg, val, i, t)) { - res.push(val); - } - } - } - - return res; - }; -} - -// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach -if (!Array.prototype.forEach) { - Array.prototype.forEach = function(callback, thisArg) { - var T, k; - if (this === null || this === undefined) { - throw new TypeError(' this is null or not defined'); - } - - var O = Object(this); - var len = O.length >>> 0; - if (typeof callback !== 'function') { - throw new TypeError(callback + ' is not a function'); - } - - if (arguments.length > 1) { - T = thisArg; - } - k = 0; - while (k < len) { - var kValue; - if (k in O) { - kValue = O[k]; - callback.call(T, kValue, k, O); - } - k++; - } - }; -} - -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",t=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(";"===e.charAt(v))l++,v++,p=0;else if(","===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),"number"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?"$"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open("get",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r,t=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,s=e.split("\n"),a="",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf("//");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o="data:"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error("The encoding of the inline sourcemap is not supported"))}else{var c=this.ajax(n,{method:"get"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)["catch"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c="data:"===a.substr(0,5),g=i.substring(0,i.lastIndexOf("/")+1);"/"===a[0]||c||/^https?:\/\/|^\/\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;"string"==typeof r&&(r=o(r.replace(/^\)\]\}'/,""))),"undefined"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new c(e)}}); -//# sourceMappingURL=stacktrace-gps.min.js.map - -(function (root, factory) { - 'use strict'; - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. - - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define('stack-generator', ['stackframe'], factory); - } else if (typeof exports === 'object') { - module.exports = factory(require('stackframe')); - } else { - root.StackGenerator = factory(root.StackFrame); - } -}(this, function (StackFrame) { - return { - backtrace: function StackGenerator$$backtrace(opts) { - var stack = []; - var maxStackSize = 10; - - if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') { - maxStackSize = opts.maxStackSize; - } - - var curr = arguments.callee; - while (curr && stack.length < maxStackSize) { - // Allow V8 optimizations - var args = new Array(curr['arguments'].length); - for(var i = 0; i < args.length; ++i) { - args[i] = curr['arguments'][i]; - } - if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { - stack.push(new StackFrame(RegExp.$1 || undefined, args)); - } else { - stack.push(new StackFrame(undefined, args)); - } - - try { - curr = curr.caller; - } catch (e) { - break; - } - } - return stack; - } - }; -})); - -(function(root, factory) { - 'use strict'; - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. - - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define('error-stack-parser', ['stackframe'], factory); - } else if (typeof exports === 'object') { - module.exports = factory(require('stackframe')); - } else { - root.ErrorStackParser = factory(root.StackFrame); - } -}(this, function ErrorStackParser(StackFrame) { - 'use strict'; - - var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\S+\:\d+/; - var CHROME_IE_STACK_REGEXP = /^\s*at .*(\S+\:\d+|\(native\))/m; - var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\[native code\])?$/; - - function _map(array, fn, thisArg) { - if (typeof Array.prototype.map === 'function') { - return array.map(fn, thisArg); - } else { - var output = new Array(array.length); - for (var i = 0; i < array.length; i++) { - output[i] = fn.call(thisArg, array[i]); - } - return output; - } - } - - function _filter(array, fn, thisArg) { - if (typeof Array.prototype.filter === 'function') { - return array.filter(fn, thisArg); - } else { - var output = []; - for (var i = 0; i < array.length; i++) { - if (fn.call(thisArg, array[i])) { - output.push(array[i]); - } - } - return output; - } - } - - function _indexOf(array, target) { - if (typeof Array.prototype.indexOf === 'function') { - return array.indexOf(target); - } else { - for (var i = 0; i < array.length; i++) { - if (array[i] === target) { - return i; - } - } - return -1; - } - } - - return { - /** - * Given an Error object, extract the most information from it. - * - * @param {Error} error object - * @return {Array} of StackFrames - */ - parse: function ErrorStackParser$$parse(error) { - if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') { - return this.parseOpera(error); - } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) { - return this.parseV8OrIE(error); - } else if (error.stack) { - return this.parseFFOrSafari(error); - } else { - throw new Error('Cannot parse given Error object'); - } - }, - - // Separate line and column numbers from a string of the form: (URI:Line:Column) - extractLocation: function ErrorStackParser$$extractLocation(urlLike) { - // Fail-fast but return locations like "(native)" - if (urlLike.indexOf(':') === -1) { - return [urlLike]; - } - - var regExp = /(.+?)(?:\:(\d+))?(?:\:(\d+))?$/; - var parts = regExp.exec(urlLike.replace(/[\(\)]/g, '')); - return [parts[1], parts[2] || undefined, parts[3] || undefined]; - }, - - parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) { - var filtered = _filter(error.stack.split('\n'), function(line) { - return !!line.match(CHROME_IE_STACK_REGEXP); - }, this); - - return _map(filtered, function(line) { - if (line.indexOf('(eval ') > -1) { - // Throw away eval information until we implement stacktrace.js/stackframe#8 - line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^\()]*)|(\)\,.*$)/g, ''); - } - var tokens = line.replace(/^\s+/, '').replace(/\(eval code/g, '(').split(/\s+/).slice(1); - var locationParts = this.extractLocation(tokens.pop()); - var functionName = tokens.join(' ') || undefined; - var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0]; - - return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line); - }, this); - }, - - parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) { - var filtered = _filter(error.stack.split('\n'), function(line) { - return !line.match(SAFARI_NATIVE_CODE_REGEXP); - }, this); - - return _map(filtered, function(line) { - // Throw away eval information until we implement stacktrace.js/stackframe#8 - if (line.indexOf(' > eval') > -1) { - line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g, ':$1'); - } - - if (line.indexOf('@') === -1 && line.indexOf(':') === -1) { - // Safari eval frames only have function names and nothing else - return new StackFrame(line); - } else { - var tokens = line.split('@'); - var locationParts = this.extractLocation(tokens.pop()); - var functionName = tokens.join('@') || undefined; - return new StackFrame(functionName, - undefined, - locationParts[0], - locationParts[1], - locationParts[2], - line); - } - }, this); - }, - - parseOpera: function ErrorStackParser$$parseOpera(e) { - if (!e.stacktrace || (e.message.indexOf('\n') > -1 && - e.message.split('\n').length > e.stacktrace.split('\n').length)) { - return this.parseOpera9(e); - } else if (!e.stack) { - return this.parseOpera10(e); - } else { - return this.parseOpera11(e); - } - }, - - parseOpera9: function ErrorStackParser$$parseOpera9(e) { - var lineRE = /Line (\d+).*script (?:in )?(\S+)/i; - var lines = e.message.split('\n'); - var result = []; - - for (var i = 2, len = lines.length; i < len; i += 2) { - var match = lineRE.exec(lines[i]); - if (match) { - result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i])); - } - } - - return result; - }, - - parseOpera10: function ErrorStackParser$$parseOpera10(e) { - var lineRE = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i; - var lines = e.stacktrace.split('\n'); - var result = []; - - for (var i = 0, len = lines.length; i < len; i += 2) { - var match = lineRE.exec(lines[i]); - if (match) { - result.push( - new StackFrame( - match[3] || undefined, - undefined, - match[2], - match[1], - undefined, - lines[i] - ) - ); - } - } - - return result; - }, - - // Opera 10.65+ Error.stack very similar to FF/Safari - parseOpera11: function ErrorStackParser$$parseOpera11(error) { - var filtered = _filter(error.stack.split('\n'), function(line) { - return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/); - }, this); - - return _map(filtered, function(line) { - var tokens = line.split('@'); - var locationParts = this.extractLocation(tokens.pop()); - var functionCall = (tokens.shift() || ''); - var functionName = functionCall - .replace(//, '$2') - .replace(/\([^\)]*\)/g, '') || undefined; - var argsRaw; - if (functionCall.match(/\(([^\)]*)\)/)) { - argsRaw = functionCall.replace(/^[^\(]+\(([^\)]*)\)$/, '$1'); - } - var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? - undefined : argsRaw.split(','); - return new StackFrame( - functionName, - args, - locationParts[0], - locationParts[1], - locationParts[2], - line); - }, this); - } - }; -})); - - -(function(root, factory) { - 'use strict'; - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. - - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory); - } else if (typeof exports === 'object') { - module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps')); - } else { - root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS); - } -}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) { - var _options = { - filter: function(stackframe) { - // Filter out stackframes for this library by default - return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 && - (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 && - (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 && - (stackframe.functionName || '').indexOf('StackGenerator$$') === -1; - }, - sourceCache: {} - }; - - var _generateError = function StackTrace$$GenerateError() { - try { - // Error must be thrown to get stack in IE - throw new Error(); - } catch (err) { - return err; - } - }; - - /** - * Merge 2 given Objects. If a conflict occurs the second object wins. - * Does not do deep merges. - * - * @param {Object} first base object - * @param {Object} second overrides - * @returns {Object} merged first and second - * @private - */ - function _merge(first, second) { - var target = {}; - - [first, second].forEach(function(obj) { - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - target[prop] = obj[prop]; - } - } - return target; - }); - - return target; - } - - function _isShapedLikeParsableError(err) { - return err.stack || err['opera#sourceloc']; - } - - function _filtered(stackframes, filter) { - if (typeof filter === 'function') { - return stackframes.filter(filter); - } - return stackframes; - } - - return { - /** - * Get a backtrace from invocation point. - * - * @param {Object} opts - * @returns {Array} of StackFrame - */ - get: function StackTrace$$get(opts) { - var err = _generateError(); - return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts); - }, - - /** - * Get a backtrace from invocation point. - * IMPORTANT: Does not handle source maps or guess function names! - * - * @param {Object} opts - * @returns {Array} of StackFrame - */ - getSync: function StackTrace$$getSync(opts) { - opts = _merge(_options, opts); - var err = _generateError(); - var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts); - return _filtered(stack, opts.filter); - }, - - /** - * Given an error object, parse it. - * - * @param {Error} error object - * @param {Object} opts - * @returns {Promise} for Array[StackFrame} - */ - fromError: function StackTrace$$fromError(error, opts) { - opts = _merge(_options, opts); - var gps = new StackTraceGPS(opts); - return new Promise(function(resolve) { - var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter); - resolve(Promise.all(stackframes.map(function(sf) { - return new Promise(function(resolve) { - function resolveOriginal() { - resolve(sf); - } - - gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal); - }); - }))); - }.bind(this)); - }, - - /** - * Use StackGenerator to generate a backtrace. - * - * @param {Object} opts - * @returns {Promise} of Array[StackFrame] - */ - generateArtificially: function StackTrace$$generateArtificially(opts) { - opts = _merge(_options, opts); - var stackFrames = StackGenerator.backtrace(opts); - if (typeof opts.filter === 'function') { - stackFrames = stackFrames.filter(opts.filter); - } - return Promise.resolve(stackFrames); - }, - - /** - * Given a function, wrap it such that invocations trigger a callback that - * is called with a stack trace. - * - * @param {Function} fn to be instrumented - * @param {Function} callback function to call with a stack trace on invocation - * @param {Function} errback optional function to call with error if unable to get stack trace. - * @param {Object} thisArg optional context object (e.g. window) - */ - instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) { - if (typeof fn !== 'function') { - throw new Error('Cannot instrument non-function object'); - } else if (typeof fn.__stacktraceOriginalFn === 'function') { - // Already instrumented, return given Function - return fn; - } - - var instrumented = function StackTrace$$instrumented() { - try { - this.get().then(callback, errback)['catch'](errback); - return fn.apply(thisArg || this, arguments); - } catch (e) { - if (_isShapedLikeParsableError(e)) { - this.fromError(e).then(callback, errback)['catch'](errback); - } - throw e; - } - }.bind(this); - instrumented.__stacktraceOriginalFn = fn; - - return instrumented; - }, - - /** - * Given a function that has been instrumented, - * revert the function to it's original (non-instrumented) state. - * - * @param {Function} fn to de-instrument - */ - deinstrument: function StackTrace$$deinstrument(fn) { - if (typeof fn !== 'function') { - throw new Error('Cannot de-instrument non-function object'); - } else if (typeof fn.__stacktraceOriginalFn === 'function') { - return fn.__stacktraceOriginalFn; - } else { - // Function not instrumented, return original - return fn; - } - }, - - /** - * Given an error message and Array of StackFrames, serialize and POST to given URL. - * - * @param {Array} stackframes - * @param {String} url - * @param {String} errorMsg - */ - report: function StackTrace$$report(stackframes, url, errorMsg) { - return new Promise(function(resolve, reject) { - var req = new XMLHttpRequest(); - req.onerror = reject; - req.onreadystatechange = function onreadystatechange() { - if (req.readyState === 4) { - if (req.status >= 200 && req.status < 400) { - resolve(req.responseText); - } else { - reject(new Error('POST to ' + url + ' failed with status: ' + req.status)); - } - } - }; - req.open('post', url); - req.setRequestHeader('Content-Type', 'application/json'); - - var reportPayload = {stack: stackframes}; - if (errorMsg !== undefined) { - reportPayload.message = errorMsg; - } - - req.send(JSON.stringify(reportPayload)); - }); - } - }; -})); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}})},{stackframe:14}],2:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function a(e){return"function"==typeof e}function s(e){Z=e}function u(e){V=e}function c(){return function(){r.nextTick(g)}}function l(){return function(){z(g)}}function f(){var e=0,t=new Q(g),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=g,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(g,1)}}function g(){for(var e=0;W>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}W=0}function d(){try{var e=t,n=e("vertx");return z=n.runOnLoop||n.runOnContext,l()}catch(r){return h()}}function m(e,t){var n=this,r=n._state;if(r===ae&&!e||r===se&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var a=arguments[r-1];V(function(){P(r,o,a,i)})}else j(n,o,e,t);return o}function y(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(v);return E(n,e),n}function v(){}function _(){return new TypeError("You cannot resolve a promise with itself")}function w(){return new TypeError("A promises callback cannot return that same promise.")}function b(e){try{return e.then}catch(t){return ue.error=t,ue}}function A(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function C(e,t,n){V(function(e){var r=!1,o=A(n,t,function(n){r||(r=!0,t!==n?E(e,n):N(e,n))},function(t){r||(r=!0,T(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,T(e,o))},e)}function O(e,t){t._state===ae?N(e,t._result):t._state===se?T(e,t._result):j(t,void 0,function(t){E(e,t)},function(t){T(e,t)})}function S(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?O(e,t):n===ue?T(e,ue.error):void 0===n?N(e,t):a(n)?C(e,t,n):N(e,t)}function E(e,t){e===t?T(e,_()):i(t)?S(e,t,b(t)):N(e,t)}function L(e){e._onerror&&e._onerror(e._result),M(e)}function N(e,t){e._state===ie&&(e._result=t,e._state=ae,0!==e._subscribers.length&&V(M,e))}function T(e,t){e._state===ie&&(e._state=se,e._result=t,V(L,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+ae]=n,o[i+se]=r,0===i&&e._state&&V(M,e)}function M(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)j(r.resolve(e[a]),void 0,t,n);return o}function G(e){var t=this,n=new t(v);return T(n,e),n}function $(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function D(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function B(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&("function"!=typeof e&&$(),this instanceof B?R(this,e):D())}function J(e,t){this._instanceConstructor=e,this.promise=new e(v),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?N(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&N(this.promise,this._result))):T(this.promise,this._validationError())}function q(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ge)}var I;I=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var z,Z,Y,H=I,W=0,V=function(e,t){ne[W]=e,ne[W+1]=t,W+=2,2===W&&(Z?Z(g):Y())},X="undefined"!=typeof window?window:void 0,K=X||{},Q=K.MutationObserver||K.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);Y=ee?c():Q?f():te?p():void 0===X&&"function"==typeof t?d():h();var re=m,oe=y,ie=void 0,ae=1,se=2,ue=new k,ce=new k,le=F,fe=U,pe=G,he=0,ge=B;B.all=le,B.race=fe,B.resolve=oe,B.reject=pe,B._setScheduler=s,B._setAsap=u,B._asap=V,B.prototype={constructor:B,then:re,"catch":function(e){return this.then(null,e)}};var de=J;J.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},J.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},J.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=b(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ge){var i=new n(v);S(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},J.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===se?T(r,n):this._result[t]=n),0===this._remaining&&N(r,this._result)},J.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(ae,t,e)},function(e){n._settledAt(se,t,e)})};var me=q,ye={Promise:ge,polyfill:me};"function"==typeof e&&e.amd?e(function(){return ye}):"undefined"!=typeof n&&n.exports?n.exports=ye:"undefined"!=typeof this&&(this.ES6Promise=ye),me()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:4}],3:[function(t,n,r){(function(t){(function(){function o(e,t){function n(e){if(n[e]!==m)return n[e];var o;if("bug-string-char-index"==e)o="a"!="a"[0];else if("json"==e)o=n("json-stringify")&&n("json-parse");else{var a,s='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=t.stringify,l="function"==typeof u&&_;if(l){(a=function(){return 1}).toJSON=a;try{l="0"===u(0)&&"0"===u(new r)&&'""'==u(new i)&&u(v)===m&&u(m)===m&&u()===m&&"1"===u(a)&&"[1]"==u([a])&&"[null]"==u([m])&&"null"==u(null)&&"[null,null,null]"==u([m,v,null])&&u({a:[a,!0,!1,null,"\x00\b\n\f\r "]})==s&&"1"===u(null,a)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}o=l}if("json-parse"==e){var p=t.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){a=p(s);var h=5==a.a.length&&1===a.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}o=h}}return n[e]=!!o}e||(e=u.Object()),t||(t=u.Object());var r=e.Number||u.Number,i=e.String||u.String,s=e.Object||u.Object,c=e.Date||u.Date,l=e.SyntaxError||u.SyntaxError,f=e.TypeError||u.TypeError,p=e.Math||u.Math,h=e.JSON||u.JSON;"object"==typeof h&&h&&(t.stringify=h.stringify,t.parse=h.parse);var g,d,m,y=s.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!n("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",L=n("bug-string-char-index");if(!_)var N=p.floor,T=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return T[t]+365*(e-1970)+N((e-1969+(t=+(t>1)))/4)-N((e-1901+t)/100)+N((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?d=2==i?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var n,o,i=v.call(e)==b,s=!i&&"function"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&"prototype"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),d(e,t)},!n("json-stringify")){var M={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},k="000000",x=function(e,t){return(k+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!L||r>10,i=o&&(L?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=M[a];break;default:if(32>a){t+=P+x(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,L,T,M,k,P,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=N(s/864e5),c=N(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=N((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=N(h/36e5)%24,_=N(h/6e4)%60,w=N(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+x(6,0>c?-c:c):x(4,c))+"-"+x(2,l+1)+"-"+x(2,p)+"T"+x(2,y)+":"+x(2,_)+":"+x(2,w)+"."+x(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),L=[],P=i,i+=o,u==S){for(M=0,k=s.length;k>M;M++)T=F(M,s,n,r,o,i,a),L.push(T===m?"null":T);U=L.length?o?"[\n"+i+L.join(",\n"+i)+"\n"+P+"]":"["+L.join(",")+"]":"[]"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&L.push(R(e)+":"+(o?" ":"")+t)}),U=L.length?o?"{\n"+i+L.join(",\n"+i)+"\n"+P+"}":"{"+L.join(",")+"}":"{}";return a.pop(),U}};t.stringify=function(e,t,n){var r,o,i,s;if(a[typeof t]&&t)if((s=v.call(t))==b)o=t;else if(s==S){i={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(i[u]=1));}if(n)if((s=v.call(n))==C){if((n-=n%1)>0)for(r="",n>10&&(n=10);r.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=L?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(L?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(L?e.charAt(0):e[0])||":"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,G=""+e,n=q(J()),"$"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return t.runInContext=o,t}var i="function"==typeof e&&e.amd,a={"function":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&"object"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,t,n){function r(e){if(c===setTimeout)return setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function o(e){if(l===clearTimeout)return clearTimeout(e);try{return l(e)}catch(t){try{return l.call(null,e)}catch(t){return l.call(this,e)}}}function i(){g&&p&&(g=!1,p.length?h=p.concat(h):d=-1,h.length&&a())}function a(){if(!g){var e=r(i);g=!0;for(var t=h.length;t;){for(p=h,h=[];++d1)for(var n=1;no;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},{}],8:[function(e,t,n){function r(e,t,o,i,a,s){var u=Math.floor((t-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],9:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(a>n){var s=o(n,a),u=n-1;r(e,s,a);for(var c=e[a],l=n;a>l;l++)t(e[l],c)<=0&&(u+=1,r(e,u,l));r(e,u+1,l);var f=u+1;i(e,t,n,f-1),i(e,t,f+1,a)}}n.quickSort=function(e,t){i(e,t,0,e.length-1)}},{}],10:[function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=o(t),r=o(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(v))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,i(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(9>t)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function d(e,t){return e===t?0:e>t?1:-1}function m(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=d(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:d(e.name,t.name)))))}n.getArg=r;var y=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,v=/^data:.+\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(y)},n.relative=u;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},{}],12:[function(t,n,r){!function(t,o){"use strict";"function"==typeof e&&e.amd?e("stackframe",[],o):"object"==typeof r?n.exports=o():t.StackFrame=o()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t})},{}],13:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof r?n.exports=i(t("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=e.lineNumber,a=e.columnNumber,s=i(r,o,a);n(s?new t(s,e.args,e.fileName,o,a):e)},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}})},{"source-map/lib/source-map-consumer":10,stackframe:14}],16:[function(e,t,n){Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}})},{}],17:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],i):"object"==typeof r?n.exports=i(t("error-stack-parser"),t("stack-generator"),t("stacktrace-gps")):o.StackTrace=i(o.ErrorStackParser,o.StackGenerator,o.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}function i(e,t){return"function"==typeof t?e.filter(t):e}var a={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}},s=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var t=s();return o(t)?this.fromError(t,e):this.generateArtificially(e)},getSync:function(n){n=r(a,n);var u=s(),c=o(u)?e.parse(u):t.backtrace(n);return i(c,n.filter)},fromError:function(t,o){o=r(a,o);var s=new n(o);return new Promise(function(n){var r=i(e.parse(t),o.filter);n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}s.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(a,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t,n){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+t+" failed with status: "+i.status)))},i.open("post",t),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==n&&(a.message=n),i.send(JSON.stringify(a))})}}})},{"error-stack-parser":1,"stack-generator":13,"stacktrace-gps":15}]},{},[2,3,16,17])(17)}); +//# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.js.map b/dist/stacktrace-with-promises-and-json-polyfills.js.map new file mode 100644 index 0000000..5211e97 --- /dev/null +++ b/dist/stacktrace-with-promises-and-json-polyfills.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"mappings":"","sources":["stacktrace-with-promises-and-json-polyfills.js"],"sourcesContent":["!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var t;t=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u=\"function\"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error(\"Cannot find module '\"+a+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i=\"function\"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,\"eval\").replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g,\"\"));var n=t.replace(/^\\s+/,\"\").replace(/\\(eval code/g,\"(\").split(/\\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(\" \")||void 0,a=r([\"eval\",\"\"],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split(\"\\n\"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(\" > eval\")>-1&&(t=t.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g,\":$1\")),-1===t.indexOf(\"@\")&&-1===t.indexOf(\":\"))return new e(t);var n=t.split(\"@\"),r=this.extractLocation(n.pop()),o=n.join(\"@\")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf(\"\\n\")>-1&&e.message.split(\"\\n\").length>e.stacktrace.split(\"\\n\").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\\d+).*script (?:in )?(\\S+)/i,r=t.message.split(\"\\n\"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i,r=t.stacktrace.split(\"\\n\"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split(\"\\n\"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split(\"@\"),o=this.extractLocation(r.pop()),i=r.shift()||\"\",a=i.replace(//,\"$2\").replace(/\\([^\\)]*\\)/g,\"\")||void 0;i.match(/\\(([^\\)]*)\\)/)&&(n=i.replace(/^[^\\(]+\\(([^\\)]*)\\)$/,\"$1\"));var s=void 0===n||\"[arguments not available]\"===n?void 0:n.split(\",\");return new e(a,s,o[0],o[1],o[2],t)},this)}}})},{stackframe:14}],2:[function(t,n,r){(function(r,o){(function(){\"use strict\";function i(e){return\"function\"==typeof e||\"object\"==typeof e&&null!==e}function a(e){return\"function\"==typeof e}function s(e){Z=e}function u(e){V=e}function c(){return function(){r.nextTick(g)}}function l(){return function(){z(g)}}function f(){var e=0,t=new Q(g),n=document.createTextNode(\"\");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=g,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(g,1)}}function g(){for(var e=0;W>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}W=0}function d(){try{var e=t,n=e(\"vertx\");return z=n.runOnLoop||n.runOnContext,l()}catch(r){return h()}}function m(e,t){var n=this,r=n._state;if(r===ae&&!e||r===se&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var a=arguments[r-1];V(function(){P(r,o,a,i)})}else j(n,o,e,t);return o}function y(e){var t=this;if(e&&\"object\"==typeof e&&e.constructor===t)return e;var n=new t(v);return E(n,e),n}function v(){}function _(){return new TypeError(\"You cannot resolve a promise with itself\")}function w(){return new TypeError(\"A promises callback cannot return that same promise.\")}function b(e){try{return e.then}catch(t){return ue.error=t,ue}}function A(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function C(e,t,n){V(function(e){var r=!1,o=A(n,t,function(n){r||(r=!0,t!==n?E(e,n):N(e,n))},function(t){r||(r=!0,T(e,t))},\"Settle: \"+(e._label||\" unknown promise\"));!r&&o&&(r=!0,T(e,o))},e)}function O(e,t){t._state===ae?N(e,t._result):t._state===se?T(e,t._result):j(t,void 0,function(t){E(e,t)},function(t){T(e,t)})}function S(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?O(e,t):n===ue?T(e,ue.error):void 0===n?N(e,t):a(n)?C(e,t,n):N(e,t)}function E(e,t){e===t?T(e,_()):i(t)?S(e,t,b(t)):N(e,t)}function L(e){e._onerror&&e._onerror(e._result),M(e)}function N(e,t){e._state===ie&&(e._result=t,e._state=ae,0!==e._subscribers.length&&V(M,e))}function T(e,t){e._state===ie&&(e._state=se,e._result=t,V(L,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+ae]=n,o[i+se]=r,0===i&&e._state&&V(M,e)}function M(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)j(r.resolve(e[a]),void 0,t,n);return o}function G(e){var t=this,n=new t(v);return T(n,e),n}function $(){throw new TypeError(\"You must pass a resolver function as the first argument to the promise constructor\")}function D(){throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\")}function B(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&(\"function\"!=typeof e&&$(),this instanceof B?R(this,e):D())}function J(e,t){this._instanceConstructor=e,this.promise=new e(v),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?N(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&N(this.promise,this._result))):T(this.promise,this._validationError())}function q(){var e;if(\"undefined\"!=typeof o)e=o;else if(\"undefined\"!=typeof self)e=self;else try{e=Function(\"return this\")()}catch(t){throw new Error(\"polyfill failed because global object is unavailable in this environment\")}var n=e.Promise;(!n||\"[object Promise]\"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ge)}var I;I=Array.isArray?Array.isArray:function(e){return\"[object Array]\"===Object.prototype.toString.call(e)};var z,Z,Y,H=I,W=0,V=function(e,t){ne[W]=e,ne[W+1]=t,W+=2,2===W&&(Z?Z(g):Y())},X=\"undefined\"!=typeof window?window:void 0,K=X||{},Q=K.MutationObserver||K.WebKitMutationObserver,ee=\"undefined\"!=typeof r&&\"[object process]\"==={}.toString.call(r),te=\"undefined\"!=typeof Uint8ClampedArray&&\"undefined\"!=typeof importScripts&&\"undefined\"!=typeof MessageChannel,ne=new Array(1e3);Y=ee?c():Q?f():te?p():void 0===X&&\"function\"==typeof t?d():h();var re=m,oe=y,ie=void 0,ae=1,se=2,ue=new k,ce=new k,le=F,fe=U,pe=G,he=0,ge=B;B.all=le,B.race=fe,B.resolve=oe,B.reject=pe,B._setScheduler=s,B._setAsap=u,B._asap=V,B.prototype={constructor:B,then:re,\"catch\":function(e){return this.then(null,e)}};var de=J;J.prototype._validationError=function(){return new Error(\"Array Methods must be provided an Array\")},J.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},J.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=b(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if(\"function\"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ge){var i=new n(v);S(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},J.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===se?T(r,n):this._result[t]=n),0===this._remaining&&N(r,this._result)},J.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(ae,t,e)},function(e){n._settledAt(se,t,e)})};var me=q,ye={Promise:ge,polyfill:me};\"function\"==typeof e&&e.amd?e(function(){return ye}):\"undefined\"!=typeof n&&n.exports?n.exports=ye:\"undefined\"!=typeof this&&(this.ES6Promise=ye),me()}).call(this)}).call(this,t(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{_process:4}],3:[function(t,n,r){(function(t){(function(){function o(e,t){function n(e){if(n[e]!==m)return n[e];var o;if(\"bug-string-char-index\"==e)o=\"a\"!=\"a\"[0];else if(\"json\"==e)o=n(\"json-stringify\")&&n(\"json-parse\");else{var a,s='{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';if(\"json-stringify\"==e){var u=t.stringify,l=\"function\"==typeof u&&_;if(l){(a=function(){return 1}).toJSON=a;try{l=\"0\"===u(0)&&\"0\"===u(new r)&&'\"\"'==u(new i)&&u(v)===m&&u(m)===m&&u()===m&&\"1\"===u(a)&&\"[1]\"==u([a])&&\"[null]\"==u([m])&&\"null\"==u(null)&&\"[null,null,null]\"==u([m,v,null])&&u({a:[a,!0,!1,null,\"\\x00\\b\\n\\f\\r\t\"]})==s&&\"1\"===u(null,a)&&\"[\\n 1,\\n 2\\n]\"==u([1,2],null,1)&&'\"-271821-04-20T00:00:00.000Z\"'==u(new c(-864e13))&&'\"+275760-09-13T00:00:00.000Z\"'==u(new c(864e13))&&'\"-000001-01-01T00:00:00.000Z\"'==u(new c(-621987552e5))&&'\"1969-12-31T23:59:59.999Z\"'==u(new c(-1))}catch(f){l=!1}}o=l}if(\"json-parse\"==e){var p=t.parse;if(\"function\"==typeof p)try{if(0===p(\"0\")&&!p(!1)){a=p(s);var h=5==a.a.length&&1===a.a[0];if(h){try{h=!p('\"\t\"')}catch(f){}if(h)try{h=1!==p(\"01\")}catch(f){}if(h)try{h=1!==p(\"1.\")}catch(f){}}}}catch(f){h=!1}o=h}}return n[e]=!!o}e||(e=u.Object()),t||(t=u.Object());var r=e.Number||u.Number,i=e.String||u.String,s=e.Object||u.Object,c=e.Date||u.Date,l=e.SyntaxError||u.SyntaxError,f=e.TypeError||u.TypeError,p=e.Math||u.Math,h=e.JSON||u.JSON;\"object\"==typeof h&&h&&(t.stringify=h.stringify,t.parse=h.parse);var g,d,m,y=s.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!n(\"json\")){var b=\"[object Function]\",A=\"[object Date]\",C=\"[object Number]\",O=\"[object String]\",S=\"[object Array]\",E=\"[object Boolean]\",L=n(\"bug-string-char-index\");if(!_)var N=p.floor,T=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return T[t]+365*(e-1970)+N((e-1969+(t=+(t>1)))/4)-N((e-1901+t)/100)+N((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?d=2==i?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&\"prototype\"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&\"prototype\"==n||!g.call(e,n)||(r=\"constructor\"===n)||t(n);(r||g.call(e,n=\"constructor\"))&&t(n)}:(r=[\"valueOf\",\"toString\",\"toLocaleString\",\"propertyIsEnumerable\",\"isPrototypeOf\",\"hasOwnProperty\",\"constructor\"],d=function(e,t){var n,o,i=v.call(e)==b,s=!i&&\"function\"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&\"prototype\"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),d(e,t)},!n(\"json-stringify\")){var M={92:\"\\\\\\\\\",34:'\\\\\"',8:\"\\\\b\",12:\"\\\\f\",10:\"\\\\n\",13:\"\\\\r\",9:\"\\\\t\"},k=\"000000\",x=function(e,t){return(k+(t||0)).slice(-e)},P=\"\\\\u00\",R=function(e){for(var t='\"',n=0,r=e.length,o=!L||r>10,i=o&&(L?e.split(\"\"):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=M[a];break;default:if(32>a){t+=P+x(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'\"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,L,T,M,k,P,U;try{s=t[e]}catch(G){}if(\"object\"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,\"toJSON\"))\"function\"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,\"toJSON\"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=N(s/864e5),c=N(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=N((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=N(h/36e5)%24,_=N(h/6e4)%60,w=N(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?\"-\":\"+\")+x(6,0>c?-c:c):x(4,c))+\"-\"+x(2,l+1)+\"-\"+x(2,p)+\"T\"+x(2,y)+\":\"+x(2,_)+\":\"+x(2,w)+\".\"+x(3,b)+\"Z\"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return\"null\";if(u=v.call(s),u==E)return\"\"+s;if(u==C)return s>-1/0&&1/0>s?\"\"+s:\"null\";if(u==O)return R(\"\"+s);if(\"object\"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),L=[],P=i,i+=o,u==S){for(M=0,k=s.length;k>M;M++)T=F(M,s,n,r,o,i,a),L.push(T===m?\"null\":T);U=L.length?o?\"[\\n\"+i+L.join(\",\\n\"+i)+\"\\n\"+P+\"]\":\"[\"+L.join(\",\")+\"]\":\"[]\"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&L.push(R(e)+\":\"+(o?\" \":\"\")+t)}),U=L.length?o?\"{\\n\"+i+L.join(\",\\n\"+i)+\"\\n\"+P+\"}\":\"{\"+L.join(\",\")+\"}\":\"{}\";return a.pop(),U}};t.stringify=function(e,t,n){var r,o,i,s;if(a[typeof t]&&t)if((s=v.call(t))==b)o=t;else if(s==S){i={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(i[u]=1));}if(n)if((s=v.call(n))==C){if((n-=n%1)>0)for(r=\"\",n>10&&(n=10);r.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=L?i.charAt(U):i[U],U++,e;case 34:for(e=\"@\",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$(\"0x\"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),\"true\"==i.slice(U,U+4))return U+=4,!0;if(\"false\"==i.slice(U,U+5))return U+=5,!1;if(\"null\"==i.slice(U,U+4))return U+=4,null;B()}return\"$\"},q=function(e){var t,n;if(\"$\"==e&&B(),\"string\"==typeof e){if(\"@\"==(L?e.charAt(0):e[0]))return e.slice(1);if(\"[\"==e){for(t=[];e=J(),\"]\"!=e;n||(n=!0))n&&(\",\"==e?(e=J(),\"]\"==e&&B()):B()),\",\"==e&&B(),t.push(q(e));return t}if(\"{\"==e){for(t={};e=J(),\"}\"!=e;n||(n=!0))n&&(\",\"==e?(e=J(),\"}\"==e&&B()):B()),(\",\"==e||\"string\"!=typeof e||\"@\"!=(L?e.charAt(0):e[0])||\":\"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if(\"object\"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,G=\"\"+e,n=q(J()),\"$\"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[\"\"]=n,r),\"\",t):n}}}return t.runInContext=o,t}var i=\"function\"==typeof e&&e.amd,a={\"function\":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&\"object\"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],4:[function(e,t,n){function r(e){if(c===setTimeout)return setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function o(e){if(l===clearTimeout)return clearTimeout(e);try{return l(e)}catch(t){try{return l.call(null,e)}catch(t){return l.call(this,e)}}}function i(){g&&p&&(g=!1,p.length?h=p.concat(h):d=-1,h.length&&a())}function a(){if(!g){var e=r(i);g=!0;for(var t=h.length;t;){for(p=h,h=[];++d1)for(var n=1;no;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('\"'+e+'\" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=e(\"./base64\"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error(\"Invalid base64 digit: \"+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},{}],8:[function(e,t,n){function r(e,t,o,i,a,s){var u=Math.floor((t-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],9:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(a>n){var s=o(n,a),u=n-1;r(e,s,a);for(var c=e[a],l=n;a>l;l++)t(e[l],c)<=0&&(u+=1,r(e,u,l));r(e,u+1,l);var f=u+1;i(e,t,n,f-1),i(e,t,f+1,a)}}n.quickSort=function(e,t){i(e,t,0,e.length-1)}},{}],10:[function(e,t,n){function r(e){var t=e;return\"string\"==typeof e&&(t=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;\"string\"==typeof e&&(t=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var n=s.getArg(t,\"version\"),r=s.getArg(t,\"sources\"),o=s.getArg(t,\"names\",[]),i=s.getArg(t,\"sourceRoot\",null),a=s.getArg(t,\"sourcesContent\",null),u=s.getArg(t,\"mappings\"),l=s.getArg(t,\"file\",null);if(n!=this._version)throw new Error(\"Unsupported version: \"+n);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;\"string\"==typeof e&&(t=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var n=s.getArg(t,\"version\"),o=s.getArg(t,\"sections\");if(n!=this._version)throw new Error(\"Unsupported version: \"+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var t=s.getArg(e,\"offset\"),n=s.getArg(t,\"line\"),o=s.getArg(t,\"column\");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(\";\"===e.charAt(v))c++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),\"number\"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[n]);if(e[r]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,\"name\",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,\"originalLine\",null),column:s.getArg(o,\"originalColumn\",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\\/\\//,\"\");if(\"file\"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||\"/\"==n.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(t)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,\"source\");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,\"line\"),originalColumn:s.getArg(e,\"column\")},o=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",s.compareByOriginalPositions,s.getArg(e,\"bias\",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,\"sources\",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],\".\"===a?u.splice(l,1):\"..\"===a?c++:c>0&&(\"\"===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join(\"/\"),\"\"===t&&(t=s?\"/\":\".\"),r?(r.path=t,i(r)):t}function s(e,t){\"\"===e&&(e=\".\"),\"\"===t&&(t=\".\");var n=o(t),r=o(e);if(r&&(e=r.path||\"/\"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(v))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s=\"/\"===t.charAt(0)?t:a(e.replace(/\\/+$/,\"\")+\"/\"+t);return r?(r.path=s,i(r)):s}function u(e,t){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var n=0;0!==t.indexOf(e+\"/\");){var r=e.lastIndexOf(\"/\");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\\/]+:\\/)?\\/*$/))return t;++n}return Array(n+1).join(\"../\")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?\"$\"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(9>t)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function d(e,t){return e===t?0:e>t?1:-1}function m(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=d(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:d(e.name,t.name)))))}n.getArg=r;var y=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,v=/^data:.+\\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(y)},n.relative=u;var _=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},{}],12:[function(t,n,r){!function(t,o){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stackframe\",[],o):\"object\"==typeof r?n.exports=o():t.StackFrame=o()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||\"{anonymous}\",n=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",r=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return t+n+r+o+i}},t})},{}],13:[function(t,n,r){!function(o,i){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stack-generator\",[\"stackframe\"],i):\"object\"==typeof r?n.exports=i(t(\"stackframe\")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;\"object\"==typeof t&&\"number\"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300?t(r.responseText):n(new Error(\"HTTP status: \"+r.status+\" retrieving \"+e)))},r.send()})}function r(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,t){for(var n,r=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,a=e.split(\"\\n\"),s=\"\",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf(\"//\");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function s(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var t=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error(\"sourceMappingURL not found\")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o=\"data:\"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var l=this.ajax(t,{method:\"get\"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)[\"catch\"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=e.lineNumber,a=e.columnNumber,s=i(r,o,a);n(s?new t(s,e.args,e.fileName,o,a):e)},r)[\"catch\"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l=\"data:\"===s.substr(0,5),f=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===s[0]||l||/^https?:\\/\\/|^\\/\\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;\"string\"==typeof n&&(n=o(n.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)[\"catch\"](n)}.bind(this),n)[\"catch\"](n)}.bind(this))})):new l(e)}})},{\"source-map/lib/source-map-consumer\":10,stackframe:14}],16:[function(e,t,n){Array.isArray||(Array.isArray=function(e){return\"[object Array]\"===Object.prototype.toString.call(e)}),\"undefined\"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if(\"function\"!=typeof this)throw new TypeError(\"Function.prototype.bind - what is trying to be bound is not callable\");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError(\"this is null or not defined\");var n,r=Object(this),o=r.length>>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError(\"this is null or not defined\");var t=Object(this),n=t.length>>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(\" this is null or not defined\");var o=Object(this),i=o.length>>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}})},{}],17:[function(t,n,r){!function(o,i){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stacktrace\",[\"error-stack-parser\",\"stack-generator\",\"stacktrace-gps\"],i):\"object\"==typeof r?n.exports=i(t(\"error-stack-parser\"),t(\"stack-generator\"),t(\"stacktrace-gps\")):o.StackTrace=i(o.ErrorStackParser,o.StackGenerator,o.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e[\"opera#sourceloc\"]}function i(e,t){return\"function\"==typeof t?e.filter(t):e}var a={filter:function(e){return-1===(e.functionName||\"\").indexOf(\"StackTrace$$\")&&-1===(e.functionName||\"\").indexOf(\"ErrorStackParser$$\")&&-1===(e.functionName||\"\").indexOf(\"StackTraceGPS$$\")&&-1===(e.functionName||\"\").indexOf(\"StackGenerator$$\")},sourceCache:{}},s=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var t=s();return o(t)?this.fromError(t,e):this.generateArtificially(e)},getSync:function(n){n=r(a,n);var u=s(),c=o(u)?e.parse(u):t.backtrace(n);return i(c,n.filter)},fromError:function(t,o){o=r(a,o);var s=new n(o);return new Promise(function(n){var r=i(e.parse(t),o.filter);n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}s.pinpoint(e).then(t,n)[\"catch\"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(a,e);var n=t.backtrace(e);return\"function\"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if(\"function\"!=typeof e)throw new Error(\"Cannot instrument non-function object\");if(\"function\"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)[\"catch\"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)[\"catch\"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if(\"function\"!=typeof e)throw new Error(\"Cannot de-instrument non-function object\");return\"function\"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t,n){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error(\"POST to \"+t+\" failed with status: \"+i.status)))},i.open(\"post\",t),i.setRequestHeader(\"Content-Type\",\"application/json\");var a={stack:e};void 0!==n&&(a.message=n),i.send(JSON.stringify(a))})}}})},{\"error-stack-parser\":1,\"stack-generator\":13,\"stacktrace-gps\":15}]},{},[2,3,16,17])(17)});"],"file":"stacktrace-with-promises-and-json-polyfills.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index 441f8f0..c65f3bf 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ -(function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function t(e){return"function"==typeof e}function n(e){B=e}function r(e){z=e}function o(){return function(){process.nextTick(c)}}function i(){return function(){D(c)}}function a(){var e=0,t=new H(c),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function s(){var e=new MessageChannel;return e.port1.onmessage=c,function(){e.port2.postMessage(0)}}function u(){return function(){setTimeout(c,1)}}function c(){for(var e=0;I>e;e+=2){var t=X[e],n=X[e+1];t(n),X[e]=void 0,X[e+1]=void 0}I=0}function l(){try{var e=require,t=e("vertx");return D=t.runOnLoop||t.runOnContext,i()}catch(n){return u()}}function f(e,t){var n=this,r=n._state;if(r===te&&!e||r===ne&&!t)return this;var o=new this.constructor(h),i=n._result;if(r){var a=arguments[r-1];z(function(){j(r,o,a,i)})}else S(n,o,e,t);return o}function p(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(h);return b(n,e),n}function h(){}function g(){return new TypeError("You cannot resolve a promise with itself")}function d(){return new TypeError("A promises callback cannot return that same promise.")}function m(e){try{return e.then}catch(t){return re.error=t,re}}function y(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function v(e,t,n){z(function(e){var r=!1,o=y(n,t,function(n){r||(r=!0,t!==n?b(e,n):C(e,n))},function(t){r||(r=!0,O(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,O(e,o))},e)}function _(e,t){t._state===te?C(e,t._result):t._state===ne?O(e,t._result):S(t,void 0,function(t){b(e,t)},function(t){O(e,t)})}function w(e,n,r){n.constructor===e.constructor&&r===K&&constructor.resolve===Q?_(e,n):r===re?O(e,re.error):void 0===r?C(e,n):t(r)?v(e,n,r):C(e,n)}function b(t,n){t===n?O(t,g()):e(n)?w(t,n,m(n)):C(t,n)}function A(e){e._onerror&&e._onerror(e._result),E(e)}function C(e,t){e._state===ee&&(e._result=t,e._state=te,0!==e._subscribers.length&&z(E,e))}function O(e,t){e._state===ee&&(e._state=ne,e._result=t,z(A,e))}function S(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+te]=n,o[i+ne]=r,0===i&&e._state&&z(E,e)}function E(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)S(r.resolve(e[a]),void 0,t,n);return o}function k(e){var t=this,n=new t(h);return O(n,e),n}function P(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function R(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function F(e){this._id=ue++,this._state=void 0,this._result=void 0,this._subscribers=[],h!==e&&("function"!=typeof e&&P(),this instanceof F?M(this,e):R())}function U(e,t){this._instanceConstructor=e,this.promise=new e(h),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?C(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&C(this.promise,this._result))):O(this.promise,this._validationError())}function G(){var e;if("undefined"!=typeof global)e=global;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ce)}var $;$=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var D,B,J,q=$,I=0,z=function(e,t){X[I]=e,X[I+1]=t,I+=2,2===I&&(B?B(c):J())},Z="undefined"!=typeof window?window:void 0,Y=Z||{},H=Y.MutationObserver||Y.WebKitMutationObserver,W="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),V="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,X=new Array(1e3);J=W?o():H?a():V?s():void 0===Z&&"function"==typeof require?l():u();var K=f,Q=p,ee=void 0,te=1,ne=2,re=new N,oe=new N,ie=x,ae=T,se=k,ue=0,ce=F;F.all=ie,F.race=ae,F.resolve=Q,F.reject=se,F._setScheduler=n,F._setAsap=r,F._asap=z,F.prototype={constructor:F,then:K,"catch":function(e){return this.then(null,e)}};var le=U;U.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},U.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ee&&e>n;n++)this._eachEntry(t[n],n)},U.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===Q){var o=m(e);if(o===K&&e._state!==ee)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ce){var i=new n(h);w(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},U.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ee&&(this._remaining--,e===ne?O(r,n):this._result[t]=n),0===this._remaining&&C(r,this._result)},U.prototype._willSettleAt=function(e,t){var n=this;S(e,void 0,function(e){n._settledAt(te,t,e)},function(e){n._settledAt(ne,t,e)})};var fe=G,pe={Promise:ce,polyfill:fe};"function"==typeof define&&define.amd?define(function(){return pe}):"undefined"!=typeof module&&module.exports?module.exports=pe:"undefined"!=typeof this&&(this.ES6Promise=pe),fe()}).call(this),function(){function e(t,r){function i(e){if(i[e]!==m)return i[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=r.stringify,l="function"==typeof u&&_;if(l){(n=function(){return 1}).toJSON=n;try{l="0"===u(0)&&"0"===u(new a)&&'""'==u(new s)&&u(v)===m&&u(m)===m&&u()===m&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([m])&&"null"==u(null)&&"[null,null,null]"==u([m,v,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}t=l}if("json-parse"==e){var p=r.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(o);var h=5==n.a.length&&1===n.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}t=h}}return i[e]=!!t}t||(t=o.Object()),r||(r=o.Object());var a=t.Number||o.Number,s=t.String||o.String,u=t.Object||o.Object,c=t.Date||o.Date,l=t.SyntaxError||o.SyntaxError,f=t.TypeError||o.TypeError,p=t.Math||o.Math,h=t.JSON||o.JSON;"object"==typeof h&&h&&(r.stringify=h.stringify,r.parse=h.parse);var g,d,m,y=u.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!i("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",N=i("bug-string-char-index");if(!_)var L=p.floor,j=[0,31,59,90,120,151,181,212,243,273,304,334],M=function(e,t){return j[t]+365*(e-1970)+L((e-1969+(t=+(t>1)))/4)-L((e-1901+t)/100)+L((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)g.call(o,i)&&a++;return r=o=null,a?d=2==a?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var r,i,a=v.call(e)==b,s=!a&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(r in e)a&&"prototype"==r||!s.call(e,r)||t(r);for(i=o.length;r=o[--i];s.call(e,r)&&t(r));}),d(e,t)},!i("json-stringify")){var x={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},T="000000",k=function(e,t){return(T+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=x[a];break;default:if(32>a){t+=P+k(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,N,j,x,T,P,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(M){for(p=L(s/864e5),c=L(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=L((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,y=L(h/36e5)%24,_=L(h/6e4)%60,w=L(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+k(6,0>c?-c:c):k(4,c))+"-"+k(2,l+1)+"-"+k(2,p)+"T"+k(2,y)+":"+k(2,_)+":"+k(2,w)+"."+k(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(T=a.length;T--;)if(a[T]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==S){for(x=0,T=s.length;T>x;x++)j=F(x,s,n,r,o,i,a),N.push(j===m?"null":j);U=N.length?o?"[\n"+i+N.join(",\n"+i)+"\n"+P+"]":"["+N.join(",")+"]":"[]"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&N.push(R(e)+":"+(o?" ":"")+t)}),U=N.length?o?"{\n"+i+N.join(",\n"+i)+"\n"+P+"}":"{"+N.join(",")+"}":"{}";return a.pop(),U}};r.stringify=function(e,t,r){var o,i,a,s;if(n[typeof t]&&t)if((s=v.call(t))==b)i=t;else if(s==S){a={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(a[u]=1));}if(r)if((s=v.call(r))==C){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=N?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(N?e.charAt(0):e[0])||":"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};r.parse=function(e,t){var n,r;return U=0,G=""+e,n=q(J()),"$"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return r.runInContext=e,r}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!t)e(o,r);else{var a=o.JSON,s=o.JSON3,u=!1,c=e(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=s,a=s=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}}),!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],t):"object"==typeof exports?module.exports=t():e.StackFrame=t()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t});var SourceMap=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),i?(i.path=n,o(i)):n}function a(e,t){""===e&&(e="."),""===t&&(t=".");var n=r(t),a=r(e);if(a&&(e=a.path||"/"),n&&!n.scheme)return a&&(n.scheme=a.scheme),o(n);if(n||t.match(y))return t;if(a&&!a.host&&!a.path)return a.host=t,o(a);var s="/"===t.charAt(0)?t:i(e.replace(/\/+$/,"")+"/"+t);return a?(a.path=s,o(a)):s}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function u(e){return e}function c(e){return f(e)?"$"+e:e}function l(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var t=e.length;if(9>t)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function p(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function h(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function g(e,t){return e===t?0:e>t?1:-1}function d(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=g(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:g(e.name,t.name)))))}t.getArg=n;var m=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;t.urlParse=r,t.urlGenerate=o,t.normalize=i,t.join=a,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(m)},t.relative=s;var v=function(){var e=Object.create(null);return!("__proto__"in e)}();t.toSetString=v?u:c,t.fromSetString=v?u:l,t.compareByOriginalPositions=p,t.compareByGeneratedPositionsDeflated=h,t.compareByGeneratedPositionsInflated=d},function(e,t){function n(e,r,o,i,a,s){var u=Math.floor((r-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?r-u>1?n(u,r,o,i,a,s):s==t.LEAST_UPPER_BOUND?r1?n(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,r,o,i){if(0===r.length)return-1;var a=n(-1,r.length,e,r,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(r[a],r[a-1],!0);)--a;return a}},function(e,t,n){function r(){ -this._array=[],this._set=Object.create(null)}var o=n(1),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;i>o;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=n(5),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},t.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,t){function n(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function r(e,t){return Math.round(e+Math.random()*(t-e))}function o(e,t,i,a){if(a>i){var s=r(i,a),u=i-1;n(e,s,a);for(var c=e[a],l=i;a>l;l++)t(e[l],c)<=0&&(u+=1,n(e,u,l));n(e,u+1,l);var f=u+1;o(e,t,i,f-1),o(e,t,f+1,a)}}t.quickSort=function(e,t){o(e,t,0,e.length-1)}}]);!function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],t):"object"==typeof exports?module.exports=t(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=t(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=i(r,e.lineNumber,e.columnNumber);n(new t(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],t):"object"==typeof exports?module.exports=t(require("stackframe")):e.StackGenerator=t(e.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}}),function(e,t){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],t):"object"==typeof exports?module.exports=t(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=t(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}function i(e,t){return"function"==typeof t?e.filter(t):e}var a={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}},s=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var t=s();return o(t)?this.fromError(t,e):this.generateArtificially(e)},getSync:function(n){n=r(a,n);var u=s(),c=o(u)?e.parse(u):t.backtrace(n);return i(c,n.filter)},fromError:function(t,o){o=r(a,o);var s=new n(o);return new Promise(function(n){var r=i(e.parse(t),o.filter);n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}s.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(a,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t,n){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+t+" failed with status: "+i.status)))},i.open("post",t),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==n&&(a.message=n),i.send(JSON.stringify(a))})}}}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}})},{stackframe:14}],2:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function a(e){return"function"==typeof e}function s(e){Z=e}function u(e){V=e}function c(){return function(){r.nextTick(g)}}function l(){return function(){z(g)}}function f(){var e=0,t=new Q(g),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=g,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(g,1)}}function g(){for(var e=0;W>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}W=0}function d(){try{var e=t,n=e("vertx");return z=n.runOnLoop||n.runOnContext,l()}catch(r){return h()}}function m(e,t){var n=this,r=n._state;if(r===ae&&!e||r===se&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var a=arguments[r-1];V(function(){P(r,o,a,i)})}else j(n,o,e,t);return o}function y(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(v);return E(n,e),n}function v(){}function _(){return new TypeError("You cannot resolve a promise with itself")}function w(){return new TypeError("A promises callback cannot return that same promise.")}function b(e){try{return e.then}catch(t){return ue.error=t,ue}}function A(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function C(e,t,n){V(function(e){var r=!1,o=A(n,t,function(n){r||(r=!0,t!==n?E(e,n):N(e,n))},function(t){r||(r=!0,T(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,T(e,o))},e)}function O(e,t){t._state===ae?N(e,t._result):t._state===se?T(e,t._result):j(t,void 0,function(t){E(e,t)},function(t){T(e,t)})}function S(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?O(e,t):n===ue?T(e,ue.error):void 0===n?N(e,t):a(n)?C(e,t,n):N(e,t)}function E(e,t){e===t?T(e,_()):i(t)?S(e,t,b(t)):N(e,t)}function L(e){e._onerror&&e._onerror(e._result),M(e)}function N(e,t){e._state===ie&&(e._result=t,e._state=ae,0!==e._subscribers.length&&V(M,e))}function T(e,t){e._state===ie&&(e._state=se,e._result=t,V(L,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+ae]=n,o[i+se]=r,0===i&&e._state&&V(M,e)}function M(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)j(r.resolve(e[a]),void 0,t,n);return o}function G(e){var t=this,n=new t(v);return T(n,e),n}function $(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function D(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function B(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&("function"!=typeof e&&$(),this instanceof B?R(this,e):D())}function J(e,t){this._instanceConstructor=e,this.promise=new e(v),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?N(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&N(this.promise,this._result))):T(this.promise,this._validationError())}function q(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ge)}var I;I=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var z,Z,Y,H=I,W=0,V=function(e,t){ne[W]=e,ne[W+1]=t,W+=2,2===W&&(Z?Z(g):Y())},X="undefined"!=typeof window?window:void 0,K=X||{},Q=K.MutationObserver||K.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);Y=ee?c():Q?f():te?p():void 0===X&&"function"==typeof t?d():h();var re=m,oe=y,ie=void 0,ae=1,se=2,ue=new k,ce=new k,le=F,fe=U,pe=G,he=0,ge=B;B.all=le,B.race=fe,B.resolve=oe,B.reject=pe,B._setScheduler=s,B._setAsap=u,B._asap=V,B.prototype={constructor:B,then:re,"catch":function(e){return this.then(null,e)}};var de=J;J.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},J.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},J.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=b(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ge){var i=new n(v);S(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},J.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===se?T(r,n):this._result[t]=n),0===this._remaining&&N(r,this._result)},J.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(ae,t,e)},function(e){n._settledAt(se,t,e)})};var me=q,ye={Promise:ge,polyfill:me};"function"==typeof e&&e.amd?e(function(){return ye}):"undefined"!=typeof n&&n.exports?n.exports=ye:"undefined"!=typeof this&&(this.ES6Promise=ye),me()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:4}],3:[function(t,n,r){(function(t){(function(){function o(e,t){function n(e){if(n[e]!==m)return n[e];var o;if("bug-string-char-index"==e)o="a"!="a"[0];else if("json"==e)o=n("json-stringify")&&n("json-parse");else{var a,s='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=t.stringify,l="function"==typeof u&&_;if(l){(a=function(){return 1}).toJSON=a;try{l="0"===u(0)&&"0"===u(new r)&&'""'==u(new i)&&u(v)===m&&u(m)===m&&u()===m&&"1"===u(a)&&"[1]"==u([a])&&"[null]"==u([m])&&"null"==u(null)&&"[null,null,null]"==u([m,v,null])&&u({a:[a,!0,!1,null,"\x00\b\n\f\r "]})==s&&"1"===u(null,a)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}o=l}if("json-parse"==e){var p=t.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){a=p(s);var h=5==a.a.length&&1===a.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}o=h}}return n[e]=!!o}e||(e=u.Object()),t||(t=u.Object());var r=e.Number||u.Number,i=e.String||u.String,s=e.Object||u.Object,c=e.Date||u.Date,l=e.SyntaxError||u.SyntaxError,f=e.TypeError||u.TypeError,p=e.Math||u.Math,h=e.JSON||u.JSON;"object"==typeof h&&h&&(t.stringify=h.stringify,t.parse=h.parse);var g,d,m,y=s.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!n("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",L=n("bug-string-char-index");if(!_)var N=p.floor,T=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return T[t]+365*(e-1970)+N((e-1969+(t=+(t>1)))/4)-N((e-1901+t)/100)+N((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?d=2==i?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var n,o,i=v.call(e)==b,s=!i&&"function"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&"prototype"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),d(e,t)},!n("json-stringify")){var M={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},k="000000",x=function(e,t){return(k+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!L||r>10,i=o&&(L?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=M[a];break;default:if(32>a){t+=P+x(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,L,T,M,k,P,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=N(s/864e5),c=N(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=N((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=N(h/36e5)%24,_=N(h/6e4)%60,w=N(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+x(6,0>c?-c:c):x(4,c))+"-"+x(2,l+1)+"-"+x(2,p)+"T"+x(2,y)+":"+x(2,_)+":"+x(2,w)+"."+x(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),L=[],P=i,i+=o,u==S){for(M=0,k=s.length;k>M;M++)T=F(M,s,n,r,o,i,a),L.push(T===m?"null":T);U=L.length?o?"[\n"+i+L.join(",\n"+i)+"\n"+P+"]":"["+L.join(",")+"]":"[]"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&L.push(R(e)+":"+(o?" ":"")+t)}),U=L.length?o?"{\n"+i+L.join(",\n"+i)+"\n"+P+"}":"{"+L.join(",")+"}":"{}";return a.pop(),U}};t.stringify=function(e,t,n){var r,o,i,s;if(a[typeof t]&&t)if((s=v.call(t))==b)o=t;else if(s==S){i={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(i[u]=1));}if(n)if((s=v.call(n))==C){if((n-=n%1)>0)for(r="",n>10&&(n=10);r.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=L?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(L?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(L?e.charAt(0):e[0])||":"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,G=""+e,n=q(J()),"$"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return t.runInContext=o,t}var i="function"==typeof e&&e.amd,a={"function":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&"object"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,t,n){function r(e){if(c===setTimeout)return setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function o(e){if(l===clearTimeout)return clearTimeout(e);try{return l(e)}catch(t){try{return l.call(null,e)}catch(t){return l.call(this,e)}}}function i(){g&&p&&(g=!1,p.length?h=p.concat(h):d=-1,h.length&&a())}function a(){if(!g){var e=r(i);g=!0;for(var t=h.length;t;){for(p=h,h=[];++d1)for(var n=1;no;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},{}],8:[function(e,t,n){function r(e,t,o,i,a,s){var u=Math.floor((t-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],9:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(a>n){var s=o(n,a),u=n-1;r(e,s,a);for(var c=e[a],l=n;a>l;l++)t(e[l],c)<=0&&(u+=1,r(e,u,l));r(e,u+1,l);var f=u+1;i(e,t,n,f-1),i(e,t,f+1,a)}}n.quickSort=function(e,t){i(e,t,0,e.length-1)}},{}],10:[function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=o(t),r=o(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(v))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,i(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(9>t)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function d(e,t){return e===t?0:e>t?1:-1}function m(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=d(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:d(e.name,t.name)))))}n.getArg=r;var y=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,v=/^data:.+\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(y)},n.relative=u;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},{}],12:[function(t,n,r){!function(t,o){"use strict";"function"==typeof e&&e.amd?e("stackframe",[],o):"object"==typeof r?n.exports=o():t.StackFrame=o()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t})},{}],13:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof r?n.exports=i(t("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=e.lineNumber,a=e.columnNumber,s=i(r,o,a);n(s?new t(s,e.args,e.fileName,o,a):e)},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}})},{"source-map/lib/source-map-consumer":10,stackframe:14}],16:[function(e,t,n){Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}})},{}],17:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],i):"object"==typeof r?n.exports=i(t("error-stack-parser"),t("stack-generator"),t("stacktrace-gps")):o.StackTrace=i(o.ErrorStackParser,o.StackGenerator,o.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}function i(e,t){return"function"==typeof t?e.filter(t):e}var a={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}},s=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var t=s();return o(t)?this.fromError(t,e):this.generateArtificially(e)},getSync:function(n){n=r(a,n);var u=s(),c=o(u)?e.parse(u):t.backtrace(n);return i(c,n.filter)},fromError:function(t,o){o=r(a,o);var s=new n(o);return new Promise(function(n){var r=i(e.parse(t),o.filter);n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}s.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(a,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t,n){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+t+" failed with status: "+i.status)))},i.open("post",t),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==n&&(a.message=n),i.send(JSON.stringify(a))})}}})},{"error-stack-parser":1,"stack-generator":13,"stacktrace-gps":15}]},{},[2,3,16,17])(17)}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map index eb6e9c1..e5b286d 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["es6-promise.js","json3.js","polyfills.js","stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$setAsap","asapFn","lib$es6$promise$asap$$asap","lib$es6$promise$asap$$useNextTick","process","nextTick","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","setTimeout","i","lib$es6$promise$asap$$len","callback","lib$es6$promise$asap$$queue","arg","undefined","lib$es6$promise$asap$$attemptVertx","r","require","vertx","runOnLoop","runOnContext","e","lib$es6$promise$then$$then","onFulfillment","onRejection","parent","this","state","_state","lib$es6$promise$$internal$$FULFILLED","lib$es6$promise$$internal$$REJECTED","child","constructor","lib$es6$promise$$internal$$noop","result","_result","arguments","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$subscribe","lib$es6$promise$promise$resolve$$resolve","object","Constructor","promise","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$selfFulfillment","TypeError","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","value","fulfillmentHandler","rejectionHandler","call","lib$es6$promise$$internal$$handleForeignThenable","thenable","sealed","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","lib$es6$promise$then$$default","resolve","lib$es6$promise$promise$resolve$$default","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","length","subscribers","settled","detail","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$enumerator$$Enumerator","input","_instanceConstructor","Array","isArray","_input","_remaining","_enumerate","_validationError","lib$es6$promise$polyfill$$polyfill","local","global","self","Function","Error","P","Promise","Object","prototype","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$browserWindow","window","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$reject$$default","all","race","reject","_setScheduler","_setAsap","_asap","catch","_eachEntry","entry","c","_settledAt","_willSettleAt","enumerator","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","define","module","runInContext","context","exports","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","Number","String","getClass","a","Date","exception","parse","parseSupported","root","SyntaxError","Math","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isFunction","isConstructor","hasProperty","objectTypes","Escapes","92","34","8","12","10","13","9","leadingZeroes","toPaddedString","width","slice","unicodePrefix","quote","index","useCharIndex","symbols","split","charCode","charCodeAt","charAt","serialize","properties","whitespace","indentation","stack","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","push","join","pop","source","filter","Index","Source","fromCharCode","Unescapes","47","98","116","110","102","114","abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","amd","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","ES6Promise","bind","oThis","aArgs","fToBind","NoOp","fBound","apply","concat","map","thisArg","T","O","len","A","k","kValue","mappedValue","t","res","val","n","StackFrame","isNaN","parseFloat","isFinite","o","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","getFunctionName","functionName","getArgs","args","getFileName","fileName","getLineNumber","lineNumber","getColumnNumber","columnNumber","getSource","SourceMap","id","loaded","m","p","replace","sections","s","getArg","u","_version","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","allGeneratedPositionsFor","indexOf","_findMapping","compareByOriginalPositions","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","f","h","d","_","v","y","C","b","decode","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","sources","bias","every","add","IndexedSourceMapConsumer","match","auth","host","port","splice","lastIndexOf","substr","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","_array","_set","getOwnPropertyNames","encode","round","random","StackTraceGPS","sourceMap","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","pinpoint","getMappedLocation","findFunctionName","substring","test","factory","StackGenerator","backtrace","opts","maxStackSize","curr","callee","RegExp","$1","caller","ErrorStackParser","_map","array","fn","output","_filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_filtered","stackframes","_options","stackframe","_generateError","fromError","generateArtificially","getSync","gps","sf","resolveOriginal","stackFrames","instrument","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","errorMsg","req","setRequestHeader","reportPayload"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 3.1.2\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n var lib$es6$promise$asap$$asap = function asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n function lib$es6$promise$asap$$setAsap(asapFn) {\n lib$es6$promise$asap$$asap = asapFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function() {\n process.nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n function lib$es6$promise$then$$then(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$asap(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n }\n var lib$es6$promise$then$$default = lib$es6$promise$then$$then;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$asap(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor &&\n then === lib$es6$promise$then$$default &&\n constructor.resolve === lib$es6$promise$promise$resolve$$default) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n typeof resolver !== 'function' && lib$es6$promise$promise$$needsResolver();\n this instanceof lib$es6$promise$promise$$Promise ? lib$es6$promise$$internal$$initializePromise(this, resolver) : lib$es6$promise$promise$$needsNew();\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: lib$es6$promise$then$$default,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (Array.isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(this.promise, this._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(this.promise, this._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var length = this.length;\n var input = this._input;\n\n for (var i = 0; this._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n if (resolve === lib$es6$promise$promise$resolve$$default) {\n var then = lib$es6$promise$$internal$$getThen(entry);\n\n if (then === lib$es6$promise$then$$default &&\n entry._state !== lib$es6$promise$$internal$$PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === lib$es6$promise$promise$$default) {\n var promise = new c(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$handleMaybeThenable(promise, entry, then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function(resolve) { resolve(entry); }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var promise = this.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n this._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, this._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function () {\n };\n var fBound = function () {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue, mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T, k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n var _generateError = function StackTrace$$GenerateError() {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n return err;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n function _filtered(stackframes, filter) {\n if (typeof filter === 'function') {\n return stackframes.filter(filter);\n }\n return stackframes;\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n var err = _generateError();\n return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts);\n },\n\n /**\n * Get a backtrace from invocation point.\n * IMPORTANT: Does not handle source maps or guess function names!\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n getSync: function StackTrace$$getSync(opts) {\n opts = _merge(_options, opts);\n var err = _generateError();\n var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts);\n return _filtered(stack, opts.filter);\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter);\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n */\n report: function StackTrace$$report(stackframes, url, errorMsg) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n\n var reportPayload = {stack: stackframes};\n if (errorMsg !== undefined) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["stacktrace-with-promises-and-json-polyfills.min.js"],"sourcesContent":["!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var t;t=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u=\"function\"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error(\"Cannot find module '\"+a+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i=\"function\"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,\"eval\").replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g,\"\"));var n=t.replace(/^\\s+/,\"\").replace(/\\(eval code/g,\"(\").split(/\\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(\" \")||void 0,a=r([\"eval\",\"\"],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split(\"\\n\"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(\" > eval\")>-1&&(t=t.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g,\":$1\")),-1===t.indexOf(\"@\")&&-1===t.indexOf(\":\"))return new e(t);var n=t.split(\"@\"),r=this.extractLocation(n.pop()),o=n.join(\"@\")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf(\"\\n\")>-1&&e.message.split(\"\\n\").length>e.stacktrace.split(\"\\n\").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\\d+).*script (?:in )?(\\S+)/i,r=t.message.split(\"\\n\"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i,r=t.stacktrace.split(\"\\n\"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split(\"\\n\"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split(\"@\"),o=this.extractLocation(r.pop()),i=r.shift()||\"\",a=i.replace(//,\"$2\").replace(/\\([^\\)]*\\)/g,\"\")||void 0;i.match(/\\(([^\\)]*)\\)/)&&(n=i.replace(/^[^\\(]+\\(([^\\)]*)\\)$/,\"$1\"));var s=void 0===n||\"[arguments not available]\"===n?void 0:n.split(\",\");return new e(a,s,o[0],o[1],o[2],t)},this)}}})},{stackframe:14}],2:[function(t,n,r){(function(r,o){(function(){\"use strict\";function i(e){return\"function\"==typeof e||\"object\"==typeof e&&null!==e}function a(e){return\"function\"==typeof e}function s(e){Z=e}function u(e){V=e}function c(){return function(){r.nextTick(g)}}function l(){return function(){z(g)}}function f(){var e=0,t=new Q(g),n=document.createTextNode(\"\");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=g,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(g,1)}}function g(){for(var e=0;W>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}W=0}function d(){try{var e=t,n=e(\"vertx\");return z=n.runOnLoop||n.runOnContext,l()}catch(r){return h()}}function m(e,t){var n=this,r=n._state;if(r===ae&&!e||r===se&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var a=arguments[r-1];V(function(){P(r,o,a,i)})}else j(n,o,e,t);return o}function y(e){var t=this;if(e&&\"object\"==typeof e&&e.constructor===t)return e;var n=new t(v);return E(n,e),n}function v(){}function _(){return new TypeError(\"You cannot resolve a promise with itself\")}function w(){return new TypeError(\"A promises callback cannot return that same promise.\")}function b(e){try{return e.then}catch(t){return ue.error=t,ue}}function A(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function C(e,t,n){V(function(e){var r=!1,o=A(n,t,function(n){r||(r=!0,t!==n?E(e,n):N(e,n))},function(t){r||(r=!0,T(e,t))},\"Settle: \"+(e._label||\" unknown promise\"));!r&&o&&(r=!0,T(e,o))},e)}function O(e,t){t._state===ae?N(e,t._result):t._state===se?T(e,t._result):j(t,void 0,function(t){E(e,t)},function(t){T(e,t)})}function S(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?O(e,t):n===ue?T(e,ue.error):void 0===n?N(e,t):a(n)?C(e,t,n):N(e,t)}function E(e,t){e===t?T(e,_()):i(t)?S(e,t,b(t)):N(e,t)}function L(e){e._onerror&&e._onerror(e._result),M(e)}function N(e,t){e._state===ie&&(e._result=t,e._state=ae,0!==e._subscribers.length&&V(M,e))}function T(e,t){e._state===ie&&(e._state=se,e._result=t,V(L,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+ae]=n,o[i+se]=r,0===i&&e._state&&V(M,e)}function M(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)j(r.resolve(e[a]),void 0,t,n);return o}function G(e){var t=this,n=new t(v);return T(n,e),n}function $(){throw new TypeError(\"You must pass a resolver function as the first argument to the promise constructor\")}function D(){throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\")}function B(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&(\"function\"!=typeof e&&$(),this instanceof B?R(this,e):D())}function J(e,t){this._instanceConstructor=e,this.promise=new e(v),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?N(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&N(this.promise,this._result))):T(this.promise,this._validationError())}function q(){var e;if(\"undefined\"!=typeof o)e=o;else if(\"undefined\"!=typeof self)e=self;else try{e=Function(\"return this\")()}catch(t){throw new Error(\"polyfill failed because global object is unavailable in this environment\")}var n=e.Promise;(!n||\"[object Promise]\"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ge)}var I;I=Array.isArray?Array.isArray:function(e){return\"[object Array]\"===Object.prototype.toString.call(e)};var z,Z,Y,H=I,W=0,V=function(e,t){ne[W]=e,ne[W+1]=t,W+=2,2===W&&(Z?Z(g):Y())},X=\"undefined\"!=typeof window?window:void 0,K=X||{},Q=K.MutationObserver||K.WebKitMutationObserver,ee=\"undefined\"!=typeof r&&\"[object process]\"==={}.toString.call(r),te=\"undefined\"!=typeof Uint8ClampedArray&&\"undefined\"!=typeof importScripts&&\"undefined\"!=typeof MessageChannel,ne=new Array(1e3);Y=ee?c():Q?f():te?p():void 0===X&&\"function\"==typeof t?d():h();var re=m,oe=y,ie=void 0,ae=1,se=2,ue=new k,ce=new k,le=F,fe=U,pe=G,he=0,ge=B;B.all=le,B.race=fe,B.resolve=oe,B.reject=pe,B._setScheduler=s,B._setAsap=u,B._asap=V,B.prototype={constructor:B,then:re,\"catch\":function(e){return this.then(null,e)}};var de=J;J.prototype._validationError=function(){return new Error(\"Array Methods must be provided an Array\")},J.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},J.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=b(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if(\"function\"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ge){var i=new n(v);S(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},J.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===se?T(r,n):this._result[t]=n),0===this._remaining&&N(r,this._result)},J.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(ae,t,e)},function(e){n._settledAt(se,t,e)})};var me=q,ye={Promise:ge,polyfill:me};\"function\"==typeof e&&e.amd?e(function(){return ye}):\"undefined\"!=typeof n&&n.exports?n.exports=ye:\"undefined\"!=typeof this&&(this.ES6Promise=ye),me()}).call(this)}).call(this,t(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{_process:4}],3:[function(t,n,r){(function(t){(function(){function o(e,t){function n(e){if(n[e]!==m)return n[e];var o;if(\"bug-string-char-index\"==e)o=\"a\"!=\"a\"[0];else if(\"json\"==e)o=n(\"json-stringify\")&&n(\"json-parse\");else{var a,s='{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';if(\"json-stringify\"==e){var u=t.stringify,l=\"function\"==typeof u&&_;if(l){(a=function(){return 1}).toJSON=a;try{l=\"0\"===u(0)&&\"0\"===u(new r)&&'\"\"'==u(new i)&&u(v)===m&&u(m)===m&&u()===m&&\"1\"===u(a)&&\"[1]\"==u([a])&&\"[null]\"==u([m])&&\"null\"==u(null)&&\"[null,null,null]\"==u([m,v,null])&&u({a:[a,!0,!1,null,\"\\x00\\b\\n\\f\\r\t\"]})==s&&\"1\"===u(null,a)&&\"[\\n 1,\\n 2\\n]\"==u([1,2],null,1)&&'\"-271821-04-20T00:00:00.000Z\"'==u(new c(-864e13))&&'\"+275760-09-13T00:00:00.000Z\"'==u(new c(864e13))&&'\"-000001-01-01T00:00:00.000Z\"'==u(new c(-621987552e5))&&'\"1969-12-31T23:59:59.999Z\"'==u(new c(-1))}catch(f){l=!1}}o=l}if(\"json-parse\"==e){var p=t.parse;if(\"function\"==typeof p)try{if(0===p(\"0\")&&!p(!1)){a=p(s);var h=5==a.a.length&&1===a.a[0];if(h){try{h=!p('\"\t\"')}catch(f){}if(h)try{h=1!==p(\"01\")}catch(f){}if(h)try{h=1!==p(\"1.\")}catch(f){}}}}catch(f){h=!1}o=h}}return n[e]=!!o}e||(e=u.Object()),t||(t=u.Object());var r=e.Number||u.Number,i=e.String||u.String,s=e.Object||u.Object,c=e.Date||u.Date,l=e.SyntaxError||u.SyntaxError,f=e.TypeError||u.TypeError,p=e.Math||u.Math,h=e.JSON||u.JSON;\"object\"==typeof h&&h&&(t.stringify=h.stringify,t.parse=h.parse);var g,d,m,y=s.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!n(\"json\")){var b=\"[object Function]\",A=\"[object Date]\",C=\"[object Number]\",O=\"[object String]\",S=\"[object Array]\",E=\"[object Boolean]\",L=n(\"bug-string-char-index\");if(!_)var N=p.floor,T=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return T[t]+365*(e-1970)+N((e-1969+(t=+(t>1)))/4)-N((e-1901+t)/100)+N((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?d=2==i?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&\"prototype\"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&\"prototype\"==n||!g.call(e,n)||(r=\"constructor\"===n)||t(n);(r||g.call(e,n=\"constructor\"))&&t(n)}:(r=[\"valueOf\",\"toString\",\"toLocaleString\",\"propertyIsEnumerable\",\"isPrototypeOf\",\"hasOwnProperty\",\"constructor\"],d=function(e,t){var n,o,i=v.call(e)==b,s=!i&&\"function\"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&\"prototype\"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),d(e,t)},!n(\"json-stringify\")){var M={92:\"\\\\\\\\\",34:'\\\\\"',8:\"\\\\b\",12:\"\\\\f\",10:\"\\\\n\",13:\"\\\\r\",9:\"\\\\t\"},k=\"000000\",x=function(e,t){return(k+(t||0)).slice(-e)},P=\"\\\\u00\",R=function(e){for(var t='\"',n=0,r=e.length,o=!L||r>10,i=o&&(L?e.split(\"\"):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=M[a];break;default:if(32>a){t+=P+x(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'\"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,L,T,M,k,P,U;try{s=t[e]}catch(G){}if(\"object\"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,\"toJSON\"))\"function\"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,\"toJSON\"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=N(s/864e5),c=N(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=N((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=N(h/36e5)%24,_=N(h/6e4)%60,w=N(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?\"-\":\"+\")+x(6,0>c?-c:c):x(4,c))+\"-\"+x(2,l+1)+\"-\"+x(2,p)+\"T\"+x(2,y)+\":\"+x(2,_)+\":\"+x(2,w)+\".\"+x(3,b)+\"Z\"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return\"null\";if(u=v.call(s),u==E)return\"\"+s;if(u==C)return s>-1/0&&1/0>s?\"\"+s:\"null\";if(u==O)return R(\"\"+s);if(\"object\"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),L=[],P=i,i+=o,u==S){for(M=0,k=s.length;k>M;M++)T=F(M,s,n,r,o,i,a),L.push(T===m?\"null\":T);U=L.length?o?\"[\\n\"+i+L.join(\",\\n\"+i)+\"\\n\"+P+\"]\":\"[\"+L.join(\",\")+\"]\":\"[]\"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&L.push(R(e)+\":\"+(o?\" \":\"\")+t)}),U=L.length?o?\"{\\n\"+i+L.join(\",\\n\"+i)+\"\\n\"+P+\"}\":\"{\"+L.join(\",\")+\"}\":\"{}\";return a.pop(),U}};t.stringify=function(e,t,n){var r,o,i,s;if(a[typeof t]&&t)if((s=v.call(t))==b)o=t;else if(s==S){i={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(i[u]=1));}if(n)if((s=v.call(n))==C){if((n-=n%1)>0)for(r=\"\",n>10&&(n=10);r.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=L?i.charAt(U):i[U],U++,e;case 34:for(e=\"@\",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$(\"0x\"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),\"true\"==i.slice(U,U+4))return U+=4,!0;if(\"false\"==i.slice(U,U+5))return U+=5,!1;if(\"null\"==i.slice(U,U+4))return U+=4,null;B()}return\"$\"},q=function(e){var t,n;if(\"$\"==e&&B(),\"string\"==typeof e){if(\"@\"==(L?e.charAt(0):e[0]))return e.slice(1);if(\"[\"==e){for(t=[];e=J(),\"]\"!=e;n||(n=!0))n&&(\",\"==e?(e=J(),\"]\"==e&&B()):B()),\",\"==e&&B(),t.push(q(e));return t}if(\"{\"==e){for(t={};e=J(),\"}\"!=e;n||(n=!0))n&&(\",\"==e?(e=J(),\"}\"==e&&B()):B()),(\",\"==e||\"string\"!=typeof e||\"@\"!=(L?e.charAt(0):e[0])||\":\"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if(\"object\"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,G=\"\"+e,n=q(J()),\"$\"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[\"\"]=n,r),\"\",t):n}}}return t.runInContext=o,t}var i=\"function\"==typeof e&&e.amd,a={\"function\":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&\"object\"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],4:[function(e,t,n){function r(e){if(c===setTimeout)return setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function o(e){if(l===clearTimeout)return clearTimeout(e);try{return l(e)}catch(t){try{return l.call(null,e)}catch(t){return l.call(this,e)}}}function i(){g&&p&&(g=!1,p.length?h=p.concat(h):d=-1,h.length&&a())}function a(){if(!g){var e=r(i);g=!0;for(var t=h.length;t;){for(p=h,h=[];++d1)for(var n=1;no;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('\"'+e+'\" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=e(\"./base64\"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error(\"Invalid base64 digit: \"+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},{}],8:[function(e,t,n){function r(e,t,o,i,a,s){var u=Math.floor((t-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],9:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(a>n){var s=o(n,a),u=n-1;r(e,s,a);for(var c=e[a],l=n;a>l;l++)t(e[l],c)<=0&&(u+=1,r(e,u,l));r(e,u+1,l);var f=u+1;i(e,t,n,f-1),i(e,t,f+1,a)}}n.quickSort=function(e,t){i(e,t,0,e.length-1)}},{}],10:[function(e,t,n){function r(e){var t=e;return\"string\"==typeof e&&(t=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;\"string\"==typeof e&&(t=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var n=s.getArg(t,\"version\"),r=s.getArg(t,\"sources\"),o=s.getArg(t,\"names\",[]),i=s.getArg(t,\"sourceRoot\",null),a=s.getArg(t,\"sourcesContent\",null),u=s.getArg(t,\"mappings\"),l=s.getArg(t,\"file\",null);if(n!=this._version)throw new Error(\"Unsupported version: \"+n);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;\"string\"==typeof e&&(t=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var n=s.getArg(t,\"version\"),o=s.getArg(t,\"sections\");if(n!=this._version)throw new Error(\"Unsupported version: \"+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var t=s.getArg(e,\"offset\"),n=s.getArg(t,\"line\"),o=s.getArg(t,\"column\");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(\";\"===e.charAt(v))c++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),\"number\"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[n]);if(e[r]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,\"name\",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,\"originalLine\",null),column:s.getArg(o,\"originalColumn\",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\\/\\//,\"\");if(\"file\"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||\"/\"==n.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(t)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,\"source\");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,\"line\"),originalColumn:s.getArg(e,\"column\")},o=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",s.compareByOriginalPositions,s.getArg(e,\"bias\",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,\"sources\",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],\".\"===a?u.splice(l,1):\"..\"===a?c++:c>0&&(\"\"===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join(\"/\"),\"\"===t&&(t=s?\"/\":\".\"),r?(r.path=t,i(r)):t}function s(e,t){\"\"===e&&(e=\".\"),\"\"===t&&(t=\".\");var n=o(t),r=o(e);if(r&&(e=r.path||\"/\"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(v))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s=\"/\"===t.charAt(0)?t:a(e.replace(/\\/+$/,\"\")+\"/\"+t);return r?(r.path=s,i(r)):s}function u(e,t){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var n=0;0!==t.indexOf(e+\"/\");){var r=e.lastIndexOf(\"/\");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\\/]+:\\/)?\\/*$/))return t;++n}return Array(n+1).join(\"../\")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?\"$\"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(9>t)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function d(e,t){return e===t?0:e>t?1:-1}function m(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=d(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:d(e.name,t.name)))))}n.getArg=r;var y=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,v=/^data:.+\\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(y)},n.relative=u;var _=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},{}],12:[function(t,n,r){!function(t,o){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stackframe\",[],o):\"object\"==typeof r?n.exports=o():t.StackFrame=o()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||\"{anonymous}\",n=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",r=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return t+n+r+o+i}},t})},{}],13:[function(t,n,r){!function(o,i){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stack-generator\",[\"stackframe\"],i):\"object\"==typeof r?n.exports=i(t(\"stackframe\")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;\"object\"==typeof t&&\"number\"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300?t(r.responseText):n(new Error(\"HTTP status: \"+r.status+\" retrieving \"+e)))},r.send()})}function r(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,t){for(var n,r=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,a=e.split(\"\\n\"),s=\"\",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf(\"//\");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function s(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var t=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error(\"sourceMappingURL not found\")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o=\"data:\"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var l=this.ajax(t,{method:\"get\"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)[\"catch\"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=e.lineNumber,a=e.columnNumber,s=i(r,o,a);n(s?new t(s,e.args,e.fileName,o,a):e)},r)[\"catch\"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l=\"data:\"===s.substr(0,5),f=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===s[0]||l||/^https?:\\/\\/|^\\/\\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;\"string\"==typeof n&&(n=o(n.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)[\"catch\"](n)}.bind(this),n)[\"catch\"](n)}.bind(this))})):new l(e)}})},{\"source-map/lib/source-map-consumer\":10,stackframe:14}],16:[function(e,t,n){Array.isArray||(Array.isArray=function(e){return\"[object Array]\"===Object.prototype.toString.call(e)}),\"undefined\"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if(\"function\"!=typeof this)throw new TypeError(\"Function.prototype.bind - what is trying to be bound is not callable\");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError(\"this is null or not defined\");var n,r=Object(this),o=r.length>>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError(\"this is null or not defined\");var t=Object(this),n=t.length>>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(\" this is null or not defined\");var o=Object(this),i=o.length>>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}})},{}],17:[function(t,n,r){!function(o,i){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stacktrace\",[\"error-stack-parser\",\"stack-generator\",\"stacktrace-gps\"],i):\"object\"==typeof r?n.exports=i(t(\"error-stack-parser\"),t(\"stack-generator\"),t(\"stacktrace-gps\")):o.StackTrace=i(o.ErrorStackParser,o.StackGenerator,o.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e[\"opera#sourceloc\"]}function i(e,t){return\"function\"==typeof t?e.filter(t):e}var a={filter:function(e){return-1===(e.functionName||\"\").indexOf(\"StackTrace$$\")&&-1===(e.functionName||\"\").indexOf(\"ErrorStackParser$$\")&&-1===(e.functionName||\"\").indexOf(\"StackTraceGPS$$\")&&-1===(e.functionName||\"\").indexOf(\"StackGenerator$$\")},sourceCache:{}},s=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var t=s();return o(t)?this.fromError(t,e):this.generateArtificially(e)},getSync:function(n){n=r(a,n);var u=s(),c=o(u)?e.parse(u):t.backtrace(n);return i(c,n.filter)},fromError:function(t,o){o=r(a,o);var s=new n(o);return new Promise(function(n){var r=i(e.parse(t),o.filter);n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}s.pinpoint(e).then(t,n)[\"catch\"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(a,e);var n=t.backtrace(e);return\"function\"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if(\"function\"!=typeof e)throw new Error(\"Cannot instrument non-function object\");if(\"function\"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)[\"catch\"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)[\"catch\"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if(\"function\"!=typeof e)throw new Error(\"Cannot de-instrument non-function object\");return\"function\"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t,n){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error(\"POST to \"+t+\" failed with status: \"+i.status)))},i.open(\"post\",t),i.setRequestHeader(\"Content-Type\",\"application/json\");var a={stack:e};void 0!==n&&(a.message=n),i.send(JSON.stringify(a))})}}})},{\"error-stack-parser\":1,\"stack-generator\":13,\"stacktrace-gps\":15}]},{},[2,3,16,17])(17)});"],"file":"stacktrace-with-promises-and-json-polyfills.min.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace.concat.js b/dist/stacktrace.concat.js deleted file mode 100644 index ff87eba..0000000 --- a/dist/stacktrace.concat.js +++ /dev/null @@ -1,483 +0,0 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",t=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(";"===e.charAt(v))l++,v++,p=0;else if(","===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),"number"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?"$"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open("get",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r,t=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,s=e.split("\n"),a="",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf("//");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function a(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o="data:"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error("The encoding of the inline sourcemap is not supported"))}else{var c=this.ajax(n,{method:"get"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)["catch"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c="data:"===a.substr(0,5),g=i.substring(0,i.lastIndexOf("/")+1);"/"===a[0]||c||/^https?:\/\/|^\/\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;"string"==typeof r&&(r=o(r.replace(/^\)\]\}'/,""))),"undefined"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new c(e)}}); -//# sourceMappingURL=stacktrace-gps.min.js.map - -(function (root, factory) { - 'use strict'; - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. - - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define('stack-generator', ['stackframe'], factory); - } else if (typeof exports === 'object') { - module.exports = factory(require('stackframe')); - } else { - root.StackGenerator = factory(root.StackFrame); - } -}(this, function (StackFrame) { - return { - backtrace: function StackGenerator$$backtrace(opts) { - var stack = []; - var maxStackSize = 10; - - if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') { - maxStackSize = opts.maxStackSize; - } - - var curr = arguments.callee; - while (curr && stack.length < maxStackSize) { - // Allow V8 optimizations - var args = new Array(curr['arguments'].length); - for(var i = 0; i < args.length; ++i) { - args[i] = curr['arguments'][i]; - } - if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { - stack.push(new StackFrame(RegExp.$1 || undefined, args)); - } else { - stack.push(new StackFrame(undefined, args)); - } - - try { - curr = curr.caller; - } catch (e) { - break; - } - } - return stack; - } - }; -})); - -(function(root, factory) { - 'use strict'; - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. - - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define('error-stack-parser', ['stackframe'], factory); - } else if (typeof exports === 'object') { - module.exports = factory(require('stackframe')); - } else { - root.ErrorStackParser = factory(root.StackFrame); - } -}(this, function ErrorStackParser(StackFrame) { - 'use strict'; - - var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\S+\:\d+/; - var CHROME_IE_STACK_REGEXP = /^\s*at .*(\S+\:\d+|\(native\))/m; - var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\[native code\])?$/; - - function _map(array, fn, thisArg) { - if (typeof Array.prototype.map === 'function') { - return array.map(fn, thisArg); - } else { - var output = new Array(array.length); - for (var i = 0; i < array.length; i++) { - output[i] = fn.call(thisArg, array[i]); - } - return output; - } - } - - function _filter(array, fn, thisArg) { - if (typeof Array.prototype.filter === 'function') { - return array.filter(fn, thisArg); - } else { - var output = []; - for (var i = 0; i < array.length; i++) { - if (fn.call(thisArg, array[i])) { - output.push(array[i]); - } - } - return output; - } - } - - function _indexOf(array, target) { - if (typeof Array.prototype.indexOf === 'function') { - return array.indexOf(target); - } else { - for (var i = 0; i < array.length; i++) { - if (array[i] === target) { - return i; - } - } - return -1; - } - } - - return { - /** - * Given an Error object, extract the most information from it. - * - * @param {Error} error object - * @return {Array} of StackFrames - */ - parse: function ErrorStackParser$$parse(error) { - if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') { - return this.parseOpera(error); - } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) { - return this.parseV8OrIE(error); - } else if (error.stack) { - return this.parseFFOrSafari(error); - } else { - throw new Error('Cannot parse given Error object'); - } - }, - - // Separate line and column numbers from a string of the form: (URI:Line:Column) - extractLocation: function ErrorStackParser$$extractLocation(urlLike) { - // Fail-fast but return locations like "(native)" - if (urlLike.indexOf(':') === -1) { - return [urlLike]; - } - - var regExp = /(.+?)(?:\:(\d+))?(?:\:(\d+))?$/; - var parts = regExp.exec(urlLike.replace(/[\(\)]/g, '')); - return [parts[1], parts[2] || undefined, parts[3] || undefined]; - }, - - parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) { - var filtered = _filter(error.stack.split('\n'), function(line) { - return !!line.match(CHROME_IE_STACK_REGEXP); - }, this); - - return _map(filtered, function(line) { - if (line.indexOf('(eval ') > -1) { - // Throw away eval information until we implement stacktrace.js/stackframe#8 - line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^\()]*)|(\)\,.*$)/g, ''); - } - var tokens = line.replace(/^\s+/, '').replace(/\(eval code/g, '(').split(/\s+/).slice(1); - var locationParts = this.extractLocation(tokens.pop()); - var functionName = tokens.join(' ') || undefined; - var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0]; - - return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line); - }, this); - }, - - parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) { - var filtered = _filter(error.stack.split('\n'), function(line) { - return !line.match(SAFARI_NATIVE_CODE_REGEXP); - }, this); - - return _map(filtered, function(line) { - // Throw away eval information until we implement stacktrace.js/stackframe#8 - if (line.indexOf(' > eval') > -1) { - line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g, ':$1'); - } - - if (line.indexOf('@') === -1 && line.indexOf(':') === -1) { - // Safari eval frames only have function names and nothing else - return new StackFrame(line); - } else { - var tokens = line.split('@'); - var locationParts = this.extractLocation(tokens.pop()); - var functionName = tokens.join('@') || undefined; - return new StackFrame(functionName, - undefined, - locationParts[0], - locationParts[1], - locationParts[2], - line); - } - }, this); - }, - - parseOpera: function ErrorStackParser$$parseOpera(e) { - if (!e.stacktrace || (e.message.indexOf('\n') > -1 && - e.message.split('\n').length > e.stacktrace.split('\n').length)) { - return this.parseOpera9(e); - } else if (!e.stack) { - return this.parseOpera10(e); - } else { - return this.parseOpera11(e); - } - }, - - parseOpera9: function ErrorStackParser$$parseOpera9(e) { - var lineRE = /Line (\d+).*script (?:in )?(\S+)/i; - var lines = e.message.split('\n'); - var result = []; - - for (var i = 2, len = lines.length; i < len; i += 2) { - var match = lineRE.exec(lines[i]); - if (match) { - result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i])); - } - } - - return result; - }, - - parseOpera10: function ErrorStackParser$$parseOpera10(e) { - var lineRE = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i; - var lines = e.stacktrace.split('\n'); - var result = []; - - for (var i = 0, len = lines.length; i < len; i += 2) { - var match = lineRE.exec(lines[i]); - if (match) { - result.push( - new StackFrame( - match[3] || undefined, - undefined, - match[2], - match[1], - undefined, - lines[i] - ) - ); - } - } - - return result; - }, - - // Opera 10.65+ Error.stack very similar to FF/Safari - parseOpera11: function ErrorStackParser$$parseOpera11(error) { - var filtered = _filter(error.stack.split('\n'), function(line) { - return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/); - }, this); - - return _map(filtered, function(line) { - var tokens = line.split('@'); - var locationParts = this.extractLocation(tokens.pop()); - var functionCall = (tokens.shift() || ''); - var functionName = functionCall - .replace(//, '$2') - .replace(/\([^\)]*\)/g, '') || undefined; - var argsRaw; - if (functionCall.match(/\(([^\)]*)\)/)) { - argsRaw = functionCall.replace(/^[^\(]+\(([^\)]*)\)$/, '$1'); - } - var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? - undefined : argsRaw.split(','); - return new StackFrame( - functionName, - args, - locationParts[0], - locationParts[1], - locationParts[2], - line); - }, this); - } - }; -})); - - -(function(root, factory) { - 'use strict'; - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. - - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory); - } else if (typeof exports === 'object') { - module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps')); - } else { - root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS); - } -}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) { - var _options = { - filter: function(stackframe) { - // Filter out stackframes for this library by default - return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 && - (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 && - (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 && - (stackframe.functionName || '').indexOf('StackGenerator$$') === -1; - }, - sourceCache: {} - }; - - var _generateError = function StackTrace$$GenerateError() { - try { - // Error must be thrown to get stack in IE - throw new Error(); - } catch (err) { - return err; - } - }; - - /** - * Merge 2 given Objects. If a conflict occurs the second object wins. - * Does not do deep merges. - * - * @param {Object} first base object - * @param {Object} second overrides - * @returns {Object} merged first and second - * @private - */ - function _merge(first, second) { - var target = {}; - - [first, second].forEach(function(obj) { - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - target[prop] = obj[prop]; - } - } - return target; - }); - - return target; - } - - function _isShapedLikeParsableError(err) { - return err.stack || err['opera#sourceloc']; - } - - function _filtered(stackframes, filter) { - if (typeof filter === 'function') { - return stackframes.filter(filter); - } - return stackframes; - } - - return { - /** - * Get a backtrace from invocation point. - * - * @param {Object} opts - * @returns {Array} of StackFrame - */ - get: function StackTrace$$get(opts) { - var err = _generateError(); - return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts); - }, - - /** - * Get a backtrace from invocation point. - * IMPORTANT: Does not handle source maps or guess function names! - * - * @param {Object} opts - * @returns {Array} of StackFrame - */ - getSync: function StackTrace$$getSync(opts) { - opts = _merge(_options, opts); - var err = _generateError(); - var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts); - return _filtered(stack, opts.filter); - }, - - /** - * Given an error object, parse it. - * - * @param {Error} error object - * @param {Object} opts - * @returns {Promise} for Array[StackFrame} - */ - fromError: function StackTrace$$fromError(error, opts) { - opts = _merge(_options, opts); - var gps = new StackTraceGPS(opts); - return new Promise(function(resolve) { - var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter); - resolve(Promise.all(stackframes.map(function(sf) { - return new Promise(function(resolve) { - function resolveOriginal() { - resolve(sf); - } - - gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal); - }); - }))); - }.bind(this)); - }, - - /** - * Use StackGenerator to generate a backtrace. - * - * @param {Object} opts - * @returns {Promise} of Array[StackFrame] - */ - generateArtificially: function StackTrace$$generateArtificially(opts) { - opts = _merge(_options, opts); - var stackFrames = StackGenerator.backtrace(opts); - if (typeof opts.filter === 'function') { - stackFrames = stackFrames.filter(opts.filter); - } - return Promise.resolve(stackFrames); - }, - - /** - * Given a function, wrap it such that invocations trigger a callback that - * is called with a stack trace. - * - * @param {Function} fn to be instrumented - * @param {Function} callback function to call with a stack trace on invocation - * @param {Function} errback optional function to call with error if unable to get stack trace. - * @param {Object} thisArg optional context object (e.g. window) - */ - instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) { - if (typeof fn !== 'function') { - throw new Error('Cannot instrument non-function object'); - } else if (typeof fn.__stacktraceOriginalFn === 'function') { - // Already instrumented, return given Function - return fn; - } - - var instrumented = function StackTrace$$instrumented() { - try { - this.get().then(callback, errback)['catch'](errback); - return fn.apply(thisArg || this, arguments); - } catch (e) { - if (_isShapedLikeParsableError(e)) { - this.fromError(e).then(callback, errback)['catch'](errback); - } - throw e; - } - }.bind(this); - instrumented.__stacktraceOriginalFn = fn; - - return instrumented; - }, - - /** - * Given a function that has been instrumented, - * revert the function to it's original (non-instrumented) state. - * - * @param {Function} fn to de-instrument - */ - deinstrument: function StackTrace$$deinstrument(fn) { - if (typeof fn !== 'function') { - throw new Error('Cannot de-instrument non-function object'); - } else if (typeof fn.__stacktraceOriginalFn === 'function') { - return fn.__stacktraceOriginalFn; - } else { - // Function not instrumented, return original - return fn; - } - }, - - /** - * Given an error message and Array of StackFrames, serialize and POST to given URL. - * - * @param {Array} stackframes - * @param {String} url - * @param {String} errorMsg - */ - report: function StackTrace$$report(stackframes, url, errorMsg) { - return new Promise(function(resolve, reject) { - var req = new XMLHttpRequest(); - req.onerror = reject; - req.onreadystatechange = function onreadystatechange() { - if (req.readyState === 4) { - if (req.status >= 200 && req.status < 400) { - resolve(req.responseText); - } else { - reject(new Error('POST to ' + url + ' failed with status: ' + req.status)); - } - } - }; - req.open('post', url); - req.setRequestHeader('Content-Type', 'application/json'); - - var reportPayload = {stack: stackframes}; - if (errorMsg !== undefined) { - reportPayload.message = errorMsg; - } - - req.send(JSON.stringify(reportPayload)); - }); - } - }; -})); diff --git a/dist/stacktrace.js b/dist/stacktrace.js new file mode 100644 index 0000000..f88b6ed --- /dev/null +++ b/dist/stacktrace.js @@ -0,0 +1,2942 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.StackTrace = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o -1) { + // Throw away eval information until we implement stacktrace.js/stackframe#8 + line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^\()]*)|(\)\,.*$)/g, ''); + } + var tokens = line.replace(/^\s+/, '').replace(/\(eval code/g, '(').split(/\s+/).slice(1); + var locationParts = this.extractLocation(tokens.pop()); + var functionName = tokens.join(' ') || undefined; + var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0]; + + return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line); + }, this); + }, + + parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) { + var filtered = _filter(error.stack.split('\n'), function(line) { + return !line.match(SAFARI_NATIVE_CODE_REGEXP); + }, this); + + return _map(filtered, function(line) { + // Throw away eval information until we implement stacktrace.js/stackframe#8 + if (line.indexOf(' > eval') > -1) { + line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g, ':$1'); + } + + if (line.indexOf('@') === -1 && line.indexOf(':') === -1) { + // Safari eval frames only have function names and nothing else + return new StackFrame(line); + } else { + var tokens = line.split('@'); + var locationParts = this.extractLocation(tokens.pop()); + var functionName = tokens.join('@') || undefined; + return new StackFrame(functionName, + undefined, + locationParts[0], + locationParts[1], + locationParts[2], + line); + } + }, this); + }, + + parseOpera: function ErrorStackParser$$parseOpera(e) { + if (!e.stacktrace || (e.message.indexOf('\n') > -1 && + e.message.split('\n').length > e.stacktrace.split('\n').length)) { + return this.parseOpera9(e); + } else if (!e.stack) { + return this.parseOpera10(e); + } else { + return this.parseOpera11(e); + } + }, + + parseOpera9: function ErrorStackParser$$parseOpera9(e) { + var lineRE = /Line (\d+).*script (?:in )?(\S+)/i; + var lines = e.message.split('\n'); + var result = []; + + for (var i = 2, len = lines.length; i < len; i += 2) { + var match = lineRE.exec(lines[i]); + if (match) { + result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i])); + } + } + + return result; + }, + + parseOpera10: function ErrorStackParser$$parseOpera10(e) { + var lineRE = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i; + var lines = e.stacktrace.split('\n'); + var result = []; + + for (var i = 0, len = lines.length; i < len; i += 2) { + var match = lineRE.exec(lines[i]); + if (match) { + result.push( + new StackFrame( + match[3] || undefined, + undefined, + match[2], + match[1], + undefined, + lines[i] + ) + ); + } + } + + return result; + }, + + // Opera 10.65+ Error.stack very similar to FF/Safari + parseOpera11: function ErrorStackParser$$parseOpera11(error) { + var filtered = _filter(error.stack.split('\n'), function(line) { + return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/); + }, this); + + return _map(filtered, function(line) { + var tokens = line.split('@'); + var locationParts = this.extractLocation(tokens.pop()); + var functionCall = (tokens.shift() || ''); + var functionName = functionCall + .replace(//, '$2') + .replace(/\([^\)]*\)/g, '') || undefined; + var argsRaw; + if (functionCall.match(/\(([^\)]*)\)/)) { + argsRaw = functionCall.replace(/^[^\(]+\(([^\)]*)\)$/, '$1'); + } + var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? + undefined : argsRaw.split(','); + return new StackFrame( + functionName, + args, + locationParts[0], + locationParts[1], + locationParts[2], + line); + }, this); + } + }; +})); + + +},{"stackframe":11}],2:[function(require,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var util = require('./util'); +var has = Object.prototype.hasOwnProperty; + +/** + * A data structure which is a combination of an array and a set. Adding a new + * member is O(1), testing for membership is O(1), and finding the index of an + * element is O(1). Removing elements from the set is not supported. Only + * strings are supported for membership. + */ +function ArraySet() { + this._array = []; + this._set = Object.create(null); +} + +/** + * Static method for creating ArraySet instances from an existing array. + */ +ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; +}; + +/** + * Return how many unique items are in this ArraySet. If duplicates have been + * added, than those do not count towards the size. + * + * @returns Number + */ +ArraySet.prototype.size = function ArraySet_size() { + return Object.getOwnPropertyNames(this._set).length; +}; + +/** + * Add the given string to this set. + * + * @param String aStr + */ +ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = util.toSetString(aStr); + var isDuplicate = has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + this._set[sStr] = idx; + } +}; + +/** + * Is the given string a member of this set? + * + * @param String aStr + */ +ArraySet.prototype.has = function ArraySet_has(aStr) { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); +}; + +/** + * What is the index of the given string in the array? + * + * @param String aStr + */ +ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + throw new Error('"' + aStr + '" is not in the set.'); +}; + +/** + * What is the element at the given index? + * + * @param Number aIdx + */ +ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error('No element indexed by ' + aIdx); +}; + +/** + * Returns the array representation of this set (which has the proper indices + * indicated by indexOf). Note that this is a copy of the internal array used + * for storing the members so that no one can mess with internal state. + */ +ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); +}; + +exports.ArraySet = ArraySet; + +},{"./util":8}],3:[function(require,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + * + * Based on the Base 64 VLQ implementation in Closure Compiler: + * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java + * + * Copyright 2011 The Closure Compiler Authors. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +var base64 = require('./base64'); + +// A single base 64 digit can contain 6 bits of data. For the base 64 variable +// length quantities we use in the source map spec, the first bit is the sign, +// the next four bits are the actual value, and the 6th bit is the +// continuation bit. The continuation bit tells us whether there are more +// digits in this value following this digit. +// +// Continuation +// | Sign +// | | +// V V +// 101011 + +var VLQ_BASE_SHIFT = 5; + +// binary: 100000 +var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + +// binary: 011111 +var VLQ_BASE_MASK = VLQ_BASE - 1; + +// binary: 100000 +var VLQ_CONTINUATION_BIT = VLQ_BASE; + +/** + * Converts from a two-complement value to a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + */ +function toVLQSigned(aValue) { + return aValue < 0 + ? ((-aValue) << 1) + 1 + : (aValue << 1) + 0; +} + +/** + * Converts to a two-complement value from a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + */ +function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative + ? -shifted + : shifted; +} + +/** + * Returns the base 64 VLQ encoded value. + */ +exports.encode = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + + var vlq = toVLQSigned(aValue); + + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + // There are still more digits in this value, so we must make sure the + // continuation bit is marked. + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + + return encoded; +}; + +/** + * Decodes the next base 64 VLQ value from the given string and returns the + * value and the rest of the string via the out parameter. + */ +exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + + do { + if (aIndex >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + + digit = base64.decode(aStr.charCodeAt(aIndex++)); + if (digit === -1) { + throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); + } + + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + + aOutParam.value = fromVLQSigned(result); + aOutParam.rest = aIndex; +}; + +},{"./base64":4}],4:[function(require,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); + +/** + * Encode an integer in the range of 0 to 63 to a single base 64 digit. + */ +exports.encode = function (number) { + if (0 <= number && number < intToCharMap.length) { + return intToCharMap[number]; + } + throw new TypeError("Must be between 0 and 63: " + number); +}; + +/** + * Decode a single base 64 character code digit to an integer. Returns -1 on + * failure. + */ +exports.decode = function (charCode) { + var bigA = 65; // 'A' + var bigZ = 90; // 'Z' + + var littleA = 97; // 'a' + var littleZ = 122; // 'z' + + var zero = 48; // '0' + var nine = 57; // '9' + + var plus = 43; // '+' + var slash = 47; // '/' + + var littleOffset = 26; + var numberOffset = 52; + + // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ + if (bigA <= charCode && charCode <= bigZ) { + return (charCode - bigA); + } + + // 26 - 51: abcdefghijklmnopqrstuvwxyz + if (littleA <= charCode && charCode <= littleZ) { + return (charCode - littleA + littleOffset); + } + + // 52 - 61: 0123456789 + if (zero <= charCode && charCode <= nine) { + return (charCode - zero + numberOffset); + } + + // 62: + + if (charCode == plus) { + return 62; + } + + // 63: / + if (charCode == slash) { + return 63; + } + + // Invalid base64 digit. + return -1; +}; + +},{}],5:[function(require,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +exports.GREATEST_LOWER_BOUND = 1; +exports.LEAST_UPPER_BOUND = 2; + +/** + * Recursive implementation of binary search. + * + * @param aLow Indices here and lower do not contain the needle. + * @param aHigh Indices here and higher do not contain the needle. + * @param aNeedle The element being searched for. + * @param aHaystack The non-empty array being searched. + * @param aCompare Function which takes two elements and returns -1, 0, or 1. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + */ +function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { + // This function terminates when one of the following is true: + // + // 1. We find the exact element we are looking for. + // + // 2. We did not find the exact element, but we can return the index of + // the next-closest element. + // + // 3. We did not find the exact element, and there is no next-closest + // element than the one we are searching for, so we return -1. + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + // Found the element we are looking for. + return mid; + } + else if (cmp > 0) { + // Our needle is greater than aHaystack[mid]. + if (aHigh - mid > 1) { + // The element is in the upper half. + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); + } + + // The exact needle element was not found in this haystack. Determine if + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return aHigh < aHaystack.length ? aHigh : -1; + } else { + return mid; + } + } + else { + // Our needle is less than aHaystack[mid]. + if (mid - aLow > 1) { + // The element is in the lower half. + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); + } + + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return mid; + } else { + return aLow < 0 ? -1 : aLow; + } + } +} + +/** + * This is an implementation of binary search which will always try and return + * the index of the closest element if there is no exact hit. This is because + * mappings between original and generated line/col pairs are single points, + * and there is an implicit region between each of them, so a miss just means + * that you aren't on the very start of a region. + * + * @param aNeedle The element you are looking for. + * @param aHaystack The array that is being searched. + * @param aCompare A function which takes the needle and an element in the + * array and returns -1, 0, or 1 depending on whether the needle is less + * than, equal to, or greater than the element, respectively. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. + */ +exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { + if (aHaystack.length === 0) { + return -1; + } + + var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, + aCompare, aBias || exports.GREATEST_LOWER_BOUND); + if (index < 0) { + return -1; + } + + // We have found either the exact element, or the next-closest element than + // the one we are searching for. However, there may be more than one such + // element. Make sure we always return the smallest of these. + while (index - 1 >= 0) { + if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { + break; + } + --index; + } + + return index; +}; + +},{}],6:[function(require,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +// It turns out that some (most?) JavaScript engines don't self-host +// `Array.prototype.sort`. This makes sense because C++ will likely remain +// faster than JS when doing raw CPU-intensive sorting. However, when using a +// custom comparator function, calling back and forth between the VM's C++ and +// JIT'd JS is rather slow *and* loses JIT type information, resulting in +// worse generated code for the comparator function than would be optimal. In +// fact, when sorting with a comparator, these costs outweigh the benefits of +// sorting in C++. By using our own JS-implemented Quick Sort (below), we get +// a ~3500ms mean speed-up in `bench/bench.html`. + +/** + * Swap the elements indexed by `x` and `y` in the array `ary`. + * + * @param {Array} ary + * The array. + * @param {Number} x + * The index of the first item. + * @param {Number} y + * The index of the second item. + */ +function swap(ary, x, y) { + var temp = ary[x]; + ary[x] = ary[y]; + ary[y] = temp; +} + +/** + * Returns a random integer within the range `low .. high` inclusive. + * + * @param {Number} low + * The lower bound on the range. + * @param {Number} high + * The upper bound on the range. + */ +function randomIntInRange(low, high) { + return Math.round(low + (Math.random() * (high - low))); +} + +/** + * The Quick Sort algorithm. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + * @param {Number} p + * Start index of the array + * @param {Number} r + * End index of the array + */ +function doQuickSort(ary, comparator, p, r) { + // If our lower bound is less than our upper bound, we (1) partition the + // array into two pieces and (2) recurse on each half. If it is not, this is + // the empty array and our base case. + + if (p < r) { + // (1) Partitioning. + // + // The partitioning chooses a pivot between `p` and `r` and moves all + // elements that are less than or equal to the pivot to the before it, and + // all the elements that are greater than it after it. The effect is that + // once partition is done, the pivot is in the exact place it will be when + // the array is put in sorted order, and it will not need to be moved + // again. This runs in O(n) time. + + // Always choose a random pivot so that an input array which is reverse + // sorted does not cause O(n^2) running time. + var pivotIndex = randomIntInRange(p, r); + var i = p - 1; + + swap(ary, pivotIndex, r); + var pivot = ary[r]; + + // Immediately after `j` is incremented in this loop, the following hold + // true: + // + // * Every element in `ary[p .. i]` is less than or equal to the pivot. + // + // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. + for (var j = p; j < r; j++) { + if (comparator(ary[j], pivot) <= 0) { + i += 1; + swap(ary, i, j); + } + } + + swap(ary, i + 1, j); + var q = i + 1; + + // (2) Recurse on each half. + + doQuickSort(ary, comparator, p, q - 1); + doQuickSort(ary, comparator, q + 1, r); + } +} + +/** + * Sort the given array in-place with the given comparator function. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + */ +exports.quickSort = function (ary, comparator) { + doQuickSort(ary, comparator, 0, ary.length - 1); +}; + +},{}],7:[function(require,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var util = require('./util'); +var binarySearch = require('./binary-search'); +var ArraySet = require('./array-set').ArraySet; +var base64VLQ = require('./base64-vlq'); +var quickSort = require('./quick-sort').quickSort; + +function SourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + return sourceMap.sections != null + ? new IndexedSourceMapConsumer(sourceMap) + : new BasicSourceMapConsumer(sourceMap); +} + +SourceMapConsumer.fromSourceMap = function(aSourceMap) { + return BasicSourceMapConsumer.fromSourceMap(aSourceMap); +} + +/** + * The version of the source mapping spec that we are consuming. + */ +SourceMapConsumer.prototype._version = 3; + +// `__generatedMappings` and `__originalMappings` are arrays that hold the +// parsed mapping coordinates from the source map's "mappings" attribute. They +// are lazily instantiated, accessed via the `_generatedMappings` and +// `_originalMappings` getters respectively, and we only parse the mappings +// and create these arrays once queried for a source location. We jump through +// these hoops because there can be many thousands of mappings, and parsing +// them is expensive, so we only want to do it if we must. +// +// Each object in the arrays is of the form: +// +// { +// generatedLine: The line number in the generated code, +// generatedColumn: The column number in the generated code, +// source: The path to the original source file that generated this +// chunk of code, +// originalLine: The line number in the original source that +// corresponds to this chunk of generated code, +// originalColumn: The column number in the original source that +// corresponds to this chunk of generated code, +// name: The name of the original symbol which generated this chunk of +// code. +// } +// +// All properties except for `generatedLine` and `generatedColumn` can be +// `null`. +// +// `_generatedMappings` is ordered by the generated positions. +// +// `_originalMappings` is ordered by the original positions. + +SourceMapConsumer.prototype.__generatedMappings = null; +Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + get: function () { + if (!this.__generatedMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } +}); + +SourceMapConsumer.prototype.__originalMappings = null; +Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + get: function () { + if (!this.__originalMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } +}); + +SourceMapConsumer.prototype._charIsMappingSeparator = + function SourceMapConsumer_charIsMappingSeparator(aStr, index) { + var c = aStr.charAt(index); + return c === ";" || c === ","; + }; + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + throw new Error("Subclasses must implement _parseMappings"); + }; + +SourceMapConsumer.GENERATED_ORDER = 1; +SourceMapConsumer.ORIGINAL_ORDER = 2; + +SourceMapConsumer.GREATEST_LOWER_BOUND = 1; +SourceMapConsumer.LEAST_UPPER_BOUND = 2; + +/** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ +SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source === null ? null : this._sources.at(mapping.source); + if (source != null && sourceRoot != null) { + source = util.join(sourceRoot, source); + } + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name === null ? null : this._names.at(mapping.name) + }; + }, this).forEach(aCallback, context); + }; + +/** + * Returns all generated line and column information for the original source, + * line, and column provided. If no column is provided, returns all mappings + * corresponding to a either the line we are searching for or the next + * closest line that has any mappings. Otherwise, returns all mappings + * corresponding to the given line and either the column we are searching for + * or the next closest column that has any offsets. + * + * The only argument is an object with the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: Optional. the column number in the original source. + * + * and an array of objects is returned, each with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ +SourceMapConsumer.prototype.allGeneratedPositionsFor = + function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { + var line = util.getArg(aArgs, 'line'); + + // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping + // returns the index of the closest mapping less than the needle. By + // setting needle.originalColumn to 0, we thus find the last mapping for + // the given line, provided such a mapping exists. + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: line, + originalColumn: util.getArg(aArgs, 'column', 0) + }; + + if (this.sourceRoot != null) { + needle.source = util.relative(this.sourceRoot, needle.source); + } + if (!this._sources.has(needle.source)) { + return []; + } + needle.source = this._sources.indexOf(needle.source); + + var mappings = []; + + var index = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + binarySearch.LEAST_UPPER_BOUND); + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (aArgs.column === undefined) { + var originalLine = mapping.originalLine; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we found. Since + // mappings are sorted, this is guaranteed to find all mappings for + // the line we found. + while (mapping && mapping.originalLine === originalLine) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } else { + var originalColumn = mapping.originalColumn; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we were searching for. + // Since mappings are sorted, this is guaranteed to find all mappings for + // the line we are searching for. + while (mapping && + mapping.originalLine === line && + mapping.originalColumn == originalColumn) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } + } + + return mappings; + }; + +exports.SourceMapConsumer = SourceMapConsumer; + +/** + * A BasicSourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The only parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: Optional. The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ +function BasicSourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + sources = sources + .map(String) + // Some source maps produce relative source paths like "./foo.js" instead of + // "foo.js". Normalize these first so that future comparisons will succeed. + // See bugzil.la/1090768. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet.fromArray(names.map(String), true); + this._sources = ArraySet.fromArray(sources, true); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this.file = file; +} + +BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); +BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; + +/** + * Create a BasicSourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @returns BasicSourceMapConsumer + */ +BasicSourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap) { + var smc = Object.create(BasicSourceMapConsumer.prototype); + + var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + + // Because we are modifying the entries (by converting string sources and + // names to indices into the sources and names ArraySets), we have to make + // a copy of the entry or else bad things happen. Shared mutable state + // strikes again! See github issue #191. + + var generatedMappings = aSourceMap._mappings.toArray().slice(); + var destGeneratedMappings = smc.__generatedMappings = []; + var destOriginalMappings = smc.__originalMappings = []; + + for (var i = 0, length = generatedMappings.length; i < length; i++) { + var srcMapping = generatedMappings[i]; + var destMapping = new Mapping; + destMapping.generatedLine = srcMapping.generatedLine; + destMapping.generatedColumn = srcMapping.generatedColumn; + + if (srcMapping.source) { + destMapping.source = sources.indexOf(srcMapping.source); + destMapping.originalLine = srcMapping.originalLine; + destMapping.originalColumn = srcMapping.originalColumn; + + if (srcMapping.name) { + destMapping.name = names.indexOf(srcMapping.name); + } + + destOriginalMappings.push(destMapping); + } + + destGeneratedMappings.push(destMapping); + } + + quickSort(smc.__originalMappings, util.compareByOriginalPositions); + + return smc; + }; + +/** + * The version of the source mapping spec that we are consuming. + */ +BasicSourceMapConsumer.prototype._version = 3; + +/** + * The list of original sources. + */ +Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { + get: function () { + return this._sources.toArray().map(function (s) { + return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; + }, this); + } +}); + +/** + * Provide the JIT with a nice shape / hidden class. + */ +function Mapping() { + this.generatedLine = 0; + this.generatedColumn = 0; + this.source = null; + this.originalLine = null; + this.originalColumn = null; + this.name = null; +} + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +BasicSourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var length = aStr.length; + var index = 0; + var cachedSegments = {}; + var temp = {}; + var originalMappings = []; + var generatedMappings = []; + var mapping, str, segment, end, value; + + while (index < length) { + if (aStr.charAt(index) === ';') { + generatedLine++; + index++; + previousGeneratedColumn = 0; + } + else if (aStr.charAt(index) === ',') { + index++; + } + else { + mapping = new Mapping(); + mapping.generatedLine = generatedLine; + + // Because each offset is encoded relative to the previous one, + // many segments often have the same encoding. We can exploit this + // fact by caching the parsed variable length fields of each segment, + // allowing us to avoid a second parse if we encounter the same + // segment again. + for (end = index; end < length; end++) { + if (this._charIsMappingSeparator(aStr, end)) { + break; + } + } + str = aStr.slice(index, end); + + segment = cachedSegments[str]; + if (segment) { + index += str.length; + } else { + segment = []; + while (index < end) { + base64VLQ.decode(aStr, index, temp); + value = temp.value; + index = temp.rest; + segment.push(value); + } + + if (segment.length === 2) { + throw new Error('Found a source, but no line and column'); + } + + if (segment.length === 3) { + throw new Error('Found a source and line, but no column'); + } + + cachedSegments[str] = segment; + } + + // Generated column. + mapping.generatedColumn = previousGeneratedColumn + segment[0]; + previousGeneratedColumn = mapping.generatedColumn; + + if (segment.length > 1) { + // Original source. + mapping.source = previousSource + segment[1]; + previousSource += segment[1]; + + // Original line. + mapping.originalLine = previousOriginalLine + segment[2]; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + + // Original column. + mapping.originalColumn = previousOriginalColumn + segment[3]; + previousOriginalColumn = mapping.originalColumn; + + if (segment.length > 4) { + // Original name. + mapping.name = previousName + segment[4]; + previousName += segment[4]; + } + } + + generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + originalMappings.push(mapping); + } + } + } + + quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); + this.__generatedMappings = generatedMappings; + + quickSort(originalMappings, util.compareByOriginalPositions); + this.__originalMappings = originalMappings; + }; + +/** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ +BasicSourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator, aBias) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator, aBias); + }; + +/** + * Compute the last column for each generated mapping. The last column is + * inclusive. + */ +BasicSourceMapConsumer.prototype.computeColumnSpans = + function SourceMapConsumer_computeColumnSpans() { + for (var index = 0; index < this._generatedMappings.length; ++index) { + var mapping = this._generatedMappings[index]; + + // Mappings do not contain a field for the last generated columnt. We + // can come up with an optimistic estimate, however, by assuming that + // mappings are contiguous (i.e. given two consecutive mappings, the + // first mapping ends where the second one starts). + if (index + 1 < this._generatedMappings.length) { + var nextMapping = this._generatedMappings[index + 1]; + + if (mapping.generatedLine === nextMapping.generatedLine) { + mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; + continue; + } + } + + // The last mapping for each line spans the entire line. + mapping.lastGeneratedColumn = Infinity; + } + }; + +/** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ +BasicSourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositionsDeflated, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._generatedMappings[index]; + + if (mapping.generatedLine === needle.generatedLine) { + var source = util.getArg(mapping, 'source', null); + if (source !== null) { + source = this._sources.at(source); + if (this.sourceRoot != null) { + source = util.join(this.sourceRoot, source); + } + } + var name = util.getArg(mapping, 'name', null); + if (name !== null) { + name = this._names.at(name); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: name + }; + } + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + +/** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ +BasicSourceMapConsumer.prototype.hasContentsOfAllSources = + function BasicSourceMapConsumer_hasContentsOfAllSources() { + if (!this.sourcesContent) { + return false; + } + return this.sourcesContent.length >= this._sources.size() && + !this.sourcesContent.some(function (sc) { return sc == null; }); + }; + +/** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ +BasicSourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + if (!this.sourcesContent) { + return null; + } + + if (this.sourceRoot != null) { + aSource = util.relative(this.sourceRoot, aSource); + } + + if (this._sources.has(aSource)) { + return this.sourcesContent[this._sources.indexOf(aSource)]; + } + + var url; + if (this.sourceRoot != null + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + aSource)) { + return this.sourcesContent[this._sources.indexOf("/" + aSource)]; + } + } + + // This function is used recursively from + // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we + // don't want to throw if we can't find the source - we just want to + // return null, so we provide a flag to exit gracefully. + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + +/** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ +BasicSourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var source = util.getArg(aArgs, 'source'); + if (this.sourceRoot != null) { + source = util.relative(this.sourceRoot, source); + } + if (!this._sources.has(source)) { + return { + line: null, + column: null, + lastColumn: null + }; + } + source = this._sources.indexOf(source); + + var needle = { + source: source, + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (mapping.source === needle.source) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }; + } + } + + return { + line: null, + column: null, + lastColumn: null + }; + }; + +exports.BasicSourceMapConsumer = BasicSourceMapConsumer; + +/** + * An IndexedSourceMapConsumer instance represents a parsed source map which + * we can query for information. It differs from BasicSourceMapConsumer in + * that it takes "indexed" source maps (i.e. ones with a "sections" field) as + * input. + * + * The only parameter is a raw source map (either as a JSON string, or already + * parsed to an object). According to the spec for indexed source maps, they + * have the following attributes: + * + * - version: Which version of the source map spec this map is following. + * - file: Optional. The generated file this source map is associated with. + * - sections: A list of section definitions. + * + * Each value under the "sections" field has two fields: + * - offset: The offset into the original specified at which this section + * begins to apply, defined as an object with a "line" and "column" + * field. + * - map: A source map definition. This source map could also be indexed, + * but doesn't have to be. + * + * Instead of the "map" field, it's also possible to have a "url" field + * specifying a URL to retrieve a source map from, but that's currently + * unsupported. + * + * Here's an example source map, taken from the source map spec[0], but + * modified to omit a section which uses the "url" field. + * + * { + * version : 3, + * file: "app.js", + * sections: [{ + * offset: {line:100, column:10}, + * map: { + * version : 3, + * file: "section.js", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AAAA,E;;ABCDE;" + * } + * }], + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt + */ +function IndexedSourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sections = util.getArg(sourceMap, 'sections'); + + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + this._sources = new ArraySet(); + this._names = new ArraySet(); + + var lastOffset = { + line: -1, + column: 0 + }; + this._sections = sections.map(function (s) { + if (s.url) { + // The url field will require support for asynchronicity. + // See https://github.com/mozilla/source-map/issues/16 + throw new Error('Support for url field in sections not implemented.'); + } + var offset = util.getArg(s, 'offset'); + var offsetLine = util.getArg(offset, 'line'); + var offsetColumn = util.getArg(offset, 'column'); + + if (offsetLine < lastOffset.line || + (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { + throw new Error('Section offsets must be ordered and non-overlapping.'); + } + lastOffset = offset; + + return { + generatedOffset: { + // The offset fields are 0-based, but we use 1-based indices when + // encoding/decoding from VLQ. + generatedLine: offsetLine + 1, + generatedColumn: offsetColumn + 1 + }, + consumer: new SourceMapConsumer(util.getArg(s, 'map')) + } + }); +} + +IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); +IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; + +/** + * The version of the source mapping spec that we are consuming. + */ +IndexedSourceMapConsumer.prototype._version = 3; + +/** + * The list of original sources. + */ +Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { + get: function () { + var sources = []; + for (var i = 0; i < this._sections.length; i++) { + for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { + sources.push(this._sections[i].consumer.sources[j]); + } + } + return sources; + } +}); + +/** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ +IndexedSourceMapConsumer.prototype.originalPositionFor = + function IndexedSourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + // Find the section containing the generated position we're trying to map + // to an original position. + var sectionIndex = binarySearch.search(needle, this._sections, + function(needle, section) { + var cmp = needle.generatedLine - section.generatedOffset.generatedLine; + if (cmp) { + return cmp; + } + + return (needle.generatedColumn - + section.generatedOffset.generatedColumn); + }); + var section = this._sections[sectionIndex]; + + if (!section) { + return { + source: null, + line: null, + column: null, + name: null + }; + } + + return section.consumer.originalPositionFor({ + line: needle.generatedLine - + (section.generatedOffset.generatedLine - 1), + column: needle.generatedColumn - + (section.generatedOffset.generatedLine === needle.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + bias: aArgs.bias + }); + }; + +/** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ +IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = + function IndexedSourceMapConsumer_hasContentsOfAllSources() { + return this._sections.every(function (s) { + return s.consumer.hasContentsOfAllSources(); + }); + }; + +/** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ +IndexedSourceMapConsumer.prototype.sourceContentFor = + function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + var content = section.consumer.sourceContentFor(aSource, true); + if (content) { + return content; + } + } + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + +/** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ +IndexedSourceMapConsumer.prototype.generatedPositionFor = + function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + // Only consider this section if the requested source is in the list of + // sources of the consumer. + if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { + continue; + } + var generatedPosition = section.consumer.generatedPositionFor(aArgs); + if (generatedPosition) { + var ret = { + line: generatedPosition.line + + (section.generatedOffset.generatedLine - 1), + column: generatedPosition.column + + (section.generatedOffset.generatedLine === generatedPosition.line + ? section.generatedOffset.generatedColumn - 1 + : 0) + }; + return ret; + } + } + + return { + line: null, + column: null + }; + }; + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +IndexedSourceMapConsumer.prototype._parseMappings = + function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { + this.__generatedMappings = []; + this.__originalMappings = []; + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + var sectionMappings = section.consumer._generatedMappings; + for (var j = 0; j < sectionMappings.length; j++) { + var mapping = sectionMappings[j]; + + var source = section.consumer._sources.at(mapping.source); + if (section.consumer.sourceRoot !== null) { + source = util.join(section.consumer.sourceRoot, source); + } + this._sources.add(source); + source = this._sources.indexOf(source); + + var name = section.consumer._names.at(mapping.name); + this._names.add(name); + name = this._names.indexOf(name); + + // The mappings coming from the consumer for the section have + // generated positions relative to the start of the section, so we + // need to offset them to be relative to the start of the concatenated + // generated file. + var adjustedMapping = { + source: source, + generatedLine: mapping.generatedLine + + (section.generatedOffset.generatedLine - 1), + generatedColumn: mapping.generatedColumn + + (section.generatedOffset.generatedLine === mapping.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: name + }; + + this.__generatedMappings.push(adjustedMapping); + if (typeof adjustedMapping.originalLine === 'number') { + this.__originalMappings.push(adjustedMapping); + } + } + } + + quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); + quickSort(this.__originalMappings, util.compareByOriginalPositions); + }; + +exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; + +},{"./array-set":2,"./base64-vlq":3,"./binary-search":5,"./quick-sort":6,"./util":8}],8:[function(require,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +/** + * This is a helper function for getting values from parameter/options + * objects. + * + * @param args The object we are extracting values from + * @param name The name of the property we are getting. + * @param defaultValue An optional value to return if the property is missing + * from the object. If this is not specified and the property is missing, an + * error will be thrown. + */ +function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } +} +exports.getArg = getArg; + +var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; +var dataUrlRegexp = /^data:.+\,.+$/; + +function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[2], + host: match[3], + port: match[4], + path: match[5] + }; +} +exports.urlParse = urlParse; + +function urlGenerate(aParsedUrl) { + var url = ''; + if (aParsedUrl.scheme) { + url += aParsedUrl.scheme + ':'; + } + url += '//'; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + '@'; + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; +} +exports.urlGenerate = urlGenerate; + +/** + * Normalizes a path, or the path portion of a URL: + * + * - Replaces consecutive slashes with one slash. + * - Removes unnecessary '.' parts. + * - Removes unnecessary '/..' parts. + * + * Based on code in the Node.js 'path' core module. + * + * @param aPath The path or url to normalize. + */ +function normalize(aPath) { + var path = aPath; + var url = urlParse(aPath); + if (url) { + if (!url.path) { + return aPath; + } + path = url.path; + } + var isAbsolute = exports.isAbsolute(path); + + var parts = path.split(/\/+/); + for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { + part = parts[i]; + if (part === '.') { + parts.splice(i, 1); + } else if (part === '..') { + up++; + } else if (up > 0) { + if (part === '') { + // The first part is blank if the path is absolute. Trying to go + // above the root is a no-op. Therefore we can remove all '..' parts + // directly after the root. + parts.splice(i + 1, up); + up = 0; + } else { + parts.splice(i, 2); + up--; + } + } + } + path = parts.join('/'); + + if (path === '') { + path = isAbsolute ? '/' : '.'; + } + + if (url) { + url.path = path; + return urlGenerate(url); + } + return path; +} +exports.normalize = normalize; + +/** + * Joins two paths/URLs. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be joined with the root. + * + * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a + * scheme-relative URL: Then the scheme of aRoot, if any, is prepended + * first. + * - Otherwise aPath is a path. If aRoot is a URL, then its path portion + * is updated with the result and aRoot is returned. Otherwise the result + * is returned. + * - If aPath is absolute, the result is aPath. + * - Otherwise the two paths are joined with a slash. + * - Joining for example 'http://' and 'www.example.com' is also supported. + */ +function join(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + if (aPath === "") { + aPath = "."; + } + var aPathUrl = urlParse(aPath); + var aRootUrl = urlParse(aRoot); + if (aRootUrl) { + aRoot = aRootUrl.path || '/'; + } + + // `join(foo, '//www.example.org')` + if (aPathUrl && !aPathUrl.scheme) { + if (aRootUrl) { + aPathUrl.scheme = aRootUrl.scheme; + } + return urlGenerate(aPathUrl); + } + + if (aPathUrl || aPath.match(dataUrlRegexp)) { + return aPath; + } + + // `join('http://', 'www.example.com')` + if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { + aRootUrl.host = aPath; + return urlGenerate(aRootUrl); + } + + var joined = aPath.charAt(0) === '/' + ? aPath + : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); + + if (aRootUrl) { + aRootUrl.path = joined; + return urlGenerate(aRootUrl); + } + return joined; +} +exports.join = join; + +exports.isAbsolute = function (aPath) { + return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); +}; + +/** + * Make a path relative to a URL or another path. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be made relative to aRoot. + */ +function relative(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + + aRoot = aRoot.replace(/\/$/, ''); + + // It is possible for the path to be above the root. In this case, simply + // checking whether the root is a prefix of the path won't work. Instead, we + // need to remove components from the root one by one, until either we find + // a prefix that fits, or we run out of components to remove. + var level = 0; + while (aPath.indexOf(aRoot + '/') !== 0) { + var index = aRoot.lastIndexOf("/"); + if (index < 0) { + return aPath; + } + + // If the only part of the root that is left is the scheme (i.e. http://, + // file:///, etc.), one or more slashes (/), or simply nothing at all, we + // have exhausted all components, so the path is not relative to the root. + aRoot = aRoot.slice(0, index); + if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { + return aPath; + } + + ++level; + } + + // Make sure we add a "../" for each component we removed from the root. + return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); +} +exports.relative = relative; + +var supportsNullProto = (function () { + var obj = Object.create(null); + return !('__proto__' in obj); +}()); + +function identity (s) { + return s; +} + +/** + * Because behavior goes wacky when you set `__proto__` on objects, we + * have to prefix all the strings in our set with an arbitrary character. + * + * See https://github.com/mozilla/source-map/pull/31 and + * https://github.com/mozilla/source-map/issues/30 + * + * @param String aStr + */ +function toSetString(aStr) { + if (isProtoString(aStr)) { + return '$' + aStr; + } + + return aStr; +} +exports.toSetString = supportsNullProto ? identity : toSetString; + +function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + + return aStr; +} +exports.fromSetString = supportsNullProto ? identity : fromSetString; + +function isProtoString(s) { + if (!s) { + return false; + } + + var length = s.length; + + if (length < 9 /* "__proto__".length */) { + return false; + } + + if (s.charCodeAt(length - 1) !== 95 /* '_' */ || + s.charCodeAt(length - 2) !== 95 /* '_' */ || + s.charCodeAt(length - 3) !== 111 /* 'o' */ || + s.charCodeAt(length - 4) !== 116 /* 't' */ || + s.charCodeAt(length - 5) !== 111 /* 'o' */ || + s.charCodeAt(length - 6) !== 114 /* 'r' */ || + s.charCodeAt(length - 7) !== 112 /* 'p' */ || + s.charCodeAt(length - 8) !== 95 /* '_' */ || + s.charCodeAt(length - 9) !== 95 /* '_' */) { + return false; + } + + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36 /* '$' */) { + return false; + } + } + + return true; +} + +/** + * Comparator between two mappings where the original positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same original source/line/column, but different generated + * line and column the same. Useful when searching for a mapping with a + * stubbed out mapping. + */ +function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp = mappingA.source - mappingB.source; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0 || onlyCompareOriginal) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + return mappingA.name - mappingB.name; +} +exports.compareByOriginalPositions = compareByOriginalPositions; + +/** + * Comparator between two mappings with deflated source and name indices where + * the generated positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same generated line and column, but different + * source/name/original line and column the same. Useful when searching for a + * mapping with a stubbed out mapping. + */ +function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0 || onlyCompareGenerated) { + return cmp; + } + + cmp = mappingA.source - mappingB.source; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return mappingA.name - mappingB.name; +} +exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; + +function strcmp(aStr1, aStr2) { + if (aStr1 === aStr2) { + return 0; + } + + if (aStr1 > aStr2) { + return 1; + } + + return -1; +} + +/** + * Comparator between two mappings with inflated source and name strings where + * the generated positions are compared. + */ +function compareByGeneratedPositionsInflated(mappingA, mappingB) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); +} +exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; + +},{}],9:[function(require,module,exports){ +(function (root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stackframe', [], factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + root.StackFrame = factory(); + } +}(this, function () { + 'use strict'; + function _isNumber(n) { + return !isNaN(parseFloat(n)) && isFinite(n); + } + + function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) { + if (functionName !== undefined) { + this.setFunctionName(functionName); + } + if (args !== undefined) { + this.setArgs(args); + } + if (fileName !== undefined) { + this.setFileName(fileName); + } + if (lineNumber !== undefined) { + this.setLineNumber(lineNumber); + } + if (columnNumber !== undefined) { + this.setColumnNumber(columnNumber); + } + if (source !== undefined) { + this.setSource(source); + } + } + + StackFrame.prototype = { + getFunctionName: function () { + return this.functionName; + }, + setFunctionName: function (v) { + this.functionName = String(v); + }, + + getArgs: function () { + return this.args; + }, + setArgs: function (v) { + if (Object.prototype.toString.call(v) !== '[object Array]') { + throw new TypeError('Args must be an Array'); + } + this.args = v; + }, + + // NOTE: Property name may be misleading as it includes the path, + // but it somewhat mirrors V8's JavaScriptStackTraceApi + // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's + // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14 + getFileName: function () { + return this.fileName; + }, + setFileName: function (v) { + this.fileName = String(v); + }, + + getLineNumber: function () { + return this.lineNumber; + }, + setLineNumber: function (v) { + if (!_isNumber(v)) { + throw new TypeError('Line Number must be a Number'); + } + this.lineNumber = Number(v); + }, + + getColumnNumber: function () { + return this.columnNumber; + }, + setColumnNumber: function (v) { + if (!_isNumber(v)) { + throw new TypeError('Column Number must be a Number'); + } + this.columnNumber = Number(v); + }, + + getSource: function () { + return this.source; + }, + setSource: function (v) { + this.source = String(v); + }, + + toString: function() { + var functionName = this.getFunctionName() || '{anonymous}'; + var args = '(' + (this.getArgs() || []).join(',') + ')'; + var fileName = this.getFileName() ? ('@' + this.getFileName()) : ''; + var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : ''; + var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : ''; + return functionName + args + fileName + lineNumber + columnNumber; + } + }; + + return StackFrame; +})); + +},{}],10:[function(require,module,exports){ +(function (root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stack-generator', ['stackframe'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('stackframe')); + } else { + root.StackGenerator = factory(root.StackFrame); + } +}(this, function (StackFrame) { + return { + backtrace: function StackGenerator$$backtrace(opts) { + var stack = []; + var maxStackSize = 10; + + if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') { + maxStackSize = opts.maxStackSize; + } + + var curr = arguments.callee; + while (curr && stack.length < maxStackSize) { + // Allow V8 optimizations + var args = new Array(curr['arguments'].length); + for(var i = 0; i < args.length; ++i) { + args[i] = curr['arguments'][i]; + } + if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { + stack.push(new StackFrame(RegExp.$1 || undefined, args)); + } else { + stack.push(new StackFrame(undefined, args)); + } + + try { + curr = curr.caller; + } catch (e) { + break; + } + } + return stack; + } + }; +})); + +},{"stackframe":9}],11:[function(require,module,exports){ +arguments[4][9][0].apply(exports,arguments) +},{"dup":9}],12:[function(require,module,exports){ +(function(root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stacktrace-gps', ['source-map', 'stackframe'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('source-map/lib/source-map-consumer'), require('stackframe')); + } else { + root.StackTraceGPS = factory(root.SourceMap || root.sourceMap, root.StackFrame); + } +}(this, function(SourceMap, StackFrame) { + 'use strict'; + + /** + * Make a X-Domain request to url and callback. + * + * @param {String} url + * @returns {Promise} with response text if fulfilled + */ + function _xdr(url) { + return new Promise(function(resolve, reject) { + var req = new XMLHttpRequest(); + req.open('get', url); + req.onerror = reject; + req.onreadystatechange = function onreadystatechange() { + if (req.readyState === 4) { + if (req.status >= 200 && req.status < 300) { + resolve(req.responseText); + } else { + reject(new Error('HTTP status: ' + req.status + ' retrieving ' + url)); + } + } + }; + req.send(); + }); + + } + + /** + * Convert a Base64-encoded string into its original representation. + * Used for inline sourcemaps. + * + * @param {String} b64str Base-64 encoded string + * @returns {String} original representation of the base64-encoded string. + */ + function _atob(b64str) { + if (typeof window !== 'undefined' && window.atob) { + return window.atob(b64str); + } else { + throw new Error('You must supply a polyfill for window.atob in this environment'); + } + } + + function _parseJson(string) { + if (typeof JSON !== 'undefined' && JSON.parse) { + return JSON.parse(string); + } else { + throw new Error('You must supply a polyfill for JSON.parse in this environment'); + } + } + + function _findFunctionName(source, lineNumber/*, columnNumber*/) { + // function {name}({args}) m[1]=name m[2]=args + var reFunctionDeclaration = /function\s+([^(]*?)\s*\(([^)]*)\)/; + // {name} = function ({args}) TODO args capture + var reFunctionExpression = /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/; + // {name} = eval() + var reFunctionEvaluation = /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/; + var lines = source.split('\n'); + + // Walk backwards in the source lines until we find the line which matches one of the patterns above + var code = ''; + var maxLines = Math.min(lineNumber, 20); + var m; + for (var i = 0; i < maxLines; ++i) { + // lineNo is 1-based, source[] is 0-based + var line = lines[lineNumber - i - 1]; + var commentPos = line.indexOf('//'); + if (commentPos >= 0) { + line = line.substr(0, commentPos); + } + + if (line) { + code = line + code; + m = reFunctionExpression.exec(code); + if (m && m[1]) { + return m[1]; + } + m = reFunctionDeclaration.exec(code); + if (m && m[1]) { + return m[1]; + } + m = reFunctionEvaluation.exec(code); + if (m && m[1]) { + return m[1]; + } + } + } + return undefined; + } + + function _ensureSupportedEnvironment() { + if (typeof Object.defineProperty !== 'function' || typeof Object.create !== 'function') { + throw new Error('Unable to consume source maps in older browsers'); + } + } + + function _ensureStackFrameIsLegit(stackframe) { + if (typeof stackframe !== 'object') { + throw new TypeError('Given StackFrame is not an object'); + } else if (typeof stackframe.fileName !== 'string') { + throw new TypeError('Given file name is not a String'); + } else if (typeof stackframe.lineNumber !== 'number' || + stackframe.lineNumber % 1 !== 0 || + stackframe.lineNumber < 1) { + throw new TypeError('Given line number must be a positive integer'); + } else if (typeof stackframe.columnNumber !== 'number' || + stackframe.columnNumber % 1 !== 0 || + stackframe.columnNumber < 0) { + throw new TypeError('Given column number must be a non-negative integer'); + } + return true; + } + + function _findSourceMappingURL(source) { + var m = /\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(source); + if (m && m[1]) { + return m[1]; + } else { + throw new Error('sourceMappingURL not found'); + } + } + + function _extractLocationInfoFromSourceMap(rawSourceMap, args, lineNumber, columnNumber, sourceCache) { + var mapConsumer = new SourceMap.SourceMapConsumer(rawSourceMap); + + var loc = mapConsumer.originalPositionFor({ + line: lineNumber, + column: columnNumber + }); + + var mappedSource = mapConsumer.sourceContentFor(loc.source); + if (mappedSource) { + sourceCache[loc.source] = mappedSource; + } + + return new StackFrame(loc.name, args, loc.source, loc.line, loc.column); + } + + /** + * @constructor + * @param {Object} opts + * opts.sourceCache = {url: "Source String"} => preload source cache + * opts.offline = True to prevent network requests. + * Best effort without sources or source maps. + * opts.ajax = Promise returning function to make X-Domain requests + */ + return function StackTraceGPS(opts) { + if (!(this instanceof StackTraceGPS)) { + return new StackTraceGPS(opts); + } + opts = opts || {}; + + this.sourceCache = opts.sourceCache || {}; + + this.ajax = opts.ajax || _xdr; + + this._atob = opts.atob || _atob; + + this._get = function _get(location) { + return new Promise(function(resolve, reject) { + var isDataUrl = location.substr(0, 5) === 'data:'; + if (this.sourceCache[location]) { + resolve(this.sourceCache[location]); + } else if (opts.offline && !isDataUrl) { + reject(new Error('Cannot make network requests in offline mode')); + } else { + if (isDataUrl) { + // data URLs can have parameters. + // see http://tools.ietf.org/html/rfc2397 + var supportedEncodingRegexp = + /^data:application\/json;([\w=:"-]+;)*base64,/; + var match = location.match(supportedEncodingRegexp); + if (match) { + var sourceMapStart = match[0].length; + var encodedSource = location.substr(sourceMapStart); + var source = this._atob(encodedSource); + this.sourceCache[location] = source; + resolve(source); + } else { + reject(new Error('The encoding of the inline sourcemap is not supported')); + } + } else { + var xhrPromise = this.ajax(location, {method: 'get'}); + // Cache the Promise to prevent duplicate in-flight requests + this.sourceCache[location] = xhrPromise; + xhrPromise.then(resolve, reject); + } + } + }.bind(this)); + }; + + /** + * Given a StackFrame, enhance function name and use source maps for a + * better StackFrame. + * + * @param {StackFrame} stackframe object + * @returns {Promise} that resolves with with source-mapped StackFrame + */ + this.pinpoint = function StackTraceGPS$$pinpoint(stackframe) { + return new Promise(function(resolve, reject) { + this.getMappedLocation(stackframe).then(function(mappedStackFrame) { + function resolveMappedStackFrame() { + resolve(mappedStackFrame); + } + + this.findFunctionName(mappedStackFrame) + .then(resolve, resolveMappedStackFrame) + ['catch'](resolveMappedStackFrame); + }.bind(this), reject); + }.bind(this)); + }; + + /** + * Given a StackFrame, guess function name from location information. + * + * @param {StackFrame} stackframe + * @returns {Promise} that resolves with enhanced StackFrame. + */ + this.findFunctionName = function StackTraceGPS$$findFunctionName(stackframe) { + return new Promise(function(resolve, reject) { + _ensureStackFrameIsLegit(stackframe); + this._get(stackframe.fileName).then(function getSourceCallback(source) { + var lineNumber = stackframe.lineNumber; + var columnNumber = stackframe.columnNumber; + var guessedFunctionName = _findFunctionName(source, lineNumber, columnNumber); + // Only replace functionName if we found something + if (guessedFunctionName) { + resolve(new StackFrame(guessedFunctionName, + stackframe.args, + stackframe.fileName, + lineNumber, + columnNumber)); + } else { + resolve(stackframe); + } + }, reject)['catch'](reject); + }.bind(this)); + }; + + /** + * Given a StackFrame, seek source-mapped location and return new enhanced StackFrame. + * + * @param {StackFrame} stackframe + * @returns {Promise} that resolves with enhanced StackFrame. + */ + this.getMappedLocation = function StackTraceGPS$$getMappedLocation(stackframe) { + return new Promise(function(resolve, reject) { + _ensureSupportedEnvironment(); + _ensureStackFrameIsLegit(stackframe); + + var sourceCache = this.sourceCache; + var fileName = stackframe.fileName; + this._get(fileName).then(function(source) { + var sourceMappingURL = _findSourceMappingURL(source); + var isDataUrl = sourceMappingURL.substr(0, 5) === 'data:'; + var base = fileName.substring(0, fileName.lastIndexOf('/') + 1); + + if (sourceMappingURL[0] !== '/' && !isDataUrl && !(/^https?:\/\/|^\/\//i).test(sourceMappingURL)) { + sourceMappingURL = base + sourceMappingURL; + } + + this._get(sourceMappingURL).then(function(map) { + var line = stackframe.lineNumber; + var column = stackframe.columnNumber; + + if (typeof map === 'string') { + map = _parseJson(map.replace(/^\)\]\}'/, '')); + } + + if (typeof map.sourceRoot === 'undefined') { + map.sourceRoot = base; + } + + resolve(_extractLocationInfoFromSourceMap(map, stackframe.args, line, column, sourceCache)); + }, reject)['catch'](reject); + }.bind(this), reject)['catch'](reject); + }.bind(this)); + }; + }; +})); + +},{"source-map/lib/source-map-consumer":7,"stackframe":11}],13:[function(require,module,exports){ +(function(root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps')); + } else { + root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS); + } +}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) { + var _options = { + filter: function(stackframe) { + // Filter out stackframes for this library by default + return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 && + (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 && + (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 && + (stackframe.functionName || '').indexOf('StackGenerator$$') === -1; + }, + sourceCache: {} + }; + + var _generateError = function StackTrace$$GenerateError() { + try { + // Error must be thrown to get stack in IE + throw new Error(); + } catch (err) { + return err; + } + }; + + /** + * Merge 2 given Objects. If a conflict occurs the second object wins. + * Does not do deep merges. + * + * @param {Object} first base object + * @param {Object} second overrides + * @returns {Object} merged first and second + * @private + */ + function _merge(first, second) { + var target = {}; + + [first, second].forEach(function(obj) { + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + target[prop] = obj[prop]; + } + } + return target; + }); + + return target; + } + + function _isShapedLikeParsableError(err) { + return err.stack || err['opera#sourceloc']; + } + + function _filtered(stackframes, filter) { + if (typeof filter === 'function') { + return stackframes.filter(filter); + } + return stackframes; + } + + return { + /** + * Get a backtrace from invocation point. + * + * @param {Object} opts + * @returns {Array} of StackFrame + */ + get: function StackTrace$$get(opts) { + var err = _generateError(); + return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts); + }, + + /** + * Get a backtrace from invocation point. + * IMPORTANT: Does not handle source maps or guess function names! + * + * @param {Object} opts + * @returns {Array} of StackFrame + */ + getSync: function StackTrace$$getSync(opts) { + opts = _merge(_options, opts); + var err = _generateError(); + var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts); + return _filtered(stack, opts.filter); + }, + + /** + * Given an error object, parse it. + * + * @param {Error} error object + * @param {Object} opts + * @returns {Promise} for Array[StackFrame} + */ + fromError: function StackTrace$$fromError(error, opts) { + opts = _merge(_options, opts); + var gps = new StackTraceGPS(opts); + return new Promise(function(resolve) { + var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter); + resolve(Promise.all(stackframes.map(function(sf) { + return new Promise(function(resolve) { + function resolveOriginal() { + resolve(sf); + } + + gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal); + }); + }))); + }.bind(this)); + }, + + /** + * Use StackGenerator to generate a backtrace. + * + * @param {Object} opts + * @returns {Promise} of Array[StackFrame] + */ + generateArtificially: function StackTrace$$generateArtificially(opts) { + opts = _merge(_options, opts); + var stackFrames = StackGenerator.backtrace(opts); + if (typeof opts.filter === 'function') { + stackFrames = stackFrames.filter(opts.filter); + } + return Promise.resolve(stackFrames); + }, + + /** + * Given a function, wrap it such that invocations trigger a callback that + * is called with a stack trace. + * + * @param {Function} fn to be instrumented + * @param {Function} callback function to call with a stack trace on invocation + * @param {Function} errback optional function to call with error if unable to get stack trace. + * @param {Object} thisArg optional context object (e.g. window) + */ + instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) { + if (typeof fn !== 'function') { + throw new Error('Cannot instrument non-function object'); + } else if (typeof fn.__stacktraceOriginalFn === 'function') { + // Already instrumented, return given Function + return fn; + } + + var instrumented = function StackTrace$$instrumented() { + try { + this.get().then(callback, errback)['catch'](errback); + return fn.apply(thisArg || this, arguments); + } catch (e) { + if (_isShapedLikeParsableError(e)) { + this.fromError(e).then(callback, errback)['catch'](errback); + } + throw e; + } + }.bind(this); + instrumented.__stacktraceOriginalFn = fn; + + return instrumented; + }, + + /** + * Given a function that has been instrumented, + * revert the function to it's original (non-instrumented) state. + * + * @param {Function} fn to de-instrument + */ + deinstrument: function StackTrace$$deinstrument(fn) { + if (typeof fn !== 'function') { + throw new Error('Cannot de-instrument non-function object'); + } else if (typeof fn.__stacktraceOriginalFn === 'function') { + return fn.__stacktraceOriginalFn; + } else { + // Function not instrumented, return original + return fn; + } + }, + + /** + * Given an error message and Array of StackFrames, serialize and POST to given URL. + * + * @param {Array} stackframes + * @param {String} url + * @param {String} errorMsg + */ + report: function StackTrace$$report(stackframes, url, errorMsg) { + return new Promise(function(resolve, reject) { + var req = new XMLHttpRequest(); + req.onerror = reject; + req.onreadystatechange = function onreadystatechange() { + if (req.readyState === 4) { + if (req.status >= 200 && req.status < 400) { + resolve(req.responseText); + } else { + reject(new Error('POST to ' + url + ' failed with status: ' + req.status)); + } + } + }; + req.open('post', url); + req.setRequestHeader('Content-Type', 'application/json'); + + var reportPayload = {stack: stackframes}; + if (errorMsg !== undefined) { + reportPayload.message = errorMsg; + } + + req.send(JSON.stringify(reportPayload)); + }); + } + }; +})); + +},{"error-stack-parser":1,"stack-generator":10,"stacktrace-gps":12}]},{},[13])(13) +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9hcnJheS1zZXQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LXZscS5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iYXNlNjQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9xdWljay1zb3J0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAtY29uc3VtZXIuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9zdGFjay1nZW5lcmF0b3Ivbm9kZV9tb2R1bGVzL3N0YWNrZnJhbWUvc3RhY2tmcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9zdGFjay1nZW5lcmF0b3Ivc3RhY2stZ2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL3N0YWNrdHJhY2UtZ3BzLmpzIiwic3RhY2t0cmFjZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDek5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2phQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnZXJyb3Itc3RhY2stcGFyc2VyJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuRXJyb3JTdGFja1BhcnNlciA9IGZhY3Rvcnkocm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIoU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFAgPSAvKF58QClcXFMrXFw6XFxkKy87XG4gICAgdmFyIENIUk9NRV9JRV9TVEFDS19SRUdFWFAgPSAvXlxccyphdCAuKihcXFMrXFw6XFxkK3xcXChuYXRpdmVcXCkpL207XG4gICAgdmFyIFNBRkFSSV9OQVRJVkVfQ09ERV9SRUdFWFAgPSAvXihldmFsQCk/KFxcW25hdGl2ZSBjb2RlXFxdKT8kLztcblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyYXksIGZuLCB0aGlzQXJnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgQXJyYXkucHJvdG90eXBlLm1hcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5Lm1hcChmbiwgdGhpc0FyZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gbmV3IEFycmF5KGFycmF5Lmxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0W2ldID0gZm4uY2FsbCh0aGlzQXJnLCBhcnJheVtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihhcnJheSwgZm4sIHRoaXNBcmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBBcnJheS5wcm90b3R5cGUuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkuZmlsdGVyKGZuLCB0aGlzQXJnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4uY2FsbCh0aGlzQXJnLCBhcnJheVtpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goYXJyYXlbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnJheSwgdGFyZ2V0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJheS5pbmRleE9mKHRhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2ldID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGFuIEVycm9yIG9iamVjdCwgZXh0cmFjdCB0aGUgbW9zdCBpbmZvcm1hdGlvbiBmcm9tIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IG9mIFN0YWNrRnJhbWVzXG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2UoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3Iuc3RhY2t0cmFjZSAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGVycm9yWydvcGVyYSNzb3VyY2Vsb2MnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhY2sgJiYgZXJyb3Iuc3RhY2subWF0Y2goQ0hST01FX0lFX1NUQUNLX1JFR0VYUCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVY4T3JJRShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VGRk9yU2FmYXJpKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGFyc2UgZ2l2ZW4gRXJyb3Igb2JqZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gU2VwYXJhdGUgbGluZSBhbmQgY29sdW1uIG51bWJlcnMgZnJvbSBhIHN0cmluZyBvZiB0aGUgZm9ybTogKFVSSTpMaW5lOkNvbHVtbilcbiAgICAgICAgZXh0cmFjdExvY2F0aW9uOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRleHRyYWN0TG9jYXRpb24odXJsTGlrZSkge1xuICAgICAgICAgICAgLy8gRmFpbC1mYXN0IGJ1dCByZXR1cm4gbG9jYXRpb25zIGxpa2UgXCIobmF0aXZlKVwiXG4gICAgICAgICAgICBpZiAodXJsTGlrZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt1cmxMaWtlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJlZ0V4cCA9IC8oLis/KSg/OlxcOihcXGQrKSk/KD86XFw6KFxcZCspKT8kLztcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IHJlZ0V4cC5leGVjKHVybExpa2UucmVwbGFjZSgvW1xcKFxcKV0vZywgJycpKTtcbiAgICAgICAgICAgIHJldHVybiBbcGFydHNbMV0sIHBhcnRzWzJdIHx8IHVuZGVmaW5lZCwgcGFydHNbM10gfHwgdW5kZWZpbmVkXTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZVY4T3JJRTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VWOE9ySUUoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IF9maWx0ZXIoZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLCBmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gX21hcChmaWx0ZXJlZCwgZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJyhldmFsICcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSBldmFsIGluZm9ybWF0aW9uIHVudGlsIHdlIGltcGxlbWVudCBzdGFja3RyYWNlLmpzL3N0YWNrZnJhbWUjOFxuICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC9ldmFsIGNvZGUvZywgJ2V2YWwnKS5yZXBsYWNlKC8oXFwoZXZhbCBhdCBbXlxcKCldKil8KFxcKVxcLC4qJCkvZywgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5yZXBsYWNlKC9eXFxzKy8sICcnKS5yZXBsYWNlKC9cXChldmFsIGNvZGUvZywgJygnKS5zcGxpdCgvXFxzKy8pLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gdG9rZW5zLmpvaW4oJyAnKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gX2luZGV4T2YoWydldmFsJywgJzxhbm9ueW1vdXM+J10sIGxvY2F0aW9uUGFydHNbMF0pID4gLTEgPyB1bmRlZmluZWQgOiBsb2NhdGlvblBhcnRzWzBdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKGZ1bmN0aW9uTmFtZSwgdW5kZWZpbmVkLCBmaWxlTmFtZSwgbG9jYXRpb25QYXJ0c1sxXSwgbG9jYXRpb25QYXJ0c1syXSwgbGluZSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZUZGT3JTYWZhcmk6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlRkZPclNhZmFyaShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gX2ZpbHRlcihlcnJvci5zdGFjay5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIWxpbmUubWF0Y2goU0FGQVJJX05BVElWRV9DT0RFX1JFR0VYUCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIF9tYXAoZmlsdGVyZWQsIGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IGV2YWwgaW5mb3JtYXRpb24gdW50aWwgd2UgaW1wbGVtZW50IHN0YWNrdHJhY2UuanMvc3RhY2tmcmFtZSM4XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignID4gZXZhbCcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvIGxpbmUgKFxcZCspKD86ID4gZXZhbCBsaW5lIFxcZCspKiA+IGV2YWxcXDpcXGQrXFw6XFxkKy9nLCAnOiQxJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignQCcpID09PSAtMSAmJiBsaW5lLmluZGV4T2YoJzonKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIGV2YWwgZnJhbWVzIG9ubHkgaGF2ZSBmdW5jdGlvbiBuYW1lcyBhbmQgbm90aGluZyBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZShsaW5lKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5zcGxpdCgnQCcpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0b2tlbnMuam9pbignQCcpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmEoZSkge1xuICAgICAgICAgICAgaWYgKCFlLnN0YWNrdHJhY2UgfHwgKGUubWVzc2FnZS5pbmRleE9mKCdcXG4nKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlLnNwbGl0KCdcXG4nKS5sZW5ndGggPiBlLnN0YWNrdHJhY2Uuc3BsaXQoJ1xcbicpLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhOShlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWUuc3RhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTAoZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmExMShlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhOTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTkoZSkge1xuICAgICAgICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspL2k7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBlLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMiwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lUkUuZXhlYyhsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBTdGFja0ZyYW1lKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBtYXRjaFsyXSwgbWF0Y2hbMV0sIHVuZGVmaW5lZCwgbGluZXNbaV0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTEwOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhMTAoZSkge1xuICAgICAgICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspKD86OiBJbiBmdW5jdGlvbiAoXFxTKykpPyQvaTtcbiAgICAgICAgICAgIHZhciBsaW5lcyA9IGUuc3RhY2t0cmFjZS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmVSRS5leGVjKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RhY2tGcmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFszXSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc1tpXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBPcGVyYSAxMC42NSsgRXJyb3Iuc3RhY2sgdmVyeSBzaW1pbGFyIHRvIEZGL1NhZmFyaVxuICAgICAgICBwYXJzZU9wZXJhMTE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gX2ZpbHRlcihlcnJvci5zdGFjay5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFsaW5lLm1hdGNoKEZJUkVGT1hfU0FGQVJJX1NUQUNLX1JFR0VYUCkgJiYgIWxpbmUubWF0Y2goL15FcnJvciBjcmVhdGVkIGF0Lyk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIF9tYXAoZmlsdGVyZWQsIGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5zcGxpdCgnQCcpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25DYWxsID0gKHRva2Vucy5zaGlmdCgpIHx8ICcnKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25DYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPGFub255bW91cyBmdW5jdGlvbig6IChcXHcrKSk/Pi8sICckMicpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwoW15cXCldKlxcKS9nLCAnJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzUmF3O1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkNhbGwubWF0Y2goL1xcKChbXlxcKV0qKVxcKS8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NSYXcgPSBmdW5jdGlvbkNhbGwucmVwbGFjZSgvXlteXFwoXStcXCgoW15cXCldKilcXCkkLywgJyQxJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gKGFyZ3NSYXcgPT09IHVuZGVmaW5lZCB8fCBhcmdzUmF3ID09PSAnW2FyZ3VtZW50cyBub3QgYXZhaWxhYmxlXScpID9cbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDogYXJnc1Jhdy5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZShcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICBsaW5lKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcblxuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3XG4gKiBtZW1iZXIgaXMgTygxKSwgdGVzdGluZyBmb3IgbWVtYmVyc2hpcCBpcyBPKDEpLCBhbmQgZmluZGluZyB0aGUgaW5kZXggb2YgYW5cbiAqIGVsZW1lbnQgaXMgTygxKS4gUmVtb3ZpbmcgZWxlbWVudHMgZnJvbSB0aGUgc2V0IGlzIG5vdCBzdXBwb3J0ZWQuIE9ubHlcbiAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgbWVtYmVyc2hpcC5cbiAqL1xuZnVuY3Rpb24gQXJyYXlTZXQoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8qKlxuICogU3RhdGljIG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gKi9cbkFycmF5U2V0LmZyb21BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X2Zyb21BcnJheShhQXJyYXksIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYUFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgc2V0LmFkZChhQXJyYXlbaV0sIGFBbGxvd0R1cGxpY2F0ZXMpO1xuICB9XG4gIHJldHVybiBzZXQ7XG59O1xuXG4vKipcbiAqIFJldHVybiBob3cgbWFueSB1bmlxdWUgaXRlbXMgYXJlIGluIHRoaXMgQXJyYXlTZXQuIElmIGR1cGxpY2F0ZXMgaGF2ZSBiZWVuXG4gKiBhZGRlZCwgdGhhbiB0aG9zZSBkbyBub3QgY291bnQgdG93YXJkcyB0aGUgc2l6ZS5cbiAqXG4gKiBAcmV0dXJucyBOdW1iZXJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiBBcnJheVNldF9zaXplKCkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fc2V0KS5sZW5ndGg7XG59O1xuXG4vKipcbiAqIEFkZCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoaXMgc2V0LlxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gQXJyYXlTZXRfYWRkKGFTdHIsIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICB2YXIgaXNEdXBsaWNhdGUgPSBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB2YXIgaWR4ID0gdGhpcy5fYXJyYXkubGVuZ3RoO1xuICBpZiAoIWlzRHVwbGljYXRlIHx8IGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICB0aGlzLl9hcnJheS5wdXNoKGFTdHIpO1xuICB9XG4gIGlmICghaXNEdXBsaWNhdGUpIHtcbiAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gIH1cbn07XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIHN0cmluZyBhIG1lbWJlciBvZiB0aGlzIHNldD9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIEFycmF5U2V0X2hhcyhhU3RyKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgcmV0dXJuIGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIGlmIChoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgaW50VG9DaGFyTWFwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcblxuLyoqXG4gKiBFbmNvZGUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMCB0byA2MyB0byBhIHNpbmdsZSBiYXNlIDY0IGRpZ2l0LlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgaWYgKDAgPD0gbnVtYmVyICYmIG51bWJlciA8IGludFRvQ2hhck1hcC5sZW5ndGgpIHtcbiAgICByZXR1cm4gaW50VG9DaGFyTWFwW251bWJlcl07XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogXCIgKyBudW1iZXIpO1xufTtcblxuLyoqXG4gKiBEZWNvZGUgYSBzaW5nbGUgYmFzZSA2NCBjaGFyYWN0ZXIgY29kZSBkaWdpdCB0byBhbiBpbnRlZ2VyLiBSZXR1cm5zIC0xIG9uXG4gKiBmYWlsdXJlLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIChjaGFyQ29kZSkge1xuICB2YXIgYmlnQSA9IDY1OyAgICAgLy8gJ0EnXG4gIHZhciBiaWdaID0gOTA7ICAgICAvLyAnWidcblxuICB2YXIgbGl0dGxlQSA9IDk3OyAgLy8gJ2EnXG4gIHZhciBsaXR0bGVaID0gMTIyOyAvLyAneidcblxuICB2YXIgemVybyA9IDQ4OyAgICAgLy8gJzAnXG4gIHZhciBuaW5lID0gNTc7ICAgICAvLyAnOSdcblxuICB2YXIgcGx1cyA9IDQzOyAgICAgLy8gJysnXG4gIHZhciBzbGFzaCA9IDQ3OyAgICAvLyAnLydcblxuICB2YXIgbGl0dGxlT2Zmc2V0ID0gMjY7XG4gIHZhciBudW1iZXJPZmZzZXQgPSA1MjtcblxuICAvLyAwIC0gMjU6IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXG4gIGlmIChiaWdBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGJpZ1opIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gYmlnQSk7XG4gIH1cblxuICAvLyAyNiAtIDUxOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuICBpZiAobGl0dGxlQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBsaXR0bGVaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGxpdHRsZUEgKyBsaXR0bGVPZmZzZXQpO1xuICB9XG5cbiAgLy8gNTIgLSA2MTogMDEyMzQ1Njc4OVxuICBpZiAoemVybyA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBuaW5lKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIHplcm8gKyBudW1iZXJPZmZzZXQpO1xuICB9XG5cbiAgLy8gNjI6ICtcbiAgaWYgKGNoYXJDb2RlID09IHBsdXMpIHtcbiAgICByZXR1cm4gNjI7XG4gIH1cblxuICAvLyA2MzogL1xuICBpZiAoY2hhckNvZGUgPT0gc2xhc2gpIHtcbiAgICByZXR1cm4gNjM7XG4gIH1cblxuICAvLyBJbnZhbGlkIGJhc2U2NCBkaWdpdC5cbiAgcmV0dXJuIC0xO1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5leHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBSZWN1cnNpdmUgaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaC5cbiAqXG4gKiBAcGFyYW0gYUxvdyBJbmRpY2VzIGhlcmUgYW5kIGxvd2VyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYUhpZ2ggSW5kaWNlcyBoZXJlIGFuZCBoaWdoZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IGJlaW5nIHNlYXJjaGVkIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIG5vbi1lbXB0eSBhcnJheSBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBGdW5jdGlvbiB3aGljaCB0YWtlcyB0d28gZWxlbWVudHMgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgLy9cbiAgLy8gICAxLiBXZSBmaW5kIHRoZSBleGFjdCBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgLy9cbiAgLy8gICAyLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGJ1dCB3ZSBjYW4gcmV0dXJuIHRoZSBpbmRleCBvZlxuICAvLyAgICAgIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudC5cbiAgLy9cbiAgLy8gICAzLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGFuZCB0aGVyZSBpcyBubyBuZXh0LWNsb3Nlc3RcbiAgLy8gICAgICBlbGVtZW50IHRoYW4gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgc28gd2UgcmV0dXJuIC0xLlxuICB2YXIgbWlkID0gTWF0aC5mbG9vcigoYUhpZ2ggLSBhTG93KSAvIDIpICsgYUxvdztcbiAgdmFyIGNtcCA9IGFDb21wYXJlKGFOZWVkbGUsIGFIYXlzdGFja1ttaWRdLCB0cnVlKTtcbiAgaWYgKGNtcCA9PT0gMCkge1xuICAgIC8vIEZvdW5kIHRoZSBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgICByZXR1cm4gbWlkO1xuICB9XG4gIGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGdyZWF0ZXIgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAoYUhpZ2ggLSBtaWQgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgdXBwZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2gobWlkLCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIFRoZSBleGFjdCBuZWVkbGUgZWxlbWVudCB3YXMgbm90IGZvdW5kIGluIHRoaXMgaGF5c3RhY2suIERldGVybWluZSBpZlxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBhSGlnaCA8IGFIYXlzdGFjay5sZW5ndGggPyBhSGlnaCA6IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGxlc3MgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAobWlkIC0gYUxvdyA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSBsb3dlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBtaWQsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYUxvdyA8IDAgPyAtMSA6IGFMb3c7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoIHdoaWNoIHdpbGwgYWx3YXlzIHRyeSBhbmQgcmV0dXJuXG4gKiB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgZWxlbWVudCBpZiB0aGVyZSBpcyBubyBleGFjdCBoaXQuIFRoaXMgaXMgYmVjYXVzZVxuICogbWFwcGluZ3MgYmV0d2VlbiBvcmlnaW5hbCBhbmQgZ2VuZXJhdGVkIGxpbmUvY29sIHBhaXJzIGFyZSBzaW5nbGUgcG9pbnRzLFxuICogYW5kIHRoZXJlIGlzIGFuIGltcGxpY2l0IHJlZ2lvbiBiZXR3ZWVuIGVhY2ggb2YgdGhlbSwgc28gYSBtaXNzIGp1c3QgbWVhbnNcbiAqIHRoYXQgeW91IGFyZW4ndCBvbiB0aGUgdmVyeSBzdGFydCBvZiBhIHJlZ2lvbi5cbiAqXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCB5b3UgYXJlIGxvb2tpbmcgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgYXJyYXkgdGhhdCBpcyBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBuZWVkbGUgYW5kIGFuIGVsZW1lbnQgaW4gdGhlXG4gKiAgICAgYXJyYXkgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5lZWRsZSBpcyBsZXNzXG4gKiAgICAgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgZWxlbWVudCwgcmVzcGVjdGl2ZWx5LlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICovXG5leHBvcnRzLnNlYXJjaCA9IGZ1bmN0aW9uIHNlYXJjaChhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICBpZiAoYUhheXN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHJlY3Vyc2l2ZVNlYXJjaCgtMSwgYUhheXN0YWNrLmxlbmd0aCwgYU5lZWRsZSwgYUhheXN0YWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbXBhcmUsIGFCaWFzIHx8IGV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLy8gV2UgaGF2ZSBmb3VuZCBlaXRoZXIgdGhlIGV4YWN0IGVsZW1lbnQsIG9yIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudCB0aGFuXG4gIC8vIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIHN1Y2hcbiAgLy8gZWxlbWVudC4gTWFrZSBzdXJlIHdlIGFsd2F5cyByZXR1cm4gdGhlIHNtYWxsZXN0IG9mIHRoZXNlLlxuICB3aGlsZSAoaW5kZXggLSAxID49IDApIHtcbiAgICBpZiAoYUNvbXBhcmUoYUhheXN0YWNrW2luZGV4XSwgYUhheXN0YWNrW2luZGV4IC0gMV0sIHRydWUpICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLS1pbmRleDtcbiAgfVxuXG4gIHJldHVybiBpbmRleDtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGdldHRpbmcgdmFsdWVzIGZyb20gcGFyYW1ldGVyL29wdGlvbnNcbiAqIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGFyZ3MgVGhlIG9iamVjdCB3ZSBhcmUgZXh0cmFjdGluZyB2YWx1ZXMgZnJvbVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdlIGFyZSBnZXR0aW5nLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBBbiBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmdcbiAqIGZyb20gdGhlIG9iamVjdC4gSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkIGFuZCB0aGUgcHJvcGVydHkgaXMgbWlzc2luZywgYW5cbiAqIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICovXG5mdW5jdGlvbiBnZXRBcmcoYUFyZ3MsIGFOYW1lLCBhRGVmYXVsdFZhbHVlKSB7XG4gIGlmIChhTmFtZSBpbiBhQXJncykge1xuICAgIHJldHVybiBhQXJnc1thTmFtZV07XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBhRGVmYXVsdFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYU5hbWUgKyAnXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKTtcbiAgfVxufVxuZXhwb3J0cy5nZXRBcmcgPSBnZXRBcmc7XG5cbnZhciB1cmxSZWdleHAgPSAvXig/OihbXFx3K1xcLS5dKyk6KT9cXC9cXC8oPzooXFx3KzpcXHcrKUApPyhbXFx3Ll0qKSg/OjooXFxkKykpPyhcXFMqKSQvO1xudmFyIGRhdGFVcmxSZWdleHAgPSAvXmRhdGE6LitcXCwuKyQvO1xuXG5mdW5jdGlvbiB1cmxQYXJzZShhVXJsKSB7XG4gIHZhciBtYXRjaCA9IGFVcmwubWF0Y2godXJsUmVnZXhwKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NoZW1lOiBtYXRjaFsxXSxcbiAgICBhdXRoOiBtYXRjaFsyXSxcbiAgICBob3N0OiBtYXRjaFszXSxcbiAgICBwb3J0OiBtYXRjaFs0XSxcbiAgICBwYXRoOiBtYXRjaFs1XVxuICB9O1xufVxuZXhwb3J0cy51cmxQYXJzZSA9IHVybFBhcnNlO1xuXG5mdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFyc2VkVXJsKSB7XG4gIHZhciB1cmwgPSAnJztcbiAgaWYgKGFQYXJzZWRVcmwuc2NoZW1lKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuc2NoZW1lICsgJzonO1xuICB9XG4gIHVybCArPSAnLy8nO1xuICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuYXV0aCArICdAJztcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuaG9zdDtcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7XG4gICAgdXJsICs9IFwiOlwiICsgYVBhcnNlZFVybC5wb3J0XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucGF0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnBhdGg7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cbmV4cG9ydHMudXJsR2VuZXJhdGUgPSB1cmxHZW5lcmF0ZTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGF0aCwgb3IgdGhlIHBhdGggcG9ydGlvbiBvZiBhIFVSTDpcbiAqXG4gKiAtIFJlcGxhY2VzIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aCBvbmUgc2xhc2guXG4gKiAtIFJlbW92ZXMgdW5uZWNlc3NhcnkgJy4nIHBhcnRzLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICc8ZGlyPi8uLicgcGFydHMuXG4gKlxuICogQmFzZWQgb24gY29kZSBpbiB0aGUgTm9kZS5qcyAncGF0aCcgY29yZSBtb2R1bGUuXG4gKlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIHVybCB0byBub3JtYWxpemUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhUGF0aCkge1xuICB2YXIgcGF0aCA9IGFQYXRoO1xuICB2YXIgdXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICBpZiAodXJsKSB7XG4gICAgaWYgKCF1cmwucGF0aCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cbiAgICBwYXRoID0gdXJsLnBhdGg7XG4gIH1cbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCk7XG5cbiAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuICBmb3IgKHZhciBwYXJ0LCB1cCA9IDAsIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHBhcnQgPSBwYXJ0c1tpXTtcbiAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXAgPiAwKSB7XG4gICAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYmxhbmsgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuIFRyeWluZyB0byBnb1xuICAgICAgICAvLyBhYm92ZSB0aGUgcm9vdCBpcyBhIG5vLW9wLiBUaGVyZWZvcmUgd2UgY2FuIHJlbW92ZSBhbGwgJy4uJyBwYXJ0c1xuICAgICAgICAvLyBkaXJlY3RseSBhZnRlciB0aGUgcm9vdC5cbiAgICAgICAgcGFydHMuc3BsaWNlKGkgKyAxLCB1cCk7XG4gICAgICAgIHVwID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShpLCAyKTtcbiAgICAgICAgdXAtLTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcblxuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICBwYXRoID0gaXNBYnNvbHV0ZSA/ICcvJyA6ICcuJztcbiAgfVxuXG4gIGlmICh1cmwpIHtcbiAgICB1cmwucGF0aCA9IHBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKHVybCk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcblxuLyoqXG4gKiBKb2lucyB0d28gcGF0aHMvVVJMcy5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIGpvaW5lZCB3aXRoIHRoZSByb290LlxuICpcbiAqIC0gSWYgYVBhdGggaXMgYSBVUkwgb3IgYSBkYXRhIFVSSSwgYVBhdGggaXMgcmV0dXJuZWQsIHVubGVzcyBhUGF0aCBpcyBhXG4gKiAgIHNjaGVtZS1yZWxhdGl2ZSBVUkw6IFRoZW4gdGhlIHNjaGVtZSBvZiBhUm9vdCwgaWYgYW55LCBpcyBwcmVwZW5kZWRcbiAqICAgZmlyc3QuXG4gKiAtIE90aGVyd2lzZSBhUGF0aCBpcyBhIHBhdGguIElmIGFSb290IGlzIGEgVVJMLCB0aGVuIGl0cyBwYXRoIHBvcnRpb25cbiAqICAgaXMgdXBkYXRlZCB3aXRoIHRoZSByZXN1bHQgYW5kIGFSb290IGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhlIHJlc3VsdFxuICogICBpcyByZXR1cm5lZC5cbiAqICAgLSBJZiBhUGF0aCBpcyBhYnNvbHV0ZSwgdGhlIHJlc3VsdCBpcyBhUGF0aC5cbiAqICAgLSBPdGhlcndpc2UgdGhlIHR3byBwYXRocyBhcmUgam9pbmVkIHdpdGggYSBzbGFzaC5cbiAqIC0gSm9pbmluZyBmb3IgZXhhbXBsZSAnaHR0cDovLycgYW5kICd3d3cuZXhhbXBsZS5jb20nIGlzIGFsc28gc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBqb2luKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG4gIGlmIChhUGF0aCA9PT0gXCJcIikge1xuICAgIGFQYXRoID0gXCIuXCI7XG4gIH1cbiAgdmFyIGFQYXRoVXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICB2YXIgYVJvb3RVcmwgPSB1cmxQYXJzZShhUm9vdCk7XG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290ID0gYVJvb3RVcmwucGF0aCB8fCAnLyc7XG4gIH1cblxuICAvLyBgam9pbihmb28sICcvL3d3dy5leGFtcGxlLm9yZycpYFxuICBpZiAoYVBhdGhVcmwgJiYgIWFQYXRoVXJsLnNjaGVtZSkge1xuICAgIGlmIChhUm9vdFVybCkge1xuICAgICAgYVBhdGhVcmwuc2NoZW1lID0gYVJvb3RVcmwuc2NoZW1lO1xuICAgIH1cbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVBhdGhVcmwpO1xuICB9XG5cbiAgaWYgKGFQYXRoVXJsIHx8IGFQYXRoLm1hdGNoKGRhdGFVcmxSZWdleHApKSB7XG4gICAgcmV0dXJuIGFQYXRoO1xuICB9XG5cbiAgLy8gYGpvaW4oJ2h0dHA6Ly8nLCAnd3d3LmV4YW1wbGUuY29tJylgXG4gIGlmIChhUm9vdFVybCAmJiAhYVJvb3RVcmwuaG9zdCAmJiAhYVJvb3RVcmwucGF0aCkge1xuICAgIGFSb290VXJsLmhvc3QgPSBhUGF0aDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG5cbiAgdmFyIGpvaW5lZCA9IGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgPyBhUGF0aFxuICAgIDogbm9ybWFsaXplKGFSb290LnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgYVBhdGgpO1xuXG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290VXJsLnBhdGggPSBqb2luZWQ7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuICByZXR1cm4gam9pbmVkO1xufVxuZXhwb3J0cy5qb2luID0gam9pbjtcblxuZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24gKGFQYXRoKSB7XG4gIHJldHVybiBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJyB8fCAhIWFQYXRoLm1hdGNoKHVybFJlZ2V4cCk7XG59O1xuXG4vKipcbiAqIE1ha2UgYSBwYXRoIHJlbGF0aXZlIHRvIGEgVVJMIG9yIGFub3RoZXIgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIG1hZGUgcmVsYXRpdmUgdG8gYVJvb3QuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0aXZlKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG5cbiAgYVJvb3QgPSBhUm9vdC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgcGF0aCB0byBiZSBhYm92ZSB0aGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBzaW1wbHlcbiAgLy8gY2hlY2tpbmcgd2hldGhlciB0aGUgcm9vdCBpcyBhIHByZWZpeCBvZiB0aGUgcGF0aCB3b24ndCB3b3JrLiBJbnN0ZWFkLCB3ZVxuICAvLyBuZWVkIHRvIHJlbW92ZSBjb21wb25lbnRzIGZyb20gdGhlIHJvb3Qgb25lIGJ5IG9uZSwgdW50aWwgZWl0aGVyIHdlIGZpbmRcbiAgLy8gYSBwcmVmaXggdGhhdCBmaXRzLCBvciB3ZSBydW4gb3V0IG9mIGNvbXBvbmVudHMgdG8gcmVtb3ZlLlxuICB2YXIgbGV2ZWwgPSAwO1xuICB3aGlsZSAoYVBhdGguaW5kZXhPZihhUm9vdCArICcvJykgIT09IDApIHtcbiAgICB2YXIgaW5kZXggPSBhUm9vdC5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBvbmx5IHBhcnQgb2YgdGhlIHJvb3QgdGhhdCBpcyBsZWZ0IGlzIHRoZSBzY2hlbWUgKGkuZS4gaHR0cDovLyxcbiAgICAvLyBmaWxlOi8vLywgZXRjLiksIG9uZSBvciBtb3JlIHNsYXNoZXMgKC8pLCBvciBzaW1wbHkgbm90aGluZyBhdCBhbGwsIHdlXG4gICAgLy8gaGF2ZSBleGhhdXN0ZWQgYWxsIGNvbXBvbmVudHMsIHNvIHRoZSBwYXRoIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcm9vdC5cbiAgICBhUm9vdCA9IGFSb290LnNsaWNlKDAsIGluZGV4KTtcbiAgICBpZiAoYVJvb3QubWF0Y2goL14oW15cXC9dKzpcXC8pP1xcLyokLykpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICArK2xldmVsO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGFkZCBhIFwiLi4vXCIgZm9yIGVhY2ggY29tcG9uZW50IHdlIHJlbW92ZWQgZnJvbSB0aGUgcm9vdC5cbiAgcmV0dXJuIEFycmF5KGxldmVsICsgMSkuam9pbihcIi4uL1wiKSArIGFQYXRoLnN1YnN0cihhUm9vdC5sZW5ndGggKyAxKTtcbn1cbmV4cG9ydHMucmVsYXRpdmUgPSByZWxhdGl2ZTtcblxudmFyIHN1cHBvcnRzTnVsbFByb3RvID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAhKCdfX3Byb3RvX18nIGluIG9iaik7XG59KCkpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSAocykge1xuICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBCZWNhdXNlIGJlaGF2aW9yIGdvZXMgd2Fja3kgd2hlbiB5b3Ugc2V0IGBfX3Byb3RvX19gIG9uIG9iamVjdHMsIHdlXG4gKiBoYXZlIHRvIHByZWZpeCBhbGwgdGhlIHN0cmluZ3MgaW4gb3VyIHNldCB3aXRoIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXIuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvcHVsbC8zMSBhbmRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzMwXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbmZ1bmN0aW9uIHRvU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gJyQnICsgYVN0cjtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy50b1NldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiB0b1NldFN0cmluZztcblxuZnVuY3Rpb24gZnJvbVNldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuIGFTdHIuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMuZnJvbVNldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiBmcm9tU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBpc1Byb3RvU3RyaW5nKHMpIHtcbiAgaWYgKCFzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IHMubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPCA5IC8qIFwiX19wcm90b19fXCIubGVuZ3RoICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHMuY2hhckNvZGVBdChsZW5ndGggLSAxKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDIpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMykgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA0KSAhPT0gMTE2IC8qICd0JyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDUpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNikgIT09IDExNCAvKiAncicgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA3KSAhPT0gMTEyIC8qICdwJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDgpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOSkgIT09IDk1ICAvKiAnXycgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gbGVuZ3RoIC0gMTA7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHMuY2hhckNvZGVBdChpKSAhPT0gMzYgLyogJyQnICovKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiwgYnV0IGRpZmZlcmVudCBnZW5lcmF0ZWRcbiAqIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhIG1hcHBpbmcgd2l0aCBhXG4gKiBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyhtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGRlZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBpbmRpY2VzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICogbWFwcGluZyB3aXRoIGEgc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQ7XG5cbmZ1bmN0aW9uIHN0cmNtcChhU3RyMSwgYVN0cjIpIHtcbiAgaWYgKGFTdHIxID09PSBhU3RyMikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKGFTdHIxID4gYVN0cjIpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggaW5mbGF0ZWQgc291cmNlIGFuZCBuYW1lIHN0cmluZ3Mgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gc3RyY21wKG1hcHBpbmdBLnNvdXJjZSwgbWFwcGluZ0Iuc291cmNlKTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gc3RyY21wKG1hcHBpbmdBLm5hbWUsIG1hcHBpbmdCLm5hbWUpO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkO1xuIiwiKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrZnJhbWUnLCBbXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja0ZyYW1lID0gZmFjdG9yeSgpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICBmdW5jdGlvbiBfaXNOdW1iZXIobikge1xuICAgICAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQobikpICYmIGlzRmluaXRlKG4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIFN0YWNrRnJhbWUoZnVuY3Rpb25OYW1lLCBhcmdzLCBmaWxlTmFtZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgaWYgKGZ1bmN0aW9uTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZ1bmN0aW9uTmFtZShmdW5jdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXJncyhhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRGaWxlTmFtZShmaWxlTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbmVOdW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRMaW5lTnVtYmVyKGxpbmVOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2x1bW5OdW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRDb2x1bW5OdW1iZXIoY29sdW1uTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U291cmNlKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBTdGFja0ZyYW1lLnByb3RvdHlwZSA9IHtcbiAgICAgICAgZ2V0RnVuY3Rpb25OYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mdW5jdGlvbk5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEZ1bmN0aW9uTmFtZTogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25OYW1lID0gU3RyaW5nKHYpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldEFyZ3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFyZ3M7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEFyZ3M6IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJncyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFyZ3MgPSB2O1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIE5PVEU6IFByb3BlcnR5IG5hbWUgbWF5IGJlIG1pc2xlYWRpbmcgYXMgaXQgaW5jbHVkZXMgdGhlIHBhdGgsXG4gICAgICAgIC8vIGJ1dCBpdCBzb21ld2hhdCBtaXJyb3JzIFY4J3MgSmF2YVNjcmlwdFN0YWNrVHJhY2VBcGlcbiAgICAgICAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC93aWtpL0phdmFTY3JpcHRTdGFja1RyYWNlQXBpIGFuZCBHZWNrbydzXG4gICAgICAgIC8vIGh0dHA6Ly9teHIubW96aWxsYS5vcmcvbW96aWxsYS1jZW50cmFsL3NvdXJjZS94cGNvbS9iYXNlL25zSUV4Y2VwdGlvbi5pZGwjMTRcbiAgICAgICAgZ2V0RmlsZU5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGVOYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXRGaWxlTmFtZTogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZU5hbWUgPSBTdHJpbmcodik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0TGluZU51bWJlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGluZU51bWJlcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0TGluZU51bWJlcjogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgIGlmICghX2lzTnVtYmVyKHYpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTGluZSBOdW1iZXIgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5saW5lTnVtYmVyID0gTnVtYmVyKHYpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldENvbHVtbk51bWJlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uTnVtYmVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXRDb2x1bW5OdW1iZXI6IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICBpZiAoIV9pc051bWJlcih2KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbHVtbiBOdW1iZXIgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb2x1bW5OdW1iZXIgPSBOdW1iZXIodik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0U291cmNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldFNvdXJjZTogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlID0gU3RyaW5nKHYpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0aGlzLmdldEZ1bmN0aW9uTmFtZSgpIHx8ICd7YW5vbnltb3VzfSc7XG4gICAgICAgICAgICB2YXIgYXJncyA9ICcoJyArICh0aGlzLmdldEFyZ3MoKSB8fCBbXSkuam9pbignLCcpICsgJyknO1xuICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gdGhpcy5nZXRGaWxlTmFtZSgpID8gKCdAJyArIHRoaXMuZ2V0RmlsZU5hbWUoKSkgOiAnJztcbiAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gX2lzTnVtYmVyKHRoaXMuZ2V0TGluZU51bWJlcigpKSA/ICgnOicgKyB0aGlzLmdldExpbmVOdW1iZXIoKSkgOiAnJztcbiAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSBfaXNOdW1iZXIodGhpcy5nZXRDb2x1bW5OdW1iZXIoKSkgPyAoJzonICsgdGhpcy5nZXRDb2x1bW5OdW1iZXIoKSkgOiAnJztcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbk5hbWUgKyBhcmdzICsgZmlsZU5hbWUgKyBsaW5lTnVtYmVyICsgY29sdW1uTnVtYmVyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBTdGFja0ZyYW1lO1xufSkpO1xuIiwiKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrLWdlbmVyYXRvcicsIFsnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc3RhY2tmcmFtZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrR2VuZXJhdG9yID0gZmFjdG9yeShyb290LlN0YWNrRnJhbWUpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gKFN0YWNrRnJhbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBiYWNrdHJhY2U6IGZ1bmN0aW9uIFN0YWNrR2VuZXJhdG9yJCRiYWNrdHJhY2Uob3B0cykge1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gW107XG4gICAgICAgICAgICB2YXIgbWF4U3RhY2tTaXplID0gMTA7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9wdHMubWF4U3RhY2tTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIG1heFN0YWNrU2l6ZSA9IG9wdHMubWF4U3RhY2tTaXplO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY3VyciA9IGFyZ3VtZW50cy5jYWxsZWU7XG4gICAgICAgICAgICB3aGlsZSAoY3VyciAmJiBzdGFjay5sZW5ndGggPCBtYXhTdGFja1NpemUpIHtcbiAgICAgICAgICAgICAgICAvLyBBbGxvdyBWOCBvcHRpbWl6YXRpb25zXG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoY3VyclsnYXJndW1lbnRzJ10ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gY3VyclsnYXJndW1lbnRzJ11baV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgvZnVuY3Rpb24oPzpcXHMrKFtcXHckXSspKStcXHMqXFwoLy50ZXN0KGN1cnIudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZShSZWdFeHAuJDEgfHwgdW5kZWZpbmVkLCBhcmdzKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh1bmRlZmluZWQsIGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci5jYWxsZXI7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZS1ncHMnLCBbJ3NvdXJjZS1tYXAnLCAnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc291cmNlLW1hcC9saWIvc291cmNlLW1hcC1jb25zdW1lcicpLCByZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tUcmFjZUdQUyA9IGZhY3Rvcnkocm9vdC5Tb3VyY2VNYXAgfHwgcm9vdC5zb3VyY2VNYXAsIHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTb3VyY2VNYXAsIFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBNYWtlIGEgWC1Eb21haW4gcmVxdWVzdCB0byB1cmwgYW5kIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB3aXRoIHJlc3BvbnNlIHRleHQgaWYgZnVsZmlsbGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gX3hkcih1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgcmVxLm9wZW4oJ2dldCcsIHVybCk7XG4gICAgICAgICAgICByZXEub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzID49IDIwMCAmJiByZXEuc3RhdHVzIDwgMzAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignSFRUUCBzdGF0dXM6ICcgKyByZXEuc3RhdHVzICsgJyByZXRyaWV2aW5nICcgKyB1cmwpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXEuc2VuZCgpO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYSBCYXNlNjQtZW5jb2RlZCBzdHJpbmcgaW50byBpdHMgb3JpZ2luYWwgcmVwcmVzZW50YXRpb24uXG4gICAgICogVXNlZCBmb3IgaW5saW5lIHNvdXJjZW1hcHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gYjY0c3RyIEJhc2UtNjQgZW5jb2RlZCBzdHJpbmdcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBvcmlnaW5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgYmFzZTY0LWVuY29kZWQgc3RyaW5nLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9hdG9iKGI2NHN0cikge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmF0b2IpIHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cuYXRvYihiNjRzdHIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBzdXBwbHkgYSBwb2x5ZmlsbCBmb3Igd2luZG93LmF0b2IgaW4gdGhpcyBlbnZpcm9ubWVudCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3BhcnNlSnNvbihzdHJpbmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBKU09OICE9PSAndW5kZWZpbmVkJyAmJiBKU09OLnBhcnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdHJpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBzdXBwbHkgYSBwb2x5ZmlsbCBmb3IgSlNPTi5wYXJzZSBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZmluZEZ1bmN0aW9uTmFtZShzb3VyY2UsIGxpbmVOdW1iZXIvKiwgY29sdW1uTnVtYmVyKi8pIHtcbiAgICAgICAgLy8gZnVuY3Rpb24ge25hbWV9KHthcmdzfSkgbVsxXT1uYW1lIG1bMl09YXJnc1xuICAgICAgICB2YXIgcmVGdW5jdGlvbkRlY2xhcmF0aW9uID0gL2Z1bmN0aW9uXFxzKyhbXihdKj8pXFxzKlxcKChbXildKilcXCkvO1xuICAgICAgICAvLyB7bmFtZX0gPSBmdW5jdGlvbiAoe2FyZ3N9KSBUT0RPIGFyZ3MgY2FwdHVyZVxuICAgICAgICB2YXIgcmVGdW5jdGlvbkV4cHJlc3Npb24gPSAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypmdW5jdGlvblxcYi87XG4gICAgICAgIC8vIHtuYW1lfSA9IGV2YWwoKVxuICAgICAgICB2YXIgcmVGdW5jdGlvbkV2YWx1YXRpb24gPSAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccyooPzpldmFsfG5ldyBGdW5jdGlvbilcXGIvO1xuICAgICAgICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoJ1xcbicpO1xuXG4gICAgICAgIC8vIFdhbGsgYmFja3dhcmRzIGluIHRoZSBzb3VyY2UgbGluZXMgdW50aWwgd2UgZmluZCB0aGUgbGluZSB3aGljaCBtYXRjaGVzIG9uZSBvZiB0aGUgcGF0dGVybnMgYWJvdmVcbiAgICAgICAgdmFyIGNvZGUgPSAnJztcbiAgICAgICAgdmFyIG1heExpbmVzID0gTWF0aC5taW4obGluZU51bWJlciwgMjApO1xuICAgICAgICB2YXIgbTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhMaW5lczsgKytpKSB7XG4gICAgICAgICAgICAvLyBsaW5lTm8gaXMgMS1iYXNlZCwgc291cmNlW10gaXMgMC1iYXNlZFxuICAgICAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tsaW5lTnVtYmVyIC0gaSAtIDFdO1xuICAgICAgICAgICAgdmFyIGNvbW1lbnRQb3MgPSBsaW5lLmluZGV4T2YoJy8vJyk7XG4gICAgICAgICAgICBpZiAoY29tbWVudFBvcyA+PSAwKSB7XG4gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3Vic3RyKDAsIGNvbW1lbnRQb3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgICAgICAgIGNvZGUgPSBsaW5lICsgY29kZTtcbiAgICAgICAgICAgICAgICBtID0gcmVGdW5jdGlvbkV4cHJlc3Npb24uZXhlYyhjb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAobSAmJiBtWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtWzFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtID0gcmVGdW5jdGlvbkRlY2xhcmF0aW9uLmV4ZWMoY29kZSk7XG4gICAgICAgICAgICAgICAgaWYgKG0gJiYgbVsxXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVsxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbSA9IHJlRnVuY3Rpb25FdmFsdWF0aW9uLmV4ZWMoY29kZSk7XG4gICAgICAgICAgICAgICAgaWYgKG0gJiYgbVsxXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVsxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZW5zdXJlU3VwcG9ydGVkRW52aXJvbm1lbnQoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjb25zdW1lIHNvdXJjZSBtYXBzIGluIG9sZGVyIGJyb3dzZXJzJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZW5zdXJlU3RhY2tGcmFtZUlzTGVnaXQoc3RhY2tmcmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mIHN0YWNrZnJhbWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBTdGFja0ZyYW1lIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhY2tmcmFtZS5maWxlTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGZpbGUgbmFtZSBpcyBub3QgYSBTdHJpbmcnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhY2tmcmFtZS5saW5lTnVtYmVyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciAlIDEgIT09IDAgfHxcbiAgICAgICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBsaW5lIG51bWJlciBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciAlIDEgIT09IDAgfHxcbiAgICAgICAgICAgICAgICBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGNvbHVtbiBudW1iZXIgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSkge1xuICAgICAgICB2YXIgbSA9IC9cXC9cXC9bI0BdID9zb3VyY2VNYXBwaW5nVVJMPShbXlxccydcIl0rKVxccyokLy5leGVjKHNvdXJjZSk7XG4gICAgICAgIGlmIChtICYmIG1bMV0pIHtcbiAgICAgICAgICAgIHJldHVybiBtWzFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzb3VyY2VNYXBwaW5nVVJMIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwKHJhd1NvdXJjZU1hcCwgYXJncywgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VDYWNoZSkge1xuICAgICAgICB2YXIgbWFwQ29uc3VtZXIgPSBuZXcgU291cmNlTWFwLlNvdXJjZU1hcENvbnN1bWVyKHJhd1NvdXJjZU1hcCk7XG5cbiAgICAgICAgdmFyIGxvYyA9IG1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgIGNvbHVtbjogY29sdW1uTnVtYmVyXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBtYXBwZWRTb3VyY2UgPSBtYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGxvYy5zb3VyY2UpO1xuICAgICAgICBpZiAobWFwcGVkU291cmNlKSB7XG4gICAgICAgICAgICBzb3VyY2VDYWNoZVtsb2Muc291cmNlXSA9IG1hcHBlZFNvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZShsb2MubmFtZSwgYXJncywgbG9jLnNvdXJjZSwgbG9jLmxpbmUsIGxvYy5jb2x1bW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICogICAgICBvcHRzLnNvdXJjZUNhY2hlID0ge3VybDogXCJTb3VyY2UgU3RyaW5nXCJ9ID0+IHByZWxvYWQgc291cmNlIGNhY2hlXG4gICAgICogICAgICBvcHRzLm9mZmxpbmUgPSBUcnVlIHRvIHByZXZlbnQgbmV0d29yayByZXF1ZXN0cy5cbiAgICAgKiAgICAgICAgICAgICAgQmVzdCBlZmZvcnQgd2l0aG91dCBzb3VyY2VzIG9yIHNvdXJjZSBtYXBzLlxuICAgICAqICAgICAgb3B0cy5hamF4ID0gUHJvbWlzZSByZXR1cm5pbmcgZnVuY3Rpb24gdG8gbWFrZSBYLURvbWFpbiByZXF1ZXN0c1xuICAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBTdGFja1RyYWNlR1BTKG9wdHMpIHtcbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFN0YWNrVHJhY2VHUFMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrVHJhY2VHUFMob3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICAgICAgdGhpcy5zb3VyY2VDYWNoZSA9IG9wdHMuc291cmNlQ2FjaGUgfHwge307XG5cbiAgICAgICAgdGhpcy5hamF4ID0gb3B0cy5hamF4IHx8IF94ZHI7XG5cbiAgICAgICAgdGhpcy5fYXRvYiA9IG9wdHMuYXRvYiB8fCBfYXRvYjtcblxuICAgICAgICB0aGlzLl9nZXQgPSBmdW5jdGlvbiBfZ2V0KGxvY2F0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzRGF0YVVybCA9IGxvY2F0aW9uLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRzLm9mZmxpbmUgJiYgIWlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdDYW5ub3QgbWFrZSBuZXR3b3JrIHJlcXVlc3RzIGluIG9mZmxpbmUgbW9kZScpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNEYXRhVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIFVSTHMgY2FuIGhhdmUgcGFyYW1ldGVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VwcG9ydGVkRW5jb2RpbmdSZWdleHAgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9eZGF0YTphcHBsaWNhdGlvblxcL2pzb247KFtcXHc9OlwiLV0rOykqYmFzZTY0LC87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsb2NhdGlvbi5tYXRjaChzdXBwb3J0ZWRFbmNvZGluZ1JlZ2V4cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwU3RhcnQgPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kZWRTb3VyY2UgPSBsb2NhdGlvbi5zdWJzdHIoc291cmNlTWFwU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLl9hdG9iKGVuY29kZWRTb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0gc291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVGhlIGVuY29kaW5nIG9mIHRoZSBpbmxpbmUgc291cmNlbWFwIGlzIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGhyUHJvbWlzZSA9IHRoaXMuYWpheChsb2NhdGlvbiwge21ldGhvZDogJ2dldCd9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhY2hlIHRoZSBQcm9taXNlIHRvIHByZXZlbnQgZHVwbGljYXRlIGluLWZsaWdodCByZXF1ZXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0gPSB4aHJQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyUHJvbWlzZS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIFN0YWNrRnJhbWUsIGVuaGFuY2UgZnVuY3Rpb24gbmFtZSBhbmQgdXNlIHNvdXJjZSBtYXBzIGZvciBhXG4gICAgICAgICAqIGJldHRlciBTdGFja0ZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWUgb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggd2l0aCBzb3VyY2UtbWFwcGVkIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGlucG9pbnQgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRwaW5wb2ludChzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKS50aGVuKGZ1bmN0aW9uKG1hcHBlZFN0YWNrRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lKG1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlLCByZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIFsnY2F0Y2gnXShyZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCByZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBndWVzcyBmdW5jdGlvbiBuYW1lIGZyb20gbG9jYXRpb24gaW5mb3JtYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbmRGdW5jdGlvbk5hbWUgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRmaW5kRnVuY3Rpb25OYW1lKHN0YWNrZnJhbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBfZW5zdXJlU3RhY2tGcmFtZUlzTGVnaXQoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0KHN0YWNrZnJhbWUuZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24gZ2V0U291cmNlQ2FsbGJhY2soc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gc3RhY2tmcmFtZS5saW5lTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uTnVtYmVyID0gc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBndWVzc2VkRnVuY3Rpb25OYW1lID0gX2ZpbmRGdW5jdGlvbk5hbWUoc291cmNlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHJlcGxhY2UgZnVuY3Rpb25OYW1lIGlmIHdlIGZvdW5kIHNvbWV0aGluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3Vlc3NlZEZ1bmN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU3RhY2tGcmFtZShndWVzc2VkRnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrZnJhbWUuYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja2ZyYW1lLmZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBzZWVrIHNvdXJjZS1tYXBwZWQgbG9jYXRpb24gYW5kIHJldHVybiBuZXcgZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZ2V0TWFwcGVkTG9jYXRpb24gPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRnZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN1cHBvcnRlZEVudmlyb25tZW50KCk7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZTtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBzdGFja2ZyYW1lLmZpbGVOYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChmaWxlTmFtZSkudGhlbihmdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmdVUkwgPSBfZmluZFNvdXJjZU1hcHBpbmdVUkwoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzRGF0YVVybCA9IHNvdXJjZU1hcHBpbmdVUkwuc3Vic3RyKDAsIDUpID09PSAnZGF0YTonO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZSA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZS5sYXN0SW5kZXhPZignLycpICsgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZU1hcHBpbmdVUkxbMF0gIT09ICcvJyAmJiAhaXNEYXRhVXJsICYmICEoL15odHRwcz86XFwvXFwvfF5cXC9cXC8vaSkudGVzdChzb3VyY2VNYXBwaW5nVVJMKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwcGluZ1VSTCA9IGJhc2UgKyBzb3VyY2VNYXBwaW5nVVJMO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0KHNvdXJjZU1hcHBpbmdVUkwpLnRoZW4oZnVuY3Rpb24obWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHN0YWNrZnJhbWUubGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW4gPSBzdGFja2ZyYW1lLmNvbHVtbk51bWJlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwID0gX3BhcnNlSnNvbihtYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1hcC5zb3VyY2VSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5zb3VyY2VSb290ID0gYmFzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfZXh0cmFjdExvY2F0aW9uSW5mb0Zyb21Tb3VyY2VNYXAobWFwLCBzdGFja2ZyYW1lLmFyZ3MsIGxpbmUsIGNvbHVtbiwgc291cmNlQ2FjaGUpKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZScsIFsnZXJyb3Itc3RhY2stcGFyc2VyJywgJ3N0YWNrLWdlbmVyYXRvcicsICdzdGFja3RyYWNlLWdwcyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnZXJyb3Itc3RhY2stcGFyc2VyJyksIHJlcXVpcmUoJ3N0YWNrLWdlbmVyYXRvcicpLCByZXF1aXJlKCdzdGFja3RyYWNlLWdwcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2UgPSBmYWN0b3J5KHJvb3QuRXJyb3JTdGFja1BhcnNlciwgcm9vdC5TdGFja0dlbmVyYXRvciwgcm9vdC5TdGFja1RyYWNlR1BTKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIFN0YWNrVHJhY2UoRXJyb3JTdGFja1BhcnNlciwgU3RhY2tHZW5lcmF0b3IsIFN0YWNrVHJhY2VHUFMpIHtcbiAgICB2YXIgX29wdGlvbnMgPSB7XG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBzdGFja2ZyYW1lcyBmb3IgdGhpcyBsaWJyYXJ5IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2UkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignRXJyb3JTdGFja1BhcnNlciQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlR1BTJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrR2VuZXJhdG9yJCQnKSA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZUNhY2hlOiB7fVxuICAgIH07XG5cbiAgICB2YXIgX2dlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRHZW5lcmF0ZUVycm9yKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRXJyb3IgbXVzdCBiZSB0aHJvd24gdG8gZ2V0IHN0YWNrIGluIElFXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdlIDIgZ2l2ZW4gT2JqZWN0cy4gSWYgYSBjb25mbGljdCBvY2N1cnMgdGhlIHNlY29uZCBvYmplY3Qgd2lucy5cbiAgICAgKiBEb2VzIG5vdCBkbyBkZWVwIG1lcmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaXJzdCBiYXNlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWNvbmQgb3ZlcnJpZGVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gbWVyZ2VkIGZpcnN0IGFuZCBzZWNvbmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tZXJnZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcblxuICAgICAgICBbZmlyc3QsIHNlY29uZF0uZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVyci5zdGFjayB8fCBlcnJbJ29wZXJhI3NvdXJjZWxvYyddO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXJlZChzdGFja2ZyYW1lcywgZmlsdGVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXMuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrZnJhbWVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0KG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikgPyB0aGlzLmZyb21FcnJvcihlcnIsIG9wdHMpIDogdGhpcy5nZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgYmFja3RyYWNlIGZyb20gaW52b2NhdGlvbiBwb2ludC5cbiAgICAgICAgICogSU1QT1JUQU5UOiBEb2VzIG5vdCBoYW5kbGUgc291cmNlIG1hcHMgb3IgZ3Vlc3MgZnVuY3Rpb24gbmFtZXMhXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0U3luYzogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0U3luYyhvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyKSA6IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyZWQoc3RhY2ssIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3Igb2JqZWN0LCBwYXJzZSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmb3IgQXJyYXlbU3RhY2tGcmFtZX1cbiAgICAgICAgICovXG4gICAgICAgIGZyb21FcnJvcjogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZnJvbUVycm9yKGVycm9yLCBvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBncHMgPSBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrZnJhbWVzID0gX2ZpbHRlcmVkKEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyb3IpLCBvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShQcm9taXNlLmFsbChzdGFja2ZyYW1lcy5tYXAoZnVuY3Rpb24oc2YpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVPcmlnaW5hbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ3BzLnBpbnBvaW50KHNmKS50aGVuKHJlc29sdmUsIHJlc29sdmVPcmlnaW5hbClbJ2NhdGNoJ10ocmVzb2x2ZU9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBTdGFja0dlbmVyYXRvciB0byBnZW5lcmF0ZSBhIGJhY2t0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IG9mIEFycmF5W1N0YWNrRnJhbWVdXG4gICAgICAgICAqL1xuICAgICAgICBnZW5lcmF0ZUFydGlmaWNpYWxseTogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2VuZXJhdGVBcnRpZmljaWFsbHkob3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgc3RhY2tGcmFtZXMgPSBTdGFja0dlbmVyYXRvci5iYWNrdHJhY2Uob3B0cyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgc3RhY2tGcmFtZXMgPSBzdGFja0ZyYW1lcy5maWx0ZXIob3B0cy5maWx0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGFja0ZyYW1lcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24sIHdyYXAgaXQgc3VjaCB0aGF0IGludm9jYXRpb25zIHRyaWdnZXIgYSBjYWxsYmFjayB0aGF0XG4gICAgICAgICAqIGlzIGNhbGxlZCB3aXRoIGEgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGluc3RydW1lbnRlZFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdpdGggYSBzdGFjayB0cmFjZSBvbiBpbnZvY2F0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVycmJhY2sgb3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGVycm9yIGlmIHVuYWJsZSB0byBnZXQgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIG9wdGlvbmFsIGNvbnRleHQgb2JqZWN0IChlLmcuIHdpbmRvdylcbiAgICAgICAgICovXG4gICAgICAgIGluc3RydW1lbnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnQoZm4sIGNhbGxiYWNrLCBlcnJiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBpbnN0cnVtZW50ZWQsIHJldHVybiBnaXZlbiBGdW5jdGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGluc3RydW1lbnRlZCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnRlZCgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCgpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZyB8fCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb21FcnJvcihlKS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrKVsnY2F0Y2gnXShlcnJiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGluc3RydW1lbnRlZC5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID0gZm47XG5cbiAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50ZWQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBpbnN0cnVtZW50ZWQsXG4gICAgICAgICAqIHJldmVydCB0aGUgZnVuY3Rpb24gdG8gaXQncyBvcmlnaW5hbCAobm9uLWluc3RydW1lbnRlZCkgc3RhdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGRlLWluc3RydW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGRlaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZGVpbnN0cnVtZW50KGZuKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGUtaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIG5vdCBpbnN0cnVtZW50ZWQsIHJldHVybiBvcmlnaW5hbFxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3IgbWVzc2FnZSBhbmQgQXJyYXkgb2YgU3RhY2tGcmFtZXMsIHNlcmlhbGl6ZSBhbmQgUE9TVCB0byBnaXZlbiBVUkwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrZnJhbWVzXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVycm9yTXNnXG4gICAgICAgICAqL1xuICAgICAgICByZXBvcnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJHJlcG9ydChzdGFja2ZyYW1lcywgdXJsLCBlcnJvck1zZykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gb25yZWFkeXN0YXRlY2hhbmdlKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzID49IDIwMCAmJiByZXEuc3RhdHVzIDwgNDAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignUE9TVCB0byAnICsgdXJsICsgJyBmYWlsZWQgd2l0aCBzdGF0dXM6ICcgKyByZXEuc3RhdHVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJlcS5vcGVuKCdwb3N0JywgdXJsKTtcbiAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICAgICAgICAgICAgICAgIHZhciByZXBvcnRQYXlsb2FkID0ge3N0YWNrOiBzdGFja2ZyYW1lc307XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0UGF5bG9hZC5tZXNzYWdlID0gZXJyb3JNc2c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVwb3J0UGF5bG9hZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIl19 diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index 1ca4d62..cc7628d 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stackframe",[],n):"object"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",t=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=s.getArg(n,"version"),t=s.getArg(n,"sources"),o=s.getArg(n,"names",[]),i=s.getArg(n,"sourceRoot",null),a=s.getArg(n,"sourcesContent",null),u=s.getArg(n,"mappings"),l=s.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=s.getArg(n,"version"),o=s.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=s.getArg(e,"offset"),r=s.getArg(n,"line"),o=s.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=c.fromArray(e._names.toArray(),!0),t=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],C=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(r=new i,r.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(t=e.slice(_,a),o=y[t])_+=t.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=g+o[2],g=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),"number"==typeof r.originalLine&&b.push(r)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=s.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(t.prototype),a.prototype.constructor=t,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return r=u.join("/"),""===r&&(r=s?"/":"."),i?(i.path=r,o(i)):r}function a(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),a=t(e);if(a&&(e=a.path||"/"),r&&!r.scheme)return a&&(r.scheme=a.scheme),o(r);if(r||n.match(v))return n;if(a&&!a.host&&!a.path)return a.host=n,o(a);var s="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return a?(a.path=s,o(a)):s}function s(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return e}function c(e){return f(e)?"$"+e:e}function l(e){return f(e)?e.slice(1):e}function f(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function g(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,v=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=a,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(d)},n.relative=s;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?u:c,n.fromSetString=_?u:l,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,a,s){var u=Math.floor((t-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),a=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=a)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),a=5,s=1<>>=a,o>0&&(n|=c),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(s&c),s&=u,f+=s<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,a){if(a>i){var s=t(i,a),u=i-1;r(e,s,a);for(var c=e[a],l=i;a>l;l++)n(e[l],c)<=0&&(u+=1,r(e,u,l));r(e,u+1,l);var f=u+1;o(e,n,i,f-1),o(e,n,f+1,a)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace-gps",["source-map","stackframe"],n):"object"==typeof exports?module.exports=n(require("source-map/lib/source-map-consumer"),require("stackframe")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){"use strict";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open("get",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r,t=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,r=o.exec(s),r&&r[1])return r[1];if(r=t.exec(s),r&&r[1])return r[1];if(r=i.exec(s),r&&r[1])return r[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(r,t,o,i,a){var s=new e.SourceMapConsumer(r),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,t,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o="data:"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,r(c)}else t(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)["catch"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){s(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)["catch"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){a(),s(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(r){var i=e.lineNumber,a=e.columnNumber;"string"==typeof r&&(r=o(r.replace(/^\)\]\}'/,""))),"undefined"==typeof r.sourceRoot&&(r.sourceRoot=f),n(c(r,e.args,i,a,t))},r)["catch"](r)}.bind(this),r)["catch"](r)}.bind(this))})):new l(e)}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stack-generator",["stackframe"],n):"object"==typeof exports?module.exports=n(require("stackframe")):e.StackGenerator=n(e.StackFrame)}(this,function(e){return{backtrace:function(n){var r=[],t=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(t=n.maxStackSize);for(var o=arguments.callee;o&&r.length-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var r=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(r.pop()),i=r.join(" ")||void 0,a=t(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],n)},this)},parseFFOrSafari:function(t){var o=r(t.stack.split("\n"),function(e){return!e.match(a)},this);return n(o,function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return new e(n);var r=n.split("@"),t=this.extractLocation(r.pop()),o=r.join("@")||void 0;return new e(o,void 0,t[0],t[1],t[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,t=n.message.split("\n"),o=[],i=2,a=t.length;a>i;i+=2){var s=r.exec(t[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,t[i]))}return o},parseOpera10:function(n){for(var r=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,t=n.stacktrace.split("\n"),o=[],i=0,a=t.length;a>i;i+=2){var s=r.exec(t[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,t[i]))}return o},parseOpera11:function(t){var i=r(t.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return n(i,function(n){var r,t=n.split("@"),o=this.extractLocation(t.pop()),i=t.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new e(a,s,o[0],o[1],o[2],n)},this)}}}),function(e,n){"use strict";"function"==typeof define&&define.amd?define("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],n):"object"==typeof exports?module.exports=n(require("error-stack-parser"),require("stack-generator"),require("stacktrace-gps")):e.StackTrace=n(e.ErrorStackParser,e.StackGenerator,e.StackTraceGPS)}(this,function(e,n,r){function t(e,n){var r={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(r[n]=e[n]);return r}),r}function o(e){return e.stack||e["opera#sourceloc"]}function i(e,n){return"function"==typeof n?e.filter(n):e}var a={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}},s=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var n=s();return o(n)?this.fromError(n,e):this.generateArtificially(e)},getSync:function(r){r=t(a,r);var u=s(),c=o(u)?e.parse(u):n.backtrace(r);return i(c,r.filter)},fromError:function(n,o){o=t(a,o);var s=new r(o);return new Promise(function(r){var t=i(e.parse(n),o.filter);r(Promise.all(t.map(function(e){return new Promise(function(n){function r(){n(e)}s.pinpoint(e).then(n,r)["catch"](r)})})))}.bind(this))},generateArtificially:function(e){e=t(a,e);var r=n.backtrace(e);return"function"==typeof e.filter&&(r=r.filter(e.filter)),Promise.resolve(r)},instrument:function(e,n,r,t){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,r)["catch"](r),e.apply(t||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,r)["catch"](r),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n,r){return new Promise(function(t,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?t(i.responseText):o(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==r&&(a.message=r),i.send(JSON.stringify(a))})}}}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.StackTrace=e()}}(function(){var e;return function n(e,t,r){function o(a,s){if(!t[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=t[a]={exports:{}};e[a][0].call(l.exports,function(n){var t=e[a][1][n];return o(t?t:n)},l,l.exports,n,e,t,r)}return t[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var t=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(t.pop()),i=t.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],n)},this)},parseFFOrSafari:function(r){var o=t(r.stack.split("\n"),function(e){return!e.match(a)},this);return n(o,function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return new e(n);var t=n.split("@"),r=this.extractLocation(t.pop()),o=t.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=t(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return n(i,function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(a,s,o[0],o[1],o[2],n)},this)}}})},{stackframe:11}],2:[function(e,n,t){function r(){this._array=[],this._set=Object.create(null)}var o=e("./util"),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=i.call(this._set,t),a=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=a)},r.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},t.decode=function(e,n,t){var r,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(s&c),s&=u,f+=s<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},{}],5:[function(e,n,t){function r(e,n,o,i,a,s){var u=Math.floor((n-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?n-u>1?r(u,n,o,i,a,s):s==t.LEAST_UPPER_BOUND?n1?r(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,n,o,i){if(0===n.length)return-1;var a=r(-1,n.length,e,n,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],6:[function(e,n,t){function r(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,t,a){if(a>t){var s=o(t,a),u=t-1;r(e,s,a);for(var c=e[a],l=t;a>l;l++)n(e[l],c)<=0&&(u+=1,r(e,u,l));r(e,u+1,l);var f=u+1;i(e,n,t,f-1),i(e,n,f+1,a)}}t.quickSort=function(e,n){i(e,n,0,e.length-1)}},{}],7:[function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),r=s.getArg(n,"sources"),o=s.getArg(n,"names",[]),i=s.getArg(n,"sourceRoot",null),a=s.getArg(n,"sourcesContent",null),u=s.getArg(n,"mappings"),l=s.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),o=s.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=s.getArg(e,"offset"),t=s.getArg(n,"line"),o=s.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],C=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(t=new i,t.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(_,a),o=y[r])_+=r.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),r?(r.path=n,i(r)):n}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=o(n),r=o(e);if(r&&(e=r.path||"/"),t&&!t.scheme)return r&&(t.scheme=r.scheme),i(t);if(t||n.match(_))return n;if(r&&!r.host&&!r.path)return r.host=n,i(r);var s="/"===n.charAt(0)?n:a(e.replace(/\/+$/,"")+"/"+n);return r?(r.path=s,i(r)):s}function u(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var t=n-10;t>=0;t--)if(36!==e.charCodeAt(t))return!1;return!0}function g(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function h(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=m(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:m(e.name,n.name)))))}t.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;t.urlParse=o,t.urlGenerate=i,t.normalize=a,t.join=s,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},t.relative=u;var y=function(){var e=Object.create(null);return!("__proto__"in e)}();t.toSetString=y?c:l,t.fromSetString=y?c:f,t.compareByOriginalPositions=g,t.compareByGeneratedPositionsDeflated=h,t.compareByGeneratedPositionsInflated=d},{}],9:[function(n,t,r){!function(n,o){"use strict";"function"==typeof e&&e.amd?e("stackframe",[],o):"object"==typeof r?t.exports=o():n.StackFrame=o()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n})},{}],10:[function(n,t,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof r?t.exports=i(n("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var t,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,t=o.exec(s),t&&t[1])return t[1];if(t=r.exec(s),t&&t[1])return t[1];if(t=i.exec(s),t&&t[1])return t[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(t,r,o,i,a){var s=new e.SourceMapConsumer(t),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var o=e.lineNumber,a=e.columnNumber,s=i(r,o,a);t(s?new n(s,e.args,e.fileName,o,a):e)},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(t){var i=e.lineNumber,a=e.columnNumber;"string"==typeof t&&(t=o(t.replace(/^\)\]\}'/,""))),"undefined"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,a,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new l(e)}})},{"source-map/lib/source-map-consumer":7,stackframe:11}],13:[function(n,t,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],i):"object"==typeof r?t.exports=i(n("error-stack-parser"),n("stack-generator"),n("stacktrace-gps")):o.StackTrace=i(o.ErrorStackParser,o.StackGenerator,o.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}function i(e,n){return"function"==typeof n?e.filter(n):e}var a={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}},s=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var n=s();return o(n)?this.fromError(n,e):this.generateArtificially(e)},getSync:function(t){t=r(a,t);var u=s(),c=o(u)?e.parse(u):n.backtrace(t);return i(c,t.filter)},fromError:function(n,o){o=r(a,o);var s=new t(o);return new Promise(function(t){var r=i(e.parse(n),o.filter);t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}s.pinpoint(e).then(n,t)["catch"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(a,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n,t){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==t&&(a.message=t),i.send(JSON.stringify(a))})}}})},{"error-stack-parser":1,"stack-generator":10,"stacktrace-gps":12}]},{},[13])(13)}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 4b7a08d..3adfdc2 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["stacktrace-gps.min.js","stack-generator.js","error-stack-parser.js","stacktrace.js"],"names":["e","n","define","amd","exports","module","StackFrame","this","isNaN","parseFloat","isFinite","r","t","o","i","setFunctionName","setArgs","setFileName","setLineNumber","setColumnNumber","setSource","prototype","getFunctionName","functionName","String","getArgs","args","Object","toString","call","TypeError","getFileName","fileName","getLineNumber","lineNumber","Number","getColumnNumber","columnNumber","getSource","source","join","SourceMap","id","loaded","m","c","p","JSON","parse","replace","sections","s","a","getArg","u","_version","Error","map","normalize","isAbsolute","relative","_names","l","fromArray","_sources","sourceRoot","sourcesContent","_mappings","file","generatedLine","generatedColumn","originalLine","originalColumn","name","line","column","_sections","url","generatedOffset","consumer","ArraySet","g","quickSort","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","charAt","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","_generatedMappings","_originalMappings","at","forEach","allGeneratedPositionsFor","has","indexOf","_findMapping","compareByOriginalPositions","push","lastColumn","SourceMapConsumer","create","toArray","_sourceRoot","_generateSourcesContent","_file","slice","f","length","h","d","_","v","y","C","b","A","decode","value","rest","compareByGeneratedPositionsDeflated","search","computeColumnSpans","lastGeneratedColumn","originalPositionFor","hasContentsOfAllSources","size","some","sourceContentFor","urlParse","scheme","path","generatedPositionFor","BasicSourceMapConsumer","constructor","sources","bias","every","add","IndexedSourceMapConsumer","arguments","match","auth","host","port","split","splice","lastIndexOf","Array","substr","charCodeAt","urlGenerate","toSetString","fromSetString","compareByGeneratedPositionsInflated","Math","floor","_array","_set","hasOwnProperty","getOwnPropertyNames","encode","round","random","require","StackTraceGPS","sourceMap","Promise","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","window","atob","min","exec","sourceCache","ajax","_atob","_get","offline","method","then","bind","pinpoint","getMappedLocation","findFunctionName","substring","test","root","factory","StackGenerator","backtrace","opts","stack","maxStackSize","curr","callee","RegExp","$1","undefined","caller","ErrorStackParser","_map","array","fn","thisArg","output","_filter","filter","_indexOf","target","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","error","stacktrace","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","regExp","parts","filtered","tokens","locationParts","pop","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","argsRaw","functionCall","shift","StackTrace","_merge","first","second","obj","prop","_isShapedLikeParsableError","err","_filtered","stackframes","_options","stackframe","_generateError","fromError","generateArtificially","getSync","gps","resolve","all","sf","resolveOriginal","stackFrames","instrument","callback","errback","__stacktraceOriginalFn","instrumented","apply","deinstrument","report","errorMsg","reject","req","setRequestHeader","reportPayload","stringify"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stackframe\",[],n):\"object\"==typeof exports?module.exports=n():e.StackFrame=n()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,r,t,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==r&&this.setFileName(r),void 0!==t&&this.setLineNumber(t),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",r=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",t=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+r+t+o+i}},n});var SourceMap=function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p=\"\",n(0)}([function(e,n,r){function t(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),t=a.getArg(n,\"sources\"),o=a.getArg(n,\"names\",[]),i=a.getArg(n,\"sourceRoot\",null),s=a.getArg(n,\"sourcesContent\",null),u=a.getArg(n,\"mappings\"),c=a.getArg(n,\"file\",null);if(r!=this._version)throw new Error(\"Unsupported version: \"+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var r=a.getArg(n,\"version\"),o=a.getArg(n,\"sections\");if(r!=this._version)throw new Error(\"Unsupported version: \"+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=a.getArg(e,\"offset\"),r=a.getArg(n,\"line\"),o=a.getArg(n,\"column\");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,f=s.length;f>p;p++){var h=s[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=t.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=r.indexOf(h.name)),c.push(m)),u.push(m)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?a.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var r,t,o,s,u,l=1,p=0,f=0,h=0,m=0,d=0,_=e.length,v=0,y={},C={},b=[],A=[];_>v;)if(\";\"===e.charAt(v))l++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(r=new i,r.generatedLine=l,s=v;_>s&&!this._charIsMappingSeparator(e,s);s++);if(t=e.slice(v,s),o=y[t])v+=t.length;else{for(o=[];s>v;)c.decode(e,v,C),u=C.value,v=C.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[t]=o}r.generatedColumn=p+o[0],p=r.generatedColumn,o.length>1&&(r.source=m+o[1],m+=o[1],r.originalLine=f+o[2],f=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),A.push(r),\"number\"==typeof r.originalLine&&b.push(r)}g(A,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,g(b,a.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,\"name\",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,\"originalLine\",null),column:a.getArg(o,\"originalColumn\",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,\"line\"),originalColumn:a.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",a.compareByOriginalPositions,a.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,\"generatedLine\",null),column:a.getArg(i,\"generatedColumn\",null),lastColumn:a.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;c--)s=u[c],\".\"===s?u.splice(c,1):\"..\"===s?l++:l>0&&(\"\"===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join(\"/\"),\"\"===r&&(r=a?\"/\":\".\"),i?(i.path=r,o(i)):r}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=t(n),s=t(e);if(s&&(e=s.path||\"/\"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a=\"/\"===n.charAt(0)?n:i(e.replace(/\\/+$/,\"\")+\"/\"+n);return s?(s.path=a,o(s)):a}function a(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(0>t)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?\"$\"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function f(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function h(e,n){return e===n?0:e>n?1:-1}function m(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=h(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:h(e.name,n.name)))))}n.getArg=r;var d=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(d)},n.relative=a;var v=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=f,n.compareByGeneratedPositionsInflated=m},function(e,n){function r(e,t,o,i,s,a){var u=Math.floor((t-e)/2)+e,l=s(o,i[u],!0);return 0===l?u:l>0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>s)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=r(1),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;i>o;o++)r.add(e[o],n);return r},t.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},t.prototype.add=function(e,n){var r=o.toSetString(e),t=i.call(this._set,r),s=this._array.length;(!t||n)&&this._array.push(e),t||(this._set[r]=s)},t.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},t.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},t.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(5),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(a=i.decode(e.charCodeAt(n++)),-1===a)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0&&e=n&&r>=e?e-n:e>=t&&o>=e?e-t+l:e>=i&&s>=e?e-i+c:e==a?62:e==u?63:-1}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(s>i){var a=t(i,s),u=i-1;r(e,a,s);for(var l=e[s],c=i;s>c;c++)n(e[c],l)<=0&&(u+=1,r(e,u,c));r(e,u+1,c);var g=u+1;o(e,n,i,g-1),o(e,n,g+1,s)}}n.quickSort=function(e,n){o(e,n,0,e.length-1)}}]);!function(e,n){\"use strict\";\"function\"==typeof define&&define.amd?define(\"stacktrace-gps\",[\"source-map\",\"stackframe\"],n):\"object\"==typeof exports?module.exports=n(require(\"source-map/lib/source-map-consumer\"),require(\"stackframe\")):e.StackTraceGPS=n(e.SourceMap||e.sourceMap,e.StackFrame)}(this,function(e,n){\"use strict\";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open(\"get\",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r,t=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,s=e.split(\"\\n\"),a=\"\",u=Math.min(n,20),l=0;u>l;++l){var c=s[n-l-1],g=c.indexOf(\"//\");if(g>=0&&(c=c.substr(0,g)),c){if(a=c+a,r=o.exec(a),r&&r[1])return r[1];if(r=t.exec(a),r&&r[1])return r[1];if(r=i.exec(a),r&&r[1])return r[1]}}}function s(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function a(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function l(r,t,o,i,s){var a=new e.SourceMapConsumer(r),u=a.originalPositionFor({line:o,column:i}),l=a.sourceContentFor(u.source);return l&&(s[u.source]=l),new n(u.name,t,u.source,u.line,u.column)}return function c(e){return this instanceof c?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||r,this._atob=e.atob||t,this._get=function(n){return new Promise(function(r,t){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])r(this.sourceCache[n]);else if(e.offline&&!o)t(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,s=n.match(i);if(s){var a=s[0].length,u=n.substr(a),l=this._atob(u);this.sourceCache[n]=l,r(l)}else t(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var c=this.ajax(n,{method:\"get\"});this.sourceCache[n]=c,c.then(r,t)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,r){this.getMappedLocation(e).then(function(e){function r(){n(e)}this.findFunctionName(e).then(n,r)[\"catch\"](r)}.bind(this),r)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(r,t){a(e),this._get(e.fileName).then(function(t){var o=i(t,e.lineNumber,e.columnNumber);r(new n(o,e.args,e.fileName,e.lineNumber,e.columnNumber))},t)[\"catch\"](t)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,r){s(),a(e);var t=this.sourceCache,i=e.fileName;this._get(i).then(function(s){var a=u(s),c=\"data:\"===a.substr(0,5),g=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===a[0]||c||/^https?:\\/\\/|^\\/\\//i.test(a)||(a=g+a),this._get(a).then(function(r){var i=e.lineNumber,s=e.columnNumber;\"string\"==typeof r&&(r=o(r.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof r.sourceRoot&&(r.sourceRoot=g),n(l(r,e.args,i,s,t))},r)[\"catch\"](r)}.bind(this),r)[\"catch\"](r)}.bind(this))})):new c(e)}});\n//# sourceMappingURL=stacktrace-gps.min.js.map\n","(function (root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for(var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame(RegExp.$1 || undefined, args));\n } else {\n stack.push(new StackFrame(undefined, args));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+\\:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+\\:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code\\])?$/;\n\n function _map(array, fn, thisArg) {\n if (typeof Array.prototype.map === 'function') {\n return array.map(fn, thisArg);\n } else {\n var output = new Array(array.length);\n for (var i = 0; i < array.length; i++) {\n output[i] = fn.call(thisArg, array[i]);\n }\n return output;\n }\n }\n\n function _filter(array, fn, thisArg) {\n if (typeof Array.prototype.filter === 'function') {\n return array.filter(fn, thisArg);\n } else {\n var output = [];\n for (var i = 0; i < array.length; i++) {\n if (fn.call(thisArg, array[i])) {\n output.push(array[i]);\n }\n }\n return output;\n }\n }\n\n function _indexOf(array, target) {\n if (typeof Array.prototype.indexOf === 'function') {\n return array.indexOf(target);\n } else {\n for (var i = 0; i < array.length; i++) {\n if (array[i] === target) {\n return i;\n }\n }\n return -1;\n }\n }\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?:\\:(\\d+))?(?:\\:(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[\\(\\)]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g, '');\n }\n var tokens = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').split(/\\s+/).slice(1);\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line);\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return _map(filtered, function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame(line);\n } else {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionName = tokens.join('@') || undefined;\n return new StackFrame(functionName,\n undefined,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i]));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame(\n match[3] || undefined,\n undefined,\n match[2],\n match[1],\n undefined,\n lines[i]\n )\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = _filter(error.stack.split('\\n'), function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return _map(filtered, function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^\\)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^\\)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^\\(]+\\(([^\\)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n return new StackFrame(\n functionName,\n args,\n locationParts[0],\n locationParts[1],\n locationParts[2],\n line);\n }, this);\n }\n };\n}));\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n var _generateError = function StackTrace$$GenerateError() {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n return err;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n function _filtered(stackframes, filter) {\n if (typeof filter === 'function') {\n return stackframes.filter(filter);\n }\n return stackframes;\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n var err = _generateError();\n return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts);\n },\n\n /**\n * Get a backtrace from invocation point.\n * IMPORTANT: Does not handle source maps or guess function names!\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n getSync: function StackTrace$$getSync(opts) {\n opts = _merge(_options, opts);\n var err = _generateError();\n var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts);\n return _filtered(stack, opts.filter);\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter);\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n */\n report: function StackTrace$$report(stackframes, url, errorMsg) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n req.setRequestHeader('Content-Type', 'application/json');\n\n var reportPayload = {stack: stackframes};\n if (errorMsg !== undefined) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["stacktrace.min.js"],"sourcesContent":["!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var n;n=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,n.StackTrace=e()}}(function(){var e;return function n(e,t,r){function o(a,s){if(!t[a]){if(!e[a]){var u=\"function\"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error(\"Cannot find module '\"+a+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var l=t[a]={exports:{}};e[a][0].call(l.exports,function(n){var t=e[a][1][n];return o(t?t:n)},l,l.exports,n,e,t,r)}return t[a].exports}for(var i=\"function\"==typeof require&&require,a=0;a-1&&(n=n.replace(/eval code/g,\"eval\").replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g,\"\"));var t=n.replace(/^\\s+/,\"\").replace(/\\(eval code/g,\"(\").split(/\\s+/).slice(1),o=this.extractLocation(t.pop()),i=t.join(\" \")||void 0,a=r([\"eval\",\"\"],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],n)},this)},parseFFOrSafari:function(r){var o=t(r.stack.split(\"\\n\"),function(e){return!e.match(a)},this);return n(o,function(n){if(n.indexOf(\" > eval\")>-1&&(n=n.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g,\":$1\")),-1===n.indexOf(\"@\")&&-1===n.indexOf(\":\"))return new e(n);var t=n.split(\"@\"),r=this.extractLocation(t.pop()),o=t.join(\"@\")||void 0;return new e(o,void 0,r[0],r[1],r[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf(\"\\n\")>-1&&e.message.split(\"\\n\").length>e.stacktrace.split(\"\\n\").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\\d+).*script (?:in )?(\\S+)/i,r=n.message.split(\"\\n\"),o=[],i=2,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i,r=n.stacktrace.split(\"\\n\"),o=[],i=0,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=t(r.stack.split(\"\\n\"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return n(i,function(n){var t,r=n.split(\"@\"),o=this.extractLocation(r.pop()),i=r.shift()||\"\",a=i.replace(//,\"$2\").replace(/\\([^\\)]*\\)/g,\"\")||void 0;i.match(/\\(([^\\)]*)\\)/)&&(t=i.replace(/^[^\\(]+\\(([^\\)]*)\\)$/,\"$1\"));var s=void 0===t||\"[arguments not available]\"===t?void 0:t.split(\",\");return new e(a,s,o[0],o[1],o[2],n)},this)}}})},{stackframe:11}],2:[function(e,n,t){function r(){this._array=[],this._set=Object.create(null)}var o=e(\"./util\"),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=i.call(this._set,t),a=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=a)},r.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=e(\"./base64\"),a=5,s=1<>>=a,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},t.decode=function(e,n,t){var r,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));r=!!(s&c),s&=u,f+=s<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},{}],5:[function(e,n,t){function r(e,n,o,i,a,s){var u=Math.floor((n-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?n-u>1?r(u,n,o,i,a,s):s==t.LEAST_UPPER_BOUND?n1?r(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,n,o,i){if(0===n.length)return-1;var a=r(-1,n.length,e,n,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],6:[function(e,n,t){function r(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,t,a){if(a>t){var s=o(t,a),u=t-1;r(e,s,a);for(var c=e[a],l=t;a>l;l++)n(e[l],c)<=0&&(u+=1,r(e,u,l));r(e,u+1,l);var f=u+1;i(e,n,t,f-1),i(e,n,f+1,a)}}t.quickSort=function(e,n){i(e,n,0,e.length-1)}},{}],7:[function(e,n,t){function r(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var t=s.getArg(n,\"version\"),r=s.getArg(n,\"sources\"),o=s.getArg(n,\"names\",[]),i=s.getArg(n,\"sourceRoot\",null),a=s.getArg(n,\"sourcesContent\",null),u=s.getArg(n,\"mappings\"),l=s.getArg(n,\"file\",null);if(t!=this._version)throw new Error(\"Unsupported version: \"+t);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var t=s.getArg(n,\"version\"),o=s.getArg(n,\"sections\");if(t!=this._version)throw new Error(\"Unsupported version: \"+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=s.getArg(e,\"offset\"),t=s.getArg(n,\"line\"),o=s.getArg(n,\"column\");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],C=[];v>_;)if(\";\"===e.charAt(_))c++,_++,p=0;else if(\",\"===e.charAt(_))_++;else{for(t=new i,t.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(_,a),o=y[r])_+=r.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),C.push(t),\"number\"==typeof t.originalLine&&b.push(t)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[t]);if(e[r]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,\"name\",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,\"originalLine\",null),column:s.getArg(o,\"originalColumn\",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\\/\\//,\"\");if(\"file\"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||\"/\"==t.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:s.getArg(e,\"line\"),originalColumn:s.getArg(e,\"column\")},o=this._findMapping(t,this._originalMappings,\"originalLine\",\"originalColumn\",s.compareByOriginalPositions,s.getArg(e,\"bias\",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],\".\"===a?u.splice(l,1):\"..\"===a?c++:c>0&&(\"\"===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join(\"/\"),\"\"===n&&(n=s?\"/\":\".\"),r?(r.path=n,i(r)):n}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var t=o(n),r=o(e);if(r&&(e=r.path||\"/\"),t&&!t.scheme)return r&&(t.scheme=r.scheme),i(t);if(t||n.match(_))return n;if(r&&!r.host&&!r.path)return r.host=n,i(r);var s=\"/\"===n.charAt(0)?n:a(e.replace(/\\/+$/,\"\")+\"/\"+n);return r?(r.path=s,i(r)):s}function u(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var t=0;0!==n.indexOf(e+\"/\");){var r=e.lastIndexOf(\"/\");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++t}return Array(t+1).join(\"../\")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?\"$\"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var t=n-10;t>=0;t--)if(36!==e.charCodeAt(t))return!1;return!0}function g(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function h(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=m(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:m(e.name,n.name)))))}t.getArg=r;var v=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;t.urlParse=o,t.urlGenerate=i,t.normalize=a,t.join=s,t.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(v)},t.relative=u;var y=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();t.toSetString=y?c:l,t.fromSetString=y?c:f,t.compareByOriginalPositions=g,t.compareByGeneratedPositionsDeflated=h,t.compareByGeneratedPositionsInflated=d},{}],9:[function(n,t,r){!function(n,o){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stackframe\",[],o):\"object\"==typeof r?t.exports=o():n.StackFrame=o()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",t=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",r=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+t+r+o+i}},n})},{}],10:[function(n,t,r){!function(o,i){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stack-generator\",[\"stackframe\"],i):\"object\"==typeof r?t.exports=i(n(\"stackframe\")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;\"object\"==typeof n&&\"number\"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length=200&&r.status<300?n(r.responseText):t(new Error(\"HTTP status: \"+r.status+\" retrieving \"+e)))},r.send()})}function r(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var t,r=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,a=e.split(\"\\n\"),s=\"\",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf(\"//\");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,t=o.exec(s),t&&t[1])return t[1];if(t=r.exec(s),t&&t[1])return t[1];if(t=i.exec(s),t&&t[1])return t[1]}}}function a(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function s(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function c(t,r,o,i,a){var s=new e.SourceMapConsumer(t),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var l=this.ajax(n,{method:\"get\"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)[\"catch\"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var o=e.lineNumber,a=e.columnNumber,s=i(r,o,a);t(s?new n(s,e.args,e.fileName,o,a):e)},r)[\"catch\"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l=\"data:\"===s.substr(0,5),f=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===s[0]||l||/^https?:\\/\\/|^\\/\\//i.test(s)||(s=f+s),this._get(s).then(function(t){var i=e.lineNumber,a=e.columnNumber;\"string\"==typeof t&&(t=o(t.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,a,r))},t)[\"catch\"](t)}.bind(this),t)[\"catch\"](t)}.bind(this))})):new l(e)}})},{\"source-map/lib/source-map-consumer\":7,stackframe:11}],13:[function(n,t,r){!function(o,i){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stacktrace\",[\"error-stack-parser\",\"stack-generator\",\"stacktrace-gps\"],i):\"object\"==typeof r?t.exports=i(n(\"error-stack-parser\"),n(\"stack-generator\"),n(\"stacktrace-gps\")):o.StackTrace=i(o.ErrorStackParser,o.StackGenerator,o.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e[\"opera#sourceloc\"]}function i(e,n){return\"function\"==typeof n?e.filter(n):e}var a={filter:function(e){return-1===(e.functionName||\"\").indexOf(\"StackTrace$$\")&&-1===(e.functionName||\"\").indexOf(\"ErrorStackParser$$\")&&-1===(e.functionName||\"\").indexOf(\"StackTraceGPS$$\")&&-1===(e.functionName||\"\").indexOf(\"StackGenerator$$\")},sourceCache:{}},s=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var n=s();return o(n)?this.fromError(n,e):this.generateArtificially(e)},getSync:function(t){t=r(a,t);var u=s(),c=o(u)?e.parse(u):n.backtrace(t);return i(c,t.filter)},fromError:function(n,o){o=r(a,o);var s=new t(o);return new Promise(function(t){var r=i(e.parse(n),o.filter);t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}s.pinpoint(e).then(n,t)[\"catch\"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(a,e);var t=n.backtrace(e);return\"function\"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if(\"function\"!=typeof e)throw new Error(\"Cannot instrument non-function object\");if(\"function\"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)[\"catch\"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)[\"catch\"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if(\"function\"!=typeof e)throw new Error(\"Cannot de-instrument non-function object\");return\"function\"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n,t){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error(\"POST to \"+n+\" failed with status: \"+i.status)))},i.open(\"post\",n),i.setRequestHeader(\"Content-Type\",\"application/json\");var a={stack:e};void 0!==t&&(a.message=t),i.send(JSON.stringify(a))})}}})},{\"error-stack-parser\":1,\"stack-generator\":10,\"stacktrace-gps\":12}]},{},[13])(13)});"],"file":"stacktrace.min.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 0f20b69..bd9b843 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,24 +1,23 @@ +var browserify = require('browserify'); var concat = require('gulp-concat'); var coveralls = require('gulp-coveralls'); var del = require('del'); var gulp = require('gulp'); var jshint = require('gulp-jshint'); var karma = require('karma'); +var path = require('path'); var rename = require('gulp-rename'); var runSequence = require('run-sequence'); var sourcemaps = require('gulp-sourcemaps'); var uglify = require('gulp-uglify'); +var vinylBuffer = require('vinyl-buffer'); +var vinylSourceStream = require('vinyl-source-stream'); var polyfills = [ './node_modules/es6-promise/dist/es6-promise.js', './node_modules/json3/lib/json3.js', './polyfills.js' ]; -var dependencies = [ - './node_modules/stacktrace-gps/dist/stacktrace-gps.min.js', - './node_modules/stack-generator/dist/stack-generator.js', - './node_modules/error-stack-parser/dist/error-stack-parser.js' -]; var sources = 'stacktrace.js'; gulp.task('lint', function() { @@ -53,21 +52,31 @@ gulp.task('test-ci', ['dist'], function(done) { }); gulp.task('dist', function() { - gulp.src(polyfills.concat(dependencies.concat(sources))) - .pipe(sourcemaps.init()) - .pipe(concat(sources.replace('.js', '-with-promises-and-json-polyfills.js'))) + browserify({ + entries: sources, + debug: true, + standalone: 'StackTrace' + }).bundle() + .pipe(vinylSourceStream(sources)) .pipe(gulp.dest('dist')) - .pipe(uglify()) + .pipe(vinylBuffer()) .pipe(rename({extname: '.min.js'})) + .pipe(uglify()) + .pipe(sourcemaps.init({loadMaps: true})) .pipe(sourcemaps.write('./')) .pipe(gulp.dest('dist')); - return gulp.src(dependencies.concat(sources)) - .pipe(sourcemaps.init()) - .pipe(concat(sources.replace('.js', '.concat.js'))) - .pipe(gulp.dest('dist')) - .pipe(concat(sources.replace('.js', '.min.js'))) + browserify({ + entries: polyfills.concat(sources), + debug: true, + standalone: 'StackTrace' + }).bundle() + .pipe(vinylSourceStream('stacktrace.js')) + .pipe(vinylBuffer()) + .pipe(concat(sources.replace('.js', '-with-promises-and-json-polyfills.js'))) .pipe(uglify()) + .pipe(rename({extname: '.min.js'})) + .pipe(sourcemaps.init({loadMaps: true})) .pipe(sourcemaps.write('./')) .pipe(gulp.dest('dist')); }); diff --git a/package.json b/package.json index 6b66617..686598d 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "stacktrace-gps": "^2.4.3" }, "devDependencies": { + "browserify": "^13.1.0", "colors": "^1.1.2", "del": "^1.2.0", "es6-promise": "^3.1.2", @@ -54,7 +55,9 @@ "karma-safari-launcher": "^0.1.1", "karma-sauce-launcher": "^0.2.14", "karma-spec-reporter": "0.0.23", - "run-sequence": "^1.1.2" + "run-sequence": "^1.1.2", + "vinyl-buffer": "^1.0.0", + "vinyl-source-stream": "^1.1.0" }, "bugs": { "url": "https://github.com/stacktracejs/stacktrace.js/issues" From 28db1b6c149b73b9f9ea66a167be6f4ddf65d750 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Mon, 8 Aug 2016 22:05:37 -0700 Subject: [PATCH 066/110] 1.3.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 686598d..0351bb0 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "Victor Homyakov (https://github.com/victor-homyakov)", "Oliver Salzburg (https://github.com/oliversalzburg)" ], - "version": "1.3.0", + "version": "1.3.1", "license": "Unlicense", "keywords": [ "stacktrace", From e3cbf8a2160d724b7e741f4260888616624cbeaa Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 17 Dec 2016 17:57:55 -0700 Subject: [PATCH 067/110] Fix formatting --- karma.conf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karma.conf.js b/karma.conf.js index c59df21..c5d1e9c 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,4 +1,4 @@ -module.exports = function (config) { +module.exports = function(config) { config.set({ basePath: '', frameworks: ['jasmine-ajax', 'jasmine'], From 4a7431dd22532b1e9affc29cc8ea33cbf5e5d099 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 17 Dec 2016 18:00:14 -0700 Subject: [PATCH 068/110] Update dependencies to next major version This handles the underlying upgrade to stackframe v1.x in unison. - Update error-stack-parser to v2.x - Update stack-generator to v2.x - Update stacktrace-gps to v3.x - Updated specs to use new StackFrame constructor --- package.json | 6 +++--- spec/stacktrace-spec.js | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 0351bb0..2f5d267 100644 --- a/package.json +++ b/package.json @@ -21,9 +21,9 @@ "url": "git://github.com/stacktracejs/stacktrace.js.git" }, "dependencies": { - "error-stack-parser": "^1.3.6", - "stack-generator": "^1.0.7", - "stacktrace-gps": "^2.4.3" + "error-stack-parser": "^2.0.0", + "stack-generator": "^2.0.0", + "stacktrace-gps": "^3.0.0" }, "devDependencies": { "browserify": "^13.1.0", diff --git a/spec/stacktrace-spec.js b/spec/stacktrace-spec.js index 626370e..66aa707 100755 --- a/spec/stacktrace-spec.js +++ b/spec/stacktrace-spec.js @@ -207,7 +207,7 @@ describe('StackTrace', function() { it('sends POST request to given URL with a message', function(done) { var url = 'http://domain.ext/endpoint'; var errorMsg = 'BOOM'; - var stackframes = [new StackFrame('fn', undefined, 'file.js', 32, 1)]; + var stackframes = [new StackFrame({functionName: 'fn', fileName: 'file.js', lineNumber: 32, columnNumber: 1})]; StackTrace.report(stackframes, url, errorMsg).then(callback, done.fail)['catch'](done.fail); @@ -224,7 +224,7 @@ describe('StackTrace', function() { it('sends POST request to given URL without a message', function(done) { var url = 'http://domain.ext/endpoint'; - var stackframes = [new StackFrame('fn', undefined, 'file.js', 32, 1)]; + var stackframes = [new StackFrame({functionName: 'fn', fileName: 'file.js', lineNumber: 32, columnNumber: 1})]; StackTrace.report(stackframes, url).then(callback, done.fail)['catch'](done.fail); @@ -241,7 +241,7 @@ describe('StackTrace', function() { it('rejects if POST request fails', function(done) { var url = 'http://domain.ext/endpoint'; - var stackframes = [new StackFrame('fn', undefined, 'file.js', 32, 1)]; + var stackframes = [new StackFrame({functionName: 'fn', fileName: 'file.js', lineNumber: 32, columnNumber: 1})]; jasmine.Ajax.stubRequest(url).andError(); StackTrace.report(stackframes, url).then(done.fail, done)['catch'](done); From 309dbb80f2fde34d4a4b1fae4f04526ec8858b19 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 17 Dec 2016 18:03:24 -0700 Subject: [PATCH 069/110] Cleanup examples and avoid confusing use of fat arrows --- MIGRATION_GUIDE.md | 20 ++++++++++---------- README.md | 26 +++++++++++++------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/MIGRATION_GUIDE.md b/MIGRATION_GUIDE.md index c45a679..7527864 100644 --- a/MIGRATION_GUIDE.md +++ b/MIGRATION_GUIDE.md @@ -16,13 +16,13 @@ All you have to do to get stacktrace.js v0.x behavior is call `.toString()` on a v0.x: ```js printStackTrace(); -=> Array[String] +//===> Array[String] ``` v1.x: ```js StackTrace.get().then(callback).catch(errback); -=> Promise(Array[StackFrame], Error) +//===> Promise(Array[StackFrame], Error) ``` `StackTrace.get()` returns a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) @@ -34,14 +34,14 @@ v0.x: ```js var error = new Error('Boom'); printStackTrace({e: error}); -=> Array[String] +//===> Array[String] ``` v1.x: ```js var error = new Error('Boom'); StackTrace.fromError(error).then(callback).catch(errback); -=> Promise(Array[StackFrame], Error) +//===> Promise(Array[StackFrame], Error) ``` If this is all you need, you don't even need the full stacktrace.js library! Just use [error-stack-parser](https://github.com/stacktracejs/error-stack-parser)! @@ -55,23 +55,23 @@ Instrumenting now takes `Function` references instead of `String`s. v0.x: ```js -function interestingFn() {...}; +function interestingFn() {/* ... */} var p = new printStackTrace.implementation(); p.instrumentFunction(this, 'interestingFn', logStackTrace); -=> Function (instrumented) +//===> Function (instrumented) p.deinstrumentFunction(this, 'interestingFn'); -=> Function (original) +//===> Function (original) ``` v1.x: ```js -function interestingFn() {...}; +function interestingFn() {/* ... */} StackTrace.instrument(interestingFn, callback, errback); -=> Function (instrumented) +//===> Function (instrumented) StackTrace.deinstrument(interestingFn); -=> Function (original) +//===> Function (original) ``` diff --git a/README.md b/README.md index d9d9bfc..2300b48 100644 --- a/README.md +++ b/README.md @@ -24,9 +24,9 @@ var callback = function(stackframes) { var errback = function(err) { console.log(err.message); }; -StackTrace.get().then(callback).catch(errback) -=> Promise(Array[StackFrame], Error) -=> callback([StackFrame('func1', [], 'file.js', 203, 9), StackFrame('func2', [], 'http://localhost:3000/file.min.js', 1, 3284)]) +StackTrace.get().then(callback).catch(errback); +//===> Promise(Array[StackFrame], Error) +//===> callback([StackFrame('func1', [], 'file.js', 203, 9), StackFrame('func2', [], 'http://localhost:3000/file.min.js', 1, 3284)]) ``` #### window.onerror integration @@ -42,29 +42,29 @@ window.onerror = function(msg, file, line, col, error) { ```js var error = new Error('BOOM!'); -StackTrace.fromError(error).then(callback).catch(errback) -=> Promise(Array[StackFrame], Error) +StackTrace.fromError(error).then(callback).catch(errback); +//===> Promise(Array[StackFrame], Error) ``` #### Generate a stacktrace from walking arguments.callee This might capture arguments information, but isn't supported in ES5 strict-mode ```js -StackTrace.generateArtificially().then(callback).catch(errback) -=> Promise(Array[StackFrame], Error) +StackTrace.generateArtificially().then(callback).catch(errback); +//===> Promise(Array[StackFrame], Error) ``` #### Trace every time a given function is invoked ```js // callback is called with an Array[StackFrame] every time wrapped function is called -var myFunc = function(arg) { return 'Hello ' + arg; } -var myWrappedFunc = StackTrace.instrument(myFunc, callback, errback) -=> Instrumented Function +var myFunc = function(arg) { return 'Hello ' + arg; }; +var myWrappedFunc = StackTrace.instrument(myFunc, callback, errback); +//===> Instrumented Function myWrappedFunc('world'); -=> 'Hello world' +//===> 'Hello world' // Use this if you overwrote you original function -myFunc = StackTrace.deinstrument(myFunc) -=> De-instrumented Function +myFunc = StackTrace.deinstrument(myFunc); +//===> De-instrumented Function ``` ## Get stacktrace.js From 19bb0cc7754ea6731b5b3a65a5ec9197721e4556 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 17 Dec 2016 18:24:57 -0700 Subject: [PATCH 070/110] Add another usage example for StackTrace.getSync() to README --- README.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2300b48..266a23d 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,21 @@ var errback = function(err) { console.log(err.message); }; StackTrace.get().then(callback).catch(errback); //===> Promise(Array[StackFrame], Error) -//===> callback([StackFrame('func1', [], 'file.js', 203, 9), StackFrame('func2', [], 'http://localhost:3000/file.min.js', 1, 3284)]) +//===> callback([ +// StackFrame({functionName: 'func1', args: [], fileName: 'file.js', lineNumber: 203, columnNumber: 9}), +// StackFrame({functionName: 'func2', args: [], fileName: 'http://localhost:3000/file.min.js', lineNumber: 1, columnNumber: 3284}) +//]) +``` + +#### You can also get a stack trace synchronously +**HEADS UP:** This method does not resolve source maps or guess anonymous function names. + +```js +StackTrace.getSync(); +//==> [ +// StackFrame({functionName: 'func1', args: [], fileName: 'file.js', lineNumber: 203, columnNumber: 9}), +// StackFrame({functionName: 'func2', args: [], fileName: 'http://localhost:3000/file.min.js', lineNumber: 1, columnNumber: 3284}) +//] ``` #### window.onerror integration @@ -86,7 +100,7 @@ Generate a backtrace from invocation point, then parse and enhance it. * *offline: Boolean (default: false)* - Set to `true` to prevent all network requests #### `StackTrace.getSync(/*optional*/ options)` => Array[[StackFrame](https://github.com/stacktracejs/stackframe)] -Generate a backtrace from invocation point, then parse it. **HEADS UP:** This method does not use source maps or guess anonymous functions. +Generate a backtrace from invocation point, then parse it. This method does not use source maps or guess anonymous functions. **(Optional) options: Object** * *filter: Function([StackFrame](https://github.com/stacktracejs/stackframe) => Boolean)* - Only include stack entries matching for which `filter` returns `true` From 2e8dbc2b41408af5a941270b2e1e8612b5a89261 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 17 Dec 2016 18:44:49 -0700 Subject: [PATCH 071/110] Allow request headers to be set in StackTrace.report() This adds a 4th Object parameter for request options to StackTrace.report(). Specifying headers: {} allows one to customize request headers. Issue: #168 --- spec/stacktrace-spec.js | 19 +++++++++++++++++-- stacktrace.js | 15 +++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/spec/stacktrace-spec.js b/spec/stacktrace-spec.js index 66aa707..d5adbe6 100755 --- a/spec/stacktrace-spec.js +++ b/spec/stacktrace-spec.js @@ -216,8 +216,6 @@ describe('StackTrace', function() { function callback() { expect(postRequest.data()).toEqual({message: errorMsg, stack: stackframes}); - expect(postRequest.method).toBe('post'); - expect(postRequest.url).toBe(url); done(); } }); @@ -246,5 +244,22 @@ describe('StackTrace', function() { jasmine.Ajax.stubRequest(url).andError(); StackTrace.report(stackframes, url).then(done.fail, done)['catch'](done); }); + + it('allows specification of request headers', function(done) { + var url = 'http://domain.ext/endpoint'; + var stackframes = [new StackFrame({functionName: 'fn', fileName: 'file.js', lineNumber: 32, columnNumber: 1})]; + var requestOptions = {headers: {'Access-Control-Request-Method': 'POST'}}; + + StackTrace.report(stackframes, url, null, requestOptions).then(callback, done.fail)['catch'](done.fail); + + var postRequest = jasmine.Ajax.requests.mostRecent(); + postRequest.respondWith({status: 201, contentType: 'text/plain', responseText: 'OK'}); + + function callback() { + expect(postRequest.data()).toEqual({stack: stackframes}); + expect(postRequest.requestHeaders).toEqual({'Access-Control-Request-Method': 'POST', 'Content-Type': 'application/json'}); + done(); + } + }); }); }); diff --git a/stacktrace.js b/stacktrace.js index fae85c9..2f16236 100644 --- a/stacktrace.js +++ b/stacktrace.js @@ -187,8 +187,9 @@ * @param {Array} stackframes * @param {String} url * @param {String} errorMsg + * @param {Object} requestOptions */ - report: function StackTrace$$report(stackframes, url, errorMsg) { + report: function StackTrace$$report(stackframes, url, errorMsg, requestOptions) { return new Promise(function(resolve, reject) { var req = new XMLHttpRequest(); req.onerror = reject; @@ -202,10 +203,20 @@ } }; req.open('post', url); + + // Set request headers req.setRequestHeader('Content-Type', 'application/json'); + if (requestOptions && typeof requestOptions.headers === 'object') { + var headers = requestOptions.headers; + for (var header in headers) { + if (headers.hasOwnProperty(header)) { + req.setRequestHeader(header, headers[header]); + } + } + } var reportPayload = {stack: stackframes}; - if (errorMsg !== undefined) { + if (errorMsg !== undefined && errorMsg !== null) { reportPayload.message = errorMsg; } From 5916c118be0c549f5b46dc0d26a30c7516ae2f6a Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 17 Dec 2016 18:50:21 -0700 Subject: [PATCH 072/110] Add usage doc for StackTrace.report() for custom request headers --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 266a23d..e4b65df 100644 --- a/README.md +++ b/README.md @@ -137,7 +137,7 @@ Given a function that has been instrumented, revert the function to it's origina * **fn: Function** - Instrumented Function -#### `StackTrace.report(stackframes, url, message)` => [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)(String) +#### `StackTrace.report(stackframes, url, message, requestOptions)` => [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)(String) Given an an error message and Array of StackFrames, serialize and POST to given URL. Promise is resolved with response text from POST request. Example JSON POST data: @@ -152,9 +152,10 @@ Example JSON POST data: } ``` -* **message: String** - The error message * **stackframes: Array([StackFrame](https://github.com/stacktracejs/stackframe))** - Previously wrapped Function * **url: String** - URL to POST stack JSON to +* **message: String** - The error message +* **requestOptions: Object** - HTTP request options object. Only `headers: {key: val}` is supported. ## Browser Support [![Sauce Test Status](https://saucelabs.com/browser-matrix/stacktracejs.svg)](https://saucelabs.com/u/stacktracejs) From 508ee216677e8dd2ebb7fd25352032f5b1667cf8 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 17 Dec 2016 19:02:02 -0700 Subject: [PATCH 073/110] Update Microsoft Edge and Safari versions in Sauce Labs coverage --- karma.conf.ci.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/karma.conf.ci.js b/karma.conf.ci.js index ac6dfdc..b99c899 100644 --- a/karma.conf.ci.js +++ b/karma.conf.ci.js @@ -54,15 +54,21 @@ module.exports = function(config) { platform: 'OS X 10.11', version: '9' }, + slSafari10: { + base: 'SauceLabs', + browserName: 'safari', + platform: 'OS X 10.11', + version: '10' + }, slOpera: { base: 'SauceLabs', browserName: 'opera' }, - slEdge20: { + slEdge14: { base: 'SauceLabs', browserName: 'microsoftedge', platform: 'Windows 10', - version: '20.10240' + version: '14.14393' }, slIE11: { base: 'SauceLabs', From b4ae285d4d59a6e9cd24629231b310003fa118d1 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 9 Apr 2017 13:18:31 -0700 Subject: [PATCH 074/110] Update dist with changes on master --- ...ce-with-promises-and-json-polyfills.min.js | 4 +- ...ith-promises-and-json-polyfills.min.js.map | 2 +- dist/stacktrace.js | 511 +++++++++--------- dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- 5 files changed, 274 insertions(+), 247 deletions(-) diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index c65f3bf..30b82c3 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}})},{stackframe:14}],2:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function a(e){return"function"==typeof e}function s(e){Z=e}function u(e){V=e}function c(){return function(){r.nextTick(g)}}function l(){return function(){z(g)}}function f(){var e=0,t=new Q(g),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=g,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(g,1)}}function g(){for(var e=0;W>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}W=0}function d(){try{var e=t,n=e("vertx");return z=n.runOnLoop||n.runOnContext,l()}catch(r){return h()}}function m(e,t){var n=this,r=n._state;if(r===ae&&!e||r===se&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var a=arguments[r-1];V(function(){P(r,o,a,i)})}else j(n,o,e,t);return o}function y(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(v);return E(n,e),n}function v(){}function _(){return new TypeError("You cannot resolve a promise with itself")}function w(){return new TypeError("A promises callback cannot return that same promise.")}function b(e){try{return e.then}catch(t){return ue.error=t,ue}}function A(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function C(e,t,n){V(function(e){var r=!1,o=A(n,t,function(n){r||(r=!0,t!==n?E(e,n):N(e,n))},function(t){r||(r=!0,T(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,T(e,o))},e)}function O(e,t){t._state===ae?N(e,t._result):t._state===se?T(e,t._result):j(t,void 0,function(t){E(e,t)},function(t){T(e,t)})}function S(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?O(e,t):n===ue?T(e,ue.error):void 0===n?N(e,t):a(n)?C(e,t,n):N(e,t)}function E(e,t){e===t?T(e,_()):i(t)?S(e,t,b(t)):N(e,t)}function L(e){e._onerror&&e._onerror(e._result),M(e)}function N(e,t){e._state===ie&&(e._result=t,e._state=ae,0!==e._subscribers.length&&V(M,e))}function T(e,t){e._state===ie&&(e._state=se,e._result=t,V(L,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+ae]=n,o[i+se]=r,0===i&&e._state&&V(M,e)}function M(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)j(r.resolve(e[a]),void 0,t,n);return o}function G(e){var t=this,n=new t(v);return T(n,e),n}function $(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function D(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function B(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&("function"!=typeof e&&$(),this instanceof B?R(this,e):D())}function J(e,t){this._instanceConstructor=e,this.promise=new e(v),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?N(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&N(this.promise,this._result))):T(this.promise,this._validationError())}function q(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ge)}var I;I=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var z,Z,Y,H=I,W=0,V=function(e,t){ne[W]=e,ne[W+1]=t,W+=2,2===W&&(Z?Z(g):Y())},X="undefined"!=typeof window?window:void 0,K=X||{},Q=K.MutationObserver||K.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);Y=ee?c():Q?f():te?p():void 0===X&&"function"==typeof t?d():h();var re=m,oe=y,ie=void 0,ae=1,se=2,ue=new k,ce=new k,le=F,fe=U,pe=G,he=0,ge=B;B.all=le,B.race=fe,B.resolve=oe,B.reject=pe,B._setScheduler=s,B._setAsap=u,B._asap=V,B.prototype={constructor:B,then:re,"catch":function(e){return this.then(null,e)}};var de=J;J.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},J.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},J.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=b(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ge){var i=new n(v);S(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},J.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===se?T(r,n):this._result[t]=n),0===this._remaining&&N(r,this._result)},J.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(ae,t,e)},function(e){n._settledAt(se,t,e)})};var me=q,ye={Promise:ge,polyfill:me};"function"==typeof e&&e.amd?e(function(){return ye}):"undefined"!=typeof n&&n.exports?n.exports=ye:"undefined"!=typeof this&&(this.ES6Promise=ye),me()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:4}],3:[function(t,n,r){(function(t){(function(){function o(e,t){function n(e){if(n[e]!==m)return n[e];var o;if("bug-string-char-index"==e)o="a"!="a"[0];else if("json"==e)o=n("json-stringify")&&n("json-parse");else{var a,s='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=t.stringify,l="function"==typeof u&&_;if(l){(a=function(){return 1}).toJSON=a;try{l="0"===u(0)&&"0"===u(new r)&&'""'==u(new i)&&u(v)===m&&u(m)===m&&u()===m&&"1"===u(a)&&"[1]"==u([a])&&"[null]"==u([m])&&"null"==u(null)&&"[null,null,null]"==u([m,v,null])&&u({a:[a,!0,!1,null,"\x00\b\n\f\r "]})==s&&"1"===u(null,a)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}o=l}if("json-parse"==e){var p=t.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){a=p(s);var h=5==a.a.length&&1===a.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}o=h}}return n[e]=!!o}e||(e=u.Object()),t||(t=u.Object());var r=e.Number||u.Number,i=e.String||u.String,s=e.Object||u.Object,c=e.Date||u.Date,l=e.SyntaxError||u.SyntaxError,f=e.TypeError||u.TypeError,p=e.Math||u.Math,h=e.JSON||u.JSON;"object"==typeof h&&h&&(t.stringify=h.stringify,t.parse=h.parse);var g,d,m,y=s.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!n("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",L=n("bug-string-char-index");if(!_)var N=p.floor,T=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return T[t]+365*(e-1970)+N((e-1969+(t=+(t>1)))/4)-N((e-1901+t)/100)+N((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?d=2==i?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var n,o,i=v.call(e)==b,s=!i&&"function"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&"prototype"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),d(e,t)},!n("json-stringify")){var M={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},k="000000",x=function(e,t){return(k+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!L||r>10,i=o&&(L?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=M[a];break;default:if(32>a){t+=P+x(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,L,T,M,k,P,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=N(s/864e5),c=N(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=N((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=N(h/36e5)%24,_=N(h/6e4)%60,w=N(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+x(6,0>c?-c:c):x(4,c))+"-"+x(2,l+1)+"-"+x(2,p)+"T"+x(2,y)+":"+x(2,_)+":"+x(2,w)+"."+x(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),L=[],P=i,i+=o,u==S){for(M=0,k=s.length;k>M;M++)T=F(M,s,n,r,o,i,a),L.push(T===m?"null":T);U=L.length?o?"[\n"+i+L.join(",\n"+i)+"\n"+P+"]":"["+L.join(",")+"]":"[]"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&L.push(R(e)+":"+(o?" ":"")+t)}),U=L.length?o?"{\n"+i+L.join(",\n"+i)+"\n"+P+"}":"{"+L.join(",")+"}":"{}";return a.pop(),U}};t.stringify=function(e,t,n){var r,o,i,s;if(a[typeof t]&&t)if((s=v.call(t))==b)o=t;else if(s==S){i={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(i[u]=1));}if(n)if((s=v.call(n))==C){if((n-=n%1)>0)for(r="",n>10&&(n=10);r.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=L?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(L?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(L?e.charAt(0):e[0])||":"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,G=""+e,n=q(J()),"$"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return t.runInContext=o,t}var i="function"==typeof e&&e.amd,a={"function":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&"object"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,t,n){function r(e){if(c===setTimeout)return setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function o(e){if(l===clearTimeout)return clearTimeout(e);try{return l(e)}catch(t){try{return l.call(null,e)}catch(t){return l.call(this,e)}}}function i(){g&&p&&(g=!1,p.length?h=p.concat(h):d=-1,h.length&&a())}function a(){if(!g){var e=r(i);g=!0;for(var t=h.length;t;){for(p=h,h=[];++d1)for(var n=1;no;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},{}],8:[function(e,t,n){function r(e,t,o,i,a,s){var u=Math.floor((t-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],9:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(a>n){var s=o(n,a),u=n-1;r(e,s,a);for(var c=e[a],l=n;a>l;l++)t(e[l],c)<=0&&(u+=1,r(e,u,l));r(e,u+1,l);var f=u+1;i(e,t,n,f-1),i(e,t,f+1,a)}}n.quickSort=function(e,t){i(e,t,0,e.length-1)}},{}],10:[function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=o(t),r=o(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(v))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,i(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(9>t)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function d(e,t){return e===t?0:e>t?1:-1}function m(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=d(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:d(e.name,t.name)))))}n.getArg=r;var y=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,v=/^data:.+\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(y)},n.relative=u;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},{}],12:[function(t,n,r){!function(t,o){"use strict";"function"==typeof e&&e.amd?e("stackframe",[],o):"object"==typeof r?n.exports=o():t.StackFrame=o()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t})},{}],13:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof r?n.exports=i(t("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=e.lineNumber,a=e.columnNumber,s=i(r,o,a);n(s?new t(s,e.args,e.fileName,o,a):e)},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}})},{"source-map/lib/source-map-consumer":10,stackframe:14}],16:[function(e,t,n){Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}})},{}],17:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],i):"object"==typeof r?n.exports=i(t("error-stack-parser"),t("stack-generator"),t("stacktrace-gps")):o.StackTrace=i(o.ErrorStackParser,o.StackGenerator,o.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}function i(e,t){return"function"==typeof t?e.filter(t):e}var a={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}},s=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var t=s();return o(t)?this.fromError(t,e):this.generateArtificially(e)},getSync:function(n){n=r(a,n);var u=s(),c=o(u)?e.parse(u):t.backtrace(n);return i(c,n.filter)},fromError:function(t,o){o=r(a,o);var s=new n(o);return new Promise(function(n){var r=i(e.parse(t),o.filter);n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}s.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(a,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t,n){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+t+" failed with status: "+i.status)))},i.open("post",t),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==n&&(a.message=n),i.send(JSON.stringify(a))})}}})},{"error-stack-parser":1,"stack-generator":13,"stacktrace-gps":15}]},{},[2,3,16,17])(17)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i=["eval",""].indexOf(r[0])>-1?void 0:r[0];return new e({functionName:o,fileName:i,lineNumber:r[1],columnNumber:r[2],source:t})},this)},parseFFOrSafari:function(t){var n=t.stack.split("\n").filter(function(e){return!e.match(r)},this);return n.map(function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),t.indexOf("@")===-1&&t.indexOf(":")===-1)return new e({functionName:t});var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e({functionName:o,fileName:r[0],lineNumber:r[1],columnNumber:r[2],source:t})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:t})},this)}}})},{stackframe:13}],2:[function(t,n,r){(function(o,i){!function(t,o){"object"==typeof r&&"undefined"!=typeof n?n.exports=o():"function"==typeof e&&e.amd?e(o):t.ES6Promise=o()}(this,function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function n(e){return"function"==typeof e}function r(e){W=e}function a(e){V=e}function s(){return function(){return o.nextTick(p)}}function u(){return function(){Y(p)}}function c(){var e=0,t=new Q(p),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function l(){var e=new MessageChannel;return e.port1.onmessage=p,function(){return e.port2.postMessage(0)}}function f(){var e=setTimeout;return function(){return e(p,1)}}function p(){for(var e=0;e1)))/4)-T((e-1901+t)/100)+T((e-1601+t)/400)};if((g=v.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=y?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?m=2==i?function(e,t){var n,r={},o=y.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=y.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var n,o,i=y.call(e)==b,s=!i&&"function"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&"prototype"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),m(e,t)},!n("json-stringify")){var j={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},k="000000",P=function(e,t){return(k+(t||0)).slice(-e)},x="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);n-1/0&&s<1/0){if(M){for(p=T(s/864e5),c=T(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=T((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,v=T(h/36e5)%24,_=T(h/6e4)%60,w=T(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),v=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(c<=0||c>=1e4?(c<0?"-":"+")+P(6,c<0?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,v)+":"+P(2,_)+":"+P(2,w)+"."+P(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=y.call(s),u==E)return""+s;if(u==A)return s>-1/0&&s<1/0?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),N=[],x=i,i+=o,u==S){for(j=0,k=s.length;j0)for(r="",n>10&&(n=10);r.length=48&&o<=57||o>=97&&o<=102||o>=65&&o<=70||B();e+=G("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&o<=57){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&o<=57)&&B(),r=!1;U=48&&o<=57);U++);if(46==i.charCodeAt(U)){for(n=++U;n=48&&o<=57);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),43!=o&&45!=o||U++,n=U;n=48&&o<=57);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),","!=e&&"string"==typeof e&&"@"==(N?e.charAt(0):e[0])&&":"==J()||B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(y.call(o)==S)for(r=o.length;r--;)I(o,r,n);else m(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,$=""+e,n=q(J()),"$"!=J()&&B(),U=$=null,t&&y.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return t.runInContext=o,t}var i="function"==typeof e&&e.amd,a={"function":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&"object"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,t,n){function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function a(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function s(){d&&g&&(d=!1,g.length?m=g.concat(m):v=-1,m.length&&u())}function u(){if(!d){var e=i(s);d=!0;for(var t=m.length;t;){for(g=m,m=[];++v1)for(var n=1;n=0&&e>1;return t?-n:n}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],9:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;p1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),C.push(n),"number"==typeof n.originalLine&&b.push(n)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=o(t),r=o(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(y))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,i(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function m(e,t){return e===t?0:e>t?1:-1}function d(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=m(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:m(e.name,t.name)))))}n.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},n.relative=u;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=d},{}],12:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof r?n.exports=i(t("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300||"file://"===e.substr(0,7)&&r.responseText?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],r=e.split("\n"),o="",i=Math.min(t,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=n.length,l=0;l>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;a>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;i>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;r=200&&a.status<400?o(a.responseText):i(new Error("POST to "+t+" failed with status: "+a.status)))},a.open("post",t),a.setRequestHeader("Content-Type","application/json"),r&&"object"==typeof r.headers){var s=r.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==n&&null!==n&&(c.message=n),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":12,"stacktrace-gps":14}]},{},[2,3,15,16])(16)}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map index e5b286d..3211e6b 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["stacktrace-with-promises-and-json-polyfills.min.js"],"sourcesContent":["!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var t;t=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u=\"function\"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error(\"Cannot find module '\"+a+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i=\"function\"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,\"eval\").replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g,\"\"));var n=t.replace(/^\\s+/,\"\").replace(/\\(eval code/g,\"(\").split(/\\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(\" \")||void 0,a=r([\"eval\",\"\"],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split(\"\\n\"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(\" > eval\")>-1&&(t=t.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g,\":$1\")),-1===t.indexOf(\"@\")&&-1===t.indexOf(\":\"))return new e(t);var n=t.split(\"@\"),r=this.extractLocation(n.pop()),o=n.join(\"@\")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf(\"\\n\")>-1&&e.message.split(\"\\n\").length>e.stacktrace.split(\"\\n\").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\\d+).*script (?:in )?(\\S+)/i,r=t.message.split(\"\\n\"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i,r=t.stacktrace.split(\"\\n\"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split(\"\\n\"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split(\"@\"),o=this.extractLocation(r.pop()),i=r.shift()||\"\",a=i.replace(//,\"$2\").replace(/\\([^\\)]*\\)/g,\"\")||void 0;i.match(/\\(([^\\)]*)\\)/)&&(n=i.replace(/^[^\\(]+\\(([^\\)]*)\\)$/,\"$1\"));var s=void 0===n||\"[arguments not available]\"===n?void 0:n.split(\",\");return new e(a,s,o[0],o[1],o[2],t)},this)}}})},{stackframe:14}],2:[function(t,n,r){(function(r,o){(function(){\"use strict\";function i(e){return\"function\"==typeof e||\"object\"==typeof e&&null!==e}function a(e){return\"function\"==typeof e}function s(e){Z=e}function u(e){V=e}function c(){return function(){r.nextTick(g)}}function l(){return function(){z(g)}}function f(){var e=0,t=new Q(g),n=document.createTextNode(\"\");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=g,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(g,1)}}function g(){for(var e=0;W>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}W=0}function d(){try{var e=t,n=e(\"vertx\");return z=n.runOnLoop||n.runOnContext,l()}catch(r){return h()}}function m(e,t){var n=this,r=n._state;if(r===ae&&!e||r===se&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var a=arguments[r-1];V(function(){P(r,o,a,i)})}else j(n,o,e,t);return o}function y(e){var t=this;if(e&&\"object\"==typeof e&&e.constructor===t)return e;var n=new t(v);return E(n,e),n}function v(){}function _(){return new TypeError(\"You cannot resolve a promise with itself\")}function w(){return new TypeError(\"A promises callback cannot return that same promise.\")}function b(e){try{return e.then}catch(t){return ue.error=t,ue}}function A(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function C(e,t,n){V(function(e){var r=!1,o=A(n,t,function(n){r||(r=!0,t!==n?E(e,n):N(e,n))},function(t){r||(r=!0,T(e,t))},\"Settle: \"+(e._label||\" unknown promise\"));!r&&o&&(r=!0,T(e,o))},e)}function O(e,t){t._state===ae?N(e,t._result):t._state===se?T(e,t._result):j(t,void 0,function(t){E(e,t)},function(t){T(e,t)})}function S(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?O(e,t):n===ue?T(e,ue.error):void 0===n?N(e,t):a(n)?C(e,t,n):N(e,t)}function E(e,t){e===t?T(e,_()):i(t)?S(e,t,b(t)):N(e,t)}function L(e){e._onerror&&e._onerror(e._result),M(e)}function N(e,t){e._state===ie&&(e._result=t,e._state=ae,0!==e._subscribers.length&&V(M,e))}function T(e,t){e._state===ie&&(e._state=se,e._result=t,V(L,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+ae]=n,o[i+se]=r,0===i&&e._state&&V(M,e)}function M(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)j(r.resolve(e[a]),void 0,t,n);return o}function G(e){var t=this,n=new t(v);return T(n,e),n}function $(){throw new TypeError(\"You must pass a resolver function as the first argument to the promise constructor\")}function D(){throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\")}function B(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&(\"function\"!=typeof e&&$(),this instanceof B?R(this,e):D())}function J(e,t){this._instanceConstructor=e,this.promise=new e(v),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?N(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&N(this.promise,this._result))):T(this.promise,this._validationError())}function q(){var e;if(\"undefined\"!=typeof o)e=o;else if(\"undefined\"!=typeof self)e=self;else try{e=Function(\"return this\")()}catch(t){throw new Error(\"polyfill failed because global object is unavailable in this environment\")}var n=e.Promise;(!n||\"[object Promise]\"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ge)}var I;I=Array.isArray?Array.isArray:function(e){return\"[object Array]\"===Object.prototype.toString.call(e)};var z,Z,Y,H=I,W=0,V=function(e,t){ne[W]=e,ne[W+1]=t,W+=2,2===W&&(Z?Z(g):Y())},X=\"undefined\"!=typeof window?window:void 0,K=X||{},Q=K.MutationObserver||K.WebKitMutationObserver,ee=\"undefined\"!=typeof r&&\"[object process]\"==={}.toString.call(r),te=\"undefined\"!=typeof Uint8ClampedArray&&\"undefined\"!=typeof importScripts&&\"undefined\"!=typeof MessageChannel,ne=new Array(1e3);Y=ee?c():Q?f():te?p():void 0===X&&\"function\"==typeof t?d():h();var re=m,oe=y,ie=void 0,ae=1,se=2,ue=new k,ce=new k,le=F,fe=U,pe=G,he=0,ge=B;B.all=le,B.race=fe,B.resolve=oe,B.reject=pe,B._setScheduler=s,B._setAsap=u,B._asap=V,B.prototype={constructor:B,then:re,\"catch\":function(e){return this.then(null,e)}};var de=J;J.prototype._validationError=function(){return new Error(\"Array Methods must be provided an Array\")},J.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},J.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=b(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if(\"function\"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ge){var i=new n(v);S(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},J.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===se?T(r,n):this._result[t]=n),0===this._remaining&&N(r,this._result)},J.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(ae,t,e)},function(e){n._settledAt(se,t,e)})};var me=q,ye={Promise:ge,polyfill:me};\"function\"==typeof e&&e.amd?e(function(){return ye}):\"undefined\"!=typeof n&&n.exports?n.exports=ye:\"undefined\"!=typeof this&&(this.ES6Promise=ye),me()}).call(this)}).call(this,t(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{_process:4}],3:[function(t,n,r){(function(t){(function(){function o(e,t){function n(e){if(n[e]!==m)return n[e];var o;if(\"bug-string-char-index\"==e)o=\"a\"!=\"a\"[0];else if(\"json\"==e)o=n(\"json-stringify\")&&n(\"json-parse\");else{var a,s='{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';if(\"json-stringify\"==e){var u=t.stringify,l=\"function\"==typeof u&&_;if(l){(a=function(){return 1}).toJSON=a;try{l=\"0\"===u(0)&&\"0\"===u(new r)&&'\"\"'==u(new i)&&u(v)===m&&u(m)===m&&u()===m&&\"1\"===u(a)&&\"[1]\"==u([a])&&\"[null]\"==u([m])&&\"null\"==u(null)&&\"[null,null,null]\"==u([m,v,null])&&u({a:[a,!0,!1,null,\"\\x00\\b\\n\\f\\r\t\"]})==s&&\"1\"===u(null,a)&&\"[\\n 1,\\n 2\\n]\"==u([1,2],null,1)&&'\"-271821-04-20T00:00:00.000Z\"'==u(new c(-864e13))&&'\"+275760-09-13T00:00:00.000Z\"'==u(new c(864e13))&&'\"-000001-01-01T00:00:00.000Z\"'==u(new c(-621987552e5))&&'\"1969-12-31T23:59:59.999Z\"'==u(new c(-1))}catch(f){l=!1}}o=l}if(\"json-parse\"==e){var p=t.parse;if(\"function\"==typeof p)try{if(0===p(\"0\")&&!p(!1)){a=p(s);var h=5==a.a.length&&1===a.a[0];if(h){try{h=!p('\"\t\"')}catch(f){}if(h)try{h=1!==p(\"01\")}catch(f){}if(h)try{h=1!==p(\"1.\")}catch(f){}}}}catch(f){h=!1}o=h}}return n[e]=!!o}e||(e=u.Object()),t||(t=u.Object());var r=e.Number||u.Number,i=e.String||u.String,s=e.Object||u.Object,c=e.Date||u.Date,l=e.SyntaxError||u.SyntaxError,f=e.TypeError||u.TypeError,p=e.Math||u.Math,h=e.JSON||u.JSON;\"object\"==typeof h&&h&&(t.stringify=h.stringify,t.parse=h.parse);var g,d,m,y=s.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!n(\"json\")){var b=\"[object Function]\",A=\"[object Date]\",C=\"[object Number]\",O=\"[object String]\",S=\"[object Array]\",E=\"[object Boolean]\",L=n(\"bug-string-char-index\");if(!_)var N=p.floor,T=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return T[t]+365*(e-1970)+N((e-1969+(t=+(t>1)))/4)-N((e-1901+t)/100)+N((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?d=2==i?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&\"prototype\"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&\"prototype\"==n||!g.call(e,n)||(r=\"constructor\"===n)||t(n);(r||g.call(e,n=\"constructor\"))&&t(n)}:(r=[\"valueOf\",\"toString\",\"toLocaleString\",\"propertyIsEnumerable\",\"isPrototypeOf\",\"hasOwnProperty\",\"constructor\"],d=function(e,t){var n,o,i=v.call(e)==b,s=!i&&\"function\"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&\"prototype\"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),d(e,t)},!n(\"json-stringify\")){var M={92:\"\\\\\\\\\",34:'\\\\\"',8:\"\\\\b\",12:\"\\\\f\",10:\"\\\\n\",13:\"\\\\r\",9:\"\\\\t\"},k=\"000000\",x=function(e,t){return(k+(t||0)).slice(-e)},P=\"\\\\u00\",R=function(e){for(var t='\"',n=0,r=e.length,o=!L||r>10,i=o&&(L?e.split(\"\"):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=M[a];break;default:if(32>a){t+=P+x(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'\"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,L,T,M,k,P,U;try{s=t[e]}catch(G){}if(\"object\"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,\"toJSON\"))\"function\"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,\"toJSON\"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=N(s/864e5),c=N(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=N((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=N(h/36e5)%24,_=N(h/6e4)%60,w=N(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?\"-\":\"+\")+x(6,0>c?-c:c):x(4,c))+\"-\"+x(2,l+1)+\"-\"+x(2,p)+\"T\"+x(2,y)+\":\"+x(2,_)+\":\"+x(2,w)+\".\"+x(3,b)+\"Z\"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return\"null\";if(u=v.call(s),u==E)return\"\"+s;if(u==C)return s>-1/0&&1/0>s?\"\"+s:\"null\";if(u==O)return R(\"\"+s);if(\"object\"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),L=[],P=i,i+=o,u==S){for(M=0,k=s.length;k>M;M++)T=F(M,s,n,r,o,i,a),L.push(T===m?\"null\":T);U=L.length?o?\"[\\n\"+i+L.join(\",\\n\"+i)+\"\\n\"+P+\"]\":\"[\"+L.join(\",\")+\"]\":\"[]\"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&L.push(R(e)+\":\"+(o?\" \":\"\")+t)}),U=L.length?o?\"{\\n\"+i+L.join(\",\\n\"+i)+\"\\n\"+P+\"}\":\"{\"+L.join(\",\")+\"}\":\"{}\";return a.pop(),U}};t.stringify=function(e,t,n){var r,o,i,s;if(a[typeof t]&&t)if((s=v.call(t))==b)o=t;else if(s==S){i={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(i[u]=1));}if(n)if((s=v.call(n))==C){if((n-=n%1)>0)for(r=\"\",n>10&&(n=10);r.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=L?i.charAt(U):i[U],U++,e;case 34:for(e=\"@\",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$(\"0x\"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),\"true\"==i.slice(U,U+4))return U+=4,!0;if(\"false\"==i.slice(U,U+5))return U+=5,!1;if(\"null\"==i.slice(U,U+4))return U+=4,null;B()}return\"$\"},q=function(e){var t,n;if(\"$\"==e&&B(),\"string\"==typeof e){if(\"@\"==(L?e.charAt(0):e[0]))return e.slice(1);if(\"[\"==e){for(t=[];e=J(),\"]\"!=e;n||(n=!0))n&&(\",\"==e?(e=J(),\"]\"==e&&B()):B()),\",\"==e&&B(),t.push(q(e));return t}if(\"{\"==e){for(t={};e=J(),\"}\"!=e;n||(n=!0))n&&(\",\"==e?(e=J(),\"}\"==e&&B()):B()),(\",\"==e||\"string\"!=typeof e||\"@\"!=(L?e.charAt(0):e[0])||\":\"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if(\"object\"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,G=\"\"+e,n=q(J()),\"$\"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[\"\"]=n,r),\"\",t):n}}}return t.runInContext=o,t}var i=\"function\"==typeof e&&e.amd,a={\"function\":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&\"object\"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],4:[function(e,t,n){function r(e){if(c===setTimeout)return setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function o(e){if(l===clearTimeout)return clearTimeout(e);try{return l(e)}catch(t){try{return l.call(null,e)}catch(t){return l.call(this,e)}}}function i(){g&&p&&(g=!1,p.length?h=p.concat(h):d=-1,h.length&&a())}function a(){if(!g){var e=r(i);g=!0;for(var t=h.length;t;){for(p=h,h=[];++d1)for(var n=1;no;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('\"'+e+'\" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=e(\"./base64\"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error(\"Invalid base64 digit: \"+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},{}],8:[function(e,t,n){function r(e,t,o,i,a,s){var u=Math.floor((t-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],9:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(a>n){var s=o(n,a),u=n-1;r(e,s,a);for(var c=e[a],l=n;a>l;l++)t(e[l],c)<=0&&(u+=1,r(e,u,l));r(e,u+1,l);var f=u+1;i(e,t,n,f-1),i(e,t,f+1,a)}}n.quickSort=function(e,t){i(e,t,0,e.length-1)}},{}],10:[function(e,t,n){function r(e){var t=e;return\"string\"==typeof e&&(t=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;\"string\"==typeof e&&(t=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var n=s.getArg(t,\"version\"),r=s.getArg(t,\"sources\"),o=s.getArg(t,\"names\",[]),i=s.getArg(t,\"sourceRoot\",null),a=s.getArg(t,\"sourcesContent\",null),u=s.getArg(t,\"mappings\"),l=s.getArg(t,\"file\",null);if(n!=this._version)throw new Error(\"Unsupported version: \"+n);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;\"string\"==typeof e&&(t=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var n=s.getArg(t,\"version\"),o=s.getArg(t,\"sections\");if(n!=this._version)throw new Error(\"Unsupported version: \"+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var t=s.getArg(e,\"offset\"),n=s.getArg(t,\"line\"),o=s.getArg(t,\"column\");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(\";\"===e.charAt(v))c++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),\"number\"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[n]);if(e[r]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,\"name\",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,\"originalLine\",null),column:s.getArg(o,\"originalColumn\",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\\/\\//,\"\");if(\"file\"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||\"/\"==n.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(t)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,\"source\");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,\"line\"),originalColumn:s.getArg(e,\"column\")},o=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",s.compareByOriginalPositions,s.getArg(e,\"bias\",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,\"sources\",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],\".\"===a?u.splice(l,1):\"..\"===a?c++:c>0&&(\"\"===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join(\"/\"),\"\"===t&&(t=s?\"/\":\".\"),r?(r.path=t,i(r)):t}function s(e,t){\"\"===e&&(e=\".\"),\"\"===t&&(t=\".\");var n=o(t),r=o(e);if(r&&(e=r.path||\"/\"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(v))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s=\"/\"===t.charAt(0)?t:a(e.replace(/\\/+$/,\"\")+\"/\"+t);return r?(r.path=s,i(r)):s}function u(e,t){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var n=0;0!==t.indexOf(e+\"/\");){var r=e.lastIndexOf(\"/\");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\\/]+:\\/)?\\/*$/))return t;++n}return Array(n+1).join(\"../\")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?\"$\"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(9>t)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function d(e,t){return e===t?0:e>t?1:-1}function m(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=d(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:d(e.name,t.name)))))}n.getArg=r;var y=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,v=/^data:.+\\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(y)},n.relative=u;var _=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},{}],12:[function(t,n,r){!function(t,o){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stackframe\",[],o):\"object\"==typeof r?n.exports=o():t.StackFrame=o()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||\"{anonymous}\",n=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",r=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return t+n+r+o+i}},t})},{}],13:[function(t,n,r){!function(o,i){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stack-generator\",[\"stackframe\"],i):\"object\"==typeof r?n.exports=i(t(\"stackframe\")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;\"object\"==typeof t&&\"number\"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300?t(r.responseText):n(new Error(\"HTTP status: \"+r.status+\" retrieving \"+e)))},r.send()})}function r(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,t){for(var n,r=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,a=e.split(\"\\n\"),s=\"\",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf(\"//\");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function s(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var t=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error(\"sourceMappingURL not found\")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o=\"data:\"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var l=this.ajax(t,{method:\"get\"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)[\"catch\"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=e.lineNumber,a=e.columnNumber,s=i(r,o,a);n(s?new t(s,e.args,e.fileName,o,a):e)},r)[\"catch\"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l=\"data:\"===s.substr(0,5),f=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===s[0]||l||/^https?:\\/\\/|^\\/\\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;\"string\"==typeof n&&(n=o(n.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)[\"catch\"](n)}.bind(this),n)[\"catch\"](n)}.bind(this))})):new l(e)}})},{\"source-map/lib/source-map-consumer\":10,stackframe:14}],16:[function(e,t,n){Array.isArray||(Array.isArray=function(e){return\"[object Array]\"===Object.prototype.toString.call(e)}),\"undefined\"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if(\"function\"!=typeof this)throw new TypeError(\"Function.prototype.bind - what is trying to be bound is not callable\");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError(\"this is null or not defined\");var n,r=Object(this),o=r.length>>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError(\"this is null or not defined\");var t=Object(this),n=t.length>>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(\" this is null or not defined\");var o=Object(this),i=o.length>>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}})},{}],17:[function(t,n,r){!function(o,i){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stacktrace\",[\"error-stack-parser\",\"stack-generator\",\"stacktrace-gps\"],i):\"object\"==typeof r?n.exports=i(t(\"error-stack-parser\"),t(\"stack-generator\"),t(\"stacktrace-gps\")):o.StackTrace=i(o.ErrorStackParser,o.StackGenerator,o.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e[\"opera#sourceloc\"]}function i(e,t){return\"function\"==typeof t?e.filter(t):e}var a={filter:function(e){return-1===(e.functionName||\"\").indexOf(\"StackTrace$$\")&&-1===(e.functionName||\"\").indexOf(\"ErrorStackParser$$\")&&-1===(e.functionName||\"\").indexOf(\"StackTraceGPS$$\")&&-1===(e.functionName||\"\").indexOf(\"StackGenerator$$\")},sourceCache:{}},s=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var t=s();return o(t)?this.fromError(t,e):this.generateArtificially(e)},getSync:function(n){n=r(a,n);var u=s(),c=o(u)?e.parse(u):t.backtrace(n);return i(c,n.filter)},fromError:function(t,o){o=r(a,o);var s=new n(o);return new Promise(function(n){var r=i(e.parse(t),o.filter);n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}s.pinpoint(e).then(t,n)[\"catch\"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(a,e);var n=t.backtrace(e);return\"function\"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if(\"function\"!=typeof e)throw new Error(\"Cannot instrument non-function object\");if(\"function\"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)[\"catch\"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)[\"catch\"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if(\"function\"!=typeof e)throw new Error(\"Cannot de-instrument non-function object\");return\"function\"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t,n){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error(\"POST to \"+t+\" failed with status: \"+i.status)))},i.open(\"post\",t),i.setRequestHeader(\"Content-Type\",\"application/json\");var a={stack:e};void 0!==n&&(a.message=n),i.send(JSON.stringify(a))})}}})},{\"error-stack-parser\":1,\"stack-generator\":13,\"stacktrace-gps\":15}]},{},[2,3,16,17])(17)});"],"file":"stacktrace-with-promises-and-json-polyfills.min.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["stacktrace-with-promises-and-json-polyfills.min.js"],"sourcesContent":["!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var t;t=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u=\"function\"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error(\"Cannot find module '\"+a+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i=\"function\"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,\"eval\").replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g,\"\"));var n=t.replace(/^\\s+/,\"\").replace(/\\(eval code/g,\"(\").split(/\\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(\" \")||void 0,i=[\"eval\",\"\"].indexOf(r[0])>-1?void 0:r[0];return new e({functionName:o,fileName:i,lineNumber:r[1],columnNumber:r[2],source:t})},this)},parseFFOrSafari:function(t){var n=t.stack.split(\"\\n\").filter(function(e){return!e.match(r)},this);return n.map(function(t){if(t.indexOf(\" > eval\")>-1&&(t=t.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g,\":$1\")),t.indexOf(\"@\")===-1&&t.indexOf(\":\")===-1)return new e({functionName:t});var n=t.split(\"@\"),r=this.extractLocation(n.pop()),o=n.join(\"@\")||void 0;return new e({functionName:o,fileName:r[0],lineNumber:r[1],columnNumber:r[2],source:t})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf(\"\\n\")>-1&&e.message.split(\"\\n\").length>e.stacktrace.split(\"\\n\").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\\d+).*script (?:in )?(\\S+)/i,r=t.message.split(\"\\n\"),o=[],i=2,a=r.length;i/,\"$2\").replace(/\\([^\\)]*\\)/g,\"\")||void 0;i.match(/\\(([^\\)]*)\\)/)&&(n=i.replace(/^[^\\(]+\\(([^\\)]*)\\)$/,\"$1\"));var s=void 0===n||\"[arguments not available]\"===n?void 0:n.split(\",\");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:t})},this)}}})},{stackframe:13}],2:[function(t,n,r){(function(o,i){!function(t,o){\"object\"==typeof r&&\"undefined\"!=typeof n?n.exports=o():\"function\"==typeof e&&e.amd?e(o):t.ES6Promise=o()}(this,function(){\"use strict\";function e(e){return\"function\"==typeof e||\"object\"==typeof e&&null!==e}function n(e){return\"function\"==typeof e}function r(e){W=e}function a(e){V=e}function s(){return function(){return o.nextTick(p)}}function u(){return function(){Y(p)}}function c(){var e=0,t=new Q(p),n=document.createTextNode(\"\");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function l(){var e=new MessageChannel;return e.port1.onmessage=p,function(){return e.port2.postMessage(0)}}function f(){var e=setTimeout;return function(){return e(p,1)}}function p(){for(var e=0;e1)))/4)-T((e-1901+t)/100)+T((e-1601+t)/400)};if((g=v.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=y?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?m=2==i?function(e,t){var n,r={},o=y.call(e)==b;for(n in e)o&&\"prototype\"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=y.call(e)==b;for(n in e)o&&\"prototype\"==n||!g.call(e,n)||(r=\"constructor\"===n)||t(n);(r||g.call(e,n=\"constructor\"))&&t(n)}:(r=[\"valueOf\",\"toString\",\"toLocaleString\",\"propertyIsEnumerable\",\"isPrototypeOf\",\"hasOwnProperty\",\"constructor\"],m=function(e,t){var n,o,i=y.call(e)==b,s=!i&&\"function\"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&\"prototype\"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),m(e,t)},!n(\"json-stringify\")){var j={92:\"\\\\\\\\\",34:'\\\\\"',8:\"\\\\b\",12:\"\\\\f\",10:\"\\\\n\",13:\"\\\\r\",9:\"\\\\t\"},k=\"000000\",P=function(e,t){return(k+(t||0)).slice(-e)},x=\"\\\\u00\",R=function(e){for(var t='\"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(\"\"):e);n-1/0&&s<1/0){if(M){for(p=T(s/864e5),c=T(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=T((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,v=T(h/36e5)%24,_=T(h/6e4)%60,w=T(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),v=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(c<=0||c>=1e4?(c<0?\"-\":\"+\")+P(6,c<0?-c:c):P(4,c))+\"-\"+P(2,l+1)+\"-\"+P(2,p)+\"T\"+P(2,v)+\":\"+P(2,_)+\":\"+P(2,w)+\".\"+P(3,b)+\"Z\"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return\"null\";if(u=y.call(s),u==E)return\"\"+s;if(u==A)return s>-1/0&&s<1/0?\"\"+s:\"null\";if(u==O)return R(\"\"+s);if(\"object\"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),N=[],x=i,i+=o,u==S){for(j=0,k=s.length;j0)for(r=\"\",n>10&&(n=10);r.length=48&&o<=57||o>=97&&o<=102||o>=65&&o<=70||B();e+=G(\"0x\"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&o<=57){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&o<=57)&&B(),r=!1;U=48&&o<=57);U++);if(46==i.charCodeAt(U)){for(n=++U;n=48&&o<=57);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),43!=o&&45!=o||U++,n=U;n=48&&o<=57);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),\"true\"==i.slice(U,U+4))return U+=4,!0;if(\"false\"==i.slice(U,U+5))return U+=5,!1;if(\"null\"==i.slice(U,U+4))return U+=4,null;B()}return\"$\"},q=function(e){var t,n;if(\"$\"==e&&B(),\"string\"==typeof e){if(\"@\"==(N?e.charAt(0):e[0]))return e.slice(1);if(\"[\"==e){for(t=[];e=J(),\"]\"!=e;n||(n=!0))n&&(\",\"==e?(e=J(),\"]\"==e&&B()):B()),\",\"==e&&B(),t.push(q(e));return t}if(\"{\"==e){for(t={};e=J(),\"}\"!=e;n||(n=!0))n&&(\",\"==e?(e=J(),\"}\"==e&&B()):B()),\",\"!=e&&\"string\"==typeof e&&\"@\"==(N?e.charAt(0):e[0])&&\":\"==J()||B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if(\"object\"==typeof o&&o)if(y.call(o)==S)for(r=o.length;r--;)I(o,r,n);else m(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,$=\"\"+e,n=q(J()),\"$\"!=J()&&B(),U=$=null,t&&y.call(t)==b?z((r={},r[\"\"]=n,r),\"\",t):n}}}return t.runInContext=o,t}var i=\"function\"==typeof e&&e.amd,a={\"function\":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&\"object\"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],4:[function(e,t,n){function r(){throw new Error(\"setTimeout has not been defined\")}function o(){throw new Error(\"clearTimeout has not been defined\")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function a(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function s(){d&&g&&(d=!1,g.length?m=g.concat(m):v=-1,m.length&&u())}function u(){if(!d){var e=i(s);d=!0;for(var t=m.length;t;){for(g=m,m=[];++v1)for(var n=1;n=0&&e>1;return t?-n:n}var i=e(\"./base64\"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(s=i.decode(e.charCodeAt(t++)),s===-1)throw new Error(\"Invalid base64 digit: \"+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],9:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;p1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),C.push(n),\"number\"==typeof n.originalLine&&b.push(n)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[n]);if(e[r]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,\"name\",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,\"originalLine\",null),column:s.getArg(o,\"originalColumn\",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\\/\\//,\"\");if(\"file\"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||\"/\"==n.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(t)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,\"source\");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,\"line\"),originalColumn:s.getArg(e,\"column\")},o=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",s.compareByOriginalPositions,s.getArg(e,\"bias\",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,\"sources\",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],\".\"===a?u.splice(l,1):\"..\"===a?c++:c>0&&(\"\"===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join(\"/\"),\"\"===t&&(t=s?\"/\":\".\"),r?(r.path=t,i(r)):t}function s(e,t){\"\"===e&&(e=\".\"),\"\"===t&&(t=\".\");var n=o(t),r=o(e);if(r&&(e=r.path||\"/\"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(y))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s=\"/\"===t.charAt(0)?t:a(e.replace(/\\/+$/,\"\")+\"/\"+t);return r?(r.path=s,i(r)):s}function u(e,t){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var n=0;0!==t.indexOf(e+\"/\");){var r=e.lastIndexOf(\"/\");if(r<0)return t;if(e=e.slice(0,r),e.match(/^([^\\/]+:\\/)?\\/*$/))return t;++n}return Array(n+1).join(\"../\")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?\"$\"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function m(e,t){return e===t?0:e>t?1:-1}function d(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=m(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:m(e.name,t.name)))))}n.getArg=r;var v=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,y=/^data:.+\\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(v)},n.relative=u;var _=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=d},{}],12:[function(t,n,r){!function(o,i){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stack-generator\",[\"stackframe\"],i):\"object\"==typeof r?n.exports=i(t(\"stackframe\")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;\"object\"==typeof t&&\"number\"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300||\"file://\"===e.substr(0,7)&&r.responseText?t(r.responseText):n(new Error(\"HTTP status: \"+r.status+\" retrieving \"+e)))},r.send()})}function r(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,t){for(var n=[/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,/function\\s+([^('\"`]*?)\\s*\\(([^)]*)\\)/,/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,/\\b(?!(?:if|for|switch|while|with|catch)\\b)(?:(?:static)\\s+)?(\\S+)\\s*\\(.*?\\)\\s*\\{/,/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*\\(.*?\\)\\s*=>/],r=e.split(\"\\n\"),o=\"\",i=Math.min(t,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=n.length,l=0;l>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;a>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;i>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");for(arguments.length>1&&(n=t),r=0;r=200&&a.status<400?o(a.responseText):i(new Error(\"POST to \"+t+\" failed with status: \"+a.status)))},a.open(\"post\",t),a.setRequestHeader(\"Content-Type\",\"application/json\"),r&&\"object\"==typeof r.headers){var s=r.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==n&&null!==n&&(c.message=n),a.send(JSON.stringify(c))})}}})},{\"error-stack-parser\":1,\"stack-generator\":12,\"stacktrace-gps\":14}]},{},[2,3,15,16])(16)});"],"file":"stacktrace-with-promises-and-json-polyfills.min.js"} \ No newline at end of file diff --git a/dist/stacktrace.js b/dist/stacktrace.js index f88b6ed..b2e7e30 100644 --- a/dist/stacktrace.js +++ b/dist/stacktrace.js @@ -18,45 +18,6 @@ var CHROME_IE_STACK_REGEXP = /^\s*at .*(\S+\:\d+|\(native\))/m; var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\[native code\])?$/; - function _map(array, fn, thisArg) { - if (typeof Array.prototype.map === 'function') { - return array.map(fn, thisArg); - } else { - var output = new Array(array.length); - for (var i = 0; i < array.length; i++) { - output[i] = fn.call(thisArg, array[i]); - } - return output; - } - } - - function _filter(array, fn, thisArg) { - if (typeof Array.prototype.filter === 'function') { - return array.filter(fn, thisArg); - } else { - var output = []; - for (var i = 0; i < array.length; i++) { - if (fn.call(thisArg, array[i])) { - output.push(array[i]); - } - } - return output; - } - } - - function _indexOf(array, target) { - if (typeof Array.prototype.indexOf === 'function') { - return array.indexOf(target); - } else { - for (var i = 0; i < array.length; i++) { - if (array[i] === target) { - return i; - } - } - return -1; - } - } - return { /** * Given an Error object, extract the most information from it. @@ -89,11 +50,11 @@ }, parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) { - var filtered = _filter(error.stack.split('\n'), function(line) { + var filtered = error.stack.split('\n').filter(function(line) { return !!line.match(CHROME_IE_STACK_REGEXP); }, this); - return _map(filtered, function(line) { + return filtered.map(function(line) { if (line.indexOf('(eval ') > -1) { // Throw away eval information until we implement stacktrace.js/stackframe#8 line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^\()]*)|(\)\,.*$)/g, ''); @@ -101,18 +62,24 @@ var tokens = line.replace(/^\s+/, '').replace(/\(eval code/g, '(').split(/\s+/).slice(1); var locationParts = this.extractLocation(tokens.pop()); var functionName = tokens.join(' ') || undefined; - var fileName = _indexOf(['eval', ''], locationParts[0]) > -1 ? undefined : locationParts[0]; - - return new StackFrame(functionName, undefined, fileName, locationParts[1], locationParts[2], line); + var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0]; + + return new StackFrame({ + functionName: functionName, + fileName: fileName, + lineNumber: locationParts[1], + columnNumber: locationParts[2], + source: line + }); }, this); }, parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) { - var filtered = _filter(error.stack.split('\n'), function(line) { + var filtered = error.stack.split('\n').filter(function(line) { return !line.match(SAFARI_NATIVE_CODE_REGEXP); }, this); - return _map(filtered, function(line) { + return filtered.map(function(line) { // Throw away eval information until we implement stacktrace.js/stackframe#8 if (line.indexOf(' > eval') > -1) { line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g, ':$1'); @@ -120,17 +87,21 @@ if (line.indexOf('@') === -1 && line.indexOf(':') === -1) { // Safari eval frames only have function names and nothing else - return new StackFrame(line); + return new StackFrame({ + functionName: line + }); } else { var tokens = line.split('@'); var locationParts = this.extractLocation(tokens.pop()); var functionName = tokens.join('@') || undefined; - return new StackFrame(functionName, - undefined, - locationParts[0], - locationParts[1], - locationParts[2], - line); + + return new StackFrame({ + functionName: functionName, + fileName: locationParts[0], + lineNumber: locationParts[1], + columnNumber: locationParts[2], + source: line + }); } }, this); }, @@ -154,7 +125,11 @@ for (var i = 2, len = lines.length; i < len; i += 2) { var match = lineRE.exec(lines[i]); if (match) { - result.push(new StackFrame(undefined, undefined, match[2], match[1], undefined, lines[i])); + result.push(new StackFrame({ + fileName: match[2], + lineNumber: match[1], + source: lines[i] + })); } } @@ -170,14 +145,12 @@ var match = lineRE.exec(lines[i]); if (match) { result.push( - new StackFrame( - match[3] || undefined, - undefined, - match[2], - match[1], - undefined, - lines[i] - ) + new StackFrame({ + functionName: match[3] || undefined, + fileName: match[2], + lineNumber: match[1], + source: lines[i] + }) ); } } @@ -187,11 +160,11 @@ // Opera 10.65+ Error.stack very similar to FF/Safari parseOpera11: function ErrorStackParser$$parseOpera11(error) { - var filtered = _filter(error.stack.split('\n'), function(line) { + var filtered = error.stack.split('\n').filter(function(line) { return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/); }, this); - return _map(filtered, function(line) { + return filtered.map(function(line) { var tokens = line.split('@'); var locationParts = this.extractLocation(tokens.pop()); var functionCall = (tokens.shift() || ''); @@ -204,20 +177,21 @@ } var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(','); - return new StackFrame( - functionName, - args, - locationParts[0], - locationParts[1], - locationParts[2], - line); + + return new StackFrame({ + functionName: functionName, + args: args, + fileName: locationParts[0], + lineNumber: locationParts[1], + columnNumber: locationParts[2], + source: line + }); }, this); } }; })); - -},{"stackframe":11}],2:[function(require,module,exports){ +},{"stackframe":10}],2:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -2267,6 +2241,53 @@ function compareByGeneratedPositionsInflated(mappingA, mappingB) { exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; },{}],9:[function(require,module,exports){ +(function(root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stack-generator', ['stackframe'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('stackframe')); + } else { + root.StackGenerator = factory(root.StackFrame); + } +}(this, function(StackFrame) { + return { + backtrace: function StackGenerator$$backtrace(opts) { + var stack = []; + var maxStackSize = 10; + + if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') { + maxStackSize = opts.maxStackSize; + } + + var curr = arguments.callee; + while (curr && stack.length < maxStackSize) { + // Allow V8 optimizations + var args = new Array(curr['arguments'].length); + for (var i = 0; i < args.length; ++i) { + args[i] = curr['arguments'][i]; + } + if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { + stack.push(new StackFrame({functionName: RegExp.$1 || undefined, args: args})); + } else { + stack.push(new StackFrame({args: args})); + } + + try { + curr = curr.caller; + } catch (e) { + break; + } + } + return stack; + } + }; +})); + +},{"stackframe":10}],10:[function(require,module,exports){ (function (root, factory) { 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. @@ -2285,35 +2306,33 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate return !isNaN(parseFloat(n)) && isFinite(n); } - function StackFrame(functionName, args, fileName, lineNumber, columnNumber, source) { - if (functionName !== undefined) { - this.setFunctionName(functionName); - } - if (args !== undefined) { - this.setArgs(args); - } - if (fileName !== undefined) { - this.setFileName(fileName); - } - if (lineNumber !== undefined) { - this.setLineNumber(lineNumber); - } - if (columnNumber !== undefined) { - this.setColumnNumber(columnNumber); - } - if (source !== undefined) { - this.setSource(source); + function _capitalize(str) { + return str[0].toUpperCase() + str.substring(1); + } + + function _getter(p) { + return function () { + return this[p]; + }; + } + + var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel']; + var numericProps = ['columnNumber', 'lineNumber']; + var stringProps = ['fileName', 'functionName', 'source']; + var arrayProps = ['args']; + + function StackFrame(obj) { + if (obj instanceof Object) { + var props = booleanProps.concat(numericProps.concat(stringProps.concat(arrayProps))); + for (var i = 0; i < props.length; i++) { + if (obj.hasOwnProperty(props[i]) && obj[props[i]] !== undefined) { + this['set' + _capitalize(props[i])](obj[props[i]]); + } + } } } StackFrame.prototype = { - getFunctionName: function () { - return this.functionName; - }, - setFunctionName: function (v) { - this.functionName = String(v); - }, - getArgs: function () { return this.args; }, @@ -2324,45 +2343,20 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate this.args = v; }, - // NOTE: Property name may be misleading as it includes the path, - // but it somewhat mirrors V8's JavaScriptStackTraceApi - // https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi and Gecko's - // http://mxr.mozilla.org/mozilla-central/source/xpcom/base/nsIException.idl#14 - getFileName: function () { - return this.fileName; - }, - setFileName: function (v) { - this.fileName = String(v); + getEvalOrigin: function () { + return this.evalOrigin; }, - - getLineNumber: function () { - return this.lineNumber; - }, - setLineNumber: function (v) { - if (!_isNumber(v)) { - throw new TypeError('Line Number must be a Number'); - } - this.lineNumber = Number(v); - }, - - getColumnNumber: function () { - return this.columnNumber; - }, - setColumnNumber: function (v) { - if (!_isNumber(v)) { - throw new TypeError('Column Number must be a Number'); + setEvalOrigin: function (v) { + if (v instanceof StackFrame) { + this.evalOrigin = v; + } else if (v instanceof Object) { + this.evalOrigin = new StackFrame(v); + } else { + throw new TypeError('Eval Origin must be an Object or StackFrame'); } - this.columnNumber = Number(v); }, - getSource: function () { - return this.source; - }, - setSource: function (v) { - this.source = String(v); - }, - - toString: function() { + toString: function () { var functionName = this.getFunctionName() || '{anonymous}'; var args = '(' + (this.getArgs() || []).join(',') + ')'; var fileName = this.getFileName() ? ('@' + this.getFileName()) : ''; @@ -2372,59 +2366,40 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate } }; - return StackFrame; -})); - -},{}],10:[function(require,module,exports){ -(function (root, factory) { - 'use strict'; - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. - - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define('stack-generator', ['stackframe'], factory); - } else if (typeof exports === 'object') { - module.exports = factory(require('stackframe')); - } else { - root.StackGenerator = factory(root.StackFrame); + for (var i = 0; i < booleanProps.length; i++) { + StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]); + StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function (p) { + return function (v) { + this[p] = Boolean(v); + }; + })(booleanProps[i]); } -}(this, function (StackFrame) { - return { - backtrace: function StackGenerator$$backtrace(opts) { - var stack = []; - var maxStackSize = 10; - if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') { - maxStackSize = opts.maxStackSize; - } - - var curr = arguments.callee; - while (curr && stack.length < maxStackSize) { - // Allow V8 optimizations - var args = new Array(curr['arguments'].length); - for(var i = 0; i < args.length; ++i) { - args[i] = curr['arguments'][i]; - } - if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { - stack.push(new StackFrame(RegExp.$1 || undefined, args)); - } else { - stack.push(new StackFrame(undefined, args)); + for (var j = 0; j < numericProps.length; j++) { + StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]); + StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function (p) { + return function (v) { + if (!_isNumber(v)) { + throw new TypeError(p + ' must be a Number'); } + this[p] = Number(v); + }; + })(numericProps[j]); + } - try { - curr = curr.caller; - } catch (e) { - break; - } - } - return stack; - } - }; + for (var k = 0; k < stringProps.length; k++) { + StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]); + StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function (p) { + return function (v) { + this[p] = String(v); + }; + })(stringProps[k]); + } + + return StackFrame; })); -},{"stackframe":9}],11:[function(require,module,exports){ -arguments[4][9][0].apply(exports,arguments) -},{"dup":9}],12:[function(require,module,exports){ +},{}],11:[function(require,module,exports){ (function(root, factory) { 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. @@ -2453,7 +2428,8 @@ arguments[4][9][0].apply(exports,arguments) req.onerror = reject; req.onreadystatechange = function onreadystatechange() { if (req.readyState === 4) { - if (req.status >= 200 && req.status < 300) { + if ((req.status >= 200 && req.status < 300) || + (url.substr(0, 7) === 'file://' && req.responseText)) { resolve(req.responseText); } else { reject(new Error('HTTP status: ' + req.status + ' retrieving ' + url)); @@ -2489,18 +2465,23 @@ arguments[4][9][0].apply(exports,arguments) } function _findFunctionName(source, lineNumber/*, columnNumber*/) { - // function {name}({args}) m[1]=name m[2]=args - var reFunctionDeclaration = /function\s+([^(]*?)\s*\(([^)]*)\)/; - // {name} = function ({args}) TODO args capture - var reFunctionExpression = /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/; - // {name} = eval() - var reFunctionEvaluation = /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/; + var syntaxes = [ + // {name} = function ({args}) TODO args capture + /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/, + // function {name}({args}) m[1]=name m[2]=args + /function\s+([^('"`]*?)\s*\(([^)]*)\)/, + // {name} = eval() + /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/, + // fn_name() { + /\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/, + // {name} = () => { + /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/ + ]; var lines = source.split('\n'); // Walk backwards in the source lines until we find the line which matches one of the patterns above var code = ''; var maxLines = Math.min(lineNumber, 20); - var m; for (var i = 0; i < maxLines; ++i) { // lineNo is 1-based, source[] is 0-based var line = lines[lineNumber - i - 1]; @@ -2511,17 +2492,12 @@ arguments[4][9][0].apply(exports,arguments) if (line) { code = line + code; - m = reFunctionExpression.exec(code); - if (m && m[1]) { - return m[1]; - } - m = reFunctionDeclaration.exec(code); - if (m && m[1]) { - return m[1]; - } - m = reFunctionEvaluation.exec(code); - if (m && m[1]) { - return m[1]; + var len = syntaxes.length; + for (var index = 0; index < len; index++) { + var m = syntaxes[index].exec(code); + if (m && m[1]) { + return m[1]; + } } } } @@ -2540,19 +2516,19 @@ arguments[4][9][0].apply(exports,arguments) } else if (typeof stackframe.fileName !== 'string') { throw new TypeError('Given file name is not a String'); } else if (typeof stackframe.lineNumber !== 'number' || - stackframe.lineNumber % 1 !== 0 || - stackframe.lineNumber < 1) { + stackframe.lineNumber % 1 !== 0 || + stackframe.lineNumber < 1) { throw new TypeError('Given line number must be a positive integer'); } else if (typeof stackframe.columnNumber !== 'number' || - stackframe.columnNumber % 1 !== 0 || - stackframe.columnNumber < 0) { + stackframe.columnNumber % 1 !== 0 || + stackframe.columnNumber < 0) { throw new TypeError('Given column number must be a non-negative integer'); } return true; } function _findSourceMappingURL(source) { - var m = /\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(source); + var m = /\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/m.exec(source); if (m && m[1]) { return m[1]; } else { @@ -2560,26 +2536,40 @@ arguments[4][9][0].apply(exports,arguments) } } - function _extractLocationInfoFromSourceMap(rawSourceMap, args, lineNumber, columnNumber, sourceCache) { - var mapConsumer = new SourceMap.SourceMapConsumer(rawSourceMap); - - var loc = mapConsumer.originalPositionFor({ - line: lineNumber, - column: columnNumber - }); + function _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) { + return new Promise(function(resolve, reject) { + var loc = sourceMapConsumer.originalPositionFor({ + line: stackframe.lineNumber, + column: stackframe.columnNumber + }); - var mappedSource = mapConsumer.sourceContentFor(loc.source); - if (mappedSource) { - sourceCache[loc.source] = mappedSource; - } + if (loc.source) { + // cache mapped sources + var mappedSource = sourceMapConsumer.sourceContentFor(loc.source); + if (mappedSource) { + sourceCache[loc.source] = mappedSource; + } - return new StackFrame(loc.name, args, loc.source, loc.line, loc.column); + resolve( + // given stackframe and source location, update stackframe + new StackFrame({ + functionName: loc.name || stackframe.functionName, + args: stackframe.args, + fileName: loc.source, + lineNumber: loc.line, + columnNumber: loc.column + })); + } else { + reject(new Error('Could not get original source for given stackframe and source map')); + } + }); } /** * @constructor * @param {Object} opts * opts.sourceCache = {url: "Source String"} => preload source cache + * opts.sourceMapConsumerCache = {/path/file.js.map: SourceMapConsumer} * opts.offline = True to prevent network requests. * Best effort without sources or source maps. * opts.ajax = Promise returning function to make X-Domain requests @@ -2591,6 +2581,7 @@ arguments[4][9][0].apply(exports,arguments) opts = opts || {}; this.sourceCache = opts.sourceCache || {}; + this.sourceMapConsumerCache = opts.sourceMapConsumerCache || {}; this.ajax = opts.ajax || _xdr; @@ -2629,6 +2620,37 @@ arguments[4][9][0].apply(exports,arguments) }.bind(this)); }; + /** + * Creating SourceMapConsumers is expensive, so this wraps the creation of a + * SourceMapConsumer in a per-instance cache. + * + * @param sourceMappingURL = {String} URL to fetch source map from + * @param defaultSourceRoot = Default source root for source map if undefined + * @returns {Promise} that resolves a SourceMapConsumer + */ + this._getSourceMapConsumer = function _getSourceMapConsumer(sourceMappingURL, defaultSourceRoot) { + return new Promise(function(resolve, reject) { + if (this.sourceMapConsumerCache[sourceMappingURL]) { + resolve(this.sourceMapConsumerCache[sourceMappingURL]); + } else { + var sourceMapConsumerPromise = new Promise(function(resolve, reject) { + return this._get(sourceMappingURL).then(function(sourceMapSource) { + if (typeof sourceMapSource === 'string') { + sourceMapSource = _parseJson(sourceMapSource.replace(/^\)\]\}'/, '')); + } + if (typeof sourceMapSource.sourceRoot === 'undefined') { + sourceMapSource.sourceRoot = defaultSourceRoot; + } + + resolve(new SourceMap.SourceMapConsumer(sourceMapSource)); + }, reject); + }.bind(this)); + this.sourceMapConsumerCache[sourceMappingURL] = sourceMapConsumerPromise; + resolve(sourceMapConsumerPromise); + } + }.bind(this)); + }; + /** * Given a StackFrame, enhance function name and use source maps for a * better StackFrame. @@ -2665,11 +2687,13 @@ arguments[4][9][0].apply(exports,arguments) var guessedFunctionName = _findFunctionName(source, lineNumber, columnNumber); // Only replace functionName if we found something if (guessedFunctionName) { - resolve(new StackFrame(guessedFunctionName, - stackframe.args, - stackframe.fileName, - lineNumber, - columnNumber)); + resolve(new StackFrame({ + functionName: guessedFunctionName, + args: stackframe.args, + fileName: stackframe.fileName, + lineNumber: lineNumber, + columnNumber: columnNumber + })); } else { resolve(stackframe); } @@ -2693,33 +2717,25 @@ arguments[4][9][0].apply(exports,arguments) this._get(fileName).then(function(source) { var sourceMappingURL = _findSourceMappingURL(source); var isDataUrl = sourceMappingURL.substr(0, 5) === 'data:'; - var base = fileName.substring(0, fileName.lastIndexOf('/') + 1); + var defaultSourceRoot = fileName.substring(0, fileName.lastIndexOf('/') + 1); if (sourceMappingURL[0] !== '/' && !isDataUrl && !(/^https?:\/\/|^\/\//i).test(sourceMappingURL)) { - sourceMappingURL = base + sourceMappingURL; + sourceMappingURL = defaultSourceRoot + sourceMappingURL; } - this._get(sourceMappingURL).then(function(map) { - var line = stackframe.lineNumber; - var column = stackframe.columnNumber; - - if (typeof map === 'string') { - map = _parseJson(map.replace(/^\)\]\}'/, '')); - } - - if (typeof map.sourceRoot === 'undefined') { - map.sourceRoot = base; - } - - resolve(_extractLocationInfoFromSourceMap(map, stackframe.args, line, column, sourceCache)); - }, reject)['catch'](reject); + return this._getSourceMapConsumer(sourceMappingURL, defaultSourceRoot).then(function(sourceMapConsumer) { + return _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) + .then(resolve)['catch'](function() { + resolve(stackframe); + }); + }); }.bind(this), reject)['catch'](reject); }.bind(this)); }; }; })); -},{"source-map/lib/source-map-consumer":7,"stackframe":11}],13:[function(require,module,exports){ +},{"source-map/lib/source-map-consumer":7,"stackframe":10}],12:[function(require,module,exports){ (function(root, factory) { 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. @@ -2909,8 +2925,9 @@ arguments[4][9][0].apply(exports,arguments) * @param {Array} stackframes * @param {String} url * @param {String} errorMsg + * @param {Object} requestOptions */ - report: function StackTrace$$report(stackframes, url, errorMsg) { + report: function StackTrace$$report(stackframes, url, errorMsg, requestOptions) { return new Promise(function(resolve, reject) { var req = new XMLHttpRequest(); req.onerror = reject; @@ -2924,10 +2941,20 @@ arguments[4][9][0].apply(exports,arguments) } }; req.open('post', url); + + // Set request headers req.setRequestHeader('Content-Type', 'application/json'); + if (requestOptions && typeof requestOptions.headers === 'object') { + var headers = requestOptions.headers; + for (var header in headers) { + if (headers.hasOwnProperty(header)) { + req.setRequestHeader(header, headers[header]); + } + } + } var reportPayload = {stack: stackframes}; - if (errorMsg !== undefined) { + if (errorMsg !== undefined && errorMsg !== null) { reportPayload.message = errorMsg; } @@ -2937,6 +2964,6 @@ arguments[4][9][0].apply(exports,arguments) }; })); -},{"error-stack-parser":1,"stack-generator":10,"stacktrace-gps":12}]},{},[13])(13) +},{"error-stack-parser":1,"stack-generator":9,"stacktrace-gps":11}]},{},[12])(12) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9hcnJheS1zZXQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LXZscS5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iYXNlNjQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9xdWljay1zb3J0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAtY29uc3VtZXIuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9zdGFjay1nZW5lcmF0b3Ivbm9kZV9tb2R1bGVzL3N0YWNrZnJhbWUvc3RhY2tmcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9zdGFjay1nZW5lcmF0b3Ivc3RhY2stZ2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL3N0YWNrdHJhY2UtZ3BzLmpzIiwic3RhY2t0cmFjZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDek5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2phQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnZXJyb3Itc3RhY2stcGFyc2VyJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuRXJyb3JTdGFja1BhcnNlciA9IGZhY3Rvcnkocm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIoU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFAgPSAvKF58QClcXFMrXFw6XFxkKy87XG4gICAgdmFyIENIUk9NRV9JRV9TVEFDS19SRUdFWFAgPSAvXlxccyphdCAuKihcXFMrXFw6XFxkK3xcXChuYXRpdmVcXCkpL207XG4gICAgdmFyIFNBRkFSSV9OQVRJVkVfQ09ERV9SRUdFWFAgPSAvXihldmFsQCk/KFxcW25hdGl2ZSBjb2RlXFxdKT8kLztcblxuICAgIGZ1bmN0aW9uIF9tYXAoYXJyYXksIGZuLCB0aGlzQXJnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgQXJyYXkucHJvdG90eXBlLm1hcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5Lm1hcChmbiwgdGhpc0FyZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gbmV3IEFycmF5KGFycmF5Lmxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0W2ldID0gZm4uY2FsbCh0aGlzQXJnLCBhcnJheVtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcihhcnJheSwgZm4sIHRoaXNBcmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBBcnJheS5wcm90b3R5cGUuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkuZmlsdGVyKGZuLCB0aGlzQXJnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoZm4uY2FsbCh0aGlzQXJnLCBhcnJheVtpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goYXJyYXlbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaW5kZXhPZihhcnJheSwgdGFyZ2V0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJheS5pbmRleE9mKHRhcmdldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2ldID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGFuIEVycm9yIG9iamVjdCwgZXh0cmFjdCB0aGUgbW9zdCBpbmZvcm1hdGlvbiBmcm9tIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IG9mIFN0YWNrRnJhbWVzXG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2UoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3Iuc3RhY2t0cmFjZSAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGVycm9yWydvcGVyYSNzb3VyY2Vsb2MnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhY2sgJiYgZXJyb3Iuc3RhY2subWF0Y2goQ0hST01FX0lFX1NUQUNLX1JFR0VYUCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVY4T3JJRShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VGRk9yU2FmYXJpKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGFyc2UgZ2l2ZW4gRXJyb3Igb2JqZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gU2VwYXJhdGUgbGluZSBhbmQgY29sdW1uIG51bWJlcnMgZnJvbSBhIHN0cmluZyBvZiB0aGUgZm9ybTogKFVSSTpMaW5lOkNvbHVtbilcbiAgICAgICAgZXh0cmFjdExvY2F0aW9uOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRleHRyYWN0TG9jYXRpb24odXJsTGlrZSkge1xuICAgICAgICAgICAgLy8gRmFpbC1mYXN0IGJ1dCByZXR1cm4gbG9jYXRpb25zIGxpa2UgXCIobmF0aXZlKVwiXG4gICAgICAgICAgICBpZiAodXJsTGlrZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt1cmxMaWtlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJlZ0V4cCA9IC8oLis/KSg/OlxcOihcXGQrKSk/KD86XFw6KFxcZCspKT8kLztcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IHJlZ0V4cC5leGVjKHVybExpa2UucmVwbGFjZSgvW1xcKFxcKV0vZywgJycpKTtcbiAgICAgICAgICAgIHJldHVybiBbcGFydHNbMV0sIHBhcnRzWzJdIHx8IHVuZGVmaW5lZCwgcGFydHNbM10gfHwgdW5kZWZpbmVkXTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZVY4T3JJRTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VWOE9ySUUoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IF9maWx0ZXIoZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLCBmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gX21hcChmaWx0ZXJlZCwgZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJyhldmFsICcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSBldmFsIGluZm9ybWF0aW9uIHVudGlsIHdlIGltcGxlbWVudCBzdGFja3RyYWNlLmpzL3N0YWNrZnJhbWUjOFxuICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC9ldmFsIGNvZGUvZywgJ2V2YWwnKS5yZXBsYWNlKC8oXFwoZXZhbCBhdCBbXlxcKCldKil8KFxcKVxcLC4qJCkvZywgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5yZXBsYWNlKC9eXFxzKy8sICcnKS5yZXBsYWNlKC9cXChldmFsIGNvZGUvZywgJygnKS5zcGxpdCgvXFxzKy8pLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gdG9rZW5zLmpvaW4oJyAnKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gX2luZGV4T2YoWydldmFsJywgJzxhbm9ueW1vdXM+J10sIGxvY2F0aW9uUGFydHNbMF0pID4gLTEgPyB1bmRlZmluZWQgOiBsb2NhdGlvblBhcnRzWzBdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKGZ1bmN0aW9uTmFtZSwgdW5kZWZpbmVkLCBmaWxlTmFtZSwgbG9jYXRpb25QYXJ0c1sxXSwgbG9jYXRpb25QYXJ0c1syXSwgbGluZSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZUZGT3JTYWZhcmk6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlRkZPclNhZmFyaShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gX2ZpbHRlcihlcnJvci5zdGFjay5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIWxpbmUubWF0Y2goU0FGQVJJX05BVElWRV9DT0RFX1JFR0VYUCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIF9tYXAoZmlsdGVyZWQsIGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IGV2YWwgaW5mb3JtYXRpb24gdW50aWwgd2UgaW1wbGVtZW50IHN0YWNrdHJhY2UuanMvc3RhY2tmcmFtZSM4XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignID4gZXZhbCcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvIGxpbmUgKFxcZCspKD86ID4gZXZhbCBsaW5lIFxcZCspKiA+IGV2YWxcXDpcXGQrXFw6XFxkKy9nLCAnOiQxJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignQCcpID09PSAtMSAmJiBsaW5lLmluZGV4T2YoJzonKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIGV2YWwgZnJhbWVzIG9ubHkgaGF2ZSBmdW5jdGlvbiBuYW1lcyBhbmQgbm90aGluZyBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZShsaW5lKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5zcGxpdCgnQCcpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0b2tlbnMuam9pbignQCcpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmEoZSkge1xuICAgICAgICAgICAgaWYgKCFlLnN0YWNrdHJhY2UgfHwgKGUubWVzc2FnZS5pbmRleE9mKCdcXG4nKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlLnNwbGl0KCdcXG4nKS5sZW5ndGggPiBlLnN0YWNrdHJhY2Uuc3BsaXQoJ1xcbicpLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhOShlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWUuc3RhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTAoZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmExMShlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhOTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTkoZSkge1xuICAgICAgICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspL2k7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBlLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMiwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lUkUuZXhlYyhsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBTdGFja0ZyYW1lKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBtYXRjaFsyXSwgbWF0Y2hbMV0sIHVuZGVmaW5lZCwgbGluZXNbaV0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTEwOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhMTAoZSkge1xuICAgICAgICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspKD86OiBJbiBmdW5jdGlvbiAoXFxTKykpPyQvaTtcbiAgICAgICAgICAgIHZhciBsaW5lcyA9IGUuc3RhY2t0cmFjZS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmVSRS5leGVjKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RhY2tGcmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFszXSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc1tpXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBPcGVyYSAxMC42NSsgRXJyb3Iuc3RhY2sgdmVyeSBzaW1pbGFyIHRvIEZGL1NhZmFyaVxuICAgICAgICBwYXJzZU9wZXJhMTE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gX2ZpbHRlcihlcnJvci5zdGFjay5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFsaW5lLm1hdGNoKEZJUkVGT1hfU0FGQVJJX1NUQUNLX1JFR0VYUCkgJiYgIWxpbmUubWF0Y2goL15FcnJvciBjcmVhdGVkIGF0Lyk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIF9tYXAoZmlsdGVyZWQsIGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5zcGxpdCgnQCcpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25DYWxsID0gKHRva2Vucy5zaGlmdCgpIHx8ICcnKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25DYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPGFub255bW91cyBmdW5jdGlvbig6IChcXHcrKSk/Pi8sICckMicpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwoW15cXCldKlxcKS9nLCAnJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzUmF3O1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkNhbGwubWF0Y2goL1xcKChbXlxcKV0qKVxcKS8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NSYXcgPSBmdW5jdGlvbkNhbGwucmVwbGFjZSgvXlteXFwoXStcXCgoW15cXCldKilcXCkkLywgJyQxJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gKGFyZ3NSYXcgPT09IHVuZGVmaW5lZCB8fCBhcmdzUmF3ID09PSAnW2FyZ3VtZW50cyBub3QgYXZhaWxhYmxlXScpID9cbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDogYXJnc1Jhdy5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZShcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICBsaW5lKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcblxuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3XG4gKiBtZW1iZXIgaXMgTygxKSwgdGVzdGluZyBmb3IgbWVtYmVyc2hpcCBpcyBPKDEpLCBhbmQgZmluZGluZyB0aGUgaW5kZXggb2YgYW5cbiAqIGVsZW1lbnQgaXMgTygxKS4gUmVtb3ZpbmcgZWxlbWVudHMgZnJvbSB0aGUgc2V0IGlzIG5vdCBzdXBwb3J0ZWQuIE9ubHlcbiAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgbWVtYmVyc2hpcC5cbiAqL1xuZnVuY3Rpb24gQXJyYXlTZXQoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8qKlxuICogU3RhdGljIG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gKi9cbkFycmF5U2V0LmZyb21BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X2Zyb21BcnJheShhQXJyYXksIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYUFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgc2V0LmFkZChhQXJyYXlbaV0sIGFBbGxvd0R1cGxpY2F0ZXMpO1xuICB9XG4gIHJldHVybiBzZXQ7XG59O1xuXG4vKipcbiAqIFJldHVybiBob3cgbWFueSB1bmlxdWUgaXRlbXMgYXJlIGluIHRoaXMgQXJyYXlTZXQuIElmIGR1cGxpY2F0ZXMgaGF2ZSBiZWVuXG4gKiBhZGRlZCwgdGhhbiB0aG9zZSBkbyBub3QgY291bnQgdG93YXJkcyB0aGUgc2l6ZS5cbiAqXG4gKiBAcmV0dXJucyBOdW1iZXJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiBBcnJheVNldF9zaXplKCkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fc2V0KS5sZW5ndGg7XG59O1xuXG4vKipcbiAqIEFkZCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoaXMgc2V0LlxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gQXJyYXlTZXRfYWRkKGFTdHIsIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICB2YXIgaXNEdXBsaWNhdGUgPSBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB2YXIgaWR4ID0gdGhpcy5fYXJyYXkubGVuZ3RoO1xuICBpZiAoIWlzRHVwbGljYXRlIHx8IGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICB0aGlzLl9hcnJheS5wdXNoKGFTdHIpO1xuICB9XG4gIGlmICghaXNEdXBsaWNhdGUpIHtcbiAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gIH1cbn07XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIHN0cmluZyBhIG1lbWJlciBvZiB0aGlzIHNldD9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIEFycmF5U2V0X2hhcyhhU3RyKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgcmV0dXJuIGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIGlmIChoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgaW50VG9DaGFyTWFwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcblxuLyoqXG4gKiBFbmNvZGUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMCB0byA2MyB0byBhIHNpbmdsZSBiYXNlIDY0IGRpZ2l0LlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgaWYgKDAgPD0gbnVtYmVyICYmIG51bWJlciA8IGludFRvQ2hhck1hcC5sZW5ndGgpIHtcbiAgICByZXR1cm4gaW50VG9DaGFyTWFwW251bWJlcl07XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogXCIgKyBudW1iZXIpO1xufTtcblxuLyoqXG4gKiBEZWNvZGUgYSBzaW5nbGUgYmFzZSA2NCBjaGFyYWN0ZXIgY29kZSBkaWdpdCB0byBhbiBpbnRlZ2VyLiBSZXR1cm5zIC0xIG9uXG4gKiBmYWlsdXJlLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIChjaGFyQ29kZSkge1xuICB2YXIgYmlnQSA9IDY1OyAgICAgLy8gJ0EnXG4gIHZhciBiaWdaID0gOTA7ICAgICAvLyAnWidcblxuICB2YXIgbGl0dGxlQSA9IDk3OyAgLy8gJ2EnXG4gIHZhciBsaXR0bGVaID0gMTIyOyAvLyAneidcblxuICB2YXIgemVybyA9IDQ4OyAgICAgLy8gJzAnXG4gIHZhciBuaW5lID0gNTc7ICAgICAvLyAnOSdcblxuICB2YXIgcGx1cyA9IDQzOyAgICAgLy8gJysnXG4gIHZhciBzbGFzaCA9IDQ3OyAgICAvLyAnLydcblxuICB2YXIgbGl0dGxlT2Zmc2V0ID0gMjY7XG4gIHZhciBudW1iZXJPZmZzZXQgPSA1MjtcblxuICAvLyAwIC0gMjU6IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXG4gIGlmIChiaWdBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGJpZ1opIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gYmlnQSk7XG4gIH1cblxuICAvLyAyNiAtIDUxOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuICBpZiAobGl0dGxlQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBsaXR0bGVaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGxpdHRsZUEgKyBsaXR0bGVPZmZzZXQpO1xuICB9XG5cbiAgLy8gNTIgLSA2MTogMDEyMzQ1Njc4OVxuICBpZiAoemVybyA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBuaW5lKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIHplcm8gKyBudW1iZXJPZmZzZXQpO1xuICB9XG5cbiAgLy8gNjI6ICtcbiAgaWYgKGNoYXJDb2RlID09IHBsdXMpIHtcbiAgICByZXR1cm4gNjI7XG4gIH1cblxuICAvLyA2MzogL1xuICBpZiAoY2hhckNvZGUgPT0gc2xhc2gpIHtcbiAgICByZXR1cm4gNjM7XG4gIH1cblxuICAvLyBJbnZhbGlkIGJhc2U2NCBkaWdpdC5cbiAgcmV0dXJuIC0xO1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5leHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBSZWN1cnNpdmUgaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaC5cbiAqXG4gKiBAcGFyYW0gYUxvdyBJbmRpY2VzIGhlcmUgYW5kIGxvd2VyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYUhpZ2ggSW5kaWNlcyBoZXJlIGFuZCBoaWdoZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IGJlaW5nIHNlYXJjaGVkIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIG5vbi1lbXB0eSBhcnJheSBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBGdW5jdGlvbiB3aGljaCB0YWtlcyB0d28gZWxlbWVudHMgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgLy9cbiAgLy8gICAxLiBXZSBmaW5kIHRoZSBleGFjdCBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgLy9cbiAgLy8gICAyLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGJ1dCB3ZSBjYW4gcmV0dXJuIHRoZSBpbmRleCBvZlxuICAvLyAgICAgIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudC5cbiAgLy9cbiAgLy8gICAzLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGFuZCB0aGVyZSBpcyBubyBuZXh0LWNsb3Nlc3RcbiAgLy8gICAgICBlbGVtZW50IHRoYW4gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgc28gd2UgcmV0dXJuIC0xLlxuICB2YXIgbWlkID0gTWF0aC5mbG9vcigoYUhpZ2ggLSBhTG93KSAvIDIpICsgYUxvdztcbiAgdmFyIGNtcCA9IGFDb21wYXJlKGFOZWVkbGUsIGFIYXlzdGFja1ttaWRdLCB0cnVlKTtcbiAgaWYgKGNtcCA9PT0gMCkge1xuICAgIC8vIEZvdW5kIHRoZSBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgICByZXR1cm4gbWlkO1xuICB9XG4gIGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGdyZWF0ZXIgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAoYUhpZ2ggLSBtaWQgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgdXBwZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2gobWlkLCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIFRoZSBleGFjdCBuZWVkbGUgZWxlbWVudCB3YXMgbm90IGZvdW5kIGluIHRoaXMgaGF5c3RhY2suIERldGVybWluZSBpZlxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBhSGlnaCA8IGFIYXlzdGFjay5sZW5ndGggPyBhSGlnaCA6IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGxlc3MgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAobWlkIC0gYUxvdyA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSBsb3dlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBtaWQsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYUxvdyA8IDAgPyAtMSA6IGFMb3c7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoIHdoaWNoIHdpbGwgYWx3YXlzIHRyeSBhbmQgcmV0dXJuXG4gKiB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgZWxlbWVudCBpZiB0aGVyZSBpcyBubyBleGFjdCBoaXQuIFRoaXMgaXMgYmVjYXVzZVxuICogbWFwcGluZ3MgYmV0d2VlbiBvcmlnaW5hbCBhbmQgZ2VuZXJhdGVkIGxpbmUvY29sIHBhaXJzIGFyZSBzaW5nbGUgcG9pbnRzLFxuICogYW5kIHRoZXJlIGlzIGFuIGltcGxpY2l0IHJlZ2lvbiBiZXR3ZWVuIGVhY2ggb2YgdGhlbSwgc28gYSBtaXNzIGp1c3QgbWVhbnNcbiAqIHRoYXQgeW91IGFyZW4ndCBvbiB0aGUgdmVyeSBzdGFydCBvZiBhIHJlZ2lvbi5cbiAqXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCB5b3UgYXJlIGxvb2tpbmcgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgYXJyYXkgdGhhdCBpcyBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBuZWVkbGUgYW5kIGFuIGVsZW1lbnQgaW4gdGhlXG4gKiAgICAgYXJyYXkgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5lZWRsZSBpcyBsZXNzXG4gKiAgICAgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgZWxlbWVudCwgcmVzcGVjdGl2ZWx5LlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICovXG5leHBvcnRzLnNlYXJjaCA9IGZ1bmN0aW9uIHNlYXJjaChhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICBpZiAoYUhheXN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHJlY3Vyc2l2ZVNlYXJjaCgtMSwgYUhheXN0YWNrLmxlbmd0aCwgYU5lZWRsZSwgYUhheXN0YWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbXBhcmUsIGFCaWFzIHx8IGV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLy8gV2UgaGF2ZSBmb3VuZCBlaXRoZXIgdGhlIGV4YWN0IGVsZW1lbnQsIG9yIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudCB0aGFuXG4gIC8vIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIHN1Y2hcbiAgLy8gZWxlbWVudC4gTWFrZSBzdXJlIHdlIGFsd2F5cyByZXR1cm4gdGhlIHNtYWxsZXN0IG9mIHRoZXNlLlxuICB3aGlsZSAoaW5kZXggLSAxID49IDApIHtcbiAgICBpZiAoYUNvbXBhcmUoYUhheXN0YWNrW2luZGV4XSwgYUhheXN0YWNrW2luZGV4IC0gMV0sIHRydWUpICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLS1pbmRleDtcbiAgfVxuXG4gIHJldHVybiBpbmRleDtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGdldHRpbmcgdmFsdWVzIGZyb20gcGFyYW1ldGVyL29wdGlvbnNcbiAqIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGFyZ3MgVGhlIG9iamVjdCB3ZSBhcmUgZXh0cmFjdGluZyB2YWx1ZXMgZnJvbVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdlIGFyZSBnZXR0aW5nLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBBbiBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmdcbiAqIGZyb20gdGhlIG9iamVjdC4gSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkIGFuZCB0aGUgcHJvcGVydHkgaXMgbWlzc2luZywgYW5cbiAqIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICovXG5mdW5jdGlvbiBnZXRBcmcoYUFyZ3MsIGFOYW1lLCBhRGVmYXVsdFZhbHVlKSB7XG4gIGlmIChhTmFtZSBpbiBhQXJncykge1xuICAgIHJldHVybiBhQXJnc1thTmFtZV07XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBhRGVmYXVsdFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYU5hbWUgKyAnXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKTtcbiAgfVxufVxuZXhwb3J0cy5nZXRBcmcgPSBnZXRBcmc7XG5cbnZhciB1cmxSZWdleHAgPSAvXig/OihbXFx3K1xcLS5dKyk6KT9cXC9cXC8oPzooXFx3KzpcXHcrKUApPyhbXFx3Ll0qKSg/OjooXFxkKykpPyhcXFMqKSQvO1xudmFyIGRhdGFVcmxSZWdleHAgPSAvXmRhdGE6LitcXCwuKyQvO1xuXG5mdW5jdGlvbiB1cmxQYXJzZShhVXJsKSB7XG4gIHZhciBtYXRjaCA9IGFVcmwubWF0Y2godXJsUmVnZXhwKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NoZW1lOiBtYXRjaFsxXSxcbiAgICBhdXRoOiBtYXRjaFsyXSxcbiAgICBob3N0OiBtYXRjaFszXSxcbiAgICBwb3J0OiBtYXRjaFs0XSxcbiAgICBwYXRoOiBtYXRjaFs1XVxuICB9O1xufVxuZXhwb3J0cy51cmxQYXJzZSA9IHVybFBhcnNlO1xuXG5mdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFyc2VkVXJsKSB7XG4gIHZhciB1cmwgPSAnJztcbiAgaWYgKGFQYXJzZWRVcmwuc2NoZW1lKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuc2NoZW1lICsgJzonO1xuICB9XG4gIHVybCArPSAnLy8nO1xuICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuYXV0aCArICdAJztcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuaG9zdDtcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7XG4gICAgdXJsICs9IFwiOlwiICsgYVBhcnNlZFVybC5wb3J0XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucGF0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnBhdGg7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cbmV4cG9ydHMudXJsR2VuZXJhdGUgPSB1cmxHZW5lcmF0ZTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGF0aCwgb3IgdGhlIHBhdGggcG9ydGlvbiBvZiBhIFVSTDpcbiAqXG4gKiAtIFJlcGxhY2VzIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aCBvbmUgc2xhc2guXG4gKiAtIFJlbW92ZXMgdW5uZWNlc3NhcnkgJy4nIHBhcnRzLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICc8ZGlyPi8uLicgcGFydHMuXG4gKlxuICogQmFzZWQgb24gY29kZSBpbiB0aGUgTm9kZS5qcyAncGF0aCcgY29yZSBtb2R1bGUuXG4gKlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIHVybCB0byBub3JtYWxpemUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhUGF0aCkge1xuICB2YXIgcGF0aCA9IGFQYXRoO1xuICB2YXIgdXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICBpZiAodXJsKSB7XG4gICAgaWYgKCF1cmwucGF0aCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cbiAgICBwYXRoID0gdXJsLnBhdGg7XG4gIH1cbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCk7XG5cbiAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuICBmb3IgKHZhciBwYXJ0LCB1cCA9IDAsIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHBhcnQgPSBwYXJ0c1tpXTtcbiAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXAgPiAwKSB7XG4gICAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYmxhbmsgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuIFRyeWluZyB0byBnb1xuICAgICAgICAvLyBhYm92ZSB0aGUgcm9vdCBpcyBhIG5vLW9wLiBUaGVyZWZvcmUgd2UgY2FuIHJlbW92ZSBhbGwgJy4uJyBwYXJ0c1xuICAgICAgICAvLyBkaXJlY3RseSBhZnRlciB0aGUgcm9vdC5cbiAgICAgICAgcGFydHMuc3BsaWNlKGkgKyAxLCB1cCk7XG4gICAgICAgIHVwID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShpLCAyKTtcbiAgICAgICAgdXAtLTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcblxuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICBwYXRoID0gaXNBYnNvbHV0ZSA/ICcvJyA6ICcuJztcbiAgfVxuXG4gIGlmICh1cmwpIHtcbiAgICB1cmwucGF0aCA9IHBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKHVybCk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcblxuLyoqXG4gKiBKb2lucyB0d28gcGF0aHMvVVJMcy5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIGpvaW5lZCB3aXRoIHRoZSByb290LlxuICpcbiAqIC0gSWYgYVBhdGggaXMgYSBVUkwgb3IgYSBkYXRhIFVSSSwgYVBhdGggaXMgcmV0dXJuZWQsIHVubGVzcyBhUGF0aCBpcyBhXG4gKiAgIHNjaGVtZS1yZWxhdGl2ZSBVUkw6IFRoZW4gdGhlIHNjaGVtZSBvZiBhUm9vdCwgaWYgYW55LCBpcyBwcmVwZW5kZWRcbiAqICAgZmlyc3QuXG4gKiAtIE90aGVyd2lzZSBhUGF0aCBpcyBhIHBhdGguIElmIGFSb290IGlzIGEgVVJMLCB0aGVuIGl0cyBwYXRoIHBvcnRpb25cbiAqICAgaXMgdXBkYXRlZCB3aXRoIHRoZSByZXN1bHQgYW5kIGFSb290IGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhlIHJlc3VsdFxuICogICBpcyByZXR1cm5lZC5cbiAqICAgLSBJZiBhUGF0aCBpcyBhYnNvbHV0ZSwgdGhlIHJlc3VsdCBpcyBhUGF0aC5cbiAqICAgLSBPdGhlcndpc2UgdGhlIHR3byBwYXRocyBhcmUgam9pbmVkIHdpdGggYSBzbGFzaC5cbiAqIC0gSm9pbmluZyBmb3IgZXhhbXBsZSAnaHR0cDovLycgYW5kICd3d3cuZXhhbXBsZS5jb20nIGlzIGFsc28gc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBqb2luKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG4gIGlmIChhUGF0aCA9PT0gXCJcIikge1xuICAgIGFQYXRoID0gXCIuXCI7XG4gIH1cbiAgdmFyIGFQYXRoVXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICB2YXIgYVJvb3RVcmwgPSB1cmxQYXJzZShhUm9vdCk7XG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290ID0gYVJvb3RVcmwucGF0aCB8fCAnLyc7XG4gIH1cblxuICAvLyBgam9pbihmb28sICcvL3d3dy5leGFtcGxlLm9yZycpYFxuICBpZiAoYVBhdGhVcmwgJiYgIWFQYXRoVXJsLnNjaGVtZSkge1xuICAgIGlmIChhUm9vdFVybCkge1xuICAgICAgYVBhdGhVcmwuc2NoZW1lID0gYVJvb3RVcmwuc2NoZW1lO1xuICAgIH1cbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVBhdGhVcmwpO1xuICB9XG5cbiAgaWYgKGFQYXRoVXJsIHx8IGFQYXRoLm1hdGNoKGRhdGFVcmxSZWdleHApKSB7XG4gICAgcmV0dXJuIGFQYXRoO1xuICB9XG5cbiAgLy8gYGpvaW4oJ2h0dHA6Ly8nLCAnd3d3LmV4YW1wbGUuY29tJylgXG4gIGlmIChhUm9vdFVybCAmJiAhYVJvb3RVcmwuaG9zdCAmJiAhYVJvb3RVcmwucGF0aCkge1xuICAgIGFSb290VXJsLmhvc3QgPSBhUGF0aDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG5cbiAgdmFyIGpvaW5lZCA9IGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgPyBhUGF0aFxuICAgIDogbm9ybWFsaXplKGFSb290LnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgYVBhdGgpO1xuXG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290VXJsLnBhdGggPSBqb2luZWQ7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuICByZXR1cm4gam9pbmVkO1xufVxuZXhwb3J0cy5qb2luID0gam9pbjtcblxuZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24gKGFQYXRoKSB7XG4gIHJldHVybiBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJyB8fCAhIWFQYXRoLm1hdGNoKHVybFJlZ2V4cCk7XG59O1xuXG4vKipcbiAqIE1ha2UgYSBwYXRoIHJlbGF0aXZlIHRvIGEgVVJMIG9yIGFub3RoZXIgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIG1hZGUgcmVsYXRpdmUgdG8gYVJvb3QuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0aXZlKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG5cbiAgYVJvb3QgPSBhUm9vdC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgcGF0aCB0byBiZSBhYm92ZSB0aGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBzaW1wbHlcbiAgLy8gY2hlY2tpbmcgd2hldGhlciB0aGUgcm9vdCBpcyBhIHByZWZpeCBvZiB0aGUgcGF0aCB3b24ndCB3b3JrLiBJbnN0ZWFkLCB3ZVxuICAvLyBuZWVkIHRvIHJlbW92ZSBjb21wb25lbnRzIGZyb20gdGhlIHJvb3Qgb25lIGJ5IG9uZSwgdW50aWwgZWl0aGVyIHdlIGZpbmRcbiAgLy8gYSBwcmVmaXggdGhhdCBmaXRzLCBvciB3ZSBydW4gb3V0IG9mIGNvbXBvbmVudHMgdG8gcmVtb3ZlLlxuICB2YXIgbGV2ZWwgPSAwO1xuICB3aGlsZSAoYVBhdGguaW5kZXhPZihhUm9vdCArICcvJykgIT09IDApIHtcbiAgICB2YXIgaW5kZXggPSBhUm9vdC5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBvbmx5IHBhcnQgb2YgdGhlIHJvb3QgdGhhdCBpcyBsZWZ0IGlzIHRoZSBzY2hlbWUgKGkuZS4gaHR0cDovLyxcbiAgICAvLyBmaWxlOi8vLywgZXRjLiksIG9uZSBvciBtb3JlIHNsYXNoZXMgKC8pLCBvciBzaW1wbHkgbm90aGluZyBhdCBhbGwsIHdlXG4gICAgLy8gaGF2ZSBleGhhdXN0ZWQgYWxsIGNvbXBvbmVudHMsIHNvIHRoZSBwYXRoIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcm9vdC5cbiAgICBhUm9vdCA9IGFSb290LnNsaWNlKDAsIGluZGV4KTtcbiAgICBpZiAoYVJvb3QubWF0Y2goL14oW15cXC9dKzpcXC8pP1xcLyokLykpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICArK2xldmVsO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGFkZCBhIFwiLi4vXCIgZm9yIGVhY2ggY29tcG9uZW50IHdlIHJlbW92ZWQgZnJvbSB0aGUgcm9vdC5cbiAgcmV0dXJuIEFycmF5KGxldmVsICsgMSkuam9pbihcIi4uL1wiKSArIGFQYXRoLnN1YnN0cihhUm9vdC5sZW5ndGggKyAxKTtcbn1cbmV4cG9ydHMucmVsYXRpdmUgPSByZWxhdGl2ZTtcblxudmFyIHN1cHBvcnRzTnVsbFByb3RvID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAhKCdfX3Byb3RvX18nIGluIG9iaik7XG59KCkpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSAocykge1xuICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBCZWNhdXNlIGJlaGF2aW9yIGdvZXMgd2Fja3kgd2hlbiB5b3Ugc2V0IGBfX3Byb3RvX19gIG9uIG9iamVjdHMsIHdlXG4gKiBoYXZlIHRvIHByZWZpeCBhbGwgdGhlIHN0cmluZ3MgaW4gb3VyIHNldCB3aXRoIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXIuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvcHVsbC8zMSBhbmRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzMwXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbmZ1bmN0aW9uIHRvU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gJyQnICsgYVN0cjtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy50b1NldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiB0b1NldFN0cmluZztcblxuZnVuY3Rpb24gZnJvbVNldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuIGFTdHIuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMuZnJvbVNldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiBmcm9tU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBpc1Byb3RvU3RyaW5nKHMpIHtcbiAgaWYgKCFzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IHMubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPCA5IC8qIFwiX19wcm90b19fXCIubGVuZ3RoICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHMuY2hhckNvZGVBdChsZW5ndGggLSAxKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDIpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMykgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA0KSAhPT0gMTE2IC8qICd0JyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDUpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNikgIT09IDExNCAvKiAncicgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA3KSAhPT0gMTEyIC8qICdwJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDgpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOSkgIT09IDk1ICAvKiAnXycgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gbGVuZ3RoIC0gMTA7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHMuY2hhckNvZGVBdChpKSAhPT0gMzYgLyogJyQnICovKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiwgYnV0IGRpZmZlcmVudCBnZW5lcmF0ZWRcbiAqIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhIG1hcHBpbmcgd2l0aCBhXG4gKiBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyhtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGRlZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBpbmRpY2VzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICogbWFwcGluZyB3aXRoIGEgc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQ7XG5cbmZ1bmN0aW9uIHN0cmNtcChhU3RyMSwgYVN0cjIpIHtcbiAgaWYgKGFTdHIxID09PSBhU3RyMikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKGFTdHIxID4gYVN0cjIpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggaW5mbGF0ZWQgc291cmNlIGFuZCBuYW1lIHN0cmluZ3Mgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gc3RyY21wKG1hcHBpbmdBLnNvdXJjZSwgbWFwcGluZ0Iuc291cmNlKTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gc3RyY21wKG1hcHBpbmdBLm5hbWUsIG1hcHBpbmdCLm5hbWUpO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkO1xuIiwiKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrZnJhbWUnLCBbXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja0ZyYW1lID0gZmFjdG9yeSgpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICBmdW5jdGlvbiBfaXNOdW1iZXIobikge1xuICAgICAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQobikpICYmIGlzRmluaXRlKG4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIFN0YWNrRnJhbWUoZnVuY3Rpb25OYW1lLCBhcmdzLCBmaWxlTmFtZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgaWYgKGZ1bmN0aW9uTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZ1bmN0aW9uTmFtZShmdW5jdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXJncyhhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRGaWxlTmFtZShmaWxlTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbmVOdW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRMaW5lTnVtYmVyKGxpbmVOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2x1bW5OdW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRDb2x1bW5OdW1iZXIoY29sdW1uTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U291cmNlKHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBTdGFja0ZyYW1lLnByb3RvdHlwZSA9IHtcbiAgICAgICAgZ2V0RnVuY3Rpb25OYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mdW5jdGlvbk5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEZ1bmN0aW9uTmFtZTogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25OYW1lID0gU3RyaW5nKHYpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldEFyZ3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFyZ3M7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEFyZ3M6IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJncyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFyZ3MgPSB2O1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIE5PVEU6IFByb3BlcnR5IG5hbWUgbWF5IGJlIG1pc2xlYWRpbmcgYXMgaXQgaW5jbHVkZXMgdGhlIHBhdGgsXG4gICAgICAgIC8vIGJ1dCBpdCBzb21ld2hhdCBtaXJyb3JzIFY4J3MgSmF2YVNjcmlwdFN0YWNrVHJhY2VBcGlcbiAgICAgICAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC93aWtpL0phdmFTY3JpcHRTdGFja1RyYWNlQXBpIGFuZCBHZWNrbydzXG4gICAgICAgIC8vIGh0dHA6Ly9teHIubW96aWxsYS5vcmcvbW96aWxsYS1jZW50cmFsL3NvdXJjZS94cGNvbS9iYXNlL25zSUV4Y2VwdGlvbi5pZGwjMTRcbiAgICAgICAgZ2V0RmlsZU5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGVOYW1lO1xuICAgICAgICB9LFxuICAgICAgICBzZXRGaWxlTmFtZTogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZU5hbWUgPSBTdHJpbmcodik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0TGluZU51bWJlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGluZU51bWJlcjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0TGluZU51bWJlcjogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgIGlmICghX2lzTnVtYmVyKHYpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTGluZSBOdW1iZXIgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5saW5lTnVtYmVyID0gTnVtYmVyKHYpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldENvbHVtbk51bWJlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uTnVtYmVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXRDb2x1bW5OdW1iZXI6IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICBpZiAoIV9pc051bWJlcih2KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbHVtbiBOdW1iZXIgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb2x1bW5OdW1iZXIgPSBOdW1iZXIodik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0U291cmNlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldFNvdXJjZTogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlID0gU3RyaW5nKHYpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0aGlzLmdldEZ1bmN0aW9uTmFtZSgpIHx8ICd7YW5vbnltb3VzfSc7XG4gICAgICAgICAgICB2YXIgYXJncyA9ICcoJyArICh0aGlzLmdldEFyZ3MoKSB8fCBbXSkuam9pbignLCcpICsgJyknO1xuICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gdGhpcy5nZXRGaWxlTmFtZSgpID8gKCdAJyArIHRoaXMuZ2V0RmlsZU5hbWUoKSkgOiAnJztcbiAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gX2lzTnVtYmVyKHRoaXMuZ2V0TGluZU51bWJlcigpKSA/ICgnOicgKyB0aGlzLmdldExpbmVOdW1iZXIoKSkgOiAnJztcbiAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSBfaXNOdW1iZXIodGhpcy5nZXRDb2x1bW5OdW1iZXIoKSkgPyAoJzonICsgdGhpcy5nZXRDb2x1bW5OdW1iZXIoKSkgOiAnJztcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbk5hbWUgKyBhcmdzICsgZmlsZU5hbWUgKyBsaW5lTnVtYmVyICsgY29sdW1uTnVtYmVyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBTdGFja0ZyYW1lO1xufSkpO1xuIiwiKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrLWdlbmVyYXRvcicsIFsnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc3RhY2tmcmFtZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrR2VuZXJhdG9yID0gZmFjdG9yeShyb290LlN0YWNrRnJhbWUpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gKFN0YWNrRnJhbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBiYWNrdHJhY2U6IGZ1bmN0aW9uIFN0YWNrR2VuZXJhdG9yJCRiYWNrdHJhY2Uob3B0cykge1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gW107XG4gICAgICAgICAgICB2YXIgbWF4U3RhY2tTaXplID0gMTA7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9wdHMubWF4U3RhY2tTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIG1heFN0YWNrU2l6ZSA9IG9wdHMubWF4U3RhY2tTaXplO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY3VyciA9IGFyZ3VtZW50cy5jYWxsZWU7XG4gICAgICAgICAgICB3aGlsZSAoY3VyciAmJiBzdGFjay5sZW5ndGggPCBtYXhTdGFja1NpemUpIHtcbiAgICAgICAgICAgICAgICAvLyBBbGxvdyBWOCBvcHRpbWl6YXRpb25zXG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoY3VyclsnYXJndW1lbnRzJ10ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gY3VyclsnYXJndW1lbnRzJ11baV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgvZnVuY3Rpb24oPzpcXHMrKFtcXHckXSspKStcXHMqXFwoLy50ZXN0KGN1cnIudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZShSZWdFeHAuJDEgfHwgdW5kZWZpbmVkLCBhcmdzKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh1bmRlZmluZWQsIGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci5jYWxsZXI7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZS1ncHMnLCBbJ3NvdXJjZS1tYXAnLCAnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc291cmNlLW1hcC9saWIvc291cmNlLW1hcC1jb25zdW1lcicpLCByZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tUcmFjZUdQUyA9IGZhY3Rvcnkocm9vdC5Tb3VyY2VNYXAgfHwgcm9vdC5zb3VyY2VNYXAsIHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTb3VyY2VNYXAsIFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBNYWtlIGEgWC1Eb21haW4gcmVxdWVzdCB0byB1cmwgYW5kIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB3aXRoIHJlc3BvbnNlIHRleHQgaWYgZnVsZmlsbGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gX3hkcih1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgcmVxLm9wZW4oJ2dldCcsIHVybCk7XG4gICAgICAgICAgICByZXEub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzID49IDIwMCAmJiByZXEuc3RhdHVzIDwgMzAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignSFRUUCBzdGF0dXM6ICcgKyByZXEuc3RhdHVzICsgJyByZXRyaWV2aW5nICcgKyB1cmwpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXEuc2VuZCgpO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYSBCYXNlNjQtZW5jb2RlZCBzdHJpbmcgaW50byBpdHMgb3JpZ2luYWwgcmVwcmVzZW50YXRpb24uXG4gICAgICogVXNlZCBmb3IgaW5saW5lIHNvdXJjZW1hcHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gYjY0c3RyIEJhc2UtNjQgZW5jb2RlZCBzdHJpbmdcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBvcmlnaW5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgYmFzZTY0LWVuY29kZWQgc3RyaW5nLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9hdG9iKGI2NHN0cikge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmF0b2IpIHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cuYXRvYihiNjRzdHIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBzdXBwbHkgYSBwb2x5ZmlsbCBmb3Igd2luZG93LmF0b2IgaW4gdGhpcyBlbnZpcm9ubWVudCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3BhcnNlSnNvbihzdHJpbmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBKU09OICE9PSAndW5kZWZpbmVkJyAmJiBKU09OLnBhcnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdHJpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBzdXBwbHkgYSBwb2x5ZmlsbCBmb3IgSlNPTi5wYXJzZSBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZmluZEZ1bmN0aW9uTmFtZShzb3VyY2UsIGxpbmVOdW1iZXIvKiwgY29sdW1uTnVtYmVyKi8pIHtcbiAgICAgICAgLy8gZnVuY3Rpb24ge25hbWV9KHthcmdzfSkgbVsxXT1uYW1lIG1bMl09YXJnc1xuICAgICAgICB2YXIgcmVGdW5jdGlvbkRlY2xhcmF0aW9uID0gL2Z1bmN0aW9uXFxzKyhbXihdKj8pXFxzKlxcKChbXildKilcXCkvO1xuICAgICAgICAvLyB7bmFtZX0gPSBmdW5jdGlvbiAoe2FyZ3N9KSBUT0RPIGFyZ3MgY2FwdHVyZVxuICAgICAgICB2YXIgcmVGdW5jdGlvbkV4cHJlc3Npb24gPSAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypmdW5jdGlvblxcYi87XG4gICAgICAgIC8vIHtuYW1lfSA9IGV2YWwoKVxuICAgICAgICB2YXIgcmVGdW5jdGlvbkV2YWx1YXRpb24gPSAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccyooPzpldmFsfG5ldyBGdW5jdGlvbilcXGIvO1xuICAgICAgICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoJ1xcbicpO1xuXG4gICAgICAgIC8vIFdhbGsgYmFja3dhcmRzIGluIHRoZSBzb3VyY2UgbGluZXMgdW50aWwgd2UgZmluZCB0aGUgbGluZSB3aGljaCBtYXRjaGVzIG9uZSBvZiB0aGUgcGF0dGVybnMgYWJvdmVcbiAgICAgICAgdmFyIGNvZGUgPSAnJztcbiAgICAgICAgdmFyIG1heExpbmVzID0gTWF0aC5taW4obGluZU51bWJlciwgMjApO1xuICAgICAgICB2YXIgbTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhMaW5lczsgKytpKSB7XG4gICAgICAgICAgICAvLyBsaW5lTm8gaXMgMS1iYXNlZCwgc291cmNlW10gaXMgMC1iYXNlZFxuICAgICAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tsaW5lTnVtYmVyIC0gaSAtIDFdO1xuICAgICAgICAgICAgdmFyIGNvbW1lbnRQb3MgPSBsaW5lLmluZGV4T2YoJy8vJyk7XG4gICAgICAgICAgICBpZiAoY29tbWVudFBvcyA+PSAwKSB7XG4gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3Vic3RyKDAsIGNvbW1lbnRQb3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgICAgICAgIGNvZGUgPSBsaW5lICsgY29kZTtcbiAgICAgICAgICAgICAgICBtID0gcmVGdW5jdGlvbkV4cHJlc3Npb24uZXhlYyhjb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAobSAmJiBtWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtWzFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtID0gcmVGdW5jdGlvbkRlY2xhcmF0aW9uLmV4ZWMoY29kZSk7XG4gICAgICAgICAgICAgICAgaWYgKG0gJiYgbVsxXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVsxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbSA9IHJlRnVuY3Rpb25FdmFsdWF0aW9uLmV4ZWMoY29kZSk7XG4gICAgICAgICAgICAgICAgaWYgKG0gJiYgbVsxXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVsxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZW5zdXJlU3VwcG9ydGVkRW52aXJvbm1lbnQoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjb25zdW1lIHNvdXJjZSBtYXBzIGluIG9sZGVyIGJyb3dzZXJzJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZW5zdXJlU3RhY2tGcmFtZUlzTGVnaXQoc3RhY2tmcmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mIHN0YWNrZnJhbWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBTdGFja0ZyYW1lIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhY2tmcmFtZS5maWxlTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGZpbGUgbmFtZSBpcyBub3QgYSBTdHJpbmcnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhY2tmcmFtZS5saW5lTnVtYmVyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciAlIDEgIT09IDAgfHxcbiAgICAgICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBsaW5lIG51bWJlciBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciAlIDEgIT09IDAgfHxcbiAgICAgICAgICAgICAgICBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGNvbHVtbiBudW1iZXIgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSkge1xuICAgICAgICB2YXIgbSA9IC9cXC9cXC9bI0BdID9zb3VyY2VNYXBwaW5nVVJMPShbXlxccydcIl0rKVxccyokLy5leGVjKHNvdXJjZSk7XG4gICAgICAgIGlmIChtICYmIG1bMV0pIHtcbiAgICAgICAgICAgIHJldHVybiBtWzFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzb3VyY2VNYXBwaW5nVVJMIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwKHJhd1NvdXJjZU1hcCwgYXJncywgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VDYWNoZSkge1xuICAgICAgICB2YXIgbWFwQ29uc3VtZXIgPSBuZXcgU291cmNlTWFwLlNvdXJjZU1hcENvbnN1bWVyKHJhd1NvdXJjZU1hcCk7XG5cbiAgICAgICAgdmFyIGxvYyA9IG1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgICAgbGluZTogbGluZU51bWJlcixcbiAgICAgICAgICAgIGNvbHVtbjogY29sdW1uTnVtYmVyXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBtYXBwZWRTb3VyY2UgPSBtYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGxvYy5zb3VyY2UpO1xuICAgICAgICBpZiAobWFwcGVkU291cmNlKSB7XG4gICAgICAgICAgICBzb3VyY2VDYWNoZVtsb2Muc291cmNlXSA9IG1hcHBlZFNvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZShsb2MubmFtZSwgYXJncywgbG9jLnNvdXJjZSwgbG9jLmxpbmUsIGxvYy5jb2x1bW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICogICAgICBvcHRzLnNvdXJjZUNhY2hlID0ge3VybDogXCJTb3VyY2UgU3RyaW5nXCJ9ID0+IHByZWxvYWQgc291cmNlIGNhY2hlXG4gICAgICogICAgICBvcHRzLm9mZmxpbmUgPSBUcnVlIHRvIHByZXZlbnQgbmV0d29yayByZXF1ZXN0cy5cbiAgICAgKiAgICAgICAgICAgICAgQmVzdCBlZmZvcnQgd2l0aG91dCBzb3VyY2VzIG9yIHNvdXJjZSBtYXBzLlxuICAgICAqICAgICAgb3B0cy5hamF4ID0gUHJvbWlzZSByZXR1cm5pbmcgZnVuY3Rpb24gdG8gbWFrZSBYLURvbWFpbiByZXF1ZXN0c1xuICAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBTdGFja1RyYWNlR1BTKG9wdHMpIHtcbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFN0YWNrVHJhY2VHUFMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrVHJhY2VHUFMob3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICAgICAgdGhpcy5zb3VyY2VDYWNoZSA9IG9wdHMuc291cmNlQ2FjaGUgfHwge307XG5cbiAgICAgICAgdGhpcy5hamF4ID0gb3B0cy5hamF4IHx8IF94ZHI7XG5cbiAgICAgICAgdGhpcy5fYXRvYiA9IG9wdHMuYXRvYiB8fCBfYXRvYjtcblxuICAgICAgICB0aGlzLl9nZXQgPSBmdW5jdGlvbiBfZ2V0KGxvY2F0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzRGF0YVVybCA9IGxvY2F0aW9uLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRzLm9mZmxpbmUgJiYgIWlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdDYW5ub3QgbWFrZSBuZXR3b3JrIHJlcXVlc3RzIGluIG9mZmxpbmUgbW9kZScpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNEYXRhVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIFVSTHMgY2FuIGhhdmUgcGFyYW1ldGVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VwcG9ydGVkRW5jb2RpbmdSZWdleHAgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9eZGF0YTphcHBsaWNhdGlvblxcL2pzb247KFtcXHc9OlwiLV0rOykqYmFzZTY0LC87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsb2NhdGlvbi5tYXRjaChzdXBwb3J0ZWRFbmNvZGluZ1JlZ2V4cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwU3RhcnQgPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kZWRTb3VyY2UgPSBsb2NhdGlvbi5zdWJzdHIoc291cmNlTWFwU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLl9hdG9iKGVuY29kZWRTb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0gc291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVGhlIGVuY29kaW5nIG9mIHRoZSBpbmxpbmUgc291cmNlbWFwIGlzIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGhyUHJvbWlzZSA9IHRoaXMuYWpheChsb2NhdGlvbiwge21ldGhvZDogJ2dldCd9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhY2hlIHRoZSBQcm9taXNlIHRvIHByZXZlbnQgZHVwbGljYXRlIGluLWZsaWdodCByZXF1ZXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0gPSB4aHJQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyUHJvbWlzZS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIFN0YWNrRnJhbWUsIGVuaGFuY2UgZnVuY3Rpb24gbmFtZSBhbmQgdXNlIHNvdXJjZSBtYXBzIGZvciBhXG4gICAgICAgICAqIGJldHRlciBTdGFja0ZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWUgb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggd2l0aCBzb3VyY2UtbWFwcGVkIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGlucG9pbnQgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRwaW5wb2ludChzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKS50aGVuKGZ1bmN0aW9uKG1hcHBlZFN0YWNrRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lKG1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlLCByZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIFsnY2F0Y2gnXShyZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCByZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBndWVzcyBmdW5jdGlvbiBuYW1lIGZyb20gbG9jYXRpb24gaW5mb3JtYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbmRGdW5jdGlvbk5hbWUgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRmaW5kRnVuY3Rpb25OYW1lKHN0YWNrZnJhbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBfZW5zdXJlU3RhY2tGcmFtZUlzTGVnaXQoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0KHN0YWNrZnJhbWUuZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24gZ2V0U291cmNlQ2FsbGJhY2soc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gc3RhY2tmcmFtZS5saW5lTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uTnVtYmVyID0gc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBndWVzc2VkRnVuY3Rpb25OYW1lID0gX2ZpbmRGdW5jdGlvbk5hbWUoc291cmNlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHJlcGxhY2UgZnVuY3Rpb25OYW1lIGlmIHdlIGZvdW5kIHNvbWV0aGluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3Vlc3NlZEZ1bmN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU3RhY2tGcmFtZShndWVzc2VkRnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrZnJhbWUuYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja2ZyYW1lLmZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBzZWVrIHNvdXJjZS1tYXBwZWQgbG9jYXRpb24gYW5kIHJldHVybiBuZXcgZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZ2V0TWFwcGVkTG9jYXRpb24gPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRnZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN1cHBvcnRlZEVudmlyb25tZW50KCk7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZTtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBzdGFja2ZyYW1lLmZpbGVOYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChmaWxlTmFtZSkudGhlbihmdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmdVUkwgPSBfZmluZFNvdXJjZU1hcHBpbmdVUkwoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzRGF0YVVybCA9IHNvdXJjZU1hcHBpbmdVUkwuc3Vic3RyKDAsIDUpID09PSAnZGF0YTonO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZSA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZS5sYXN0SW5kZXhPZignLycpICsgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZU1hcHBpbmdVUkxbMF0gIT09ICcvJyAmJiAhaXNEYXRhVXJsICYmICEoL15odHRwcz86XFwvXFwvfF5cXC9cXC8vaSkudGVzdChzb3VyY2VNYXBwaW5nVVJMKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwcGluZ1VSTCA9IGJhc2UgKyBzb3VyY2VNYXBwaW5nVVJMO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0KHNvdXJjZU1hcHBpbmdVUkwpLnRoZW4oZnVuY3Rpb24obWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHN0YWNrZnJhbWUubGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW4gPSBzdGFja2ZyYW1lLmNvbHVtbk51bWJlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwID0gX3BhcnNlSnNvbihtYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1hcC5zb3VyY2VSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5zb3VyY2VSb290ID0gYmFzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShfZXh0cmFjdExvY2F0aW9uSW5mb0Zyb21Tb3VyY2VNYXAobWFwLCBzdGFja2ZyYW1lLmFyZ3MsIGxpbmUsIGNvbHVtbiwgc291cmNlQ2FjaGUpKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZScsIFsnZXJyb3Itc3RhY2stcGFyc2VyJywgJ3N0YWNrLWdlbmVyYXRvcicsICdzdGFja3RyYWNlLWdwcyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnZXJyb3Itc3RhY2stcGFyc2VyJyksIHJlcXVpcmUoJ3N0YWNrLWdlbmVyYXRvcicpLCByZXF1aXJlKCdzdGFja3RyYWNlLWdwcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2UgPSBmYWN0b3J5KHJvb3QuRXJyb3JTdGFja1BhcnNlciwgcm9vdC5TdGFja0dlbmVyYXRvciwgcm9vdC5TdGFja1RyYWNlR1BTKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIFN0YWNrVHJhY2UoRXJyb3JTdGFja1BhcnNlciwgU3RhY2tHZW5lcmF0b3IsIFN0YWNrVHJhY2VHUFMpIHtcbiAgICB2YXIgX29wdGlvbnMgPSB7XG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBzdGFja2ZyYW1lcyBmb3IgdGhpcyBsaWJyYXJ5IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2UkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignRXJyb3JTdGFja1BhcnNlciQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlR1BTJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrR2VuZXJhdG9yJCQnKSA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZUNhY2hlOiB7fVxuICAgIH07XG5cbiAgICB2YXIgX2dlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRHZW5lcmF0ZUVycm9yKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRXJyb3IgbXVzdCBiZSB0aHJvd24gdG8gZ2V0IHN0YWNrIGluIElFXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdlIDIgZ2l2ZW4gT2JqZWN0cy4gSWYgYSBjb25mbGljdCBvY2N1cnMgdGhlIHNlY29uZCBvYmplY3Qgd2lucy5cbiAgICAgKiBEb2VzIG5vdCBkbyBkZWVwIG1lcmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaXJzdCBiYXNlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWNvbmQgb3ZlcnJpZGVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gbWVyZ2VkIGZpcnN0IGFuZCBzZWNvbmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tZXJnZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcblxuICAgICAgICBbZmlyc3QsIHNlY29uZF0uZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVyci5zdGFjayB8fCBlcnJbJ29wZXJhI3NvdXJjZWxvYyddO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXJlZChzdGFja2ZyYW1lcywgZmlsdGVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXMuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrZnJhbWVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0KG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikgPyB0aGlzLmZyb21FcnJvcihlcnIsIG9wdHMpIDogdGhpcy5nZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgYmFja3RyYWNlIGZyb20gaW52b2NhdGlvbiBwb2ludC5cbiAgICAgICAgICogSU1QT1JUQU5UOiBEb2VzIG5vdCBoYW5kbGUgc291cmNlIG1hcHMgb3IgZ3Vlc3MgZnVuY3Rpb24gbmFtZXMhXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0U3luYzogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0U3luYyhvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyKSA6IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyZWQoc3RhY2ssIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3Igb2JqZWN0LCBwYXJzZSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmb3IgQXJyYXlbU3RhY2tGcmFtZX1cbiAgICAgICAgICovXG4gICAgICAgIGZyb21FcnJvcjogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZnJvbUVycm9yKGVycm9yLCBvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBncHMgPSBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrZnJhbWVzID0gX2ZpbHRlcmVkKEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyb3IpLCBvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShQcm9taXNlLmFsbChzdGFja2ZyYW1lcy5tYXAoZnVuY3Rpb24oc2YpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVPcmlnaW5hbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ3BzLnBpbnBvaW50KHNmKS50aGVuKHJlc29sdmUsIHJlc29sdmVPcmlnaW5hbClbJ2NhdGNoJ10ocmVzb2x2ZU9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBTdGFja0dlbmVyYXRvciB0byBnZW5lcmF0ZSBhIGJhY2t0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IG9mIEFycmF5W1N0YWNrRnJhbWVdXG4gICAgICAgICAqL1xuICAgICAgICBnZW5lcmF0ZUFydGlmaWNpYWxseTogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2VuZXJhdGVBcnRpZmljaWFsbHkob3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgc3RhY2tGcmFtZXMgPSBTdGFja0dlbmVyYXRvci5iYWNrdHJhY2Uob3B0cyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgc3RhY2tGcmFtZXMgPSBzdGFja0ZyYW1lcy5maWx0ZXIob3B0cy5maWx0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGFja0ZyYW1lcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24sIHdyYXAgaXQgc3VjaCB0aGF0IGludm9jYXRpb25zIHRyaWdnZXIgYSBjYWxsYmFjayB0aGF0XG4gICAgICAgICAqIGlzIGNhbGxlZCB3aXRoIGEgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGluc3RydW1lbnRlZFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdpdGggYSBzdGFjayB0cmFjZSBvbiBpbnZvY2F0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVycmJhY2sgb3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGVycm9yIGlmIHVuYWJsZSB0byBnZXQgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIG9wdGlvbmFsIGNvbnRleHQgb2JqZWN0IChlLmcuIHdpbmRvdylcbiAgICAgICAgICovXG4gICAgICAgIGluc3RydW1lbnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnQoZm4sIGNhbGxiYWNrLCBlcnJiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBpbnN0cnVtZW50ZWQsIHJldHVybiBnaXZlbiBGdW5jdGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGluc3RydW1lbnRlZCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnRlZCgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCgpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZyB8fCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb21FcnJvcihlKS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrKVsnY2F0Y2gnXShlcnJiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGluc3RydW1lbnRlZC5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID0gZm47XG5cbiAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50ZWQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBpbnN0cnVtZW50ZWQsXG4gICAgICAgICAqIHJldmVydCB0aGUgZnVuY3Rpb24gdG8gaXQncyBvcmlnaW5hbCAobm9uLWluc3RydW1lbnRlZCkgc3RhdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGRlLWluc3RydW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGRlaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZGVpbnN0cnVtZW50KGZuKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGUtaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIG5vdCBpbnN0cnVtZW50ZWQsIHJldHVybiBvcmlnaW5hbFxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3IgbWVzc2FnZSBhbmQgQXJyYXkgb2YgU3RhY2tGcmFtZXMsIHNlcmlhbGl6ZSBhbmQgUE9TVCB0byBnaXZlbiBVUkwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrZnJhbWVzXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVycm9yTXNnXG4gICAgICAgICAqL1xuICAgICAgICByZXBvcnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJHJlcG9ydChzdGFja2ZyYW1lcywgdXJsLCBlcnJvck1zZykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gb25yZWFkeXN0YXRlY2hhbmdlKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzID49IDIwMCAmJiByZXEuc3RhdHVzIDwgNDAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignUE9TVCB0byAnICsgdXJsICsgJyBmYWlsZWQgd2l0aCBzdGF0dXM6ICcgKyByZXEuc3RhdHVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJlcS5vcGVuKCdwb3N0JywgdXJsKTtcbiAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICAgICAgICAgICAgICAgIHZhciByZXBvcnRQYXlsb2FkID0ge3N0YWNrOiBzdGFja2ZyYW1lc307XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0UGF5bG9hZC5tZXNzYWdlID0gZXJyb3JNc2c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVwb3J0UGF5bG9hZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIl19 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9hcnJheS1zZXQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LXZscS5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iYXNlNjQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9xdWljay1zb3J0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAtY29uc3VtZXIuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9zdGFjay1nZW5lcmF0b3Ivc3RhY2stZ2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrZnJhbWUvc3RhY2tmcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja3RyYWNlLWdwcy9zdGFja3RyYWNlLWdwcy5qcyIsInN0YWNrdHJhY2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2phQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnZXJyb3Itc3RhY2stcGFyc2VyJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuRXJyb3JTdGFja1BhcnNlciA9IGZhY3Rvcnkocm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIoU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFAgPSAvKF58QClcXFMrXFw6XFxkKy87XG4gICAgdmFyIENIUk9NRV9JRV9TVEFDS19SRUdFWFAgPSAvXlxccyphdCAuKihcXFMrXFw6XFxkK3xcXChuYXRpdmVcXCkpL207XG4gICAgdmFyIFNBRkFSSV9OQVRJVkVfQ09ERV9SRUdFWFAgPSAvXihldmFsQCk/KFxcW25hdGl2ZSBjb2RlXFxdKT8kLztcblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhbiBFcnJvciBvYmplY3QsIGV4dHJhY3QgdGhlIG1vc3QgaW5mb3JtYXRpb24gZnJvbSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBvZiBTdGFja0ZyYW1lc1xuICAgICAgICAgKi9cbiAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVycm9yLnN0YWNrdHJhY2UgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBlcnJvclsnb3BlcmEjc291cmNlbG9jJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YWNrICYmIGVycm9yLnN0YWNrLm1hdGNoKENIUk9NRV9JRV9TVEFDS19SRUdFWFApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VWOE9ySUUoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRkZPclNhZmFyaShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIGdpdmVuIEVycm9yIG9iamVjdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFNlcGFyYXRlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGZyb20gYSBzdHJpbmcgb2YgdGhlIGZvcm06IChVUkk6TGluZTpDb2x1bW4pXG4gICAgICAgIGV4dHJhY3RMb2NhdGlvbjogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkZXh0cmFjdExvY2F0aW9uKHVybExpa2UpIHtcbiAgICAgICAgICAgIC8vIEZhaWwtZmFzdCBidXQgcmV0dXJuIGxvY2F0aW9ucyBsaWtlIFwiKG5hdGl2ZSlcIlxuICAgICAgICAgICAgaWYgKHVybExpa2UuaW5kZXhPZignOicpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbdXJsTGlrZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByZWdFeHAgPSAvKC4rPykoPzpcXDooXFxkKykpPyg/OlxcOihcXGQrKSk/JC87XG4gICAgICAgICAgICB2YXIgcGFydHMgPSByZWdFeHAuZXhlYyh1cmxMaWtlLnJlcGxhY2UoL1tcXChcXCldL2csICcnKSk7XG4gICAgICAgICAgICByZXR1cm4gW3BhcnRzWzFdLCBwYXJ0c1syXSB8fCB1bmRlZmluZWQsIHBhcnRzWzNdIHx8IHVuZGVmaW5lZF07XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VWOE9ySUU6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlVjhPcklFKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFsaW5lLm1hdGNoKENIUk9NRV9JRV9TVEFDS19SRUdFWFApO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJyhldmFsICcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSBldmFsIGluZm9ybWF0aW9uIHVudGlsIHdlIGltcGxlbWVudCBzdGFja3RyYWNlLmpzL3N0YWNrZnJhbWUjOFxuICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC9ldmFsIGNvZGUvZywgJ2V2YWwnKS5yZXBsYWNlKC8oXFwoZXZhbCBhdCBbXlxcKCldKil8KFxcKVxcLC4qJCkvZywgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5yZXBsYWNlKC9eXFxzKy8sICcnKS5yZXBsYWNlKC9cXChldmFsIGNvZGUvZywgJygnKS5zcGxpdCgvXFxzKy8pLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gdG9rZW5zLmpvaW4oJyAnKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gWydldmFsJywgJzxhbm9ueW1vdXM+J10uaW5kZXhPZihsb2NhdGlvblBhcnRzWzBdKSA+IC0xID8gdW5kZWZpbmVkIDogbG9jYXRpb25QYXJ0c1swXTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZUZGT3JTYWZhcmk6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlRkZPclNhZmFyaShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFsaW5lLm1hdGNoKFNBRkFSSV9OQVRJVkVfQ09ERV9SRUdFWFApO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgZXZhbCBpbmZvcm1hdGlvbiB1bnRpbCB3ZSBpbXBsZW1lbnQgc3RhY2t0cmFjZS5qcy9zdGFja2ZyYW1lIzhcbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCcgPiBldmFsJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC8gbGluZSAoXFxkKykoPzogPiBldmFsIGxpbmUgXFxkKykqID4gZXZhbFxcOlxcZCtcXDpcXGQrL2csICc6JDEnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCdAJykgPT09IC0xICYmIGxpbmUuaW5kZXhPZignOicpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTYWZhcmkgZXZhbCBmcmFtZXMgb25seSBoYXZlIGZ1bmN0aW9uIG5hbWVzIGFuZCBub3RoaW5nIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbGluZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5zcGxpdCgnQCcpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0b2tlbnMuam9pbignQCcpIHx8IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbG9jYXRpb25QYXJ0c1swXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYShlKSB7XG4gICAgICAgICAgICBpZiAoIWUuc3RhY2t0cmFjZSB8fCAoZS5tZXNzYWdlLmluZGV4T2YoJ1xcbicpID4gLTEgJiZcbiAgICAgICAgICAgICAgICBlLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpLmxlbmd0aCA+IGUuc3RhY2t0cmFjZS5zcGxpdCgnXFxuJykubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmE5KGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghZS5zdGFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmExMChlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTExKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmE5OiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhOShlKSB7XG4gICAgICAgICAgICB2YXIgbGluZVJFID0gL0xpbmUgKFxcZCspLipzY3JpcHQgKD86aW4gKT8oXFxTKykvaTtcbiAgICAgICAgICAgIHZhciBsaW5lcyA9IGUubWVzc2FnZS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAyLCBsZW4gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmVSRS5leGVjKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVzW2ldXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTEwOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhMTAoZSkge1xuICAgICAgICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspKD86OiBJbiBmdW5jdGlvbiAoXFxTKykpPyQvaTtcbiAgICAgICAgICAgIHZhciBsaW5lcyA9IGUuc3RhY2t0cmFjZS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmVSRS5leGVjKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBtYXRjaFszXSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZXNbaV1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIE9wZXJhIDEwLjY1KyBFcnJvci5zdGFjayB2ZXJ5IHNpbWlsYXIgdG8gRkYvU2FmYXJpXG4gICAgICAgIHBhcnNlT3BlcmExMTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTExKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFsaW5lLm1hdGNoKEZJUkVGT1hfU0FGQVJJX1NUQUNLX1JFR0VYUCkgJiYgIWxpbmUubWF0Y2goL15FcnJvciBjcmVhdGVkIGF0Lyk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGxpbmUuc3BsaXQoJ0AnKTtcbiAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uQ2FsbCA9ICh0b2tlbnMuc2hpZnQoKSB8fCAnJyk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uQ2FsbFxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzxhbm9ueW1vdXMgZnVuY3Rpb24oOiAoXFx3KykpPz4vLCAnJDInKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteXFwpXSpcXCkvZywgJycpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB2YXIgYXJnc1JhdztcbiAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25DYWxsLm1hdGNoKC9cXCgoW15cXCldKilcXCkvKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzUmF3ID0gZnVuY3Rpb25DYWxsLnJlcGxhY2UoL15bXlxcKF0rXFwoKFteXFwpXSopXFwpJC8sICckMScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IChhcmdzUmF3ID09PSB1bmRlZmluZWQgfHwgYXJnc1JhdyA9PT0gJ1thcmd1bWVudHMgbm90IGF2YWlsYWJsZV0nKSA/XG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA6IGFyZ3NSYXcuc3BsaXQoJywnKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbG9jYXRpb25QYXJ0c1swXSxcbiAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggaXMgYSBjb21iaW5hdGlvbiBvZiBhbiBhcnJheSBhbmQgYSBzZXQuIEFkZGluZyBhIG5ld1xuICogbWVtYmVyIGlzIE8oMSksIHRlc3RpbmcgZm9yIG1lbWJlcnNoaXAgaXMgTygxKSwgYW5kIGZpbmRpbmcgdGhlIGluZGV4IG9mIGFuXG4gKiBlbGVtZW50IGlzIE8oMSkuIFJlbW92aW5nIGVsZW1lbnRzIGZyb20gdGhlIHNldCBpcyBub3Qgc3VwcG9ydGVkLiBPbmx5XG4gKiBzdHJpbmdzIGFyZSBzdXBwb3J0ZWQgZm9yIG1lbWJlcnNoaXAuXG4gKi9cbmZ1bmN0aW9uIEFycmF5U2V0KCkge1xuICB0aGlzLl9hcnJheSA9IFtdO1xuICB0aGlzLl9zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xufVxuXG4vKipcbiAqIFN0YXRpYyBtZXRob2QgZm9yIGNyZWF0aW5nIEFycmF5U2V0IGluc3RhbmNlcyBmcm9tIGFuIGV4aXN0aW5nIGFycmF5LlxuICovXG5BcnJheVNldC5mcm9tQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF9mcm9tQXJyYXkoYUFycmF5LCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzZXQgPSBuZXcgQXJyYXlTZXQoKTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFBcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHNldC5hZGQoYUFycmF5W2ldLCBhQWxsb3dEdXBsaWNhdGVzKTtcbiAgfVxuICByZXR1cm4gc2V0O1xufTtcblxuLyoqXG4gKiBSZXR1cm4gaG93IG1hbnkgdW5pcXVlIGl0ZW1zIGFyZSBpbiB0aGlzIEFycmF5U2V0LiBJZiBkdXBsaWNhdGVzIGhhdmUgYmVlblxuICogYWRkZWQsIHRoYW4gdGhvc2UgZG8gbm90IGNvdW50IHRvd2FyZHMgdGhlIHNpemUuXG4gKlxuICogQHJldHVybnMgTnVtYmVyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gQXJyYXlTZXRfc2l6ZSgpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3NldCkubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGlzIHNldC5cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgdmFyIGlzRHVwbGljYXRlID0gaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgdmFyIGlkeCA9IHRoaXMuX2FycmF5Lmxlbmd0aDtcbiAgaWYgKCFpc0R1cGxpY2F0ZSB8fCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgfVxuICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgdGhpcy5fc2V0W3NTdHJdID0gaWR4O1xuICB9XG59O1xuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBzdHJpbmcgYSBtZW1iZXIgb2YgdGhpcyBzZXQ/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBBcnJheVNldF9oYXMoYVN0cikge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHJldHVybiBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xufTtcblxuLyoqXG4gKiBXaGF0IGlzIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gc3RyaW5nIGluIHRoZSBhcnJheT9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBBcnJheVNldF9pbmRleE9mKGFTdHIpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICBpZiAoaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKSkge1xuICAgIHJldHVybiB0aGlzLl9zZXRbc1N0cl07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU3RyICsgJ1wiIGlzIG5vdCBpbiB0aGUgc2V0LicpO1xufTtcblxuLyoqXG4gKiBXaGF0IGlzIHRoZSBlbGVtZW50IGF0IHRoZSBnaXZlbiBpbmRleD9cbiAqXG4gKiBAcGFyYW0gTnVtYmVyIGFJZHhcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gQXJyYXlTZXRfYXQoYUlkeCkge1xuICBpZiAoYUlkeCA+PSAwICYmIGFJZHggPCB0aGlzLl9hcnJheS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJyYXlbYUlkeF07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBlbGVtZW50IGluZGV4ZWQgYnkgJyArIGFJZHgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhcnJheSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNldCAod2hpY2ggaGFzIHRoZSBwcm9wZXIgaW5kaWNlc1xuICogaW5kaWNhdGVkIGJ5IGluZGV4T2YpLiBOb3RlIHRoYXQgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIGludGVybmFsIGFycmF5IHVzZWRcbiAqIGZvciBzdG9yaW5nIHRoZSBtZW1iZXJzIHNvIHRoYXQgbm8gb25lIGNhbiBtZXNzIHdpdGggaW50ZXJuYWwgc3RhdGUuXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfdG9BcnJheSgpIHtcbiAgcmV0dXJuIHRoaXMuX2FycmF5LnNsaWNlKCk7XG59O1xuXG5leHBvcnRzLkFycmF5U2V0ID0gQXJyYXlTZXQ7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICpcbiAqIEJhc2VkIG9uIHRoZSBCYXNlIDY0IFZMUSBpbXBsZW1lbnRhdGlvbiBpbiBDbG9zdXJlIENvbXBpbGVyOlxuICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jbG9zdXJlLWNvbXBpbGVyL3NvdXJjZS9icm93c2UvdHJ1bmsvc3JjL2NvbS9nb29nbGUvZGVidWdnaW5nL3NvdXJjZW1hcC9CYXNlNjRWTFEuamF2YVxuICpcbiAqIENvcHlyaWdodCAyMDExIFRoZSBDbG9zdXJlIENvbXBpbGVyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbiAqIG1ldDpcbiAqXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxuICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcbiAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZFxuICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICogICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkXG4gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuICogXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCcuL2Jhc2U2NCcpO1xuXG4vLyBBIHNpbmdsZSBiYXNlIDY0IGRpZ2l0IGNhbiBjb250YWluIDYgYml0cyBvZiBkYXRhLiBGb3IgdGhlIGJhc2UgNjQgdmFyaWFibGVcbi8vIGxlbmd0aCBxdWFudGl0aWVzIHdlIHVzZSBpbiB0aGUgc291cmNlIG1hcCBzcGVjLCB0aGUgZmlyc3QgYml0IGlzIHRoZSBzaWduLFxuLy8gdGhlIG5leHQgZm91ciBiaXRzIGFyZSB0aGUgYWN0dWFsIHZhbHVlLCBhbmQgdGhlIDZ0aCBiaXQgaXMgdGhlXG4vLyBjb250aW51YXRpb24gYml0LiBUaGUgY29udGludWF0aW9uIGJpdCB0ZWxscyB1cyB3aGV0aGVyIHRoZXJlIGFyZSBtb3JlXG4vLyBkaWdpdHMgaW4gdGhpcyB2YWx1ZSBmb2xsb3dpbmcgdGhpcyBkaWdpdC5cbi8vXG4vLyAgIENvbnRpbnVhdGlvblxuLy8gICB8ICAgIFNpZ25cbi8vICAgfCAgICB8XG4vLyAgIFYgICAgVlxuLy8gICAxMDEwMTFcblxudmFyIFZMUV9CQVNFX1NISUZUID0gNTtcblxuLy8gYmluYXJ5OiAxMDAwMDBcbnZhciBWTFFfQkFTRSA9IDEgPDwgVkxRX0JBU0VfU0hJRlQ7XG5cbi8vIGJpbmFyeTogMDExMTExXG52YXIgVkxRX0JBU0VfTUFTSyA9IFZMUV9CQVNFIC0gMTtcblxuLy8gYmluYXJ5OiAxMDAwMDBcbnZhciBWTFFfQ09OVElOVUFUSU9OX0JJVCA9IFZMUV9CQVNFO1xuXG4vKipcbiAqIENvbnZlcnRzIGZyb20gYSB0d28tY29tcGxlbWVudCB2YWx1ZSB0byBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gKiAgIDEgYmVjb21lcyAyICgxMCBiaW5hcnkpLCAtMSBiZWNvbWVzIDMgKDExIGJpbmFyeSlcbiAqICAgMiBiZWNvbWVzIDQgKDEwMCBiaW5hcnkpLCAtMiBiZWNvbWVzIDUgKDEwMSBiaW5hcnkpXG4gKi9cbmZ1bmN0aW9uIHRvVkxRU2lnbmVkKGFWYWx1ZSkge1xuICByZXR1cm4gYVZhbHVlIDwgMFxuICAgID8gKCgtYVZhbHVlKSA8PCAxKSArIDFcbiAgICA6IChhVmFsdWUgPDwgMSkgKyAwO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRvIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgZnJvbSBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gKiAgIDIgKDEwIGJpbmFyeSkgYmVjb21lcyAxLCAzICgxMSBiaW5hcnkpIGJlY29tZXMgLTFcbiAqICAgNCAoMTAwIGJpbmFyeSkgYmVjb21lcyAyLCA1ICgxMDEgYmluYXJ5KSBiZWNvbWVzIC0yXG4gKi9cbmZ1bmN0aW9uIGZyb21WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHZhciBpc05lZ2F0aXZlID0gKGFWYWx1ZSAmIDEpID09PSAxO1xuICB2YXIgc2hpZnRlZCA9IGFWYWx1ZSA+PiAxO1xuICByZXR1cm4gaXNOZWdhdGl2ZVxuICAgID8gLXNoaWZ0ZWRcbiAgICA6IHNoaWZ0ZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmFzZSA2NCBWTFEgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZW5jb2RlKGFWYWx1ZSkge1xuICB2YXIgZW5jb2RlZCA9IFwiXCI7XG4gIHZhciBkaWdpdDtcblxuICB2YXIgdmxxID0gdG9WTFFTaWduZWQoYVZhbHVlKTtcblxuICBkbyB7XG4gICAgZGlnaXQgPSB2bHEgJiBWTFFfQkFTRV9NQVNLO1xuICAgIHZscSA+Pj49IFZMUV9CQVNFX1NISUZUO1xuICAgIGlmICh2bHEgPiAwKSB7XG4gICAgICAvLyBUaGVyZSBhcmUgc3RpbGwgbW9yZSBkaWdpdHMgaW4gdGhpcyB2YWx1ZSwgc28gd2UgbXVzdCBtYWtlIHN1cmUgdGhlXG4gICAgICAvLyBjb250aW51YXRpb24gYml0IGlzIG1hcmtlZC5cbiAgICAgIGRpZ2l0IHw9IFZMUV9DT05USU5VQVRJT05fQklUO1xuICAgIH1cbiAgICBlbmNvZGVkICs9IGJhc2U2NC5lbmNvZGUoZGlnaXQpO1xuICB9IHdoaWxlICh2bHEgPiAwKTtcblxuICByZXR1cm4gZW5jb2RlZDtcbn07XG5cbi8qKlxuICogRGVjb2RlcyB0aGUgbmV4dCBiYXNlIDY0IFZMUSB2YWx1ZSBmcm9tIHRoZSBnaXZlbiBzdHJpbmcgYW5kIHJldHVybnMgdGhlXG4gKiB2YWx1ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyB2aWEgdGhlIG91dCBwYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gYmFzZTY0VkxRX2RlY29kZShhU3RyLCBhSW5kZXgsIGFPdXRQYXJhbSkge1xuICB2YXIgc3RyTGVuID0gYVN0ci5sZW5ndGg7XG4gIHZhciByZXN1bHQgPSAwO1xuICB2YXIgc2hpZnQgPSAwO1xuICB2YXIgY29udGludWF0aW9uLCBkaWdpdDtcblxuICBkbyB7XG4gICAgaWYgKGFJbmRleCA+PSBzdHJMZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG1vcmUgZGlnaXRzIGluIGJhc2UgNjQgVkxRIHZhbHVlLlwiKTtcbiAgICB9XG5cbiAgICBkaWdpdCA9IGJhc2U2NC5kZWNvZGUoYVN0ci5jaGFyQ29kZUF0KGFJbmRleCsrKSk7XG4gICAgaWYgKGRpZ2l0ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiYXNlNjQgZGlnaXQ6IFwiICsgYVN0ci5jaGFyQXQoYUluZGV4IC0gMSkpO1xuICAgIH1cblxuICAgIGNvbnRpbnVhdGlvbiA9ICEhKGRpZ2l0ICYgVkxRX0NPTlRJTlVBVElPTl9CSVQpO1xuICAgIGRpZ2l0ICY9IFZMUV9CQVNFX01BU0s7XG4gICAgcmVzdWx0ID0gcmVzdWx0ICsgKGRpZ2l0IDw8IHNoaWZ0KTtcbiAgICBzaGlmdCArPSBWTFFfQkFTRV9TSElGVDtcbiAgfSB3aGlsZSAoY29udGludWF0aW9uKTtcblxuICBhT3V0UGFyYW0udmFsdWUgPSBmcm9tVkxRU2lnbmVkKHJlc3VsdCk7XG4gIGFPdXRQYXJhbS5yZXN0ID0gYUluZGV4O1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIGludFRvQ2hhck1hcCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJy5zcGxpdCgnJyk7XG5cbi8qKlxuICogRW5jb2RlIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIG9mIDAgdG8gNjMgdG8gYSBzaW5nbGUgYmFzZSA2NCBkaWdpdC5cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiAobnVtYmVyKSB7XG4gIGlmICgwIDw9IG51bWJlciAmJiBudW1iZXIgPCBpbnRUb0NoYXJNYXAubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGludFRvQ2hhck1hcFtudW1iZXJdO1xuICB9XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGJldHdlZW4gMCBhbmQgNjM6IFwiICsgbnVtYmVyKTtcbn07XG5cbi8qKlxuICogRGVjb2RlIGEgc2luZ2xlIGJhc2UgNjQgY2hhcmFjdGVyIGNvZGUgZGlnaXQgdG8gYW4gaW50ZWdlci4gUmV0dXJucyAtMSBvblxuICogZmFpbHVyZS5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiAoY2hhckNvZGUpIHtcbiAgdmFyIGJpZ0EgPSA2NTsgICAgIC8vICdBJ1xuICB2YXIgYmlnWiA9IDkwOyAgICAgLy8gJ1onXG5cbiAgdmFyIGxpdHRsZUEgPSA5NzsgIC8vICdhJ1xuICB2YXIgbGl0dGxlWiA9IDEyMjsgLy8gJ3onXG5cbiAgdmFyIHplcm8gPSA0ODsgICAgIC8vICcwJ1xuICB2YXIgbmluZSA9IDU3OyAgICAgLy8gJzknXG5cbiAgdmFyIHBsdXMgPSA0MzsgICAgIC8vICcrJ1xuICB2YXIgc2xhc2ggPSA0NzsgICAgLy8gJy8nXG5cbiAgdmFyIGxpdHRsZU9mZnNldCA9IDI2O1xuICB2YXIgbnVtYmVyT2Zmc2V0ID0gNTI7XG5cbiAgLy8gMCAtIDI1OiBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlxuICBpZiAoYmlnQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBiaWdaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGJpZ0EpO1xuICB9XG5cbiAgLy8gMjYgLSA1MTogYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcbiAgaWYgKGxpdHRsZUEgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gbGl0dGxlWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBsaXR0bGVBICsgbGl0dGxlT2Zmc2V0KTtcbiAgfVxuXG4gIC8vIDUyIC0gNjE6IDAxMjM0NTY3ODlcbiAgaWYgKHplcm8gPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gbmluZSkge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSB6ZXJvICsgbnVtYmVyT2Zmc2V0KTtcbiAgfVxuXG4gIC8vIDYyOiArXG4gIGlmIChjaGFyQ29kZSA9PSBwbHVzKSB7XG4gICAgcmV0dXJuIDYyO1xuICB9XG5cbiAgLy8gNjM6IC9cbiAgaWYgKGNoYXJDb2RlID09IHNsYXNoKSB7XG4gICAgcmV0dXJuIDYzO1xuICB9XG5cbiAgLy8gSW52YWxpZCBiYXNlNjQgZGlnaXQuXG4gIHJldHVybiAtMTtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbmV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogUmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2guXG4gKlxuICogQHBhcmFtIGFMb3cgSW5kaWNlcyBoZXJlIGFuZCBsb3dlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFIaWdoIEluZGljZXMgaGVyZSBhbmQgaGlnaGVyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBub24tZW1wdHkgYXJyYXkgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgRnVuY3Rpb24gd2hpY2ggdGFrZXMgdHdvIGVsZW1lbnRzIGFuZCByZXR1cm5zIC0xLCAwLCBvciAxLlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiByZWN1cnNpdmVTZWFyY2goYUxvdywgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gIC8vXG4gIC8vICAgMS4gV2UgZmluZCB0aGUgZXhhY3QgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gIC8vXG4gIC8vICAgMi4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBidXQgd2UgY2FuIHJldHVybiB0aGUgaW5kZXggb2ZcbiAgLy8gICAgICB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQuXG4gIC8vXG4gIC8vICAgMy4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBhbmQgdGhlcmUgaXMgbm8gbmV4dC1jbG9zZXN0XG4gIC8vICAgICAgZWxlbWVudCB0aGFuIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IsIHNvIHdlIHJldHVybiAtMS5cbiAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gIHZhciBjbXAgPSBhQ29tcGFyZShhTmVlZGxlLCBhSGF5c3RhY2tbbWlkXSwgdHJ1ZSk7XG4gIGlmIChjbXAgPT09IDApIHtcbiAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgcmV0dXJuIG1pZDtcbiAgfVxuICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBncmVhdGVyIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKGFIaWdoIC0gbWlkID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKG1pZCwgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gYUhpZ2ggPCBhSGF5c3RhY2subGVuZ3RoID8gYUhpZ2ggOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBsZXNzIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKG1pZCAtIGFMb3cgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgbG93ZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFMb3cgPCAwID8gLTEgOiBhTG93O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCB3aGljaCB3aWxsIGFsd2F5cyB0cnkgYW5kIHJldHVyblxuICogdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGVsZW1lbnQgaWYgdGhlcmUgaXMgbm8gZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2VcbiAqIG1hcHBpbmdzIGJldHdlZW4gb3JpZ2luYWwgYW5kIGdlbmVyYXRlZCBsaW5lL2NvbCBwYWlycyBhcmUgc2luZ2xlIHBvaW50cyxcbiAqIGFuZCB0aGVyZSBpcyBhbiBpbXBsaWNpdCByZWdpb24gYmV0d2VlbiBlYWNoIG9mIHRoZW0sIHNvIGEgbWlzcyBqdXN0IG1lYW5zXG4gKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQgb2YgYSByZWdpb24uXG4gKlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgeW91IGFyZSBsb29raW5nIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgbmVlZGxlIGFuZCBhbiBlbGVtZW50IGluIHRoZVxuICogICAgIGFycmF5IGFuZCByZXR1cm5zIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuZWVkbGUgaXMgbGVzc1xuICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqL1xuZXhwb3J0cy5zZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgaWYgKGFIYXlzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaW5kZXggPSByZWN1cnNpdmVTZWFyY2goLTEsIGFIYXlzdGFjay5sZW5ndGgsIGFOZWVkbGUsIGFIYXlzdGFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21wYXJlLCBhQmlhcyB8fCBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIFdlIGhhdmUgZm91bmQgZWl0aGVyIHRoZSBleGFjdCBlbGVtZW50LCBvciB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQgdGhhblxuICAvLyB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLiBIb3dldmVyLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBzdWNoXG4gIC8vIGVsZW1lbnQuIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGVzZS5cbiAgd2hpbGUgKGluZGV4IC0gMSA+PSAwKSB7XG4gICAgaWYgKGFDb21wYXJlKGFIYXlzdGFja1tpbmRleF0sIGFIYXlzdGFja1tpbmRleCAtIDFdLCB0cnVlKSAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC0taW5kZXg7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG4vLyBJdCB0dXJucyBvdXQgdGhhdCBzb21lIChtb3N0PykgSmF2YVNjcmlwdCBlbmdpbmVzIGRvbid0IHNlbGYtaG9zdFxuLy8gYEFycmF5LnByb3RvdHlwZS5zb3J0YC4gVGhpcyBtYWtlcyBzZW5zZSBiZWNhdXNlIEMrKyB3aWxsIGxpa2VseSByZW1haW5cbi8vIGZhc3RlciB0aGFuIEpTIHdoZW4gZG9pbmcgcmF3IENQVS1pbnRlbnNpdmUgc29ydGluZy4gSG93ZXZlciwgd2hlbiB1c2luZyBhXG4vLyBjdXN0b20gY29tcGFyYXRvciBmdW5jdGlvbiwgY2FsbGluZyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZSBWTSdzIEMrKyBhbmRcbi8vIEpJVCdkIEpTIGlzIHJhdGhlciBzbG93ICphbmQqIGxvc2VzIEpJVCB0eXBlIGluZm9ybWF0aW9uLCByZXN1bHRpbmcgaW5cbi8vIHdvcnNlIGdlbmVyYXRlZCBjb2RlIGZvciB0aGUgY29tcGFyYXRvciBmdW5jdGlvbiB0aGFuIHdvdWxkIGJlIG9wdGltYWwuIEluXG4vLyBmYWN0LCB3aGVuIHNvcnRpbmcgd2l0aCBhIGNvbXBhcmF0b3IsIHRoZXNlIGNvc3RzIG91dHdlaWdoIHRoZSBiZW5lZml0cyBvZlxuLy8gc29ydGluZyBpbiBDKysuIEJ5IHVzaW5nIG91ciBvd24gSlMtaW1wbGVtZW50ZWQgUXVpY2sgU29ydCAoYmVsb3cpLCB3ZSBnZXRcbi8vIGEgfjM1MDBtcyBtZWFuIHNwZWVkLXVwIGluIGBiZW5jaC9iZW5jaC5odG1sYC5cblxuLyoqXG4gKiBTd2FwIHRoZSBlbGVtZW50cyBpbmRleGVkIGJ5IGB4YCBhbmQgYHlgIGluIHRoZSBhcnJheSBgYXJ5YC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBUaGUgYXJyYXkuXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogICAgICAgIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgaXRlbS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgaXRlbS5cbiAqL1xuZnVuY3Rpb24gc3dhcChhcnksIHgsIHkpIHtcbiAgdmFyIHRlbXAgPSBhcnlbeF07XG4gIGFyeVt4XSA9IGFyeVt5XTtcbiAgYXJ5W3ldID0gdGVtcDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgd2l0aGluIHRoZSByYW5nZSBgbG93IC4uIGhpZ2hgIGluY2x1c2l2ZS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbG93XG4gKiAgICAgICAgVGhlIGxvd2VyIGJvdW5kIG9uIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7TnVtYmVyfSBoaWdoXG4gKiAgICAgICAgVGhlIHVwcGVyIGJvdW5kIG9uIHRoZSByYW5nZS5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tSW50SW5SYW5nZShsb3csIGhpZ2gpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQobG93ICsgKE1hdGgucmFuZG9tKCkgKiAoaGlnaCAtIGxvdykpKTtcbn1cblxuLyoqXG4gKiBUaGUgUXVpY2sgU29ydCBhbGdvcml0aG0uXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gKiAgICAgICAgQW4gYXJyYXkgdG8gc29ydC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXBhcmF0b3JcbiAqICAgICAgICBGdW5jdGlvbiB0byB1c2UgdG8gY29tcGFyZSB0d28gaXRlbXMuXG4gKiBAcGFyYW0ge051bWJlcn0gcFxuICogICAgICAgIFN0YXJ0IGluZGV4IG9mIHRoZSBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9IHJcbiAqICAgICAgICBFbmQgaW5kZXggb2YgdGhlIGFycmF5XG4gKi9cbmZ1bmN0aW9uIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcCwgcikge1xuICAvLyBJZiBvdXIgbG93ZXIgYm91bmQgaXMgbGVzcyB0aGFuIG91ciB1cHBlciBib3VuZCwgd2UgKDEpIHBhcnRpdGlvbiB0aGVcbiAgLy8gYXJyYXkgaW50byB0d28gcGllY2VzIGFuZCAoMikgcmVjdXJzZSBvbiBlYWNoIGhhbGYuIElmIGl0IGlzIG5vdCwgdGhpcyBpc1xuICAvLyB0aGUgZW1wdHkgYXJyYXkgYW5kIG91ciBiYXNlIGNhc2UuXG5cbiAgaWYgKHAgPCByKSB7XG4gICAgLy8gKDEpIFBhcnRpdGlvbmluZy5cbiAgICAvL1xuICAgIC8vIFRoZSBwYXJ0aXRpb25pbmcgY2hvb3NlcyBhIHBpdm90IGJldHdlZW4gYHBgIGFuZCBgcmAgYW5kIG1vdmVzIGFsbFxuICAgIC8vIGVsZW1lbnRzIHRoYXQgYXJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcGl2b3QgdG8gdGhlIGJlZm9yZSBpdCwgYW5kXG4gICAgLy8gYWxsIHRoZSBlbGVtZW50cyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gaXQgYWZ0ZXIgaXQuIFRoZSBlZmZlY3QgaXMgdGhhdFxuICAgIC8vIG9uY2UgcGFydGl0aW9uIGlzIGRvbmUsIHRoZSBwaXZvdCBpcyBpbiB0aGUgZXhhY3QgcGxhY2UgaXQgd2lsbCBiZSB3aGVuXG4gICAgLy8gdGhlIGFycmF5IGlzIHB1dCBpbiBzb3J0ZWQgb3JkZXIsIGFuZCBpdCB3aWxsIG5vdCBuZWVkIHRvIGJlIG1vdmVkXG4gICAgLy8gYWdhaW4uIFRoaXMgcnVucyBpbiBPKG4pIHRpbWUuXG5cbiAgICAvLyBBbHdheXMgY2hvb3NlIGEgcmFuZG9tIHBpdm90IHNvIHRoYXQgYW4gaW5wdXQgYXJyYXkgd2hpY2ggaXMgcmV2ZXJzZVxuICAgIC8vIHNvcnRlZCBkb2VzIG5vdCBjYXVzZSBPKG5eMikgcnVubmluZyB0aW1lLlxuICAgIHZhciBwaXZvdEluZGV4ID0gcmFuZG9tSW50SW5SYW5nZShwLCByKTtcbiAgICB2YXIgaSA9IHAgLSAxO1xuXG4gICAgc3dhcChhcnksIHBpdm90SW5kZXgsIHIpO1xuICAgIHZhciBwaXZvdCA9IGFyeVtyXTtcblxuICAgIC8vIEltbWVkaWF0ZWx5IGFmdGVyIGBqYCBpcyBpbmNyZW1lbnRlZCBpbiB0aGlzIGxvb3AsIHRoZSBmb2xsb3dpbmcgaG9sZFxuICAgIC8vIHRydWU6XG4gICAgLy9cbiAgICAvLyAgICogRXZlcnkgZWxlbWVudCBpbiBgYXJ5W3AgLi4gaV1gIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcGl2b3QuXG4gICAgLy9cbiAgICAvLyAgICogRXZlcnkgZWxlbWVudCBpbiBgYXJ5W2krMSAuLiBqLTFdYCBpcyBncmVhdGVyIHRoYW4gdGhlIHBpdm90LlxuICAgIGZvciAodmFyIGogPSBwOyBqIDwgcjsgaisrKSB7XG4gICAgICBpZiAoY29tcGFyYXRvcihhcnlbal0sIHBpdm90KSA8PSAwKSB7XG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgc3dhcChhcnksIGksIGopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3YXAoYXJ5LCBpICsgMSwgaik7XG4gICAgdmFyIHEgPSBpICsgMTtcblxuICAgIC8vICgyKSBSZWN1cnNlIG9uIGVhY2ggaGFsZi5cblxuICAgIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcCwgcSAtIDEpO1xuICAgIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcSArIDEsIHIpO1xuICB9XG59XG5cbi8qKlxuICogU29ydCB0aGUgZ2l2ZW4gYXJyYXkgaW4tcGxhY2Ugd2l0aCB0aGUgZ2l2ZW4gY29tcGFyYXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqL1xuZXhwb3J0cy5xdWlja1NvcnQgPSBmdW5jdGlvbiAoYXJ5LCBjb21wYXJhdG9yKSB7XG4gIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgMCwgYXJ5Lmxlbmd0aCAtIDEpO1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBiaW5hcnlTZWFyY2ggPSByZXF1aXJlKCcuL2JpbmFyeS1zZWFyY2gnKTtcbnZhciBBcnJheVNldCA9IHJlcXVpcmUoJy4vYXJyYXktc2V0JykuQXJyYXlTZXQ7XG52YXIgYmFzZTY0VkxRID0gcmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7XG52YXIgcXVpY2tTb3J0ID0gcmVxdWlyZSgnLi9xdWljay1zb3J0JykucXVpY2tTb3J0O1xuXG5mdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgfVxuXG4gIHJldHVybiBzb3VyY2VNYXAuc2VjdGlvbnMgIT0gbnVsbFxuICAgID8gbmV3IEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXApXG4gICAgOiBuZXcgQmFzaWNTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXApO1xufVxuXG5Tb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID0gZnVuY3Rpb24oYVNvdXJjZU1hcCkge1xuICByZXR1cm4gQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwKGFTb3VyY2VNYXApO1xufVxuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLy8gYF9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZCBgX19vcmlnaW5hbE1hcHBpbmdzYCBhcmUgYXJyYXlzIHRoYXQgaG9sZCB0aGVcbi8vIHBhcnNlZCBtYXBwaW5nIGNvb3JkaW5hdGVzIGZyb20gdGhlIHNvdXJjZSBtYXAncyBcIm1hcHBpbmdzXCIgYXR0cmlidXRlLiBUaGV5XG4vLyBhcmUgbGF6aWx5IGluc3RhbnRpYXRlZCwgYWNjZXNzZWQgdmlhIHRoZSBgX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbi8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgZ2V0dGVycyByZXNwZWN0aXZlbHksIGFuZCB3ZSBvbmx5IHBhcnNlIHRoZSBtYXBwaW5nc1xuLy8gYW5kIGNyZWF0ZSB0aGVzZSBhcnJheXMgb25jZSBxdWVyaWVkIGZvciBhIHNvdXJjZSBsb2NhdGlvbi4gV2UganVtcCB0aHJvdWdoXG4vLyB0aGVzZSBob29wcyBiZWNhdXNlIHRoZXJlIGNhbiBiZSBtYW55IHRob3VzYW5kcyBvZiBtYXBwaW5ncywgYW5kIHBhcnNpbmdcbi8vIHRoZW0gaXMgZXhwZW5zaXZlLCBzbyB3ZSBvbmx5IHdhbnQgdG8gZG8gaXQgaWYgd2UgbXVzdC5cbi8vXG4vLyBFYWNoIG9iamVjdCBpbiB0aGUgYXJyYXlzIGlzIG9mIHRoZSBmb3JtOlxuLy9cbi8vICAgICB7XG4vLyAgICAgICBnZW5lcmF0ZWRMaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBzb3VyY2U6IFRoZSBwYXRoIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSB0aGF0IGdlbmVyYXRlZCB0aGlzXG4vLyAgICAgICAgICAgICAgIGNodW5rIG9mIGNvZGUsXG4vLyAgICAgICBvcmlnaW5hbExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRoYXRcbi8vICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsQ29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRoYXRcbi8vICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgbmFtZTogVGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIHN5bWJvbCB3aGljaCBnZW5lcmF0ZWQgdGhpcyBjaHVuayBvZlxuLy8gICAgICAgICAgICAgY29kZS5cbi8vICAgICB9XG4vL1xuLy8gQWxsIHByb3BlcnRpZXMgZXhjZXB0IGZvciBgZ2VuZXJhdGVkTGluZWAgYW5kIGBnZW5lcmF0ZWRDb2x1bW5gIGNhbiBiZVxuLy8gYG51bGxgLlxuLy9cbi8vIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMuXG4vL1xuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMuXG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX2dlbmVyYXRlZE1hcHBpbmdzID0gbnVsbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfZ2VuZXJhdGVkTWFwcGluZ3MnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gIH1cbn0pO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19vcmlnaW5hbE1hcHBpbmdzID0gbnVsbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfb3JpZ2luYWxNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncykge1xuICAgICAgdGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncywgdGhpcy5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fX29yaWdpbmFsTWFwcGluZ3M7XG4gIH1cbn0pO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGluZGV4KSB7XG4gICAgdmFyIGMgPSBhU3RyLmNoYXJBdChpbmRleCk7XG4gICAgcmV0dXJuIGMgPT09IFwiO1wiIHx8IGMgPT09IFwiLFwiO1xuICB9O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgX3BhcnNlTWFwcGluZ3NcIik7XG4gIH07XG5cblNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUiA9IDE7XG5Tb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUiA9IDI7XG5cblNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgZWFjaCBtYXBwaW5nIGJldHdlZW4gYW4gb3JpZ2luYWwgc291cmNlL2xpbmUvY29sdW1uIGFuZCBhXG4gKiBnZW5lcmF0ZWQgbGluZS9jb2x1bW4gaW4gdGhpcyBzb3VyY2UgbWFwLlxuICpcbiAqIEBwYXJhbSBGdW5jdGlvbiBhQ2FsbGJhY2tcbiAqICAgICAgICBUaGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBlYWNoIG1hcHBpbmcuXG4gKiBAcGFyYW0gT2JqZWN0IGFDb250ZXh0XG4gKiAgICAgICAgT3B0aW9uYWwuIElmIHNwZWNpZmllZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSB0aGUgdmFsdWUgb2YgYHRoaXNgIGV2ZXJ5XG4gKiAgICAgICAgdGltZSB0aGF0IGBhQ2FsbGJhY2tgIGlzIGNhbGxlZC5cbiAqIEBwYXJhbSBhT3JkZXJcbiAqICAgICAgICBFaXRoZXIgYFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUmAgb3JcbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVJgLiBTcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCB0b1xuICogICAgICAgIGl0ZXJhdGUgb3ZlciB0aGUgbWFwcGluZ3Mgc29ydGVkIGJ5IHRoZSBnZW5lcmF0ZWQgZmlsZSdzIGxpbmUvY29sdW1uXG4gKiAgICAgICAgb3JkZXIgb3IgdGhlIG9yaWdpbmFsJ3Mgc291cmNlL2xpbmUvY29sdW1uIG9yZGVyLCByZXNwZWN0aXZlbHkuIERlZmF1bHRzIHRvXG4gKiAgICAgICAgYFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUmAuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5lYWNoTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2VhY2hNYXBwaW5nKGFDYWxsYmFjaywgYUNvbnRleHQsIGFPcmRlcikge1xuICAgIHZhciBjb250ZXh0ID0gYUNvbnRleHQgfHwgbnVsbDtcbiAgICB2YXIgb3JkZXIgPSBhT3JkZXIgfHwgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSO1xuXG4gICAgdmFyIG1hcHBpbmdzO1xuICAgIHN3aXRjaCAob3JkZXIpIHtcbiAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUjpcbiAgICAgIG1hcHBpbmdzID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gb3JkZXIgb2YgaXRlcmF0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlUm9vdCA9IHRoaXMuc291cmNlUm9vdDtcbiAgICBtYXBwaW5ncy5tYXAoZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBtYXBwaW5nLnNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCAmJiBzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uLFxuICAgICAgICBvcmlnaW5hbExpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgbmFtZTogbWFwcGluZy5uYW1lID09PSBudWxsID8gbnVsbCA6IHRoaXMuX25hbWVzLmF0KG1hcHBpbmcubmFtZSlcbiAgICAgIH07XG4gICAgfSwgdGhpcykuZm9yRWFjaChhQ2FsbGJhY2ssIGNvbnRleHQpO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgYWxsIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHByb3ZpZGVkLiBJZiBubyBjb2x1bW4gaXMgcHJvdmlkZWQsIHJldHVybnMgYWxsIG1hcHBpbmdzXG4gKiBjb3JyZXNwb25kaW5nIHRvIGEgZWl0aGVyIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yIG9yIHRoZSBuZXh0XG4gKiBjbG9zZXN0IGxpbmUgdGhhdCBoYXMgYW55IG1hcHBpbmdzLiBPdGhlcndpc2UsIHJldHVybnMgYWxsIG1hcHBpbmdzXG4gKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBsaW5lIGFuZCBlaXRoZXIgdGhlIGNvbHVtbiB3ZSBhcmUgc2VhcmNoaW5nIGZvclxuICogb3IgdGhlIG5leHQgY2xvc2VzdCBjb2x1bW4gdGhhdCBoYXMgYW55IG9mZnNldHMuXG4gKlxuICogVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGNvbHVtbjogT3B0aW9uYWwuIHRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKlxuICogYW5kIGFuIGFycmF5IG9mIG9iamVjdHMgaXMgcmV0dXJuZWQsIGVhY2ggd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yKGFBcmdzKSB7XG4gICAgdmFyIGxpbmUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKTtcblxuICAgIC8vIFdoZW4gdGhlcmUgaXMgbm8gZXhhY3QgbWF0Y2gsIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kTWFwcGluZ1xuICAgIC8vIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IG1hcHBpbmcgbGVzcyB0aGFuIHRoZSBuZWVkbGUuIEJ5XG4gICAgLy8gc2V0dGluZyBuZWVkbGUub3JpZ2luYWxDb2x1bW4gdG8gMCwgd2UgdGh1cyBmaW5kIHRoZSBsYXN0IG1hcHBpbmcgZm9yXG4gICAgLy8gdGhlIGdpdmVuIGxpbmUsIHByb3ZpZGVkIHN1Y2ggYSBtYXBwaW5nIGV4aXN0cy5cbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgc291cmNlOiB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpLFxuICAgICAgb3JpZ2luYWxMaW5lOiBsaW5lLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJywgMClcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBuZWVkbGUuc291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIG5lZWRsZS5zb3VyY2UpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3NvdXJjZXMuaGFzKG5lZWRsZS5zb3VyY2UpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIG5lZWRsZS5zb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2YobmVlZGxlLnNvdXJjZSk7XG5cbiAgICB2YXIgbWFwcGluZ3MgPSBbXTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKG5lZWRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKGFBcmdzLmNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZTtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIGZvdW5kLiBTaW5jZVxuICAgICAgICAvLyBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGZvdW5kLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gb3JpZ2luYWxMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIHdlcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgLy8gU2luY2UgbWFwcGluZ3MgYXJlIHNvcnRlZCwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG1hcHBpbmdzIGZvclxuICAgICAgICAvLyB0aGUgbGluZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgd2hpbGUgKG1hcHBpbmcgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBsaW5lICYmXG4gICAgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID09IG9yaWdpbmFsQ29sdW1uKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5ncztcbiAgfTtcblxuZXhwb3J0cy5Tb3VyY2VNYXBDb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2ggd2UgY2FuXG4gKiBxdWVyeSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGZpbGUgcG9zaXRpb25zIGJ5IGdpdmluZyBpdCBhIGZpbGVcbiAqIHBvc2l0aW9uIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyB0aGUgcmF3IHNvdXJjZSBtYXAgKGVpdGhlciBhcyBhIEpTT04gc3RyaW5nLCBvclxuICogYWxyZWFkeSBwYXJzZWQgdG8gYW4gb2JqZWN0KS4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzb3VyY2UgbWFwcyBoYXZlIHRoZVxuICogZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gc291cmNlczogQW4gYXJyYXkgb2YgVVJMcyB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG5hbWVzOiBBbiBhcnJheSBvZiBpZGVudGlmaWVycyB3aGljaCBjYW4gYmUgcmVmZXJyZW5jZWQgYnkgaW5kaXZpZHVhbCBtYXBwaW5ncy5cbiAqICAgLSBzb3VyY2VSb290OiBPcHRpb25hbC4gVGhlIFVSTCByb290IGZyb20gd2hpY2ggYWxsIHNvdXJjZXMgYXJlIHJlbGF0aXZlLlxuICogICAtIHNvdXJjZXNDb250ZW50OiBPcHRpb25hbC4gQW4gYXJyYXkgb2YgY29udGVudHMgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAqICAgLSBtYXBwaW5nczogQSBzdHJpbmcgb2YgYmFzZTY0IFZMUXMgd2hpY2ggY29udGFpbiB0aGUgYWN0dWFsIG1hcHBpbmdzLlxuICogICAtIGZpbGU6IE9wdGlvbmFsLiBUaGUgZ2VuZXJhdGVkIGZpbGUgdGhpcyBzb3VyY2UgbWFwIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAqXG4gKiBIZXJlIGlzIGFuIGV4YW1wbGUgc291cmNlIG1hcCwgdGFrZW4gZnJvbSB0aGUgc291cmNlIG1hcCBzcGVjWzBdOlxuICpcbiAqICAgICB7XG4gKiAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgIGZpbGU6IFwib3V0LmpzXCIsXG4gKiAgICAgICBzb3VyY2VSb290IDogXCJcIixcbiAqICAgICAgIHNvdXJjZXM6IFtcImZvby5qc1wiLCBcImJhci5qc1wiXSxcbiAqICAgICAgIG5hbWVzOiBbXCJzcmNcIiwgXCJtYXBzXCIsIFwiYXJlXCIsIFwiZnVuXCJdLFxuICogICAgICAgbWFwcGluZ3M6IFwiQUEsQUI7O0FCQ0RFO1wiXG4gKiAgICAgfVxuICpcbiAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0P3BsaT0xI1xuICovXG5mdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgdmFyIHZlcnNpb24gPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICd2ZXJzaW9uJyk7XG4gIHZhciBzb3VyY2VzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlcycpO1xuICAvLyBTYXNzIDMuMyBsZWF2ZXMgb3V0IHRoZSAnbmFtZXMnIGFycmF5LCBzbyB3ZSBkZXZpYXRlIGZyb20gdGhlIHNwZWMgKHdoaWNoXG4gIC8vIHJlcXVpcmVzIHRoZSBhcnJheSkgdG8gcGxheSBuaWNlIGhlcmUuXG4gIHZhciBuYW1lcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ25hbWVzJywgW10pO1xuICB2YXIgc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZVJvb3QnLCBudWxsKTtcbiAgdmFyIHNvdXJjZXNDb250ZW50ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlc0NvbnRlbnQnLCBudWxsKTtcbiAgdmFyIG1hcHBpbmdzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbWFwcGluZ3MnKTtcbiAgdmFyIGZpbGUgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdmaWxlJywgbnVsbCk7XG5cbiAgLy8gT25jZSBhZ2FpbiwgU2FzcyBkZXZpYXRlcyBmcm9tIHRoZSBzcGVjIGFuZCBzdXBwbGllcyB0aGUgdmVyc2lvbiBhcyBhXG4gIC8vIHN0cmluZyByYXRoZXIgdGhhbiBhIG51bWJlciwgc28gd2UgdXNlIGxvb3NlIGVxdWFsaXR5IGNoZWNraW5nIGhlcmUuXG4gIGlmICh2ZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgfVxuXG4gIHNvdXJjZXMgPSBzb3VyY2VzXG4gICAgLm1hcChTdHJpbmcpXG4gICAgLy8gU29tZSBzb3VyY2UgbWFwcyBwcm9kdWNlIHJlbGF0aXZlIHNvdXJjZSBwYXRocyBsaWtlIFwiLi9mb28uanNcIiBpbnN0ZWFkIG9mXG4gICAgLy8gXCJmb28uanNcIi4gIE5vcm1hbGl6ZSB0aGVzZSBmaXJzdCBzbyB0aGF0IGZ1dHVyZSBjb21wYXJpc29ucyB3aWxsIHN1Y2NlZWQuXG4gICAgLy8gU2VlIGJ1Z3ppbC5sYS8xMDkwNzY4LlxuICAgIC5tYXAodXRpbC5ub3JtYWxpemUpXG4gICAgLy8gQWx3YXlzIGVuc3VyZSB0aGF0IGFic29sdXRlIHNvdXJjZXMgYXJlIGludGVybmFsbHkgc3RvcmVkIHJlbGF0aXZlIHRvXG4gICAgLy8gdGhlIHNvdXJjZSByb290LCBpZiB0aGUgc291cmNlIHJvb3QgaXMgYWJzb2x1dGUuIE5vdCBkb2luZyB0aGlzIHdvdWxkXG4gICAgLy8gYmUgcGFydGljdWxhcmx5IHByb2JsZW1hdGljIHdoZW4gdGhlIHNvdXJjZSByb290IGlzIGEgcHJlZml4IG9mIHRoZVxuICAgIC8vIHNvdXJjZSAodmFsaWQsIGJ1dCB3aHk/PykuIFNlZSBnaXRodWIgaXNzdWUgIzE5OSBhbmQgYnVnemlsLmxhLzExODg5ODIuXG4gICAgLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gc291cmNlUm9vdCAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlUm9vdCkgJiYgdXRpbC5pc0Fic29sdXRlKHNvdXJjZSlcbiAgICAgICAgPyB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZSlcbiAgICAgICAgOiBzb3VyY2U7XG4gICAgfSk7XG5cbiAgLy8gUGFzcyBgdHJ1ZWAgYmVsb3cgdG8gYWxsb3cgZHVwbGljYXRlIG5hbWVzIGFuZCBzb3VyY2VzLiBXaGlsZSBzb3VyY2UgbWFwc1xuICAvLyBhcmUgaW50ZW5kZWQgdG8gYmUgY29tcHJlc3NlZCBhbmQgZGVkdXBsaWNhdGVkLCB0aGUgVHlwZVNjcmlwdCBjb21waWxlclxuICAvLyBzb21ldGltZXMgZ2VuZXJhdGVzIHNvdXJjZSBtYXBzIHdpdGggZHVwbGljYXRlcyBpbiB0aGVtLiBTZWUgR2l0aHViIGlzc3VlXG4gIC8vICM3MiBhbmQgYnVnemlsLmxhLzg4OTQ5Mi5cbiAgdGhpcy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkobmFtZXMubWFwKFN0cmluZyksIHRydWUpO1xuICB0aGlzLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KHNvdXJjZXMsIHRydWUpO1xuXG4gIHRoaXMuc291cmNlUm9vdCA9IHNvdXJjZVJvb3Q7XG4gIHRoaXMuc291cmNlc0NvbnRlbnQgPSBzb3VyY2VzQ29udGVudDtcbiAgdGhpcy5fbWFwcGluZ3MgPSBtYXBwaW5ncztcbiAgdGhpcy5maWxlID0gZmlsZTtcbn1cblxuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIENyZWF0ZSBhIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgZnJvbSBhIFNvdXJjZU1hcEdlbmVyYXRvci5cbiAqXG4gKiBAcGFyYW0gU291cmNlTWFwR2VuZXJhdG9yIGFTb3VyY2VNYXBcbiAqICAgICAgICBUaGUgc291cmNlIG1hcCB0aGF0IHdpbGwgYmUgY29uc3VtZWQuXG4gKiBAcmV0dXJucyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2Zyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCkge1xuICAgIHZhciBzbWMgPSBPYmplY3QuY3JlYXRlKEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcblxuICAgIHZhciBuYW1lcyA9IHNtYy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fbmFtZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICB2YXIgc291cmNlcyA9IHNtYy5fc291cmNlcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9zb3VyY2VzLnRvQXJyYXkoKSwgdHJ1ZSk7XG4gICAgc21jLnNvdXJjZVJvb3QgPSBhU291cmNlTWFwLl9zb3VyY2VSb290O1xuICAgIHNtYy5zb3VyY2VzQ29udGVudCA9IGFTb3VyY2VNYXAuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQoc21jLl9zb3VyY2VzLnRvQXJyYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYy5zb3VyY2VSb290KTtcbiAgICBzbWMuZmlsZSA9IGFTb3VyY2VNYXAuX2ZpbGU7XG5cbiAgICAvLyBCZWNhdXNlIHdlIGFyZSBtb2RpZnlpbmcgdGhlIGVudHJpZXMgKGJ5IGNvbnZlcnRpbmcgc3RyaW5nIHNvdXJjZXMgYW5kXG4gICAgLy8gbmFtZXMgdG8gaW5kaWNlcyBpbnRvIHRoZSBzb3VyY2VzIGFuZCBuYW1lcyBBcnJheVNldHMpLCB3ZSBoYXZlIHRvIG1ha2VcbiAgICAvLyBhIGNvcHkgb2YgdGhlIGVudHJ5IG9yIGVsc2UgYmFkIHRoaW5ncyBoYXBwZW4uIFNoYXJlZCBtdXRhYmxlIHN0YXRlXG4gICAgLy8gc3RyaWtlcyBhZ2FpbiEgU2VlIGdpdGh1YiBpc3N1ZSAjMTkxLlxuXG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gYVNvdXJjZU1hcC5fbWFwcGluZ3MudG9BcnJheSgpLnNsaWNlKCk7XG4gICAgdmFyIGRlc3RHZW5lcmF0ZWRNYXBwaW5ncyA9IHNtYy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIGRlc3RPcmlnaW5hbE1hcHBpbmdzID0gc21jLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc3JjTWFwcGluZyA9IGdlbmVyYXRlZE1hcHBpbmdzW2ldO1xuICAgICAgdmFyIGRlc3RNYXBwaW5nID0gbmV3IE1hcHBpbmc7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gc3JjTWFwcGluZy5nZW5lcmF0ZWRMaW5lO1xuICAgICAgZGVzdE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uID0gc3JjTWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG5cbiAgICAgIGlmIChzcmNNYXBwaW5nLnNvdXJjZSkge1xuICAgICAgICBkZXN0TWFwcGluZy5zb3VyY2UgPSBzb3VyY2VzLmluZGV4T2Yoc3JjTWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbExpbmUgPSBzcmNNYXBwaW5nLm9yaWdpbmFsTGluZTtcbiAgICAgICAgZGVzdE1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBzcmNNYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIGlmIChzcmNNYXBwaW5nLm5hbWUpIHtcbiAgICAgICAgICBkZXN0TWFwcGluZy5uYW1lID0gbmFtZXMuaW5kZXhPZihzcmNNYXBwaW5nLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVzdE9yaWdpbmFsTWFwcGluZ3MucHVzaChkZXN0TWFwcGluZyk7XG4gICAgICB9XG5cbiAgICAgIGRlc3RHZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICB9XG5cbiAgICBxdWlja1NvcnQoc21jLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG5cbiAgICByZXR1cm4gc21jO1xuICB9O1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vKipcbiAqIFRoZSBsaXN0IG9mIG9yaWdpbmFsIHNvdXJjZXMuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ3NvdXJjZXMnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCA/IHV0aWwuam9pbih0aGlzLnNvdXJjZVJvb3QsIHMpIDogcztcbiAgICB9LCB0aGlzKTtcbiAgfVxufSk7XG5cbi8qKlxuICogUHJvdmlkZSB0aGUgSklUIHdpdGggYSBuaWNlIHNoYXBlIC8gaGlkZGVuIGNsYXNzLlxuICovXG5mdW5jdGlvbiBNYXBwaW5nKCkge1xuICB0aGlzLmdlbmVyYXRlZExpbmUgPSAwO1xuICB0aGlzLmdlbmVyYXRlZENvbHVtbiA9IDA7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5vcmlnaW5hbExpbmUgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsQ29sdW1uID0gbnVsbDtcbiAgdGhpcy5uYW1lID0gbnVsbDtcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHZhciBnZW5lcmF0ZWRMaW5lID0gMTtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsTGluZSA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgdmFyIHByZXZpb3VzTmFtZSA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFTdHIubGVuZ3RoO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNhY2hlZFNlZ21lbnRzID0ge307XG4gICAgdmFyIHRlbXAgPSB7fTtcbiAgICB2YXIgb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBnZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBtYXBwaW5nLCBzdHIsIHNlZ21lbnQsIGVuZCwgdmFsdWU7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChhU3RyLmNoYXJBdChpbmRleCkgPT09ICc7Jykge1xuICAgICAgICBnZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJywnKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbWFwcGluZyA9IG5ldyBNYXBwaW5nKCk7XG4gICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9IGdlbmVyYXRlZExpbmU7XG5cbiAgICAgICAgLy8gQmVjYXVzZSBlYWNoIG9mZnNldCBpcyBlbmNvZGVkIHJlbGF0aXZlIHRvIHRoZSBwcmV2aW91cyBvbmUsXG4gICAgICAgIC8vIG1hbnkgc2VnbWVudHMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBlbmNvZGluZy4gV2UgY2FuIGV4cGxvaXQgdGhpc1xuICAgICAgICAvLyBmYWN0IGJ5IGNhY2hpbmcgdGhlIHBhcnNlZCB2YXJpYWJsZSBsZW5ndGggZmllbGRzIG9mIGVhY2ggc2VnbWVudCxcbiAgICAgICAgLy8gYWxsb3dpbmcgdXMgdG8gYXZvaWQgYSBzZWNvbmQgcGFyc2UgaWYgd2UgZW5jb3VudGVyIHRoZSBzYW1lXG4gICAgICAgIC8vIHNlZ21lbnQgYWdhaW4uXG4gICAgICAgIGZvciAoZW5kID0gaW5kZXg7IGVuZCA8IGxlbmd0aDsgZW5kKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhcklzTWFwcGluZ1NlcGFyYXRvcihhU3RyLCBlbmQpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RyID0gYVN0ci5zbGljZShpbmRleCwgZW5kKTtcblxuICAgICAgICBzZWdtZW50ID0gY2FjaGVkU2VnbWVudHNbc3RyXTtcbiAgICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgICBpbmRleCArPSBzdHIubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlZ21lbnQgPSBbXTtcbiAgICAgICAgICB3aGlsZSAoaW5kZXggPCBlbmQpIHtcbiAgICAgICAgICAgIGJhc2U2NFZMUS5kZWNvZGUoYVN0ciwgaW5kZXgsIHRlbXApO1xuICAgICAgICAgICAgdmFsdWUgPSB0ZW1wLnZhbHVlO1xuICAgICAgICAgICAgaW5kZXggPSB0ZW1wLnJlc3Q7XG4gICAgICAgICAgICBzZWdtZW50LnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCBhIHNvdXJjZSwgYnV0IG5vIGxpbmUgYW5kIGNvbHVtbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCBhIHNvdXJjZSBhbmQgbGluZSwgYnV0IG5vIGNvbHVtbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhY2hlZFNlZ21lbnRzW3N0cl0gPSBzZWdtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2VuZXJhdGVkIGNvbHVtbi5cbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiArIHNlZ21lbnRbMF07XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG5cbiAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gMSkge1xuICAgICAgICAgIC8vIE9yaWdpbmFsIHNvdXJjZS5cbiAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHByZXZpb3VzU291cmNlICsgc2VnbWVudFsxXTtcbiAgICAgICAgICBwcmV2aW91c1NvdXJjZSArPSBzZWdtZW50WzFdO1xuXG4gICAgICAgICAgLy8gT3JpZ2luYWwgbGluZS5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IHByZXZpb3VzT3JpZ2luYWxMaW5lICsgc2VnbWVudFsyXTtcbiAgICAgICAgICBwcmV2aW91c09yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICAgIC8vIExpbmVzIGFyZSBzdG9yZWQgMC1iYXNlZFxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lICs9IDE7XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBjb2x1bW4uXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gKyBzZWdtZW50WzNdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gNCkge1xuICAgICAgICAgICAgLy8gT3JpZ2luYWwgbmFtZS5cbiAgICAgICAgICAgIG1hcHBpbmcubmFtZSA9IHByZXZpb3VzTmFtZSArIHNlZ21lbnRbNF07XG4gICAgICAgICAgICBwcmV2aW91c05hbWUgKz0gc2VnbWVudFs0XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICBpZiAodHlwZW9mIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG9yaWdpbmFsTWFwcGluZ3MucHVzaChtYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydChnZW5lcmF0ZWRNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCk7XG4gICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gZ2VuZXJhdGVkTWFwcGluZ3M7XG5cbiAgICBxdWlja1NvcnQob3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBvcmlnaW5hbE1hcHBpbmdzO1xuICB9O1xuXG4vKipcbiAqIEZpbmQgdGhlIG1hcHBpbmcgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGh5cG90aGV0aWNhbCBcIm5lZWRsZVwiIG1hcHBpbmcgdGhhdFxuICogd2UgYXJlIHNlYXJjaGluZyBmb3IgaW4gdGhlIGdpdmVuIFwiaGF5c3RhY2tcIiBvZiBtYXBwaW5ncy5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZmluZE1hcHBpbmcoYU5lZWRsZSwgYU1hcHBpbmdzLCBhTGluZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb2x1bW5OYW1lLCBhQ29tcGFyYXRvciwgYUJpYXMpIHtcbiAgICAvLyBUbyByZXR1cm4gdGhlIHBvc2l0aW9uIHdlIGFyZSBzZWFyY2hpbmcgZm9yLCB3ZSBtdXN0IGZpcnN0IGZpbmQgdGhlXG4gICAgLy8gbWFwcGluZyBmb3IgdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCB0aGVuIHJldHVybiB0aGUgb3Bwb3NpdGUgcG9zaXRpb24gaXRcbiAgICAvLyBwb2ludHMgdG8uIEJlY2F1c2UgdGhlIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHdlIGNhbiB1c2UgYmluYXJ5IHNlYXJjaCB0b1xuICAgIC8vIGZpbmQgdGhlIGJlc3QgbWFwcGluZy5cblxuICAgIGlmIChhTmVlZGxlW2FMaW5lTmFtZV0gPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTGluZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLCBnb3QgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICArIGFOZWVkbGVbYUxpbmVOYW1lXSk7XG4gICAgfVxuICAgIGlmIChhTmVlZGxlW2FDb2x1bW5OYW1lXSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbHVtbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLCBnb3QgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICArIGFOZWVkbGVbYUNvbHVtbk5hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmluYXJ5U2VhcmNoLnNlYXJjaChhTmVlZGxlLCBhTWFwcGluZ3MsIGFDb21wYXJhdG9yLCBhQmlhcyk7XG4gIH07XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgbGFzdCBjb2x1bW4gZm9yIGVhY2ggZ2VuZXJhdGVkIG1hcHBpbmcuIFRoZSBsYXN0IGNvbHVtbiBpc1xuICogaW5jbHVzaXZlLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb21wdXRlQ29sdW1uU3BhbnMgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9jb21wdXRlQ29sdW1uU3BhbnMoKSB7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aDsgKytpbmRleCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIC8vIE1hcHBpbmdzIGRvIG5vdCBjb250YWluIGEgZmllbGQgZm9yIHRoZSBsYXN0IGdlbmVyYXRlZCBjb2x1bW50LiBXZVxuICAgICAgLy8gY2FuIGNvbWUgdXAgd2l0aCBhbiBvcHRpbWlzdGljIGVzdGltYXRlLCBob3dldmVyLCBieSBhc3N1bWluZyB0aGF0XG4gICAgICAvLyBtYXBwaW5ncyBhcmUgY29udGlndW91cyAoaS5lLiBnaXZlbiB0d28gY29uc2VjdXRpdmUgbWFwcGluZ3MsIHRoZVxuICAgICAgLy8gZmlyc3QgbWFwcGluZyBlbmRzIHdoZXJlIHRoZSBzZWNvbmQgb25lIHN0YXJ0cykuXG4gICAgICBpZiAoaW5kZXggKyAxIDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoKSB7XG4gICAgICAgIHZhciBuZXh0TWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4ICsgMV07XG5cbiAgICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9PT0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIG1hcHBpbmcubGFzdEdlbmVyYXRlZENvbHVtbiA9IG5leHRNYXBwaW5nLmdlbmVyYXRlZENvbHVtbiAtIDE7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGxhc3QgbWFwcGluZyBmb3IgZWFjaCBsaW5lIHNwYW5zIHRoZSBlbnRpcmUgbGluZS5cbiAgICAgIG1hcHBpbmcubGFzdEdlbmVyYXRlZENvbHVtbiA9IEluZmluaXR5O1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICBuZWVkbGUsXG4gICAgICB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncyxcbiAgICAgIFwiZ2VuZXJhdGVkTGluZVwiLFxuICAgICAgXCJnZW5lcmF0ZWRDb2x1bW5cIixcbiAgICAgIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQsXG4gICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZWVkbGUuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcobWFwcGluZywgJ3NvdXJjZScsIG51bGwpO1xuICAgICAgICBpZiAoc291cmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5hdChzb3VyY2UpO1xuICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbmFtZScsIG51bGwpO1xuICAgICAgICBpZiAobmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5hdChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbExpbmUnLCBudWxsKSxcbiAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc291cmNlOiBudWxsLFxuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIG5hbWU6IG51bGxcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgdGhlIHNvdXJjZSBjb250ZW50IGZvciBldmVyeSBzb3VyY2UgaW4gdGhlIHNvdXJjZVxuICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnQubGVuZ3RoID49IHRoaXMuX3NvdXJjZXMuc2l6ZSgpICYmXG4gICAgICAhdGhpcy5zb3VyY2VzQ29udGVudC5zb21lKGZ1bmN0aW9uIChzYykgeyByZXR1cm4gc2MgPT0gbnVsbDsgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgYVNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBhU291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc291cmNlcy5oYXMoYVNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihhU291cmNlKV07XG4gICAgfVxuXG4gICAgdmFyIHVybDtcbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGxcbiAgICAgICAgJiYgKHVybCA9IHV0aWwudXJsUGFyc2UodGhpcy5zb3VyY2VSb290KSkpIHtcbiAgICAgIC8vIFhYWDogZmlsZTovLyBVUklzIGFuZCBhYnNvbHV0ZSBwYXRocyBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZm9yXG4gICAgICAvLyBtYW55IHVzZXJzLiBXZSBjYW4gaGVscCB0aGVtIG91dCB3aGVuIHRoZXkgZXhwZWN0IGZpbGU6Ly8gVVJJcyB0b1xuICAgICAgLy8gYmVoYXZlIGxpa2UgaXQgd291bGQgaWYgdGhleSB3ZXJlIHJ1bm5pbmcgYSBsb2NhbCBIVFRQIHNlcnZlci4gU2VlXG4gICAgICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD04ODU1OTcuXG4gICAgICB2YXIgZmlsZVVyaUFic1BhdGggPSBhU291cmNlLnJlcGxhY2UoL15maWxlOlxcL1xcLy8sIFwiXCIpO1xuICAgICAgaWYgKHVybC5zY2hlbWUgPT0gXCJmaWxlXCJcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhmaWxlVXJpQWJzUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGZpbGVVcmlBYnNQYXRoKV1cbiAgICAgIH1cblxuICAgICAgaWYgKCghdXJsLnBhdGggfHwgdXJsLnBhdGggPT0gXCIvXCIpXG4gICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoXCIvXCIgKyBhU291cmNlKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoXCIvXCIgKyBhU291cmNlKV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHJlY3Vyc2l2ZWx5IGZyb21cbiAgICAvLyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IuIEluIHRoYXQgY2FzZSwgd2VcbiAgICAvLyBkb24ndCB3YW50IHRvIHRocm93IGlmIHdlIGNhbid0IGZpbmQgdGhlIHNvdXJjZSAtIHdlIGp1c3Qgd2FudCB0b1xuICAgIC8vIHJldHVybiBudWxsLCBzbyB3ZSBwcm92aWRlIGEgZmxhZyB0byBleGl0IGdyYWNlZnVsbHkuXG4gICAgaWYgKG51bGxPbk1pc3NpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aFxuICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBiaWFzOiBFaXRoZXIgJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdTb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgc291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBsYXN0Q29sdW1uOiBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICBcIm9yaWdpbmFsTGluZVwiLFxuICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKG1hcHBpbmcuc291cmNlID09PSBuZWVkbGUuc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGwsXG4gICAgICBsYXN0Q29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuZXhwb3J0cy5CYXNpY1NvdXJjZU1hcENvbnN1bWVyID0gQmFzaWNTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBBbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBhcnNlZCBzb3VyY2UgbWFwIHdoaWNoXG4gKiB3ZSBjYW4gcXVlcnkgZm9yIGluZm9ybWF0aW9uLiBJdCBkaWZmZXJzIGZyb20gQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpblxuICogdGhhdCBpdCB0YWtlcyBcImluZGV4ZWRcIiBzb3VyY2UgbWFwcyAoaS5lLiBvbmVzIHdpdGggYSBcInNlY3Rpb25zXCIgZmllbGQpIGFzXG4gKiBpbnB1dC5cbiAqXG4gKiBUaGUgb25seSBwYXJhbWV0ZXIgaXMgYSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yIGFscmVhZHlcbiAqIHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgZm9yIGluZGV4ZWQgc291cmNlIG1hcHMsIHRoZXlcbiAqIGhhdmUgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICpcbiAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICogICAtIGZpbGU6IE9wdGlvbmFsLiBUaGUgZ2VuZXJhdGVkIGZpbGUgdGhpcyBzb3VyY2UgbWFwIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAqICAgLSBzZWN0aW9uczogQSBsaXN0IG9mIHNlY3Rpb24gZGVmaW5pdGlvbnMuXG4gKlxuICogRWFjaCB2YWx1ZSB1bmRlciB0aGUgXCJzZWN0aW9uc1wiIGZpZWxkIGhhcyB0d28gZmllbGRzOlxuICogICAtIG9mZnNldDogVGhlIG9mZnNldCBpbnRvIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgYXQgd2hpY2ggdGhpcyBzZWN0aW9uXG4gKiAgICAgICBiZWdpbnMgdG8gYXBwbHksIGRlZmluZWQgYXMgYW4gb2JqZWN0IHdpdGggYSBcImxpbmVcIiBhbmQgXCJjb2x1bW5cIlxuICogICAgICAgZmllbGQuXG4gKiAgIC0gbWFwOiBBIHNvdXJjZSBtYXAgZGVmaW5pdGlvbi4gVGhpcyBzb3VyY2UgbWFwIGNvdWxkIGFsc28gYmUgaW5kZXhlZCxcbiAqICAgICAgIGJ1dCBkb2Vzbid0IGhhdmUgdG8gYmUuXG4gKlxuICogSW5zdGVhZCBvZiB0aGUgXCJtYXBcIiBmaWVsZCwgaXQncyBhbHNvIHBvc3NpYmxlIHRvIGhhdmUgYSBcInVybFwiIGZpZWxkXG4gKiBzcGVjaWZ5aW5nIGEgVVJMIHRvIHJldHJpZXZlIGEgc291cmNlIG1hcCBmcm9tLCBidXQgdGhhdCdzIGN1cnJlbnRseVxuICogdW5zdXBwb3J0ZWQuXG4gKlxuICogSGVyZSdzIGFuIGV4YW1wbGUgc291cmNlIG1hcCwgdGFrZW4gZnJvbSB0aGUgc291cmNlIG1hcCBzcGVjWzBdLCBidXRcbiAqIG1vZGlmaWVkIHRvIG9taXQgYSBzZWN0aW9uIHdoaWNoIHVzZXMgdGhlIFwidXJsXCIgZmllbGQuXG4gKlxuICogIHtcbiAqICAgIHZlcnNpb24gOiAzLFxuICogICAgZmlsZTogXCJhcHAuanNcIixcbiAqICAgIHNlY3Rpb25zOiBbe1xuICogICAgICBvZmZzZXQ6IHtsaW5lOjEwMCwgY29sdW1uOjEwfSxcbiAqICAgICAgbWFwOiB7XG4gKiAgICAgICAgdmVyc2lvbiA6IDMsXG4gKiAgICAgICAgZmlsZTogXCJzZWN0aW9uLmpzXCIsXG4gKiAgICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgIG5hbWVzOiBbXCJzcmNcIiwgXCJtYXBzXCIsIFwiYXJlXCIsIFwiZnVuXCJdLFxuICogICAgICAgIG1hcHBpbmdzOiBcIkFBQUEsRTs7QUJDREU7XCJcbiAqICAgICAgfVxuICogICAgfV0sXG4gKiAgfVxuICpcbiAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0I2hlYWRpbmc9aC41MzVlczN4ZXByZ3RcbiAqL1xuZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgdmFyIHZlcnNpb24gPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICd2ZXJzaW9uJyk7XG4gIHZhciBzZWN0aW9ucyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NlY3Rpb25zJyk7XG5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgdGhpcy5fc291cmNlcyA9IG5ldyBBcnJheVNldCgpO1xuICB0aGlzLl9uYW1lcyA9IG5ldyBBcnJheVNldCgpO1xuXG4gIHZhciBsYXN0T2Zmc2V0ID0ge1xuICAgIGxpbmU6IC0xLFxuICAgIGNvbHVtbjogMFxuICB9O1xuICB0aGlzLl9zZWN0aW9ucyA9IHNlY3Rpb25zLm1hcChmdW5jdGlvbiAocykge1xuICAgIGlmIChzLnVybCkge1xuICAgICAgLy8gVGhlIHVybCBmaWVsZCB3aWxsIHJlcXVpcmUgc3VwcG9ydCBmb3IgYXN5bmNocm9uaWNpdHkuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9pc3N1ZXMvMTZcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VwcG9ydCBmb3IgdXJsIGZpZWxkIGluIHNlY3Rpb25zIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgICB9XG4gICAgdmFyIG9mZnNldCA9IHV0aWwuZ2V0QXJnKHMsICdvZmZzZXQnKTtcbiAgICB2YXIgb2Zmc2V0TGluZSA9IHV0aWwuZ2V0QXJnKG9mZnNldCwgJ2xpbmUnKTtcbiAgICB2YXIgb2Zmc2V0Q29sdW1uID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnY29sdW1uJyk7XG5cbiAgICBpZiAob2Zmc2V0TGluZSA8IGxhc3RPZmZzZXQubGluZSB8fFxuICAgICAgICAob2Zmc2V0TGluZSA9PT0gbGFzdE9mZnNldC5saW5lICYmIG9mZnNldENvbHVtbiA8IGxhc3RPZmZzZXQuY29sdW1uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWN0aW9uIG9mZnNldHMgbXVzdCBiZSBvcmRlcmVkIGFuZCBub24tb3ZlcmxhcHBpbmcuJyk7XG4gICAgfVxuICAgIGxhc3RPZmZzZXQgPSBvZmZzZXQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2VuZXJhdGVkT2Zmc2V0OiB7XG4gICAgICAgIC8vIFRoZSBvZmZzZXQgZmllbGRzIGFyZSAwLWJhc2VkLCBidXQgd2UgdXNlIDEtYmFzZWQgaW5kaWNlcyB3aGVuXG4gICAgICAgIC8vIGVuY29kaW5nL2RlY29kaW5nIGZyb20gVkxRLlxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBvZmZzZXRMaW5lICsgMSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBvZmZzZXRDb2x1bW4gKyAxXG4gICAgICB9LFxuICAgICAgY29uc3VtZXI6IG5ldyBTb3VyY2VNYXBDb25zdW1lcih1dGlsLmdldEFyZyhzLCAnbWFwJykpXG4gICAgfVxuICB9KTtcbn1cblxuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vKipcbiAqIFRoZSBsaXN0IG9mIG9yaWdpbmFsIHNvdXJjZXMuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3NlY3Rpb25zW2ldLmNvbnN1bWVyLnNvdXJjZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgc291cmNlcy5wdXNoKHRoaXMuX3NlY3Rpb25zW2ldLmNvbnN1bWVyLnNvdXJjZXNbal0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc291cmNlcztcbiAgfVxufSk7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkXG4gKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgb3IgbnVsbC5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9vcmlnaW5hbFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIGdlbmVyYXRlZExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgZ2VuZXJhdGVkQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIC8vIEZpbmQgdGhlIHNlY3Rpb24gY29udGFpbmluZyB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9uIHdlJ3JlIHRyeWluZyB0byBtYXBcbiAgICAvLyB0byBhbiBvcmlnaW5hbCBwb3NpdGlvbi5cbiAgICB2YXIgc2VjdGlvbkluZGV4ID0gYmluYXJ5U2VhcmNoLnNlYXJjaChuZWVkbGUsIHRoaXMuX3NlY3Rpb25zLFxuICAgICAgZnVuY3Rpb24obmVlZGxlLCBzZWN0aW9uKSB7XG4gICAgICAgIHZhciBjbXAgPSBuZWVkbGUuZ2VuZXJhdGVkTGluZSAtIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU7XG4gICAgICAgIGlmIChjbXApIHtcbiAgICAgICAgICByZXR1cm4gY21wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgfSk7XG4gICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xuXG4gICAgaWYgKCFzZWN0aW9uKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbmFtZTogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VjdGlvbi5jb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHtcbiAgICAgIGxpbmU6IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgIGNvbHVtbjogbmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBuZWVkbGUuZ2VuZXJhdGVkTGluZVxuICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICA6IDApLFxuICAgICAgYmlhczogYUFyZ3MuYmlhc1xuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgdGhlIHNvdXJjZSBjb250ZW50IGZvciBldmVyeSBzb3VyY2UgaW4gdGhlIHNvdXJjZVxuICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlY3Rpb25zLmV2ZXJ5KGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gcy5jb25zdW1lci5oYXNDb250ZW50c09mQWxsU291cmNlcygpO1xuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICogb3JpZ2luYWwgc291cmNlIGZpbGUuIFJldHVybnMgbnVsbCBpZiBubyBvcmlnaW5hbCBzb3VyY2UgY29udGVudCBpc1xuICogYXZhaWxhYmxlLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfc291cmNlQ29udGVudEZvcihhU291cmNlLCBudWxsT25NaXNzaW5nKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgdmFyIGNvbnRlbnQgPSBzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgdHJ1ZSk7XG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG51bGxPbk1pc3NpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aFxuICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG5cbiAgICAgIC8vIE9ubHkgY29uc2lkZXIgdGhpcyBzZWN0aW9uIGlmIHRoZSByZXF1ZXN0ZWQgc291cmNlIGlzIGluIHRoZSBsaXN0IG9mXG4gICAgICAvLyBzb3VyY2VzIG9mIHRoZSBjb25zdW1lci5cbiAgICAgIGlmIChzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZXMuaW5kZXhPZih1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpKSA9PT0gLTEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgZ2VuZXJhdGVkUG9zaXRpb24gPSBzZWN0aW9uLmNvbnN1bWVyLmdlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKTtcbiAgICAgIGlmIChnZW5lcmF0ZWRQb3NpdGlvbikge1xuICAgICAgICB2YXIgcmV0ID0ge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZFBvc2l0aW9uLmxpbmUgK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZFBvc2l0aW9uLmNvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gZ2VuZXJhdGVkUG9zaXRpb24ubGluZVxuICAgICAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgICAgIDogMClcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG4gICAgICB2YXIgc2VjdGlvbk1hcHBpbmdzID0gc2VjdGlvbi5jb25zdW1lci5fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlY3Rpb25NYXBwaW5ncy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgbWFwcGluZyA9IHNlY3Rpb25NYXBwaW5nc1tqXTtcblxuICAgICAgICB2YXIgc291cmNlID0gc2VjdGlvbi5jb25zdW1lci5fc291cmNlcy5hdChtYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGlmIChzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc2VjdGlvbi5jb25zdW1lci5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgICAgIHZhciBuYW1lID0gc2VjdGlvbi5jb25zdW1lci5fbmFtZXMuYXQobWFwcGluZy5uYW1lKTtcbiAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgICBuYW1lID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcblxuICAgICAgICAvLyBUaGUgbWFwcGluZ3MgY29taW5nIGZyb20gdGhlIGNvbnN1bWVyIGZvciB0aGUgc2VjdGlvbiBoYXZlXG4gICAgICAgIC8vIGdlbmVyYXRlZCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzZWN0aW9uLCBzbyB3ZVxuICAgICAgICAvLyBuZWVkIHRvIG9mZnNldCB0aGVtIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY29uY2F0ZW5hdGVkXG4gICAgICAgIC8vIGdlbmVyYXRlZCBmaWxlLlxuICAgICAgICB2YXIgYWRqdXN0ZWRNYXBwaW5nID0ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG1hcHBpbmcuZ2VuZXJhdGVkTGluZVxuICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICA6IDApLFxuICAgICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgb3JpZ2luYWxDb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKGFkanVzdGVkTWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgYWRqdXN0ZWRNYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncy5wdXNoKGFkanVzdGVkTWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBxdWlja1NvcnQodGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICBxdWlja1NvcnQodGhpcy5fX29yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuICB9O1xuXG5leHBvcnRzLkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciA9IEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcjtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIHBhcmFtZXRlci9vcHRpb25zXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBhcmdzIFRoZSBvYmplY3Qgd2UgYXJlIGV4dHJhY3RpbmcgdmFsdWVzIGZyb21cbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgQW4gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nXG4gKiBmcm9tIHRoZSBvYmplY3QuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmcsIGFuXG4gKiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gZ2V0QXJnKGFBcmdzLCBhTmFtZSwgYURlZmF1bHRWYWx1ZSkge1xuICBpZiAoYU5hbWUgaW4gYUFyZ3MpIHtcbiAgICByZXR1cm4gYUFyZ3NbYU5hbWVdO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYURlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFOYW1lICsgJ1wiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuJyk7XG4gIH1cbn1cbmV4cG9ydHMuZ2V0QXJnID0gZ2V0QXJnO1xuXG52YXIgdXJsUmVnZXhwID0gL14oPzooW1xcdytcXC0uXSspOik/XFwvXFwvKD86KFxcdys6XFx3KylAKT8oW1xcdy5dKikoPzo6KFxcZCspKT8oXFxTKikkLztcbnZhciBkYXRhVXJsUmVnZXhwID0gL15kYXRhOi4rXFwsLiskLztcblxuZnVuY3Rpb24gdXJsUGFyc2UoYVVybCkge1xuICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjaGVtZTogbWF0Y2hbMV0sXG4gICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgaG9zdDogbWF0Y2hbM10sXG4gICAgcG9ydDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV1cbiAgfTtcbn1cbmV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuZnVuY3Rpb24gdXJsR2VuZXJhdGUoYVBhcnNlZFVybCkge1xuICB2YXIgdXJsID0gJyc7XG4gIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnNjaGVtZSArICc6JztcbiAgfVxuICB1cmwgKz0gJy8vJztcbiAgaWYgKGFQYXJzZWRVcmwuYXV0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmF1dGggKyAnQCc7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwuaG9zdCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucG9ydCkge1xuICAgIHVybCArPSBcIjpcIiArIGFQYXJzZWRVcmwucG9ydFxuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBhdGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5wYXRoO1xuICB9XG4gIHJldHVybiB1cmw7XG59XG5leHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gKlxuICogLSBSZXBsYWNlcyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggb25lIHNsYXNoLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICpcbiAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciB1cmwgdG8gbm9ybWFsaXplLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgdmFyIHBhdGggPSBhUGF0aDtcbiAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgaWYgKHVybCkge1xuICAgIGlmICghdXJsLnBhdGgpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG4gICAgcGF0aCA9IHVybC5wYXRoO1xuICB9XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoL1xcLysvKTtcbiAgZm9yICh2YXIgcGFydCwgdXAgPSAwLCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwID4gMCkge1xuICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJ0IGlzIGJsYW5rIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLiBUcnlpbmcgdG8gZ29cbiAgICAgICAgLy8gYWJvdmUgdGhlIHJvb3QgaXMgYSBuby1vcC4gVGhlcmVmb3JlIHdlIGNhbiByZW1vdmUgYWxsICcuLicgcGFydHNcbiAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgIHBhcnRzLnNwbGljZShpICsgMSwgdXApO1xuICAgICAgICB1cCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMik7XG4gICAgICAgIHVwLS07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKHBhdGggPT09ICcnKSB7XG4gICAgcGF0aCA9IGlzQWJzb2x1dGUgPyAnLycgOiAnLic7XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgdXJsLnBhdGggPSBwYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5cbi8qKlxuICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAqXG4gKiAtIElmIGFQYXRoIGlzIGEgVVJMIG9yIGEgZGF0YSBVUkksIGFQYXRoIGlzIHJldHVybmVkLCB1bmxlc3MgYVBhdGggaXMgYVxuICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gKiAgIGZpcnN0LlxuICogLSBPdGhlcndpc2UgYVBhdGggaXMgYSBwYXRoLiBJZiBhUm9vdCBpcyBhIFVSTCwgdGhlbiBpdHMgcGF0aCBwb3J0aW9uXG4gKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAqICAgaXMgcmV0dXJuZWQuXG4gKiAgIC0gSWYgYVBhdGggaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaXMgYVBhdGguXG4gKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gKiAtIEpvaW5pbmcgZm9yIGV4YW1wbGUgJ2h0dHA6Ly8nIGFuZCAnd3d3LmV4YW1wbGUuY29tJyBpcyBhbHNvIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuICBpZiAoYVBhdGggPT09IFwiXCIpIHtcbiAgICBhUGF0aCA9IFwiLlwiO1xuICB9XG4gIHZhciBhUGF0aFVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgdmFyIGFSb290VXJsID0gdXJsUGFyc2UoYVJvb3QpO1xuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdCA9IGFSb290VXJsLnBhdGggfHwgJy8nO1xuICB9XG5cbiAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgaWYgKGFQYXRoVXJsICYmICFhUGF0aFVybC5zY2hlbWUpIHtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFQYXRoVXJsKTtcbiAgfVxuXG4gIGlmIChhUGF0aFVybCB8fCBhUGF0aC5tYXRjaChkYXRhVXJsUmVnZXhwKSkge1xuICAgIHJldHVybiBhUGF0aDtcbiAgfVxuXG4gIC8vIGBqb2luKCdodHRwOi8vJywgJ3d3dy5leGFtcGxlLmNvbScpYFxuICBpZiAoYVJvb3RVcmwgJiYgIWFSb290VXJsLmhvc3QgJiYgIWFSb290VXJsLnBhdGgpIHtcbiAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuXG4gIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgID8gYVBhdGhcbiAgICA6IG5vcm1hbGl6ZShhUm9vdC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIGFQYXRoKTtcblxuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdFVybC5wYXRoID0gam9pbmVkO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cbiAgcmV0dXJuIGpvaW5lZDtcbn1cbmV4cG9ydHMuam9pbiA9IGpvaW47XG5cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uIChhUGF0aCkge1xuICByZXR1cm4gYVBhdGguY2hhckF0KDApID09PSAnLycgfHwgISFhUGF0aC5tYXRjaCh1cmxSZWdleHApO1xufTtcblxuLyoqXG4gKiBNYWtlIGEgcGF0aCByZWxhdGl2ZSB0byBhIFVSTCBvciBhbm90aGVyIHBhdGguXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBtYWRlIHJlbGF0aXZlIHRvIGFSb290LlxuICovXG5mdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuXG4gIGFSb290ID0gYVJvb3QucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gIC8vIGNoZWNraW5nIHdoZXRoZXIgdGhlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlIHBhdGggd29uJ3Qgd29yay4gSW5zdGVhZCwgd2VcbiAgLy8gbmVlZCB0byByZW1vdmUgY29tcG9uZW50cyBmcm9tIHRoZSByb290IG9uZSBieSBvbmUsIHVudGlsIGVpdGhlciB3ZSBmaW5kXG4gIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgdmFyIGxldmVsID0gMDtcbiAgd2hpbGUgKGFQYXRoLmluZGV4T2YoYVJvb3QgKyAnLycpICE9PSAwKSB7XG4gICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb25seSBwYXJ0IG9mIHRoZSByb290IHRoYXQgaXMgbGVmdCBpcyB0aGUgc2NoZW1lIChpLmUuIGh0dHA6Ly8sXG4gICAgLy8gZmlsZTovLy8sIGV0Yy4pLCBvbmUgb3IgbW9yZSBzbGFzaGVzICgvKSwgb3Igc2ltcGx5IG5vdGhpbmcgYXQgYWxsLCB3ZVxuICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgYVJvb3QgPSBhUm9vdC5zbGljZSgwLCBpbmRleCk7XG4gICAgaWYgKGFSb290Lm1hdGNoKC9eKFteXFwvXSs6XFwvKT9cXC8qJC8pKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgKytsZXZlbDtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhZGQgYSBcIi4uL1wiIGZvciBlYWNoIGNvbXBvbmVudCB3ZSByZW1vdmVkIGZyb20gdGhlIHJvb3QuXG4gIHJldHVybiBBcnJheShsZXZlbCArIDEpLmpvaW4oXCIuLi9cIikgKyBhUGF0aC5zdWJzdHIoYVJvb3QubGVuZ3RoICsgMSk7XG59XG5leHBvcnRzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG5cbnZhciBzdXBwb3J0c051bGxQcm90byA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gISgnX19wcm90b19fJyBpbiBvYmopO1xufSgpKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkgKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICogaGF2ZSB0byBwcmVmaXggYWxsIHRoZSBzdHJpbmdzIGluIG91ciBzZXQgd2l0aCBhbiBhcmJpdHJhcnkgY2hhcmFjdGVyLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8zMFxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5mdW5jdGlvbiB0b1NldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuICckJyArIGFTdHI7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMudG9TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogdG9TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGZyb21TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiBhU3RyLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLmZyb21TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogZnJvbVNldFN0cmluZztcblxuZnVuY3Rpb24gaXNQcm90b1N0cmluZyhzKSB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBzLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOSAvKiBcIl9fcHJvdG9fX1wiLmxlbmd0aCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMSkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAyKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDMpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNCkgIT09IDExNiAvKiAndCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA1KSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDYpICE9PSAxMTQgLyogJ3InICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNykgIT09IDExMiAvKiAncCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA4KSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDkpICE9PSA5NSAgLyogJ18nICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IGxlbmd0aCAtIDEwOyBpID49IDA7IGktLSkge1xuICAgIGlmIChzLmNoYXJDb2RlQXQoaSkgIT09IDM2IC8qICckJyAqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2hlcmUgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4sIGJ1dCBkaWZmZXJlbnQgZ2VuZXJhdGVkXG4gKiBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXBwaW5nIHdpdGggYVxuICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyA9IGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zO1xuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBkZWZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgaW5kaWNlcyB3aGVyZVxuICogdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiwgYnV0IGRpZmZlcmVudFxuICogc291cmNlL25hbWUvb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGFcbiAqIG1hcHBpbmcgd2l0aCBhIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkO1xuXG5mdW5jdGlvbiBzdHJjbXAoYVN0cjEsIGFTdHIyKSB7XG4gIGlmIChhU3RyMSA9PT0gYVN0cjIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZDtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrLWdlbmVyYXRvcicsIFsnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc3RhY2tmcmFtZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrR2VuZXJhdG9yID0gZmFjdG9yeShyb290LlN0YWNrRnJhbWUpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24oU3RhY2tGcmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGJhY2t0cmFjZTogZnVuY3Rpb24gU3RhY2tHZW5lcmF0b3IkJGJhY2t0cmFjZShvcHRzKSB7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICAgICAgICAgIHZhciBtYXhTdGFja1NpemUgPSAxMDtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3B0cy5tYXhTdGFja1NpemUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgbWF4U3RhY2tTaXplID0gb3B0cy5tYXhTdGFja1NpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjdXJyID0gYXJndW1lbnRzLmNhbGxlZTtcbiAgICAgICAgICAgIHdoaWxlIChjdXJyICYmIHN0YWNrLmxlbmd0aCA8IG1heFN0YWNrU2l6ZSkge1xuICAgICAgICAgICAgICAgIC8vIEFsbG93IFY4IG9wdGltaXphdGlvbnNcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShjdXJyWydhcmd1bWVudHMnXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gY3VyclsnYXJndW1lbnRzJ11baV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgvZnVuY3Rpb24oPzpcXHMrKFtcXHckXSspKStcXHMqXFwoLy50ZXN0KGN1cnIudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh7ZnVuY3Rpb25OYW1lOiBSZWdFeHAuJDEgfHwgdW5kZWZpbmVkLCBhcmdzOiBhcmdzfSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3IFN0YWNrRnJhbWUoe2FyZ3M6IGFyZ3N9KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIuY2FsbGVyO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0YWNrO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcbiIsIihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFja2ZyYW1lJywgW10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tGcmFtZSA9IGZhY3RvcnkoKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgZnVuY3Rpb24gX2lzTnVtYmVyKG4pIHtcbiAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfY2FwaXRhbGl6ZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0clswXS50b1VwcGVyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZ2V0dGVyKHApIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3BdO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBib29sZWFuUHJvcHMgPSBbJ2lzQ29uc3RydWN0b3InLCAnaXNFdmFsJywgJ2lzTmF0aXZlJywgJ2lzVG9wbGV2ZWwnXTtcbiAgICB2YXIgbnVtZXJpY1Byb3BzID0gWydjb2x1bW5OdW1iZXInLCAnbGluZU51bWJlciddO1xuICAgIHZhciBzdHJpbmdQcm9wcyA9IFsnZmlsZU5hbWUnLCAnZnVuY3Rpb25OYW1lJywgJ3NvdXJjZSddO1xuICAgIHZhciBhcnJheVByb3BzID0gWydhcmdzJ107XG5cbiAgICBmdW5jdGlvbiBTdGFja0ZyYW1lKG9iaikge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICB2YXIgcHJvcHMgPSBib29sZWFuUHJvcHMuY29uY2F0KG51bWVyaWNQcm9wcy5jb25jYXQoc3RyaW5nUHJvcHMuY29uY2F0KGFycmF5UHJvcHMpKSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wc1tpXSkgJiYgb2JqW3Byb3BzW2ldXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbJ3NldCcgKyBfY2FwaXRhbGl6ZShwcm9wc1tpXSldKG9ialtwcm9wc1tpXV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIFN0YWNrRnJhbWUucHJvdG90eXBlID0ge1xuICAgICAgICBnZXRBcmdzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmdzO1xuICAgICAgICB9LFxuICAgICAgICBzZXRBcmdzOiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSAhPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3MgbXVzdCBiZSBhbiBBcnJheScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcmdzID0gdjtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRFdmFsT3JpZ2luOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmFsT3JpZ2luO1xuICAgICAgICB9LFxuICAgICAgICBzZXRFdmFsT3JpZ2luOiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsT3JpZ2luID0gdjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZhbE9yaWdpbiA9IG5ldyBTdGFja0ZyYW1lKHYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFdmFsIE9yaWdpbiBtdXN0IGJlIGFuIE9iamVjdCBvciBTdGFja0ZyYW1lJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0aGlzLmdldEZ1bmN0aW9uTmFtZSgpIHx8ICd7YW5vbnltb3VzfSc7XG4gICAgICAgICAgICB2YXIgYXJncyA9ICcoJyArICh0aGlzLmdldEFyZ3MoKSB8fCBbXSkuam9pbignLCcpICsgJyknO1xuICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gdGhpcy5nZXRGaWxlTmFtZSgpID8gKCdAJyArIHRoaXMuZ2V0RmlsZU5hbWUoKSkgOiAnJztcbiAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gX2lzTnVtYmVyKHRoaXMuZ2V0TGluZU51bWJlcigpKSA/ICgnOicgKyB0aGlzLmdldExpbmVOdW1iZXIoKSkgOiAnJztcbiAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSBfaXNOdW1iZXIodGhpcy5nZXRDb2x1bW5OdW1iZXIoKSkgPyAoJzonICsgdGhpcy5nZXRDb2x1bW5OdW1iZXIoKSkgOiAnJztcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbk5hbWUgKyBhcmdzICsgZmlsZU5hbWUgKyBsaW5lTnVtYmVyICsgY29sdW1uTnVtYmVyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9vbGVhblByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUoYm9vbGVhblByb3BzW2ldKV0gPSBfZ2V0dGVyKGJvb2xlYW5Qcm9wc1tpXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUoYm9vbGVhblByb3BzW2ldKV0gPSAoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBCb29sZWFuKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoYm9vbGVhblByb3BzW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bWVyaWNQcm9wcy5sZW5ndGg7IGorKykge1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gX2dldHRlcihudW1lcmljUHJvcHNbal0pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc051bWJlcih2KSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHAgKyAnIG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpc1twXSA9IE51bWJlcih2KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKG51bWVyaWNQcm9wc1tqXSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBzdHJpbmdQcm9wcy5sZW5ndGg7IGsrKykge1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKHN0cmluZ1Byb3BzW2tdKV0gPSBfZ2V0dGVyKHN0cmluZ1Byb3BzW2tdKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShzdHJpbmdQcm9wc1trXSldID0gKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gU3RyaW5nKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoc3RyaW5nUHJvcHNba10pO1xuICAgIH1cblxuICAgIHJldHVybiBTdGFja0ZyYW1lO1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZS1ncHMnLCBbJ3NvdXJjZS1tYXAnLCAnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc291cmNlLW1hcC9saWIvc291cmNlLW1hcC1jb25zdW1lcicpLCByZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tUcmFjZUdQUyA9IGZhY3Rvcnkocm9vdC5Tb3VyY2VNYXAgfHwgcm9vdC5zb3VyY2VNYXAsIHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTb3VyY2VNYXAsIFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBNYWtlIGEgWC1Eb21haW4gcmVxdWVzdCB0byB1cmwgYW5kIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB3aXRoIHJlc3BvbnNlIHRleHQgaWYgZnVsZmlsbGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gX3hkcih1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgcmVxLm9wZW4oJ2dldCcsIHVybCk7XG4gICAgICAgICAgICByZXEub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocmVxLnN0YXR1cyA+PSAyMDAgJiYgcmVxLnN0YXR1cyA8IDMwMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICh1cmwuc3Vic3RyKDAsIDcpID09PSAnZmlsZTovLycgJiYgcmVxLnJlc3BvbnNlVGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVxLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdIVFRQIHN0YXR1czogJyArIHJlcS5zdGF0dXMgKyAnIHJldHJpZXZpbmcgJyArIHVybCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcS5zZW5kKCk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIEJhc2U2NC1lbmNvZGVkIHN0cmluZyBpbnRvIGl0cyBvcmlnaW5hbCByZXByZXNlbnRhdGlvbi5cbiAgICAgKiBVc2VkIGZvciBpbmxpbmUgc291cmNlbWFwcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiNjRzdHIgQmFzZS02NCBlbmNvZGVkIHN0cmluZ1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gX2F0b2IoYjY0c3RyKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuYXRvYikge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5hdG9iKGI2NHN0cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciB3aW5kb3cuYXRvYiBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcGFyc2VKc29uKHN0cmluZykge1xuICAgICAgICBpZiAodHlwZW9mIEpTT04gIT09ICd1bmRlZmluZWQnICYmIEpTT04ucGFyc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciBKU09OLnBhcnNlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlci8qLCBjb2x1bW5OdW1iZXIqLykge1xuICAgICAgICB2YXIgc3ludGF4ZXMgPSBbXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSBmdW5jdGlvbiAoe2FyZ3N9KSBUT0RPIGFyZ3MgY2FwdHVyZVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqZnVuY3Rpb25cXGIvLFxuICAgICAgICAgICAgLy8gZnVuY3Rpb24ge25hbWV9KHthcmdzfSkgbVsxXT1uYW1lIG1bMl09YXJnc1xuICAgICAgICAgICAgL2Z1bmN0aW9uXFxzKyhbXignXCJgXSo/KVxccypcXCgoW14pXSopXFwpLyxcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGV2YWwoKVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqKD86ZXZhbHxuZXcgRnVuY3Rpb24pXFxiLyxcbiAgICAgICAgICAgIC8vIGZuX25hbWUoKSB7XG4gICAgICAgICAgICAvXFxiKD8hKD86aWZ8Zm9yfHN3aXRjaHx3aGlsZXx3aXRofGNhdGNoKVxcYikoPzooPzpzdGF0aWMpXFxzKyk/KFxcUyspXFxzKlxcKC4qP1xcKVxccypcXHsvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gKCkgPT4ge1xuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqXFwoLio/XFwpXFxzKj0+L1xuICAgICAgICBdO1xuICAgICAgICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoJ1xcbicpO1xuXG4gICAgICAgIC8vIFdhbGsgYmFja3dhcmRzIGluIHRoZSBzb3VyY2UgbGluZXMgdW50aWwgd2UgZmluZCB0aGUgbGluZSB3aGljaCBtYXRjaGVzIG9uZSBvZiB0aGUgcGF0dGVybnMgYWJvdmVcbiAgICAgICAgdmFyIGNvZGUgPSAnJztcbiAgICAgICAgdmFyIG1heExpbmVzID0gTWF0aC5taW4obGluZU51bWJlciwgMjApO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heExpbmVzOyArK2kpIHtcbiAgICAgICAgICAgIC8vIGxpbmVObyBpcyAxLWJhc2VkLCBzb3VyY2VbXSBpcyAwLWJhc2VkXG4gICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVzW2xpbmVOdW1iZXIgLSBpIC0gMV07XG4gICAgICAgICAgICB2YXIgY29tbWVudFBvcyA9IGxpbmUuaW5kZXhPZignLy8nKTtcbiAgICAgICAgICAgIGlmIChjb21tZW50UG9zID49IDApIHtcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHIoMCwgY29tbWVudFBvcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgY29kZSA9IGxpbmUgKyBjb2RlO1xuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBzeW50YXhlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHN5bnRheGVzW2luZGV4XS5leGVjKGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5jcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNvbnN1bWUgc291cmNlIG1hcHMgaW4gb2xkZXIgYnJvd3NlcnMnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhY2tmcmFtZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIFN0YWNrRnJhbWUgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmZpbGVOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gZmlsZSBuYW1lIGlzIG5vdCBhIFN0cmluZycpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBsaW5lIG51bWJlciBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICUgMSAhPT0gMCB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBjb2x1bW4gbnVtYmVyIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kU291cmNlTWFwcGluZ1VSTChzb3VyY2UpIHtcbiAgICAgICAgdmFyIG0gPSAvXFwvXFwvWyNAXSA/c291cmNlTWFwcGluZ1VSTD0oW15cXHMnXCJdKylcXHMqJC9tLmV4ZWMoc291cmNlKTtcbiAgICAgICAgaWYgKG0gJiYgbVsxXSkge1xuICAgICAgICAgICAgcmV0dXJuIG1bMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NvdXJjZU1hcHBpbmdVUkwgbm90IGZvdW5kJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZXh0cmFjdExvY2F0aW9uSW5mb0Zyb21Tb3VyY2VNYXBTb3VyY2Uoc3RhY2tmcmFtZSwgc291cmNlTWFwQ29uc3VtZXIsIHNvdXJjZUNhY2hlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBsb2MgPSBzb3VyY2VNYXBDb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHtcbiAgICAgICAgICAgICAgICBsaW5lOiBzdGFja2ZyYW1lLmxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBzdGFja2ZyYW1lLmNvbHVtbk51bWJlclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChsb2Muc291cmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FjaGUgbWFwcGVkIHNvdXJjZXNcbiAgICAgICAgICAgICAgICB2YXIgbWFwcGVkU291cmNlID0gc291cmNlTWFwQ29uc3VtZXIuc291cmNlQ29udGVudEZvcihsb2Muc291cmNlKTtcbiAgICAgICAgICAgICAgICBpZiAobWFwcGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUNhY2hlW2xvYy5zb3VyY2VdID0gbWFwcGVkU291cmNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgIC8vIGdpdmVuIHN0YWNrZnJhbWUgYW5kIHNvdXJjZSBsb2NhdGlvbiwgdXBkYXRlIHN0YWNrZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBsb2MubmFtZSB8fCBzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHN0YWNrZnJhbWUuYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2Muc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvYy5jb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IG9yaWdpbmFsIHNvdXJjZSBmb3IgZ2l2ZW4gc3RhY2tmcmFtZSBhbmQgc291cmNlIG1hcCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgKiAgICAgIG9wdHMuc291cmNlQ2FjaGUgPSB7dXJsOiBcIlNvdXJjZSBTdHJpbmdcIn0gPT4gcHJlbG9hZCBzb3VyY2UgY2FjaGVcbiAgICAgKiAgICAgIG9wdHMuc291cmNlTWFwQ29uc3VtZXJDYWNoZSA9IHsvcGF0aC9maWxlLmpzLm1hcDogU291cmNlTWFwQ29uc3VtZXJ9XG4gICAgICogICAgICBvcHRzLm9mZmxpbmUgPSBUcnVlIHRvIHByZXZlbnQgbmV0d29yayByZXF1ZXN0cy5cbiAgICAgKiAgICAgICAgICAgICAgQmVzdCBlZmZvcnQgd2l0aG91dCBzb3VyY2VzIG9yIHNvdXJjZSBtYXBzLlxuICAgICAqICAgICAgb3B0cy5hamF4ID0gUHJvbWlzZSByZXR1cm5pbmcgZnVuY3Rpb24gdG8gbWFrZSBYLURvbWFpbiByZXF1ZXN0c1xuICAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBTdGFja1RyYWNlR1BTKG9wdHMpIHtcbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFN0YWNrVHJhY2VHUFMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrVHJhY2VHUFMob3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICAgICAgdGhpcy5zb3VyY2VDYWNoZSA9IG9wdHMuc291cmNlQ2FjaGUgfHwge307XG4gICAgICAgIHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZSA9IG9wdHMuc291cmNlTWFwQ29uc3VtZXJDYWNoZSB8fCB7fTtcblxuICAgICAgICB0aGlzLmFqYXggPSBvcHRzLmFqYXggfHwgX3hkcjtcblxuICAgICAgICB0aGlzLl9hdG9iID0gb3B0cy5hdG9iIHx8IF9hdG9iO1xuXG4gICAgICAgIHRoaXMuX2dldCA9IGZ1bmN0aW9uIF9nZXQobG9jYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNEYXRhVXJsID0gbG9jYXRpb24uc3Vic3RyKDAsIDUpID09PSAnZGF0YTonO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdHMub2ZmbGluZSAmJiAhaXNEYXRhVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0Nhbm5vdCBtYWtlIG5ldHdvcmsgcmVxdWVzdHMgaW4gb2ZmbGluZSBtb2RlJykpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0RhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRhdGEgVVJMcyBjYW4gaGF2ZSBwYXJhbWV0ZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIzOTdcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdXBwb3J0ZWRFbmNvZGluZ1JlZ2V4cCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgL15kYXRhOmFwcGxpY2F0aW9uXFwvanNvbjsoW1xcdz06XCItXSs7KSpiYXNlNjQsLztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGxvY2F0aW9uLm1hdGNoKHN1cHBvcnRlZEVuY29kaW5nUmVnZXhwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VNYXBTdGFydCA9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jb2RlZFNvdXJjZSA9IGxvY2F0aW9uLnN1YnN0cihzb3VyY2VNYXBTdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHRoaXMuX2F0b2IoZW5jb2RlZFNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0gPSBzb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdUaGUgZW5jb2Rpbmcgb2YgdGhlIGlubGluZSBzb3VyY2VtYXAgaXMgbm90IHN1cHBvcnRlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4aHJQcm9taXNlID0gdGhpcy5hamF4KGxvY2F0aW9uLCB7bWV0aG9kOiAnZ2V0J30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FjaGUgdGhlIFByb21pc2UgdG8gcHJldmVudCBkdXBsaWNhdGUgaW4tZmxpZ2h0IHJlcXVlc3RzXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSA9IHhoclByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJQcm9taXNlLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0aW5nIFNvdXJjZU1hcENvbnN1bWVycyBpcyBleHBlbnNpdmUsIHNvIHRoaXMgd3JhcHMgdGhlIGNyZWF0aW9uIG9mIGFcbiAgICAgICAgICogU291cmNlTWFwQ29uc3VtZXIgaW4gYSBwZXItaW5zdGFuY2UgY2FjaGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBzb3VyY2VNYXBwaW5nVVJMID0ge1N0cmluZ30gVVJMIHRvIGZldGNoIHNvdXJjZSBtYXAgZnJvbVxuICAgICAgICAgKiBAcGFyYW0gZGVmYXVsdFNvdXJjZVJvb3QgPSBEZWZhdWx0IHNvdXJjZSByb290IGZvciBzb3VyY2UgbWFwIGlmIHVuZGVmaW5lZFxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyBhIFNvdXJjZU1hcENvbnN1bWVyXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9nZXRTb3VyY2VNYXBDb25zdW1lciA9IGZ1bmN0aW9uIF9nZXRTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXBwaW5nVVJMLCBkZWZhdWx0U291cmNlUm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGVbc291cmNlTWFwcGluZ1VSTF0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGVbc291cmNlTWFwcGluZ1VSTF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VNYXBDb25zdW1lclByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXQoc291cmNlTWFwcGluZ1VSTCkudGhlbihmdW5jdGlvbihzb3VyY2VNYXBTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZU1hcFNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwU291cmNlID0gX3BhcnNlSnNvbihzb3VyY2VNYXBTb3VyY2UucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZU1hcFNvdXJjZS5zb3VyY2VSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBTb3VyY2Uuc291cmNlUm9vdCA9IGRlZmF1bHRTb3VyY2VSb290O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFNvdXJjZU1hcC5Tb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXBTb3VyY2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSA9IHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzb3VyY2VNYXBDb25zdW1lclByb21pc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgZW5oYW5jZSBmdW5jdGlvbiBuYW1lIGFuZCB1c2Ugc291cmNlIG1hcHMgZm9yIGFcbiAgICAgICAgICogYmV0dGVyIFN0YWNrRnJhbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZSBvYmplY3RcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB3aXRoIHNvdXJjZS1tYXBwZWQgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5waW5wb2ludCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMkJHBpbnBvaW50KHN0YWNrZnJhbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldE1hcHBlZExvY2F0aW9uKHN0YWNrZnJhbWUpLnRoZW4oZnVuY3Rpb24obWFwcGVkU3RhY2tGcmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobWFwcGVkU3RhY2tGcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRGdW5jdGlvbk5hbWUobWFwcGVkU3RhY2tGcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc29sdmUsIHJlc29sdmVNYXBwZWRTdGFja0ZyYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgWydjYXRjaCddKHJlc29sdmVNYXBwZWRTdGFja0ZyYW1lKTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHJlamVjdCk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIFN0YWNrRnJhbWUsIGd1ZXNzIGZ1bmN0aW9uIG5hbWUgZnJvbSBsb2NhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmluZEZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMkJGZpbmRGdW5jdGlvbk5hbWUoc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXQoc3RhY2tmcmFtZS5maWxlTmFtZSkudGhlbihmdW5jdGlvbiBnZXRTb3VyY2VDYWxsYmFjayhzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBzdGFja2ZyYW1lLmxpbmVOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSBzdGFja2ZyYW1lLmNvbHVtbk51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGd1ZXNzZWRGdW5jdGlvbk5hbWUgPSBfZmluZEZ1bmN0aW9uTmFtZShzb3VyY2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcmVwbGFjZSBmdW5jdGlvbk5hbWUgaWYgd2UgZm91bmQgc29tZXRoaW5nXG4gICAgICAgICAgICAgICAgICAgIGlmIChndWVzc2VkRnVuY3Rpb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGd1ZXNzZWRGdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogc3RhY2tmcmFtZS5hcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBzdGFja2ZyYW1lLmZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBjb2x1bW5OdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCByZWplY3QpWydjYXRjaCddKHJlamVjdCk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIFN0YWNrRnJhbWUsIHNlZWsgc291cmNlLW1hcHBlZCBsb2NhdGlvbiBhbmQgcmV0dXJuIG5ldyBlbmhhbmNlZCBTdGFja0ZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWVcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBlbmhhbmNlZCBTdGFja0ZyYW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5nZXRNYXBwZWRMb2NhdGlvbiA9IGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMkJGdldE1hcHBlZExvY2F0aW9uKHN0YWNrZnJhbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBfZW5zdXJlU3VwcG9ydGVkRW52aXJvbm1lbnQoKTtcbiAgICAgICAgICAgICAgICBfZW5zdXJlU3RhY2tGcmFtZUlzTGVnaXQoc3RhY2tmcmFtZSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlO1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IHN0YWNrZnJhbWUuZmlsZU5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0KGZpbGVOYW1lKS50aGVuKGZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwcGluZ1VSTCA9IF9maW5kU291cmNlTWFwcGluZ1VSTChzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNEYXRhVXJsID0gc291cmNlTWFwcGluZ1VSTC5zdWJzdHIoMCwgNSkgPT09ICdkYXRhOic7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0U291cmNlUm9vdCA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZS5sYXN0SW5kZXhPZignLycpICsgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZU1hcHBpbmdVUkxbMF0gIT09ICcvJyAmJiAhaXNEYXRhVXJsICYmICEoL15odHRwcz86XFwvXFwvfF5cXC9cXC8vaSkudGVzdChzb3VyY2VNYXBwaW5nVVJMKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwcGluZ1VSTCA9IGRlZmF1bHRTb3VyY2VSb290ICsgc291cmNlTWFwcGluZ1VSTDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXBwaW5nVVJMLCBkZWZhdWx0U291cmNlUm9vdCkudGhlbihmdW5jdGlvbihzb3VyY2VNYXBDb25zdW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9leHRyYWN0TG9jYXRpb25JbmZvRnJvbVNvdXJjZU1hcFNvdXJjZShzdGFja2ZyYW1lLCBzb3VyY2VNYXBDb25zdW1lciwgc291cmNlQ2FjaGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSlbJ2NhdGNoJ10oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbn0pKTtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrdHJhY2UnLCBbJ2Vycm9yLXN0YWNrLXBhcnNlcicsICdzdGFjay1nZW5lcmF0b3InLCAnc3RhY2t0cmFjZS1ncHMnXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ2Vycm9yLXN0YWNrLXBhcnNlcicpLCByZXF1aXJlKCdzdGFjay1nZW5lcmF0b3InKSwgcmVxdWlyZSgnc3RhY2t0cmFjZS1ncHMnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja1RyYWNlID0gZmFjdG9yeShyb290LkVycm9yU3RhY2tQYXJzZXIsIHJvb3QuU3RhY2tHZW5lcmF0b3IsIHJvb3QuU3RhY2tUcmFjZUdQUyk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiBTdGFja1RyYWNlKEVycm9yU3RhY2tQYXJzZXIsIFN0YWNrR2VuZXJhdG9yLCBTdGFja1RyYWNlR1BTKSB7XG4gICAgdmFyIF9vcHRpb25zID0ge1xuICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKHN0YWNrZnJhbWUpIHtcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgc3RhY2tmcmFtZXMgZm9yIHRoaXMgbGlicmFyeSBieSBkZWZhdWx0XG4gICAgICAgICAgICByZXR1cm4gKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ0Vycm9yU3RhY2tQYXJzZXIkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignU3RhY2tUcmFjZUdQUyQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja0dlbmVyYXRvciQkJykgPT09IC0xO1xuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VDYWNoZToge31cbiAgICB9O1xuXG4gICAgdmFyIF9nZW5lcmF0ZUVycm9yID0gZnVuY3Rpb24gU3RhY2tUcmFjZSQkR2VuZXJhdGVFcnJvcigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEVycm9yIG11c3QgYmUgdGhyb3duIHRvIGdldCBzdGFjayBpbiBJRVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGVycjtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBNZXJnZSAyIGdpdmVuIE9iamVjdHMuIElmIGEgY29uZmxpY3Qgb2NjdXJzIHRoZSBzZWNvbmQgb2JqZWN0IHdpbnMuXG4gICAgICogRG9lcyBub3QgZG8gZGVlcCBtZXJnZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZmlyc3QgYmFzZSBvYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc2Vjb25kIG92ZXJyaWRlc1xuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IG1lcmdlZCBmaXJzdCBhbmQgc2Vjb25kXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfbWVyZ2UoZmlyc3QsIHNlY29uZCkge1xuICAgICAgICB2YXIgdGFyZ2V0ID0ge307XG5cbiAgICAgICAgW2ZpcnN0LCBzZWNvbmRdLmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gb2JqW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSB7XG4gICAgICAgIHJldHVybiBlcnIuc3RhY2sgfHwgZXJyWydvcGVyYSNzb3VyY2Vsb2MnXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyZWQoc3RhY2tmcmFtZXMsIGZpbHRlcikge1xuICAgICAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHN0YWNrZnJhbWVzLmZpbHRlcihmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGFja2ZyYW1lcztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgYmFja3RyYWNlIGZyb20gaW52b2NhdGlvbiBwb2ludC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBvZiBTdGFja0ZyYW1lXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGdldChvcHRzKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gX2dlbmVyYXRlRXJyb3IoKTtcbiAgICAgICAgICAgIHJldHVybiBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpID8gdGhpcy5mcm9tRXJyb3IoZXJyLCBvcHRzKSA6IHRoaXMuZ2VuZXJhdGVBcnRpZmljaWFsbHkob3B0cyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIGJhY2t0cmFjZSBmcm9tIGludm9jYXRpb24gcG9pbnQuXG4gICAgICAgICAqIElNUE9SVEFOVDogRG9lcyBub3QgaGFuZGxlIHNvdXJjZSBtYXBzIG9yIGd1ZXNzIGZ1bmN0aW9uIG5hbWVzIVxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldFN5bmM6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGdldFN5bmMob3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgZXJyID0gX2dlbmVyYXRlRXJyb3IoKTtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikgPyBFcnJvclN0YWNrUGFyc2VyLnBhcnNlKGVycikgOiBTdGFja0dlbmVyYXRvci5iYWNrdHJhY2Uob3B0cyk7XG4gICAgICAgICAgICByZXR1cm4gX2ZpbHRlcmVkKHN0YWNrLCBvcHRzLmZpbHRlcik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGFuIGVycm9yIG9iamVjdCwgcGFyc2UgaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIG9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZm9yIEFycmF5W1N0YWNrRnJhbWV9XG4gICAgICAgICAqL1xuICAgICAgICBmcm9tRXJyb3I6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGZyb21FcnJvcihlcnJvciwgb3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgZ3BzID0gbmV3IFN0YWNrVHJhY2VHUFMob3B0cyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgIHZhciBzdGFja2ZyYW1lcyA9IF9maWx0ZXJlZChFcnJvclN0YWNrUGFyc2VyLnBhcnNlKGVycm9yKSwgb3B0cy5maWx0ZXIpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoUHJvbWlzZS5hbGwoc3RhY2tmcmFtZXMubWFwKGZ1bmN0aW9uKHNmKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlT3JpZ2luYWwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdwcy5waW5wb2ludChzZikudGhlbihyZXNvbHZlLCByZXNvbHZlT3JpZ2luYWwpWydjYXRjaCddKHJlc29sdmVPcmlnaW5hbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pKSk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVc2UgU3RhY2tHZW5lcmF0b3IgdG8gZ2VuZXJhdGUgYSBiYWNrdHJhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBvZiBBcnJheVtTdGFja0ZyYW1lXVxuICAgICAgICAgKi9cbiAgICAgICAgZ2VuZXJhdGVBcnRpZmljaWFsbHk6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGdlbmVyYXRlQXJ0aWZpY2lhbGx5KG9wdHMpIHtcbiAgICAgICAgICAgIG9wdHMgPSBfbWVyZ2UoX29wdGlvbnMsIG9wdHMpO1xuICAgICAgICAgICAgdmFyIHN0YWNrRnJhbWVzID0gU3RhY2tHZW5lcmF0b3IuYmFja3RyYWNlKG9wdHMpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRzLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHN0YWNrRnJhbWVzID0gc3RhY2tGcmFtZXMuZmlsdGVyKG9wdHMuZmlsdGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3RhY2tGcmFtZXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIGZ1bmN0aW9uLCB3cmFwIGl0IHN1Y2ggdGhhdCBpbnZvY2F0aW9ucyB0cmlnZ2VyIGEgY2FsbGJhY2sgdGhhdFxuICAgICAgICAgKiBpcyBjYWxsZWQgd2l0aCBhIHN0YWNrIHRyYWNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiB0byBiZSBpbnN0cnVtZW50ZWRcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGEgc3RhY2sgdHJhY2Ugb24gaW52b2NhdGlvblxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcnJiYWNrIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBlcnJvciBpZiB1bmFibGUgdG8gZ2V0IHN0YWNrIHRyYWNlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBvcHRpb25hbCBjb250ZXh0IG9iamVjdCAoZS5nLiB3aW5kb3cpXG4gICAgICAgICAqL1xuICAgICAgICBpbnN0cnVtZW50OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRpbnN0cnVtZW50KGZuLCBjYWxsYmFjaywgZXJyYmFjaywgdGhpc0FyZykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGluc3RydW1lbnQgbm9uLWZ1bmN0aW9uIG9iamVjdCcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZm4uX19zdGFja3RyYWNlT3JpZ2luYWxGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgaW5zdHJ1bWVudGVkLCByZXR1cm4gZ2l2ZW4gRnVuY3Rpb25cbiAgICAgICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBpbnN0cnVtZW50ZWQgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRpbnN0cnVtZW50ZWQoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXQoKS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrKVsnY2F0Y2gnXShlcnJiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcgfHwgdGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mcm9tRXJyb3IoZSkudGhlbihjYWxsYmFjaywgZXJyYmFjaylbJ2NhdGNoJ10oZXJyYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcyk7XG4gICAgICAgICAgICBpbnN0cnVtZW50ZWQuX19zdGFja3RyYWNlT3JpZ2luYWxGbiA9IGZuO1xuXG4gICAgICAgICAgICByZXR1cm4gaW5zdHJ1bWVudGVkO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIGZ1bmN0aW9uIHRoYXQgaGFzIGJlZW4gaW5zdHJ1bWVudGVkLFxuICAgICAgICAgKiByZXZlcnQgdGhlIGZ1bmN0aW9uIHRvIGl0J3Mgb3JpZ2luYWwgKG5vbi1pbnN0cnVtZW50ZWQpIHN0YXRlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiB0byBkZS1pbnN0cnVtZW50XG4gICAgICAgICAqL1xuICAgICAgICBkZWluc3RydW1lbnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGRlaW5zdHJ1bWVudChmbikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGRlLWluc3RydW1lbnQgbm9uLWZ1bmN0aW9uIG9iamVjdCcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZm4uX19zdGFja3RyYWNlT3JpZ2luYWxGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiBub3QgaW5zdHJ1bWVudGVkLCByZXR1cm4gb3JpZ2luYWxcbiAgICAgICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGFuIGVycm9yIG1lc3NhZ2UgYW5kIEFycmF5IG9mIFN0YWNrRnJhbWVzLCBzZXJpYWxpemUgYW5kIFBPU1QgdG8gZ2l2ZW4gVVJMLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBzdGFja2ZyYW1lc1xuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBlcnJvck1zZ1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVxdWVzdE9wdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIHJlcG9ydDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkcmVwb3J0KHN0YWNrZnJhbWVzLCB1cmwsIGVycm9yTXNnLCByZXF1ZXN0T3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gb25yZWFkeXN0YXRlY2hhbmdlKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzID49IDIwMCAmJiByZXEuc3RhdHVzIDwgNDAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignUE9TVCB0byAnICsgdXJsICsgJyBmYWlsZWQgd2l0aCBzdGF0dXM6ICcgKyByZXEuc3RhdHVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJlcS5vcGVuKCdwb3N0JywgdXJsKTtcblxuICAgICAgICAgICAgICAgIC8vIFNldCByZXF1ZXN0IGhlYWRlcnNcbiAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdE9wdGlvbnMgJiYgdHlwZW9mIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBoZWFkZXJzID0gcmVxdWVzdE9wdGlvbnMuaGVhZGVycztcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaGVhZGVyIGluIGhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXJzLmhhc093blByb3BlcnR5KGhlYWRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIsIGhlYWRlcnNbaGVhZGVyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVwb3J0UGF5bG9hZCA9IHtzdGFjazogc3RhY2tmcmFtZXN9O1xuICAgICAgICAgICAgICAgIGlmIChlcnJvck1zZyAhPT0gdW5kZWZpbmVkICYmIGVycm9yTXNnICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydFBheWxvYWQubWVzc2FnZSA9IGVycm9yTXNnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlcS5zZW5kKEpTT04uc3RyaW5naWZ5KHJlcG9ydFBheWxvYWQpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcbiJdfQ== diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index cc7628d..c871d4d 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.StackTrace=e()}}(function(){var e;return function n(e,t,r){function o(a,s){if(!t[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=t[a]={exports:{}};e[a][0].call(l.exports,function(n){var t=e[a][1][n];return o(t?t:n)},l,l.exports,n,e,t,r)}return t[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var t=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(t.pop()),i=t.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],n)},this)},parseFFOrSafari:function(r){var o=t(r.stack.split("\n"),function(e){return!e.match(a)},this);return n(o,function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===n.indexOf("@")&&-1===n.indexOf(":"))return new e(n);var t=n.split("@"),r=this.extractLocation(t.pop()),o=t.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)/i,r=n.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=n.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=t(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return n(i,function(n){var t,r=n.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(t=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===t||"[arguments not available]"===t?void 0:t.split(",");return new e(a,s,o[0],o[1],o[2],n)},this)}}})},{stackframe:11}],2:[function(e,n,t){function r(){this._array=[],this._set=Object.create(null)}var o=e("./util"),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=i.call(this._set,t),a=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=a)},r.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},t.decode=function(e,n,t){var r,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(n-1));r=!!(s&c),s&=u,f+=s<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},{}],5:[function(e,n,t){function r(e,n,o,i,a,s){var u=Math.floor((n-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?n-u>1?r(u,n,o,i,a,s):s==t.LEAST_UPPER_BOUND?n1?r(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,n,o,i){if(0===n.length)return-1;var a=r(-1,n.length,e,n,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],6:[function(e,n,t){function r(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,t,a){if(a>t){var s=o(t,a),u=t-1;r(e,s,a);for(var c=e[a],l=t;a>l;l++)n(e[l],c)<=0&&(u+=1,r(e,u,l));r(e,u+1,l);var f=u+1;i(e,n,t,f-1),i(e,n,f+1,a)}}t.quickSort=function(e,n){i(e,n,0,e.length-1)}},{}],7:[function(e,n,t){function r(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),r=s.getArg(n,"sources"),o=s.getArg(n,"names",[]),i=s.getArg(n,"sourceRoot",null),a=s.getArg(n,"sourcesContent",null),u=s.getArg(n,"mappings"),l=s.getArg(n,"file",null);if(t!=this._version)throw new Error("Unsupported version: "+t);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var t=s.getArg(n,"version"),o=s.getArg(n,"sections");if(t!=this._version)throw new Error("Unsupported version: "+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=s.getArg(e,"offset"),t=s.getArg(n,"line"),o=s.getArg(n,"column");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],C=[];v>_;)if(";"===e.charAt(_))c++,_++,p=0;else if(","===e.charAt(_))_++;else{for(t=new i,t.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(_,a),o=y[r])_+=r.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),C.push(t),"number"==typeof t.originalLine&&b.push(t)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[t]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||"/"==t.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(t,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),r?(r.path=n,i(r)):n}function s(e,n){""===e&&(e="."),""===n&&(n=".");var t=o(n),r=o(e);if(r&&(e=r.path||"/"),t&&!t.scheme)return r&&(t.scheme=r.scheme),i(t);if(t||n.match(_))return n;if(r&&!r.host&&!r.path)return r.host=n,i(r);var s="/"===n.charAt(0)?n:a(e.replace(/\/+$/,"")+"/"+n);return r?(r.path=s,i(r)):s}function u(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var t=0;0!==n.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return n;++t}return Array(t+1).join("../")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var t=n-10;t>=0;t--)if(36!==e.charCodeAt(t))return!1;return!0}function g(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function h(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=m(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:m(e.name,n.name)))))}t.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;t.urlParse=o,t.urlGenerate=i,t.normalize=a,t.join=s,t.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},t.relative=u;var y=function(){var e=Object.create(null);return!("__proto__"in e)}();t.toSetString=y?c:l,t.fromSetString=y?c:f,t.compareByOriginalPositions=g,t.compareByGeneratedPositionsDeflated=h,t.compareByGeneratedPositionsInflated=d},{}],9:[function(n,t,r){!function(n,o){"use strict";"function"==typeof e&&e.amd?e("stackframe",[],o):"object"==typeof r?t.exports=o():n.StackFrame=o()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||"{anonymous}",t="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return n+t+r+o+i}},n})},{}],10:[function(n,t,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof r?t.exports=i(n("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length=200&&r.status<300?n(r.responseText):t(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var t,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,t=o.exec(s),t&&t[1])return t[1];if(t=r.exec(s),t&&t[1])return t[1];if(t=i.exec(s),t&&t[1])return t[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var n=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error("sourceMappingURL not found")}function c(t,r,o,i,a){var s=new e.SourceMapConsumer(t),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o="data:"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(n,{method:"get"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)["catch"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var o=e.lineNumber,a=e.columnNumber,s=i(r,o,a);t(s?new n(s,e.args,e.fileName,o,a):e)},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(t){var i=e.lineNumber,a=e.columnNumber;"string"==typeof t&&(t=o(t.replace(/^\)\]\}'/,""))),"undefined"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,a,r))},t)["catch"](t)}.bind(this),t)["catch"](t)}.bind(this))})):new l(e)}})},{"source-map/lib/source-map-consumer":7,stackframe:11}],13:[function(n,t,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],i):"object"==typeof r?t.exports=i(n("error-stack-parser"),n("stack-generator"),n("stacktrace-gps")):o.StackTrace=i(o.ErrorStackParser,o.StackGenerator,o.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e["opera#sourceloc"]}function i(e,n){return"function"==typeof n?e.filter(n):e}var a={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}},s=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var n=s();return o(n)?this.fromError(n,e):this.generateArtificially(e)},getSync:function(t){t=r(a,t);var u=s(),c=o(u)?e.parse(u):n.backtrace(t);return i(c,t.filter)},fromError:function(n,o){o=r(a,o);var s=new t(o);return new Promise(function(t){var r=i(e.parse(n),o.filter);t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}s.pinpoint(e).then(n,t)["catch"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(a,e);var t=n.backtrace(e);return"function"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)["catch"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)["catch"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n,t){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+n+" failed with status: "+i.status)))},i.open("post",n),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==t&&(a.message=t),i.send(JSON.stringify(a))})}}})},{"error-stack-parser":1,"stack-generator":10,"stacktrace-gps":12}]},{},[13])(13)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.StackTrace=e()}}(function(){var e;return function n(e,r,t){function o(a,s){if(!r[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=r[a]={exports:{}};e[a][0].call(l.exports,function(n){var r=e[a][1][n];return o(r?r:n)},l,l.exports,n,e,r,t)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var r=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),t=this.extractLocation(r.pop()),o=r.join(" ")||void 0,i=["eval",""].indexOf(t[0])>-1?void 0:t[0];return new e({functionName:o,fileName:i,lineNumber:t[1],columnNumber:t[2],source:n})},this)},parseFFOrSafari:function(n){var r=n.stack.split("\n").filter(function(e){return!e.match(t)},this);return r.map(function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),n.indexOf("@")===-1&&n.indexOf(":")===-1)return new e({functionName:n});var r=n.split("@"),t=this.extractLocation(r.pop()),o=r.join("@")||void 0;return new e({functionName:o,fileName:t[0],lineNumber:t[1],columnNumber:t[2],source:n})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,t=n.message.split("\n"),o=[],i=2,a=t.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:n})},this)}}})},{stackframe:10}],2:[function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=e("./util"),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;o=0&&e>1;return n?-r:r}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(n|=c),r+=i.encode(n);while(o>0);return r},r.decode=function(e,n,r){var t,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(s&c),s&=u,f+=s<0?n-u>1?t(u,n,o,i,a,s):s==r.LEAST_UPPER_BOUND?n1?t(e,u,o,i,a,s):s==r.LEAST_UPPER_BOUND?u:e<0?-1:e}r.GREATEST_LOWER_BOUND=1,r.LEAST_UPPER_BOUND=2,r.search=function(e,n,o,i){if(0===n.length)return-1;var a=t(-1,n.length,e,n,o,i||r.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],6:[function(e,n,r){function t(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,r,a){if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},r.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=c.fromArray(e._names.toArray(),!0),t=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;p1&&(r.source=m+o[1],m+=o[1],r.originalLine=g+o[2],g=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),"number"==typeof r.originalLine&&b.push(r)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=s.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},r.BasicSourceMapConsumer=o,a.prototype=Object.create(t.prototype),a.prototype.constructor=t,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),t?(t.path=n,i(t)):n}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=o(n),t=o(e);if(t&&(e=t.path||"/"),r&&!r.scheme)return t&&(r.scheme=t.scheme),i(r);if(r||n.match(_))return n;if(t&&!t.host&&!t.path)return t.host=n,i(t);var s="/"===n.charAt(0)?n:a(e.replace(/\/+$/,"")+"/"+n);return t?(t.path=s,i(t)):s}function u(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function g(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=m(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:m(e.name,n.name)))))}r.getArg=t;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;r.urlParse=o,r.urlGenerate=i,r.normalize=a,r.join=s,r.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},r.relative=u;var y=function(){var e=Object.create(null);return!("__proto__"in e)}();r.toSetString=y?c:l,r.fromSetString=y?c:f,r.compareByOriginalPositions=g,r.compareByGeneratedPositionsDeflated=h,r.compareByGeneratedPositionsInflated=d},{}],9:[function(n,r,t){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof t?r.exports=i(n("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var r=[],t=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(t=n.maxStackSize);for(var o=arguments.callee;o&&r.length=200&&t.status<300||"file://"===e.substr(0,7)&&t.responseText?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],t=e.split("\n"),o="",i=Math.min(n,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=r.length,l=0;l=200&&a.status<400?o(a.responseText):i(new Error("POST to "+n+" failed with status: "+a.status)))},a.open("post",n),a.setRequestHeader("Content-Type","application/json"),t&&"object"==typeof t.headers){var s=t.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==r&&null!==r&&(c.message=r),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":9,"stacktrace-gps":11}]},{},[12])(12)}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 3adfdc2..55567b8 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["stacktrace.min.js"],"sourcesContent":["!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var n;n=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,n.StackTrace=e()}}(function(){var e;return function n(e,t,r){function o(a,s){if(!t[a]){if(!e[a]){var u=\"function\"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error(\"Cannot find module '\"+a+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var l=t[a]={exports:{}};e[a][0].call(l.exports,function(n){var t=e[a][1][n];return o(t?t:n)},l,l.exports,n,e,t,r)}return t[a].exports}for(var i=\"function\"==typeof require&&require,a=0;a-1&&(n=n.replace(/eval code/g,\"eval\").replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g,\"\"));var t=n.replace(/^\\s+/,\"\").replace(/\\(eval code/g,\"(\").split(/\\s+/).slice(1),o=this.extractLocation(t.pop()),i=t.join(\" \")||void 0,a=r([\"eval\",\"\"],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],n)},this)},parseFFOrSafari:function(r){var o=t(r.stack.split(\"\\n\"),function(e){return!e.match(a)},this);return n(o,function(n){if(n.indexOf(\" > eval\")>-1&&(n=n.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g,\":$1\")),-1===n.indexOf(\"@\")&&-1===n.indexOf(\":\"))return new e(n);var t=n.split(\"@\"),r=this.extractLocation(t.pop()),o=t.join(\"@\")||void 0;return new e(o,void 0,r[0],r[1],r[2],n)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf(\"\\n\")>-1&&e.message.split(\"\\n\").length>e.stacktrace.split(\"\\n\").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var t=/Line (\\d+).*script (?:in )?(\\S+)/i,r=n.message.split(\"\\n\"),o=[],i=2,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(n){for(var t=/Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i,r=n.stacktrace.split(\"\\n\"),o=[],i=0,a=r.length;a>i;i+=2){var s=t.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=t(r.stack.split(\"\\n\"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return n(i,function(n){var t,r=n.split(\"@\"),o=this.extractLocation(r.pop()),i=r.shift()||\"\",a=i.replace(//,\"$2\").replace(/\\([^\\)]*\\)/g,\"\")||void 0;i.match(/\\(([^\\)]*)\\)/)&&(t=i.replace(/^[^\\(]+\\(([^\\)]*)\\)$/,\"$1\"));var s=void 0===t||\"[arguments not available]\"===t?void 0:t.split(\",\");return new e(a,s,o[0],o[1],o[2],n)},this)}}})},{stackframe:11}],2:[function(e,n,t){function r(){this._array=[],this._set=Object.create(null)}var o=e(\"./util\"),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,n){for(var t=new r,o=0,i=e.length;i>o;o++)t.add(e[o],n);return t},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,n){var t=o.toSetString(e),r=i.call(this._set,t),a=this._array.length;(!r||n)&&this._array.push(e),r||(this._set[t]=a)},r.prototype.has=function(e){var n=o.toSetString(e);return i.call(this._set,n)},r.prototype.indexOf=function(e){var n=o.toSetString(e);if(i.call(this._set,n))return this._set[n];throw new Error('\"'+e+'\" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),t=e>>1;return n?-t:t}var i=e(\"./base64\"),a=5,s=1<>>=a,o>0&&(n|=c),t+=i.encode(n);while(o>0);return t},t.decode=function(e,n,t){var r,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(s=i.decode(e.charCodeAt(n++)),-1===s)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));r=!!(s&c),s&=u,f+=s<=0&&e=n&&t>=e?e-n:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},{}],5:[function(e,n,t){function r(e,n,o,i,a,s){var u=Math.floor((n-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?n-u>1?r(u,n,o,i,a,s):s==t.LEAST_UPPER_BOUND?n1?r(e,u,o,i,a,s):s==t.LEAST_UPPER_BOUND?u:0>e?-1:e}t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.search=function(e,n,o,i){if(0===n.length)return-1;var a=r(-1,n.length,e,n,o,i||t.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],6:[function(e,n,t){function r(e,n,t){var r=e[n];e[n]=e[t],e[t]=r}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,t,a){if(a>t){var s=o(t,a),u=t-1;r(e,s,a);for(var c=e[a],l=t;a>l;l++)n(e[l],c)<=0&&(u+=1,r(e,u,l));r(e,u+1,l);var f=u+1;i(e,n,t,f-1),i(e,n,f+1,a)}}t.quickSort=function(e,n){i(e,n,0,e.length-1)}},{}],7:[function(e,n,t){function r(e){var n=e;return\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=n.sections?new a(n):new o(n)}function o(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var t=s.getArg(n,\"version\"),r=s.getArg(n,\"sources\"),o=s.getArg(n,\"names\",[]),i=s.getArg(n,\"sourceRoot\",null),a=s.getArg(n,\"sourcesContent\",null),u=s.getArg(n,\"mappings\"),l=s.getArg(n,\"file\",null);if(t!=this._version)throw new Error(\"Unsupported version: \"+t);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var n=e;\"string\"==typeof e&&(n=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var t=s.getArg(n,\"version\"),o=s.getArg(n,\"sections\");if(t!=this._version)throw new Error(\"Unsupported version: \"+t);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var n=s.getArg(e,\"offset\"),t=s.getArg(n,\"line\"),o=s.getArg(n,\"column\");if(t=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)r.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return r},t.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var n=Object.create(o.prototype),t=n._names=c.fromArray(e._names.toArray(),!0),r=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;g>p;p++){var h=a[p],m=new i;m.generatedLine=h.generatedLine,m.generatedColumn=h.generatedColumn,h.source&&(m.source=r.indexOf(h.source),m.originalLine=h.originalLine,m.originalColumn=h.originalColumn,h.name&&(m.name=t.indexOf(h.name)),l.push(m)),u.push(m)}return f(n.__originalMappings,s.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,n){for(var t,r,o,a,u,c=1,p=0,g=0,h=0,m=0,d=0,v=e.length,_=0,y={},w={},b=[],C=[];v>_;)if(\";\"===e.charAt(_))c++,_++,p=0;else if(\",\"===e.charAt(_))_++;else{for(t=new i,t.generatedLine=c,a=_;v>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(_,a),o=y[r])_+=r.length;else{for(o=[];a>_;)l.decode(e,_,w),u=w.value,_=w.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");y[r]=o}t.generatedColumn=p+o[0],p=t.generatedColumn,o.length>1&&(t.source=m+o[1],m+=o[1],t.originalLine=g+o[2],g=t.originalLine,t.originalLine+=1,t.originalColumn=h+o[3],h=t.originalColumn,o.length>4&&(t.name=d+o[4],d+=o[4])),C.push(t),\"number\"==typeof t.originalLine&&b.push(t)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,t,r,o,i){if(e[t]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[t]);if(e[r]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[r]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[t];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,\"name\",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,\"originalLine\",null),column:s.getArg(o,\"originalColumn\",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var t;if(null!=this.sourceRoot&&(t=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\\/\\//,\"\");if(\"file\"==t.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!t.path||\"/\"==t.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var t={source:n,originalLine:s.getArg(e,\"line\"),originalColumn:s.getArg(e,\"column\")},o=this._findMapping(t,this._originalMappings,\"originalLine\",\"originalColumn\",s.compareByOriginalPositions,s.getArg(e,\"bias\",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===t.source)return{line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},t.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],\".\"===a?u.splice(l,1):\"..\"===a?c++:c>0&&(\"\"===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join(\"/\"),\"\"===n&&(n=s?\"/\":\".\"),r?(r.path=n,i(r)):n}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var t=o(n),r=o(e);if(r&&(e=r.path||\"/\"),t&&!t.scheme)return r&&(t.scheme=r.scheme),i(t);if(t||n.match(_))return n;if(r&&!r.host&&!r.path)return r.host=n,i(r);var s=\"/\"===n.charAt(0)?n:a(e.replace(/\\/+$/,\"\")+\"/\"+n);return r?(r.path=s,i(r)):s}function u(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var t=0;0!==n.indexOf(e+\"/\");){var r=e.lastIndexOf(\"/\");if(0>r)return n;if(e=e.slice(0,r),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++t}return Array(t+1).join(\"../\")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?\"$\"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(9>n)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var t=n-10;t>=0;t--)if(36!==e.charCodeAt(t))return!1;return!0}function g(e,n,t){var r=e.source-n.source;return 0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r||t?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=e.generatedLine-n.generatedLine,0!==r?r:e.name-n.name))))}function h(e,n,t){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r||t?r:(r=e.source-n.source,0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=m(e.source,n.source),0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:m(e.name,n.name)))))}t.getArg=r;var v=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;t.urlParse=o,t.urlGenerate=i,t.normalize=a,t.join=s,t.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(v)},t.relative=u;var y=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();t.toSetString=y?c:l,t.fromSetString=y?c:f,t.compareByOriginalPositions=g,t.compareByGeneratedPositionsDeflated=h,t.compareByGeneratedPositionsInflated=d},{}],9:[function(n,t,r){!function(n,o){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stackframe\",[],o):\"object\"==typeof r?t.exports=o():n.StackFrame=o()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e,n,t,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==n&&this.setArgs(n),void 0!==t&&this.setFileName(t),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return n.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(n){if(!e(n))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(n)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(n){if(!e(n))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(n)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var n=this.getFunctionName()||\"{anonymous}\",t=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",r=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return n+t+r+o+i}},n})},{}],10:[function(n,t,r){!function(o,i){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stack-generator\",[\"stackframe\"],i):\"object\"==typeof r?t.exports=i(n(\"stackframe\")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var t=[],r=10;\"object\"==typeof n&&\"number\"==typeof n.maxStackSize&&(r=n.maxStackSize);for(var o=arguments.callee;o&&t.length=200&&r.status<300?n(r.responseText):t(new Error(\"HTTP status: \"+r.status+\" retrieving \"+e)))},r.send()})}function r(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var t,r=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,a=e.split(\"\\n\"),s=\"\",u=Math.min(n,20),c=0;u>c;++c){var l=a[n-c-1],f=l.indexOf(\"//\");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,t=o.exec(s),t&&t[1])return t[1];if(t=r.exec(s),t&&t[1])return t[1];if(t=i.exec(s),t&&t[1])return t[1]}}}function a(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function s(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var n=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(n&&n[1])return n[1];throw new Error(\"sourceMappingURL not found\")}function c(t,r,o,i,a){var s=new e.SourceMapConsumer(t),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new n(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||t,this._atob=e.atob||r,this._get=function(n){return new Promise(function(t,r){var o=\"data:\"===n.substr(0,5);if(this.sourceCache[n])t(this.sourceCache[n]);else if(e.offline&&!o)r(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,a=n.match(i);if(a){var s=a[0].length,u=n.substr(s),c=this._atob(u);this.sourceCache[n]=c,t(c)}else r(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var l=this.ajax(n,{method:\"get\"});this.sourceCache[n]=l,l.then(t,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(n,t){this.getMappedLocation(e).then(function(e){function t(){n(e)}this.findFunctionName(e).then(n,t)[\"catch\"](t)}.bind(this),t)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(t,r){s(e),this._get(e.fileName).then(function(r){var o=e.lineNumber,a=e.columnNumber,s=i(r,o,a);t(s?new n(s,e.args,e.fileName,o,a):e)},r)[\"catch\"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(n,t){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l=\"data:\"===s.substr(0,5),f=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===s[0]||l||/^https?:\\/\\/|^\\/\\//i.test(s)||(s=f+s),this._get(s).then(function(t){var i=e.lineNumber,a=e.columnNumber;\"string\"==typeof t&&(t=o(t.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof t.sourceRoot&&(t.sourceRoot=f),n(c(t,e.args,i,a,r))},t)[\"catch\"](t)}.bind(this),t)[\"catch\"](t)}.bind(this))})):new l(e)}})},{\"source-map/lib/source-map-consumer\":7,stackframe:11}],13:[function(n,t,r){!function(o,i){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stacktrace\",[\"error-stack-parser\",\"stack-generator\",\"stacktrace-gps\"],i):\"object\"==typeof r?t.exports=i(n(\"error-stack-parser\"),n(\"stack-generator\"),n(\"stacktrace-gps\")):o.StackTrace=i(o.ErrorStackParser,o.StackGenerator,o.StackTraceGPS)}(this,function(e,n,t){function r(e,n){var t={};return[e,n].forEach(function(e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}),t}function o(e){return e.stack||e[\"opera#sourceloc\"]}function i(e,n){return\"function\"==typeof n?e.filter(n):e}var a={filter:function(e){return-1===(e.functionName||\"\").indexOf(\"StackTrace$$\")&&-1===(e.functionName||\"\").indexOf(\"ErrorStackParser$$\")&&-1===(e.functionName||\"\").indexOf(\"StackTraceGPS$$\")&&-1===(e.functionName||\"\").indexOf(\"StackGenerator$$\")},sourceCache:{}},s=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var n=s();return o(n)?this.fromError(n,e):this.generateArtificially(e)},getSync:function(t){t=r(a,t);var u=s(),c=o(u)?e.parse(u):n.backtrace(t);return i(c,t.filter)},fromError:function(n,o){o=r(a,o);var s=new t(o);return new Promise(function(t){var r=i(e.parse(n),o.filter);t(Promise.all(r.map(function(e){return new Promise(function(n){function t(){n(e)}s.pinpoint(e).then(n,t)[\"catch\"](t)})})))}.bind(this))},generateArtificially:function(e){e=r(a,e);var t=n.backtrace(e);return\"function\"==typeof e.filter&&(t=t.filter(e.filter)),Promise.resolve(t)},instrument:function(e,n,t,r){if(\"function\"!=typeof e)throw new Error(\"Cannot instrument non-function object\");if(\"function\"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(n,t)[\"catch\"](t),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(n,t)[\"catch\"](t),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if(\"function\"!=typeof e)throw new Error(\"Cannot de-instrument non-function object\");return\"function\"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,n,t){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error(\"POST to \"+n+\" failed with status: \"+i.status)))},i.open(\"post\",n),i.setRequestHeader(\"Content-Type\",\"application/json\");var a={stack:e};void 0!==t&&(a.message=t),i.send(JSON.stringify(a))})}}})},{\"error-stack-parser\":1,\"stack-generator\":10,\"stacktrace-gps\":12}]},{},[13])(13)});"],"file":"stacktrace.min.js","sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"names":[],"mappings":"","sources":["stacktrace.min.js"],"sourcesContent":["!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var n;n=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,n.StackTrace=e()}}(function(){var e;return function n(e,r,t){function o(a,s){if(!r[a]){if(!e[a]){var u=\"function\"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error(\"Cannot find module '\"+a+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var l=r[a]={exports:{}};e[a][0].call(l.exports,function(n){var r=e[a][1][n];return o(r?r:n)},l,l.exports,n,e,r,t)}return r[a].exports}for(var i=\"function\"==typeof require&&require,a=0;a-1&&(n=n.replace(/eval code/g,\"eval\").replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g,\"\"));var r=n.replace(/^\\s+/,\"\").replace(/\\(eval code/g,\"(\").split(/\\s+/).slice(1),t=this.extractLocation(r.pop()),o=r.join(\" \")||void 0,i=[\"eval\",\"\"].indexOf(t[0])>-1?void 0:t[0];return new e({functionName:o,fileName:i,lineNumber:t[1],columnNumber:t[2],source:n})},this)},parseFFOrSafari:function(n){var r=n.stack.split(\"\\n\").filter(function(e){return!e.match(t)},this);return r.map(function(n){if(n.indexOf(\" > eval\")>-1&&(n=n.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g,\":$1\")),n.indexOf(\"@\")===-1&&n.indexOf(\":\")===-1)return new e({functionName:n});var r=n.split(\"@\"),t=this.extractLocation(r.pop()),o=r.join(\"@\")||void 0;return new e({functionName:o,fileName:t[0],lineNumber:t[1],columnNumber:t[2],source:n})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf(\"\\n\")>-1&&e.message.split(\"\\n\").length>e.stacktrace.split(\"\\n\").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var r=/Line (\\d+).*script (?:in )?(\\S+)/i,t=n.message.split(\"\\n\"),o=[],i=2,a=t.length;i/,\"$2\").replace(/\\([^\\)]*\\)/g,\"\")||void 0;i.match(/\\(([^\\)]*)\\)/)&&(r=i.replace(/^[^\\(]+\\(([^\\)]*)\\)$/,\"$1\"));var s=void 0===r||\"[arguments not available]\"===r?void 0:r.split(\",\");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:n})},this)}}})},{stackframe:10}],2:[function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=e(\"./util\"),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;o=0&&e>1;return n?-r:r}var i=e(\"./base64\"),a=5,s=1<>>=a,o>0&&(n|=c),r+=i.encode(n);while(o>0);return r},r.decode=function(e,n,r){var t,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(s=i.decode(e.charCodeAt(n++)),s===-1)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(s&c),s&=u,f+=s<0?n-u>1?t(u,n,o,i,a,s):s==r.LEAST_UPPER_BOUND?n1?t(e,u,o,i,a,s):s==r.LEAST_UPPER_BOUND?u:e<0?-1:e}r.GREATEST_LOWER_BOUND=1,r.LEAST_UPPER_BOUND=2,r.search=function(e,n,o,i){if(0===n.length)return-1;var a=t(-1,n.length,e,n,o,i||r.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],6:[function(e,n,r){function t(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,r,a){if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)t.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)t.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},r.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=c.fromArray(e._names.toArray(),!0),t=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;p1&&(r.source=m+o[1],m+=o[1],r.originalLine=g+o[2],g=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&b.push(r)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,\"name\",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,\"originalLine\",null),column:s.getArg(o,\"originalColumn\",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=s.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:s.getArg(e,\"line\"),originalColumn:s.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",s.compareByOriginalPositions,s.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},r.BasicSourceMapConsumer=o,a.prototype=Object.create(t.prototype),a.prototype.constructor=t,a.prototype._version=3,Object.defineProperty(a.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],\".\"===a?u.splice(l,1):\"..\"===a?c++:c>0&&(\"\"===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join(\"/\"),\"\"===n&&(n=s?\"/\":\".\"),t?(t.path=n,i(t)):n}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=o(n),t=o(e);if(t&&(e=t.path||\"/\"),r&&!r.scheme)return t&&(r.scheme=t.scheme),i(r);if(r||n.match(_))return n;if(t&&!t.host&&!t.path)return t.host=n,i(t);var s=\"/\"===n.charAt(0)?n:a(e.replace(/\\/+$/,\"\")+\"/\"+n);return t?(t.path=s,i(t)):s}function u(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?\"$\"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function g(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=m(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:m(e.name,n.name)))))}r.getArg=t;var v=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;r.urlParse=o,r.urlGenerate=i,r.normalize=a,r.join=s,r.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(v)},r.relative=u;var y=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();r.toSetString=y?c:l,r.fromSetString=y?c:f,r.compareByOriginalPositions=g,r.compareByGeneratedPositionsDeflated=h,r.compareByGeneratedPositionsInflated=d},{}],9:[function(n,r,t){!function(o,i){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stack-generator\",[\"stackframe\"],i):\"object\"==typeof t?r.exports=i(n(\"stackframe\")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var r=[],t=10;\"object\"==typeof n&&\"number\"==typeof n.maxStackSize&&(t=n.maxStackSize);for(var o=arguments.callee;o&&r.length=200&&t.status<300||\"file://\"===e.substr(0,7)&&t.responseText?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r=[/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,/function\\s+([^('\"`]*?)\\s*\\(([^)]*)\\)/,/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,/\\b(?!(?:if|for|switch|while|with|catch)\\b)(?:(?:static)\\s+)?(\\S+)\\s*\\(.*?\\)\\s*\\{/,/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*\\(.*?\\)\\s*=>/],t=e.split(\"\\n\"),o=\"\",i=Math.min(n,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=r.length,l=0;l=200&&i.status<400?t(i.responseText):o(new Error(\"POST to \"+n+\" failed with status: \"+i.status)))},i.open(\"post\",n),i.setRequestHeader(\"Content-Type\",\"application/json\");var a={stack:e};void 0!==r&&(a.message=r),i.send(JSON.stringify(a))})}}})},{\"error-stack-parser\":1,\"stack-generator\":9,\"stacktrace-gps\":11}]},{},[12])(12)});"],"file":"stacktrace.min.js"} \ No newline at end of file From 0512889468c7ffd21a444ae3b2a3a2346429f6e3 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 9 Apr 2017 13:19:10 -0700 Subject: [PATCH 075/110] Update badges in README --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e4b65df..2982d64 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,13 @@ # stacktrace.js Generate, parse and enhance JavaScript stack traces in all browsers -[![Build Status](https://travis-ci.org/stacktracejs/stacktrace.js.svg?branch=master)](https://travis-ci.org/stacktracejs/stacktrace.js) [![Coverage Status](https://img.shields.io/coveralls/stacktracejs/stacktrace.js.svg)](https://coveralls.io/r/stacktracejs/stacktrace.js?branch=master) [![GitHub license](https://img.shields.io/github/license/stacktracejs/stacktrace.js.svg)](http://unlicense.org) +[![Build Status](https://img.shields.io/travis/stacktracejs/stacktrace.js/master.svg?style=flat-square)](https://travis-ci.org/stacktracejs/stacktrace.js) +[![Coverage Status](https://img.shields.io/coveralls/stacktracejs/stacktrace.js.svg?style=flat-square)](https://coveralls.io/r/stacktracejs/stacktrace.js?branch=master) +[![GitHub license](https://img.shields.io/github/license/stacktracejs/stacktrace.js.svg?style=flat-square)](http://unlicense.org) +[![CDNJS](https://img.shields.io/cdnjs/v/stacktrace.js.svg?style=flat-square)](https://cdnjs.com/libraries/stacktrace.js) +[![size with dependencies](https://img.shields.io/badge/size-30k-green.svg?style=flat-square)](https://github.com/stacktracejs/stacktrace.js/releases) +[![gzip size](https://img.shields.io/badge/gzipped-9.1k-green.svg?style=flat-square)](https://github.com/stacktracejs/stacktrace.js/releases) +[![module format](https://img.shields.io/badge/module%20format-umd-lightgrey.svg?style=flat-square&color=ff69b4)](https://github.com/stacktracejs/stacktrace.js/releases) Debug and profile your JavaScript with a [stack trace](http://en.wikipedia.org/wiki/Stack_trace) of function calls leading to an error (or any condition you specify). From 1702ea8b95b3c4d6ae1083a90aea4941ee55054a Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 9 Apr 2017 13:23:52 -0700 Subject: [PATCH 076/110] Minor badge improvements --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2982d64..bd64b35 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,9 @@ Generate, parse and enhance JavaScript stack traces in all browsers [![Coverage Status](https://img.shields.io/coveralls/stacktracejs/stacktrace.js.svg?style=flat-square)](https://coveralls.io/r/stacktracejs/stacktrace.js?branch=master) [![GitHub license](https://img.shields.io/github/license/stacktracejs/stacktrace.js.svg?style=flat-square)](http://unlicense.org) [![CDNJS](https://img.shields.io/cdnjs/v/stacktrace.js.svg?style=flat-square)](https://cdnjs.com/libraries/stacktrace.js) -[![size with dependencies](https://img.shields.io/badge/size-30k-green.svg?style=flat-square)](https://github.com/stacktracejs/stacktrace.js/releases) +[![size with dependencies](https://img.shields.io/badge/size-29.9k-green.svg?style=flat-square)](https://github.com/stacktracejs/stacktrace.js/releases) [![gzip size](https://img.shields.io/badge/gzipped-9.1k-green.svg?style=flat-square)](https://github.com/stacktracejs/stacktrace.js/releases) -[![module format](https://img.shields.io/badge/module%20format-umd-lightgrey.svg?style=flat-square&color=ff69b4)](https://github.com/stacktracejs/stacktrace.js/releases) +[![module format](https://img.shields.io/badge/module%20format-umd-lightgrey.svg?style=flat-square&colorB=ff69b4)](https://github.com/stacktracejs/stacktrace.js/releases) Debug and profile your JavaScript with a [stack trace](http://en.wikipedia.org/wiki/Stack_trace) of function calls leading to an error (or any condition you specify). From 57353db492ead79442ee31ab4322f9a3975558bb Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Mon, 17 Apr 2017 07:00:35 -0700 Subject: [PATCH 077/110] Fix JSCS errors in polyfills.js --- polyfills.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/polyfills.js b/polyfills.js index eb8a9d4..1f10dac 100644 --- a/polyfills.js +++ b/polyfills.js @@ -13,16 +13,16 @@ if (typeof Promise === 'undefined') { // ES5 Polyfills // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind if (!Function.prototype.bind) { - Function.prototype.bind = function (oThis) { + Function.prototype.bind = function(oThis) { if (typeof this !== 'function') { throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable'); } var aArgs = Array.prototype.slice.call(arguments, 1); var fToBind = this; - var NoOp = function () { + var NoOp = function() { }; - var fBound = function () { + var fBound = function() { return fToBind.apply(this instanceof NoOp && oThis ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments))); }; @@ -34,7 +34,6 @@ if (!Function.prototype.bind) { }; } - // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map if (!Array.prototype.map) { Array.prototype.map = function(callback, thisArg) { @@ -55,7 +54,8 @@ if (!Array.prototype.map) { var k = 0; while (k < len) { - var kValue, mappedValue; + var kValue; + var mappedValue; if (k in O) { kValue = O[k]; mappedValue = callback.call(T, kValue, k, O); @@ -99,7 +99,8 @@ if (!Array.prototype.filter) { // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach if (!Array.prototype.forEach) { Array.prototype.forEach = function(callback, thisArg) { - var T, k; + var T; + var k; if (this === null || this === undefined) { throw new TypeError(' this is null or not defined'); } From a9e4d53d7f3388f8f7e6d1ddae048293bf5afab3 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 15 Apr 2017 10:26:55 -0700 Subject: [PATCH 078/110] Change LICENSE to MIT The reason I originally selected the Unlicense when this project began was to maximize use of the library. However, since then I've come to learn that such a license actually prevents use and contribution by some organizations because Unlicense is not an OSI approved license and is a little risky legally. See https://github.com/stacktracejs/stacktrace.js/issues/18 --- LICENSE | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/LICENSE b/LICENSE index cf1ab25..5c09f1a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,24 +1,19 @@ -This is free and unencumbered software released into the public domain. +Copyright (c) 2017 Eric Wendelin and other contributors -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From e52af1724ebeeed0953d6eba307e68390bc9ed49 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 29 Apr 2017 17:29:35 -0700 Subject: [PATCH 079/110] Add TypeScript definitions --- stacktrace-js.d.ts | 134 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 stacktrace-js.d.ts diff --git a/stacktrace-js.d.ts b/stacktrace-js.d.ts new file mode 100644 index 0000000..6c7ef93 --- /dev/null +++ b/stacktrace-js.d.ts @@ -0,0 +1,134 @@ +// Type definitions for stacktrace.js v2.0.0 +// Project: https://github.com/stacktracejs/stacktrace.js +// Definitions by: Eric Wendelin +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare namespace StackTrace { + + export interface SourceCache { + [key: string]: string | Promise; + } + + export interface StackTraceOptions { + filter?: (stackFrame: StackFrame) => boolean; + sourceCache?: SourceCache; + offline?: boolean; + } + + export interface StackFrame { + constructor(object: StackFrame): StackFrame; + + isConstructor?: boolean; + getIsConstructor(): boolean; + setIsConstructor(): void; + + isEval?: boolean; + getIsEval(): boolean; + setIsEval(): void; + + isNative?: boolean; + getIsNative(): boolean; + setIsNative(): void; + + isTopLevel?: boolean; + getIsTopLevel(): boolean; + setIsTopLevel(): void; + + columnNumber?: number; + getColumnNumber(): number; + setColumnNumber(): void; + + lineNumber?: number; + getLineNumber(): number; + setLineNumber(): void; + + fileName?: string; + getFileName(): string; + setFileName(): void; + + functionName?: string; + getFunctionName(): string; + setFunctionName(): void; + + source?: string; + getSource(): string; + setSource(): void; + + args?: any[]; + getArgs(): any[]; + setArgs(): void; + + evalOrigin?: StackFrame; + getEvalOrigin(): StackFrame; + setEvalOrigin(): void; + + toString(): string; + } + + /** + * Get a backtrace from invocation point. + * + * @param options Options Object + * @return Array[StackFrame] + */ + export function get(options?: StackTraceOptions): Promise; + + /** + * Get a backtrace from invocation point, synchronously. Does not + * attempt to map sources. + * + * @param options Options Object + * @return Array[StackFrame] + */ + export function getSync(options?: StackTraceOptions): StackFrame[]; + + /** + * Given an error object, parse it. + * + * @param error Error object + * @param options Object for options + * @return Array[StackFrame] + */ + export function fromError(error: Error, options?: StackTraceOptions): Promise; + + /** + * Use StackGenerator to generate a backtrace. + * @param options Object options + * @returns Array[StackFrame] + */ + export function generateArtificially(options?: StackTraceOptions): Promise; + + /** + * Given a function, wrap it such that invocations trigger a callback that + * is called with a stack trace. + * + * @param {Function} fn to be instrumented + * @param {Function} callback function to call with a stack trace on invocation + * @param {Function} errback optional function to call with error if unable to get stack trace. + * @param {Object} thisArg optional context object (e.g. window) + */ + export function instrument(fn: TFunc, callback: (stackFrames: StackFrame[]) => void, errback?: (error: Error) => void, thisArg?: any): TFunc; + + /** + * Given a function that has been instrumented, + * revert the function to it's original (non-instrumented) state. + * + * @param fn {Function} + */ + export function deinstrument(fn: TFunc): TFunc; + + /** + * Given an Array of StackFrames, serialize and POST to given URL. + * + * @param stackframes - Array[StackFrame] + * @param url - URL as String + * @param errorMsg - Error message as String + * @param requestOptions - Object with headers information + * @return Promise + */ + export function report(stackframes: StackFrame[], url: string, errorMsg?: string, requestOptions?: object): Promise; +} + +declare module "stacktrace-js" { + export = StackTrace; +} From c76dd7bb985f1f19d3f306fdfa2f54b8dbdb495a Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 29 Apr 2017 19:59:59 -0700 Subject: [PATCH 080/110] Update license to MIT in docs and package json --- README.md | 2 +- bower.json | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bd64b35..a62b9db 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Generate, parse and enhance JavaScript stack traces in all browsers [![Build Status](https://img.shields.io/travis/stacktracejs/stacktrace.js/master.svg?style=flat-square)](https://travis-ci.org/stacktracejs/stacktrace.js) [![Coverage Status](https://img.shields.io/coveralls/stacktracejs/stacktrace.js.svg?style=flat-square)](https://coveralls.io/r/stacktracejs/stacktrace.js?branch=master) -[![GitHub license](https://img.shields.io/github/license/stacktracejs/stacktrace.js.svg?style=flat-square)](http://unlicense.org) +[![GitHub license](https://img.shields.io/github/license/stacktracejs/stacktrace.js.svg?style=flat-square)](https://opensource.org/licenses/MIT) [![CDNJS](https://img.shields.io/cdnjs/v/stacktrace.js.svg?style=flat-square)](https://cdnjs.com/libraries/stacktrace.js) [![size with dependencies](https://img.shields.io/badge/size-29.9k-green.svg?style=flat-square)](https://github.com/stacktracejs/stacktrace.js/releases) [![gzip size](https://img.shields.io/badge/gzipped-9.1k-green.svg?style=flat-square)](https://github.com/stacktracejs/stacktrace.js/releases) diff --git a/bower.json b/bower.json index d6c04f3..b47bd25 100644 --- a/bower.json +++ b/bower.json @@ -22,7 +22,7 @@ "error", "debugger" ], - "license": "Public Domain", + "license": "MIT", "ignore": [ "**/.*", "node_modules", diff --git a/package.json b/package.json index 2f5d267..7e60db5 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "Oliver Salzburg (https://github.com/oliversalzburg)" ], "version": "1.3.1", - "license": "Unlicense", + "license": "MIT", "keywords": [ "stacktrace", "error", From 1e3acf53c358e01a05ea9f68a445f7f76e1f93f4 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 29 Apr 2017 20:34:24 -0700 Subject: [PATCH 081/110] Update dependencies --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 7e60db5..e1901f1 100644 --- a/package.json +++ b/package.json @@ -21,9 +21,9 @@ "url": "git://github.com/stacktracejs/stacktrace.js.git" }, "dependencies": { - "error-stack-parser": "^2.0.0", - "stack-generator": "^2.0.0", - "stacktrace-gps": "^3.0.0" + "error-stack-parser": "^2.0.1", + "stack-generator": "^2.0.1", + "stacktrace-gps": "^3.0.2" }, "devDependencies": { "browserify": "^13.1.0", From 9a4805120cbf8ea78d496abebdd04c0c7c81158c Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 30 Apr 2017 14:37:57 -0700 Subject: [PATCH 082/110] Fix stacktrace-gps version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e1901f1..d959dd0 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "dependencies": { "error-stack-parser": "^2.0.1", "stack-generator": "^2.0.1", - "stacktrace-gps": "^3.0.2" + "stacktrace-gps": "^3.0.1" }, "devDependencies": { "browserify": "^13.1.0", From cd572c69d7bb2c8413e3836d0bfdc1ce6d123757 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 30 Apr 2017 19:49:22 -0700 Subject: [PATCH 083/110] Update browsers on Sauce CI testing --- karma.conf.ci.js | 62 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 17 deletions(-) diff --git a/karma.conf.ci.js b/karma.conf.ci.js index b99c899..d5fbc3a 100644 --- a/karma.conf.ci.js +++ b/karma.conf.ci.js @@ -18,7 +18,13 @@ module.exports = function(config) { base: 'SauceLabs', browserName: 'iPhone', platform: 'OS X 10.11', - version: '9.1' + version: '9.2' + }, + slIOS10: { + base: 'SauceLabs', + browserName: 'iPhone', + platform: 'macOS 10.12', + version: '10.2' }, slAndroid4: { base: 'SauceLabs', @@ -32,33 +38,49 @@ module.exports = function(config) { platform: 'Linux', version: '5.1' }, + slAndroid6: { + base: 'SauceLabs', + browserName: 'Android', + platform: 'Linux', + version: '6.0' + }, slChrome: { base: 'SauceLabs', - browserName: 'chrome' + browserName: 'chrome', + version: 'latest' + }, + slChromeBeta: { + base: 'SauceLabs', + browserName: 'chrome', + version: 'beta' }, - slFirefox43: { + slFirefox: { base: 'SauceLabs', browserName: 'firefox', - platform: 'Windows 8.1', - version: '43.0' + version: 'latest' + }, + slFirefoxBeta: { + base: 'SauceLabs', + browserName: 'firefox', + version: 'beta' }, slSafari8: { base: 'SauceLabs', browserName: 'safari', platform: 'OS X 10.10', - version: '8' + version: '8.0' }, slSafari9: { base: 'SauceLabs', browserName: 'safari', platform: 'OS X 10.11', - version: '9' + version: '9.0' }, slSafari10: { base: 'SauceLabs', browserName: 'safari', - platform: 'OS X 10.11', - version: '10' + platform: 'macOS 10.12', + version: '10.0' }, slOpera: { base: 'SauceLabs', @@ -70,6 +92,12 @@ module.exports = function(config) { platform: 'Windows 10', version: '14.14393' }, + slEdge13: { + base: 'SauceLabs', + browserName: 'microsoftedge', + platform: 'Windows 10', + version: '13.10586' + }, slIE11: { base: 'SauceLabs', browserName: 'internet explorer', @@ -86,15 +114,15 @@ module.exports = function(config) { base: 'SauceLabs', browserName: 'internet explorer', platform: 'Windows 7', - version: '9' + version: '9.0' } - // Commented out due to lack of polyfills for SourceMapConsumer - //slIE8: { - // base: 'SauceLabs', - // browserName: 'internet explorer', - // platform: 'Windows XP', - // version: '8' - //}, + // Too unreliable on Sauce :( + // slIE8: { + // base: 'SauceLabs', + // browserName: 'internet explorer', + // platform: 'Windows XP', + // version: '8.0' + // } //slIE7: { // base: 'SauceLabs', // browserName: 'internet explorer', From 3a7a9ee6e617cf313933570697de74a39b24fd7f Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 30 Apr 2017 19:53:23 -0700 Subject: [PATCH 084/110] 2.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d959dd0..cc39b88 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "Victor Homyakov (https://github.com/victor-homyakov)", "Oliver Salzburg (https://github.com/oliversalzburg)" ], - "version": "1.3.1", + "version": "2.0.0", "license": "MIT", "keywords": [ "stacktrace", From 0ba6bd85e23ad92e28d87b12ce28d18e6aff9874 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 30 Apr 2017 19:56:27 -0700 Subject: [PATCH 085/110] Update changelog for v2.0 --- CHANGELOG.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4af6ef9..ffca9e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,20 @@ +## v2.0.0 + +### ES6 Support + +ES6 code is now parsed and enhanced! + +### Extensible StackFrames + +StackFrames returned are now able to report on whether a function call was a `Constructor`, `native` code, or `eval` code. + +### MIT License + +The community [has voted](https://github.com/stacktracejs/stacktrace.js/issues/187) to change the license of the project to the [MIT License](https://opensource.org/licenses/MIT) + +## v1.3.0 +* `Stacktrace.getSync()` gets a stack trace, synchronously. It does not attempt to map sources or guess function names, because those typically require network requests. + ## v1.2.0 * `StackTrace.report` now accepts an error message argument, and will add a `message: "given thing"` to the JSON payload if it is provided. From a95f76780af88bc7d5fcff47d9788ce049dbe449 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 30 Apr 2017 19:57:15 -0700 Subject: [PATCH 086/110] Update component(1) versions for v2.0 --- component.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/component.json b/component.json index 747c36b..28dde63 100644 --- a/component.json +++ b/component.json @@ -2,7 +2,7 @@ "name": "stacktrace.js", "repository": "stacktracejs/stacktrace.js", "description": "Framework-agnostic, micro-library for getting stack traces in all environments", - "version": "1.1.0", + "version": "2.0.0", "keywords": [ "stacktrace", "error", @@ -15,8 +15,8 @@ "stacktrace.js" ], "dependencies": { - "stacktracejs/error-stack-parser": "1.3", - "stacktracejs/stack-generator": "1", - "stacktracejs/stacktrace-gps": "2" + "stacktracejs/error-stack-parser": "2", + "stacktracejs/stack-generator": "2", + "stacktracejs/stacktrace-gps": "3" } } From 5c823482748f48474c56f134abe7681737fa3e69 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 30 Apr 2017 21:48:07 -0700 Subject: [PATCH 087/110] Properly distribute unminified polyfills version. Fixes issue #184 --- ...ktrace-with-promises-and-json-polyfills.js | 5348 ++++++++++++++++- gulpfile.js | 1 + 2 files changed, 5346 insertions(+), 3 deletions(-) diff --git a/dist/stacktrace-with-promises-and-json-polyfills.js b/dist/stacktrace-with-promises-and-json-polyfills.js index 54e9baa..9e54686 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.js @@ -1,3 +1,5345 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(" ")||void 0,a=r(["eval",""],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split("\n"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),-1===t.indexOf("@")&&-1===t.indexOf(":"))return new e(t);var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i,r=t.stacktrace.split("\n"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split("\n"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split("@"),o=this.extractLocation(r.pop()),i=r.shift()||"",a=i.replace(//,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e(a,s,o[0],o[1],o[2],t)},this)}}})},{stackframe:14}],2:[function(t,n,r){(function(r,o){(function(){"use strict";function i(e){return"function"==typeof e||"object"==typeof e&&null!==e}function a(e){return"function"==typeof e}function s(e){Z=e}function u(e){V=e}function c(){return function(){r.nextTick(g)}}function l(){return function(){z(g)}}function f(){var e=0,t=new Q(g),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=g,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(g,1)}}function g(){for(var e=0;W>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}W=0}function d(){try{var e=t,n=e("vertx");return z=n.runOnLoop||n.runOnContext,l()}catch(r){return h()}}function m(e,t){var n=this,r=n._state;if(r===ae&&!e||r===se&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var a=arguments[r-1];V(function(){P(r,o,a,i)})}else j(n,o,e,t);return o}function y(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(v);return E(n,e),n}function v(){}function _(){return new TypeError("You cannot resolve a promise with itself")}function w(){return new TypeError("A promises callback cannot return that same promise.")}function b(e){try{return e.then}catch(t){return ue.error=t,ue}}function A(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function C(e,t,n){V(function(e){var r=!1,o=A(n,t,function(n){r||(r=!0,t!==n?E(e,n):N(e,n))},function(t){r||(r=!0,T(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,T(e,o))},e)}function O(e,t){t._state===ae?N(e,t._result):t._state===se?T(e,t._result):j(t,void 0,function(t){E(e,t)},function(t){T(e,t)})}function S(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?O(e,t):n===ue?T(e,ue.error):void 0===n?N(e,t):a(n)?C(e,t,n):N(e,t)}function E(e,t){e===t?T(e,_()):i(t)?S(e,t,b(t)):N(e,t)}function L(e){e._onerror&&e._onerror(e._result),M(e)}function N(e,t){e._state===ie&&(e._result=t,e._state=ae,0!==e._subscribers.length&&V(M,e))}function T(e,t){e._state===ie&&(e._state=se,e._result=t,V(L,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+ae]=n,o[i+se]=r,0===i&&e._state&&V(M,e)}function M(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)j(r.resolve(e[a]),void 0,t,n);return o}function G(e){var t=this,n=new t(v);return T(n,e),n}function $(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function D(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function B(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&("function"!=typeof e&&$(),this instanceof B?R(this,e):D())}function J(e,t){this._instanceConstructor=e,this.promise=new e(v),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?N(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&N(this.promise,this._result))):T(this.promise,this._validationError())}function q(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ge)}var I;I=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var z,Z,Y,H=I,W=0,V=function(e,t){ne[W]=e,ne[W+1]=t,W+=2,2===W&&(Z?Z(g):Y())},X="undefined"!=typeof window?window:void 0,K=X||{},Q=K.MutationObserver||K.WebKitMutationObserver,ee="undefined"!=typeof r&&"[object process]"==={}.toString.call(r),te="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,ne=new Array(1e3);Y=ee?c():Q?f():te?p():void 0===X&&"function"==typeof t?d():h();var re=m,oe=y,ie=void 0,ae=1,se=2,ue=new k,ce=new k,le=F,fe=U,pe=G,he=0,ge=B;B.all=le,B.race=fe,B.resolve=oe,B.reject=pe,B._setScheduler=s,B._setAsap=u,B._asap=V,B.prototype={constructor:B,then:re,"catch":function(e){return this.then(null,e)}};var de=J;J.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},J.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},J.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=b(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ge){var i=new n(v);S(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},J.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===se?T(r,n):this._result[t]=n),0===this._remaining&&N(r,this._result)},J.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(ae,t,e)},function(e){n._settledAt(se,t,e)})};var me=q,ye={Promise:ge,polyfill:me};"function"==typeof e&&e.amd?e(function(){return ye}):"undefined"!=typeof n&&n.exports?n.exports=ye:"undefined"!=typeof this&&(this.ES6Promise=ye),me()}).call(this)}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:4}],3:[function(t,n,r){(function(t){(function(){function o(e,t){function n(e){if(n[e]!==m)return n[e];var o;if("bug-string-char-index"==e)o="a"!="a"[0];else if("json"==e)o=n("json-stringify")&&n("json-parse");else{var a,s='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var u=t.stringify,l="function"==typeof u&&_;if(l){(a=function(){return 1}).toJSON=a;try{l="0"===u(0)&&"0"===u(new r)&&'""'==u(new i)&&u(v)===m&&u(m)===m&&u()===m&&"1"===u(a)&&"[1]"==u([a])&&"[null]"==u([m])&&"null"==u(null)&&"[null,null,null]"==u([m,v,null])&&u({a:[a,!0,!1,null,"\x00\b\n\f\r "]})==s&&"1"===u(null,a)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){l=!1}}o=l}if("json-parse"==e){var p=t.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){a=p(s);var h=5==a.a.length&&1===a.a[0];if(h){try{h=!p('" "')}catch(f){}if(h)try{h=1!==p("01")}catch(f){}if(h)try{h=1!==p("1.")}catch(f){}}}}catch(f){h=!1}o=h}}return n[e]=!!o}e||(e=u.Object()),t||(t=u.Object());var r=e.Number||u.Number,i=e.String||u.String,s=e.Object||u.Object,c=e.Date||u.Date,l=e.SyntaxError||u.SyntaxError,f=e.TypeError||u.TypeError,p=e.Math||u.Math,h=e.JSON||u.JSON;"object"==typeof h&&h&&(t.stringify=h.stringify,t.parse=h.parse);var g,d,m,y=s.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!n("json")){var b="[object Function]",A="[object Date]",C="[object Number]",O="[object String]",S="[object Array]",E="[object Boolean]",L=n("bug-string-char-index");if(!_)var N=p.floor,T=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return T[t]+365*(e-1970)+N((e-1969+(t=+(t>1)))/4)-N((e-1901+t)/100)+N((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?d=2==i?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var n,o,i=v.call(e)==b,s=!i&&"function"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&"prototype"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),d(e,t)},!n("json-stringify")){var M={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},k="000000",x=function(e,t){return(k+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!L||r>10,i=o&&(L?e.split(""):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=M[a];break;default:if(32>a){t+=P+x(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,L,T,M,k,P,U;try{s=t[e]}catch(G){}if("object"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,"toJSON"))"function"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,"toJSON"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=N(s/864e5),c=N(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=N((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=N(h/36e5)%24,_=N(h/6e4)%60,w=N(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?"-":"+")+x(6,0>c?-c:c):x(4,c))+"-"+x(2,l+1)+"-"+x(2,p)+"T"+x(2,y)+":"+x(2,_)+":"+x(2,w)+"."+x(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=v.call(s),u==E)return""+s;if(u==C)return s>-1/0&&1/0>s?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),L=[],P=i,i+=o,u==S){for(M=0,k=s.length;k>M;M++)T=F(M,s,n,r,o,i,a),L.push(T===m?"null":T);U=L.length?o?"[\n"+i+L.join(",\n"+i)+"\n"+P+"]":"["+L.join(",")+"]":"[]"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&L.push(R(e)+":"+(o?" ":"")+t)}),U=L.length?o?"{\n"+i+L.join(",\n"+i)+"\n"+P+"}":"{"+L.join(",")+"}":"{}";return a.pop(),U}};t.stringify=function(e,t,n){var r,o,i,s;if(a[typeof t]&&t)if((s=v.call(t))==b)o=t;else if(s==S){i={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(i[u]=1));}if(n)if((s=v.call(n))==C){if((n-=n%1)>0)for(r="",n>10&&(n=10);r.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=L?i.charAt(U):i[U],U++,e;case 34:for(e="@",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(L?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),(","==e||"string"!=typeof e||"@"!=(L?e.charAt(0):e[0])||":"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,G=""+e,n=q(J()),"$"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return t.runInContext=o,t}var i="function"==typeof e&&e.amd,a={"function":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&"object"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,t,n){function r(e){if(c===setTimeout)return setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function o(e){if(l===clearTimeout)return clearTimeout(e);try{return l(e)}catch(t){try{return l.call(null,e)}catch(t){return l.call(this,e)}}}function i(){g&&p&&(g=!1,p.length?h=p.concat(h):d=-1,h.length&&a())}function a(){if(!g){var e=r(i);g=!0;for(var t=h.length;t;){for(p=h,h=[];++d1)for(var n=1;no;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},{}],8:[function(e,t,n){function r(e,t,o,i,a,s){var u=Math.floor((t-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],9:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(a>n){var s=o(n,a),u=n-1;r(e,s,a);for(var c=e[a],l=n;a>l;l++)t(e[l],c)<=0&&(u+=1,r(e,u,l));r(e,u+1,l);var f=u+1;i(e,t,n,f-1),i(e,t,f+1,a)}}n.quickSort=function(e,t){i(e,t,0,e.length-1)}},{}],10:[function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),r=s.getArg(t,"sources"),o=s.getArg(t,"names",[]),i=s.getArg(t,"sourceRoot",null),a=s.getArg(t,"sourcesContent",null),u=s.getArg(t,"mappings"),l=s.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=s.getArg(t,"version"),o=s.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=s.getArg(e,"offset"),n=s.getArg(t,"line"),o=s.getArg(t,"column");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(";"===e.charAt(v))c++,v++,p=0;else if(","===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),"number"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=o(t),r=o(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(v))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,i(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(9>t)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function d(e,t){return e===t?0:e>t?1:-1}function m(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=d(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:d(e.name,t.name)))))}n.getArg=r;var y=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,v=/^data:.+\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(y)},n.relative=u;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},{}],12:[function(t,n,r){!function(t,o){"use strict";"function"==typeof e&&e.amd?e("stackframe",[],o):"object"==typeof r?n.exports=o():t.StackFrame=o()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if("[object Array]"!==Object.prototype.toString.call(e))throw new TypeError("Args must be an Array");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||"{anonymous}",n="("+(this.getArgs()||[]).join(",")+")",r=this.getFileName()?"@"+this.getFileName():"",o=e(this.getLineNumber())?":"+this.getLineNumber():"",i=e(this.getColumnNumber())?":"+this.getColumnNumber():"";return t+n+r+o+i}},t})},{}],13:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof r?n.exports=i(t("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n,r=/function\s+([^(]*?)\s*\(([^)]*)\)/,o=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,i=/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,a=e.split("\n"),s="",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf("//");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if("function"!=typeof Object.defineProperty||"function"!=typeof Object.create)throw new Error("Unable to consume source maps in older browsers")}function s(e){if("object"!=typeof e)throw new TypeError("Given StackFrame is not an object");if("string"!=typeof e.fileName)throw new TypeError("Given file name is not a String");if("number"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError("Given line number must be a positive integer");if("number"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError("Given column number must be a non-negative integer");return!0}function u(e){var t=/\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error("sourceMappingURL not found")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o="data:"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error("Cannot make network requests in offline mode"));else if(o){var i=/^data:application\/json;([\w=:"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error("The encoding of the inline sourcemap is not supported"))}else{var l=this.ajax(t,{method:"get"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)["catch"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=e.lineNumber,a=e.columnNumber,s=i(r,o,a);n(s?new t(s,e.args,e.fileName,o,a):e)},r)["catch"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l="data:"===s.substr(0,5),f=i.substring(0,i.lastIndexOf("/")+1);"/"===s[0]||l||/^https?:\/\/|^\/\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;"string"==typeof n&&(n=o(n.replace(/^\)\]\}'/,""))),"undefined"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)["catch"](n)}.bind(this),n)["catch"](n)}.bind(this))})):new l(e)}})},{"source-map/lib/source-map-consumer":10,stackframe:14}],16:[function(e,t,n){Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"undefined"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var n,r=Object(this),o=r.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError("this is null or not defined");var t=Object(this),n=t.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(" this is null or not defined");var o=Object(this),i=o.length>>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}})},{}],17:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stacktrace",["error-stack-parser","stack-generator","stacktrace-gps"],i):"object"==typeof r?n.exports=i(t("error-stack-parser"),t("stack-generator"),t("stacktrace-gps")):o.StackTrace=i(o.ErrorStackParser,o.StackGenerator,o.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e["opera#sourceloc"]}function i(e,t){return"function"==typeof t?e.filter(t):e}var a={filter:function(e){return-1===(e.functionName||"").indexOf("StackTrace$$")&&-1===(e.functionName||"").indexOf("ErrorStackParser$$")&&-1===(e.functionName||"").indexOf("StackTraceGPS$$")&&-1===(e.functionName||"").indexOf("StackGenerator$$")},sourceCache:{}},s=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var t=s();return o(t)?this.fromError(t,e):this.generateArtificially(e)},getSync:function(n){n=r(a,n);var u=s(),c=o(u)?e.parse(u):t.backtrace(n);return i(c,n.filter)},fromError:function(t,o){o=r(a,o);var s=new n(o);return new Promise(function(n){var r=i(e.parse(t),o.filter);n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}s.pinpoint(e).then(t,n)["catch"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(a,e);var n=t.backtrace(e);return"function"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if("function"!=typeof e)throw new Error("Cannot instrument non-function object");if("function"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)["catch"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)["catch"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if("function"!=typeof e)throw new Error("Cannot de-instrument non-function object");return"function"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t,n){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error("POST to "+t+" failed with status: "+i.status)))},i.open("post",t),i.setRequestHeader("Content-Type","application/json");var a={stack:e};void 0!==n&&(a.message=n),i.send(JSON.stringify(a))})}}})},{"error-stack-parser":1,"stack-generator":13,"stacktrace-gps":15}]},{},[2,3,16,17])(17)}); -//# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.js.map +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.StackTrace = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o -1) { + // Throw away eval information until we implement stacktrace.js/stackframe#8 + line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^\()]*)|(\)\,.*$)/g, ''); + } + var tokens = line.replace(/^\s+/, '').replace(/\(eval code/g, '(').split(/\s+/).slice(1); + var locationParts = this.extractLocation(tokens.pop()); + var functionName = tokens.join(' ') || undefined; + var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0]; + + return new StackFrame({ + functionName: functionName, + fileName: fileName, + lineNumber: locationParts[1], + columnNumber: locationParts[2], + source: line + }); + }, this); + }, + + parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) { + var filtered = error.stack.split('\n').filter(function(line) { + return !line.match(SAFARI_NATIVE_CODE_REGEXP); + }, this); + + return filtered.map(function(line) { + // Throw away eval information until we implement stacktrace.js/stackframe#8 + if (line.indexOf(' > eval') > -1) { + line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g, ':$1'); + } + + if (line.indexOf('@') === -1 && line.indexOf(':') === -1) { + // Safari eval frames only have function names and nothing else + return new StackFrame({ + functionName: line + }); + } else { + var tokens = line.split('@'); + var locationParts = this.extractLocation(tokens.pop()); + var functionName = tokens.join('@') || undefined; + + return new StackFrame({ + functionName: functionName, + fileName: locationParts[0], + lineNumber: locationParts[1], + columnNumber: locationParts[2], + source: line + }); + } + }, this); + }, + + parseOpera: function ErrorStackParser$$parseOpera(e) { + if (!e.stacktrace || (e.message.indexOf('\n') > -1 && + e.message.split('\n').length > e.stacktrace.split('\n').length)) { + return this.parseOpera9(e); + } else if (!e.stack) { + return this.parseOpera10(e); + } else { + return this.parseOpera11(e); + } + }, + + parseOpera9: function ErrorStackParser$$parseOpera9(e) { + var lineRE = /Line (\d+).*script (?:in )?(\S+)/i; + var lines = e.message.split('\n'); + var result = []; + + for (var i = 2, len = lines.length; i < len; i += 2) { + var match = lineRE.exec(lines[i]); + if (match) { + result.push(new StackFrame({ + fileName: match[2], + lineNumber: match[1], + source: lines[i] + })); + } + } + + return result; + }, + + parseOpera10: function ErrorStackParser$$parseOpera10(e) { + var lineRE = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i; + var lines = e.stacktrace.split('\n'); + var result = []; + + for (var i = 0, len = lines.length; i < len; i += 2) { + var match = lineRE.exec(lines[i]); + if (match) { + result.push( + new StackFrame({ + functionName: match[3] || undefined, + fileName: match[2], + lineNumber: match[1], + source: lines[i] + }) + ); + } + } + + return result; + }, + + // Opera 10.65+ Error.stack very similar to FF/Safari + parseOpera11: function ErrorStackParser$$parseOpera11(error) { + var filtered = error.stack.split('\n').filter(function(line) { + return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/); + }, this); + + return filtered.map(function(line) { + var tokens = line.split('@'); + var locationParts = this.extractLocation(tokens.pop()); + var functionCall = (tokens.shift() || ''); + var functionName = functionCall + .replace(//, '$2') + .replace(/\([^\)]*\)/g, '') || undefined; + var argsRaw; + if (functionCall.match(/\(([^\)]*)\)/)) { + argsRaw = functionCall.replace(/^[^\(]+\(([^\)]*)\)$/, '$1'); + } + var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? + undefined : argsRaw.split(','); + + return new StackFrame({ + functionName: functionName, + args: args, + fileName: locationParts[0], + lineNumber: locationParts[1], + columnNumber: locationParts[2], + source: line + }); + }, this); + } + }; +})); + +},{"stackframe":13}],2:[function(require,module,exports){ +(function (process,global){ +/*! + * @overview es6-promise - a tiny implementation of Promises/A+. + * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) + * @license Licensed under MIT license + * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE + * @version 3.3.1 + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.ES6Promise = factory()); +}(this, (function () { 'use strict'; + +function objectOrFunction(x) { + return typeof x === 'function' || typeof x === 'object' && x !== null; +} + +function isFunction(x) { + return typeof x === 'function'; +} + +var _isArray = undefined; +if (!Array.isArray) { + _isArray = function (x) { + return Object.prototype.toString.call(x) === '[object Array]'; + }; +} else { + _isArray = Array.isArray; +} + +var isArray = _isArray; + +var len = 0; +var vertxNext = undefined; +var customSchedulerFn = undefined; + +var asap = function asap(callback, arg) { + queue[len] = callback; + queue[len + 1] = arg; + len += 2; + if (len === 2) { + // If len is 2, that means that we need to schedule an async flush. + // If additional callbacks are queued before the queue is flushed, they + // will be processed by this flush that we are scheduling. + if (customSchedulerFn) { + customSchedulerFn(flush); + } else { + scheduleFlush(); + } + } +}; + +function setScheduler(scheduleFn) { + customSchedulerFn = scheduleFn; +} + +function setAsap(asapFn) { + asap = asapFn; +} + +var browserWindow = typeof window !== 'undefined' ? window : undefined; +var browserGlobal = browserWindow || {}; +var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; +var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]'; + +// test for web worker but not in IE10 +var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined'; + +// node +function useNextTick() { + // node version 0.10.x displays a deprecation warning when nextTick is used recursively + // see https://github.com/cujojs/when/issues/410 for details + return function () { + return process.nextTick(flush); + }; +} + +// vertx +function useVertxTimer() { + return function () { + vertxNext(flush); + }; +} + +function useMutationObserver() { + var iterations = 0; + var observer = new BrowserMutationObserver(flush); + var node = document.createTextNode(''); + observer.observe(node, { characterData: true }); + + return function () { + node.data = iterations = ++iterations % 2; + }; +} + +// web worker +function useMessageChannel() { + var channel = new MessageChannel(); + channel.port1.onmessage = flush; + return function () { + return channel.port2.postMessage(0); + }; +} + +function useSetTimeout() { + // Store setTimeout reference so es6-promise will be unaffected by + // other code modifying setTimeout (like sinon.useFakeTimers()) + var globalSetTimeout = setTimeout; + return function () { + return globalSetTimeout(flush, 1); + }; +} + +var queue = new Array(1000); +function flush() { + for (var i = 0; i < len; i += 2) { + var callback = queue[i]; + var arg = queue[i + 1]; + + callback(arg); + + queue[i] = undefined; + queue[i + 1] = undefined; + } + + len = 0; +} + +function attemptVertx() { + try { + var r = require; + var vertx = r('vertx'); + vertxNext = vertx.runOnLoop || vertx.runOnContext; + return useVertxTimer(); + } catch (e) { + return useSetTimeout(); + } +} + +var scheduleFlush = undefined; +// Decide what async method to use to triggering processing of queued callbacks: +if (isNode) { + scheduleFlush = useNextTick(); +} else if (BrowserMutationObserver) { + scheduleFlush = useMutationObserver(); +} else if (isWorker) { + scheduleFlush = useMessageChannel(); +} else if (browserWindow === undefined && typeof require === 'function') { + scheduleFlush = attemptVertx(); +} else { + scheduleFlush = useSetTimeout(); +} + +function then(onFulfillment, onRejection) { + var _arguments = arguments; + + var parent = this; + + var child = new this.constructor(noop); + + if (child[PROMISE_ID] === undefined) { + makePromise(child); + } + + var _state = parent._state; + + if (_state) { + (function () { + var callback = _arguments[_state - 1]; + asap(function () { + return invokeCallback(_state, child, callback, parent._result); + }); + })(); + } else { + subscribe(parent, child, onFulfillment, onRejection); + } + + return child; +} + +/** + `Promise.resolve` returns a promise that will become resolved with the + passed `value`. It is shorthand for the following: + + ```javascript + let promise = new Promise(function(resolve, reject){ + resolve(1); + }); + + promise.then(function(value){ + // value === 1 + }); + ``` + + Instead of writing the above, your code now simply becomes the following: + + ```javascript + let promise = Promise.resolve(1); + + promise.then(function(value){ + // value === 1 + }); + ``` + + @method resolve + @static + @param {Any} value value that the returned promise will be resolved with + Useful for tooling. + @return {Promise} a promise that will become fulfilled with the given + `value` +*/ +function resolve(object) { + /*jshint validthis:true */ + var Constructor = this; + + if (object && typeof object === 'object' && object.constructor === Constructor) { + return object; + } + + var promise = new Constructor(noop); + _resolve(promise, object); + return promise; +} + +var PROMISE_ID = Math.random().toString(36).substring(16); + +function noop() {} + +var PENDING = void 0; +var FULFILLED = 1; +var REJECTED = 2; + +var GET_THEN_ERROR = new ErrorObject(); + +function selfFulfillment() { + return new TypeError("You cannot resolve a promise with itself"); +} + +function cannotReturnOwn() { + return new TypeError('A promises callback cannot return that same promise.'); +} + +function getThen(promise) { + try { + return promise.then; + } catch (error) { + GET_THEN_ERROR.error = error; + return GET_THEN_ERROR; + } +} + +function tryThen(then, value, fulfillmentHandler, rejectionHandler) { + try { + then.call(value, fulfillmentHandler, rejectionHandler); + } catch (e) { + return e; + } +} + +function handleForeignThenable(promise, thenable, then) { + asap(function (promise) { + var sealed = false; + var error = tryThen(then, thenable, function (value) { + if (sealed) { + return; + } + sealed = true; + if (thenable !== value) { + _resolve(promise, value); + } else { + fulfill(promise, value); + } + }, function (reason) { + if (sealed) { + return; + } + sealed = true; + + _reject(promise, reason); + }, 'Settle: ' + (promise._label || ' unknown promise')); + + if (!sealed && error) { + sealed = true; + _reject(promise, error); + } + }, promise); +} + +function handleOwnThenable(promise, thenable) { + if (thenable._state === FULFILLED) { + fulfill(promise, thenable._result); + } else if (thenable._state === REJECTED) { + _reject(promise, thenable._result); + } else { + subscribe(thenable, undefined, function (value) { + return _resolve(promise, value); + }, function (reason) { + return _reject(promise, reason); + }); + } +} + +function handleMaybeThenable(promise, maybeThenable, then$$) { + if (maybeThenable.constructor === promise.constructor && then$$ === then && maybeThenable.constructor.resolve === resolve) { + handleOwnThenable(promise, maybeThenable); + } else { + if (then$$ === GET_THEN_ERROR) { + _reject(promise, GET_THEN_ERROR.error); + } else if (then$$ === undefined) { + fulfill(promise, maybeThenable); + } else if (isFunction(then$$)) { + handleForeignThenable(promise, maybeThenable, then$$); + } else { + fulfill(promise, maybeThenable); + } + } +} + +function _resolve(promise, value) { + if (promise === value) { + _reject(promise, selfFulfillment()); + } else if (objectOrFunction(value)) { + handleMaybeThenable(promise, value, getThen(value)); + } else { + fulfill(promise, value); + } +} + +function publishRejection(promise) { + if (promise._onerror) { + promise._onerror(promise._result); + } + + publish(promise); +} + +function fulfill(promise, value) { + if (promise._state !== PENDING) { + return; + } + + promise._result = value; + promise._state = FULFILLED; + + if (promise._subscribers.length !== 0) { + asap(publish, promise); + } +} + +function _reject(promise, reason) { + if (promise._state !== PENDING) { + return; + } + promise._state = REJECTED; + promise._result = reason; + + asap(publishRejection, promise); +} + +function subscribe(parent, child, onFulfillment, onRejection) { + var _subscribers = parent._subscribers; + var length = _subscribers.length; + + parent._onerror = null; + + _subscribers[length] = child; + _subscribers[length + FULFILLED] = onFulfillment; + _subscribers[length + REJECTED] = onRejection; + + if (length === 0 && parent._state) { + asap(publish, parent); + } +} + +function publish(promise) { + var subscribers = promise._subscribers; + var settled = promise._state; + + if (subscribers.length === 0) { + return; + } + + var child = undefined, + callback = undefined, + detail = promise._result; + + for (var i = 0; i < subscribers.length; i += 3) { + child = subscribers[i]; + callback = subscribers[i + settled]; + + if (child) { + invokeCallback(settled, child, callback, detail); + } else { + callback(detail); + } + } + + promise._subscribers.length = 0; +} + +function ErrorObject() { + this.error = null; +} + +var TRY_CATCH_ERROR = new ErrorObject(); + +function tryCatch(callback, detail) { + try { + return callback(detail); + } catch (e) { + TRY_CATCH_ERROR.error = e; + return TRY_CATCH_ERROR; + } +} + +function invokeCallback(settled, promise, callback, detail) { + var hasCallback = isFunction(callback), + value = undefined, + error = undefined, + succeeded = undefined, + failed = undefined; + + if (hasCallback) { + value = tryCatch(callback, detail); + + if (value === TRY_CATCH_ERROR) { + failed = true; + error = value.error; + value = null; + } else { + succeeded = true; + } + + if (promise === value) { + _reject(promise, cannotReturnOwn()); + return; + } + } else { + value = detail; + succeeded = true; + } + + if (promise._state !== PENDING) { + // noop + } else if (hasCallback && succeeded) { + _resolve(promise, value); + } else if (failed) { + _reject(promise, error); + } else if (settled === FULFILLED) { + fulfill(promise, value); + } else if (settled === REJECTED) { + _reject(promise, value); + } +} + +function initializePromise(promise, resolver) { + try { + resolver(function resolvePromise(value) { + _resolve(promise, value); + }, function rejectPromise(reason) { + _reject(promise, reason); + }); + } catch (e) { + _reject(promise, e); + } +} + +var id = 0; +function nextId() { + return id++; +} + +function makePromise(promise) { + promise[PROMISE_ID] = id++; + promise._state = undefined; + promise._result = undefined; + promise._subscribers = []; +} + +function Enumerator(Constructor, input) { + this._instanceConstructor = Constructor; + this.promise = new Constructor(noop); + + if (!this.promise[PROMISE_ID]) { + makePromise(this.promise); + } + + if (isArray(input)) { + this._input = input; + this.length = input.length; + this._remaining = input.length; + + this._result = new Array(this.length); + + if (this.length === 0) { + fulfill(this.promise, this._result); + } else { + this.length = this.length || 0; + this._enumerate(); + if (this._remaining === 0) { + fulfill(this.promise, this._result); + } + } + } else { + _reject(this.promise, validationError()); + } +} + +function validationError() { + return new Error('Array Methods must be provided an Array'); +}; + +Enumerator.prototype._enumerate = function () { + var length = this.length; + var _input = this._input; + + for (var i = 0; this._state === PENDING && i < length; i++) { + this._eachEntry(_input[i], i); + } +}; + +Enumerator.prototype._eachEntry = function (entry, i) { + var c = this._instanceConstructor; + var resolve$$ = c.resolve; + + if (resolve$$ === resolve) { + var _then = getThen(entry); + + if (_then === then && entry._state !== PENDING) { + this._settledAt(entry._state, i, entry._result); + } else if (typeof _then !== 'function') { + this._remaining--; + this._result[i] = entry; + } else if (c === Promise) { + var promise = new c(noop); + handleMaybeThenable(promise, entry, _then); + this._willSettleAt(promise, i); + } else { + this._willSettleAt(new c(function (resolve$$) { + return resolve$$(entry); + }), i); + } + } else { + this._willSettleAt(resolve$$(entry), i); + } +}; + +Enumerator.prototype._settledAt = function (state, i, value) { + var promise = this.promise; + + if (promise._state === PENDING) { + this._remaining--; + + if (state === REJECTED) { + _reject(promise, value); + } else { + this._result[i] = value; + } + } + + if (this._remaining === 0) { + fulfill(promise, this._result); + } +}; + +Enumerator.prototype._willSettleAt = function (promise, i) { + var enumerator = this; + + subscribe(promise, undefined, function (value) { + return enumerator._settledAt(FULFILLED, i, value); + }, function (reason) { + return enumerator._settledAt(REJECTED, i, reason); + }); +}; + +/** + `Promise.all` accepts an array of promises, and returns a new promise which + is fulfilled with an array of fulfillment values for the passed promises, or + rejected with the reason of the first passed promise to be rejected. It casts all + elements of the passed iterable to promises as it runs this algorithm. + + Example: + + ```javascript + let promise1 = resolve(1); + let promise2 = resolve(2); + let promise3 = resolve(3); + let promises = [ promise1, promise2, promise3 ]; + + Promise.all(promises).then(function(array){ + // The array here would be [ 1, 2, 3 ]; + }); + ``` + + If any of the `promises` given to `all` are rejected, the first promise + that is rejected will be given as an argument to the returned promises's + rejection handler. For example: + + Example: + + ```javascript + let promise1 = resolve(1); + let promise2 = reject(new Error("2")); + let promise3 = reject(new Error("3")); + let promises = [ promise1, promise2, promise3 ]; + + Promise.all(promises).then(function(array){ + // Code here never runs because there are rejected promises! + }, function(error) { + // error.message === "2" + }); + ``` + + @method all + @static + @param {Array} entries array of promises + @param {String} label optional string for labeling the promise. + Useful for tooling. + @return {Promise} promise that is fulfilled when all `promises` have been + fulfilled, or rejected if any of them become rejected. + @static +*/ +function all(entries) { + return new Enumerator(this, entries).promise; +} + +/** + `Promise.race` returns a new promise which is settled in the same way as the + first passed promise to settle. + + Example: + + ```javascript + let promise1 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 1'); + }, 200); + }); + + let promise2 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 2'); + }, 100); + }); + + Promise.race([promise1, promise2]).then(function(result){ + // result === 'promise 2' because it was resolved before promise1 + // was resolved. + }); + ``` + + `Promise.race` is deterministic in that only the state of the first + settled promise matters. For example, even if other promises given to the + `promises` array argument are resolved, but the first settled promise has + become rejected before the other promises became fulfilled, the returned + promise will become rejected: + + ```javascript + let promise1 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 1'); + }, 200); + }); + + let promise2 = new Promise(function(resolve, reject){ + setTimeout(function(){ + reject(new Error('promise 2')); + }, 100); + }); + + Promise.race([promise1, promise2]).then(function(result){ + // Code here never runs + }, function(reason){ + // reason.message === 'promise 2' because promise 2 became rejected before + // promise 1 became fulfilled + }); + ``` + + An example real-world use case is implementing timeouts: + + ```javascript + Promise.race([ajax('foo.json'), timeout(5000)]) + ``` + + @method race + @static + @param {Array} promises array of promises to observe + Useful for tooling. + @return {Promise} a promise which settles in the same way as the first passed + promise to settle. +*/ +function race(entries) { + /*jshint validthis:true */ + var Constructor = this; + + if (!isArray(entries)) { + return new Constructor(function (_, reject) { + return reject(new TypeError('You must pass an array to race.')); + }); + } else { + return new Constructor(function (resolve, reject) { + var length = entries.length; + for (var i = 0; i < length; i++) { + Constructor.resolve(entries[i]).then(resolve, reject); + } + }); + } +} + +/** + `Promise.reject` returns a promise rejected with the passed `reason`. + It is shorthand for the following: + + ```javascript + let promise = new Promise(function(resolve, reject){ + reject(new Error('WHOOPS')); + }); + + promise.then(function(value){ + // Code here doesn't run because the promise is rejected! + }, function(reason){ + // reason.message === 'WHOOPS' + }); + ``` + + Instead of writing the above, your code now simply becomes the following: + + ```javascript + let promise = Promise.reject(new Error('WHOOPS')); + + promise.then(function(value){ + // Code here doesn't run because the promise is rejected! + }, function(reason){ + // reason.message === 'WHOOPS' + }); + ``` + + @method reject + @static + @param {Any} reason value that the returned promise will be rejected with. + Useful for tooling. + @return {Promise} a promise rejected with the given `reason`. +*/ +function reject(reason) { + /*jshint validthis:true */ + var Constructor = this; + var promise = new Constructor(noop); + _reject(promise, reason); + return promise; +} + +function needsResolver() { + throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); +} + +function needsNew() { + throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); +} + +/** + Promise objects represent the eventual result of an asynchronous operation. The + primary way of interacting with a promise is through its `then` method, which + registers callbacks to receive either a promise's eventual value or the reason + why the promise cannot be fulfilled. + + Terminology + ----------- + + - `promise` is an object or function with a `then` method whose behavior conforms to this specification. + - `thenable` is an object or function that defines a `then` method. + - `value` is any legal JavaScript value (including undefined, a thenable, or a promise). + - `exception` is a value that is thrown using the throw statement. + - `reason` is a value that indicates why a promise was rejected. + - `settled` the final resting state of a promise, fulfilled or rejected. + + A promise can be in one of three states: pending, fulfilled, or rejected. + + Promises that are fulfilled have a fulfillment value and are in the fulfilled + state. Promises that are rejected have a rejection reason and are in the + rejected state. A fulfillment value is never a thenable. + + Promises can also be said to *resolve* a value. If this value is also a + promise, then the original promise's settled state will match the value's + settled state. So a promise that *resolves* a promise that rejects will + itself reject, and a promise that *resolves* a promise that fulfills will + itself fulfill. + + + Basic Usage: + ------------ + + ```js + let promise = new Promise(function(resolve, reject) { + // on success + resolve(value); + + // on failure + reject(reason); + }); + + promise.then(function(value) { + // on fulfillment + }, function(reason) { + // on rejection + }); + ``` + + Advanced Usage: + --------------- + + Promises shine when abstracting away asynchronous interactions such as + `XMLHttpRequest`s. + + ```js + function getJSON(url) { + return new Promise(function(resolve, reject){ + let xhr = new XMLHttpRequest(); + + xhr.open('GET', url); + xhr.onreadystatechange = handler; + xhr.responseType = 'json'; + xhr.setRequestHeader('Accept', 'application/json'); + xhr.send(); + + function handler() { + if (this.readyState === this.DONE) { + if (this.status === 200) { + resolve(this.response); + } else { + reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']')); + } + } + }; + }); + } + + getJSON('/posts.json').then(function(json) { + // on fulfillment + }, function(reason) { + // on rejection + }); + ``` + + Unlike callbacks, promises are great composable primitives. + + ```js + Promise.all([ + getJSON('/posts'), + getJSON('/comments') + ]).then(function(values){ + values[0] // => postsJSON + values[1] // => commentsJSON + + return values; + }); + ``` + + @class Promise + @param {function} resolver + Useful for tooling. + @constructor +*/ +function Promise(resolver) { + this[PROMISE_ID] = nextId(); + this._result = this._state = undefined; + this._subscribers = []; + + if (noop !== resolver) { + typeof resolver !== 'function' && needsResolver(); + this instanceof Promise ? initializePromise(this, resolver) : needsNew(); + } +} + +Promise.all = all; +Promise.race = race; +Promise.resolve = resolve; +Promise.reject = reject; +Promise._setScheduler = setScheduler; +Promise._setAsap = setAsap; +Promise._asap = asap; + +Promise.prototype = { + constructor: Promise, + + /** + The primary way of interacting with a promise is through its `then` method, + which registers callbacks to receive either a promise's eventual value or the + reason why the promise cannot be fulfilled. + + ```js + findUser().then(function(user){ + // user is available + }, function(reason){ + // user is unavailable, and you are given the reason why + }); + ``` + + Chaining + -------- + + The return value of `then` is itself a promise. This second, 'downstream' + promise is resolved with the return value of the first promise's fulfillment + or rejection handler, or rejected if the handler throws an exception. + + ```js + findUser().then(function (user) { + return user.name; + }, function (reason) { + return 'default name'; + }).then(function (userName) { + // If `findUser` fulfilled, `userName` will be the user's name, otherwise it + // will be `'default name'` + }); + + findUser().then(function (user) { + throw new Error('Found user, but still unhappy'); + }, function (reason) { + throw new Error('`findUser` rejected and we're unhappy'); + }).then(function (value) { + // never reached + }, function (reason) { + // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. + // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'. + }); + ``` + If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. + + ```js + findUser().then(function (user) { + throw new PedagogicalException('Upstream error'); + }).then(function (value) { + // never reached + }).then(function (value) { + // never reached + }, function (reason) { + // The `PedgagocialException` is propagated all the way down to here + }); + ``` + + Assimilation + ------------ + + Sometimes the value you want to propagate to a downstream promise can only be + retrieved asynchronously. This can be achieved by returning a promise in the + fulfillment or rejection handler. The downstream promise will then be pending + until the returned promise is settled. This is called *assimilation*. + + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // The user's comments are now available + }); + ``` + + If the assimliated promise rejects, then the downstream promise will also reject. + + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // If `findCommentsByAuthor` fulfills, we'll have the value here + }, function (reason) { + // If `findCommentsByAuthor` rejects, we'll have the reason here + }); + ``` + + Simple Example + -------------- + + Synchronous Example + + ```javascript + let result; + + try { + result = findResult(); + // success + } catch(reason) { + // failure + } + ``` + + Errback Example + + ```js + findResult(function(result, err){ + if (err) { + // failure + } else { + // success + } + }); + ``` + + Promise Example; + + ```javascript + findResult().then(function(result){ + // success + }, function(reason){ + // failure + }); + ``` + + Advanced Example + -------------- + + Synchronous Example + + ```javascript + let author, books; + + try { + author = findAuthor(); + books = findBooksByAuthor(author); + // success + } catch(reason) { + // failure + } + ``` + + Errback Example + + ```js + + function foundBooks(books) { + + } + + function failure(reason) { + + } + + findAuthor(function(author, err){ + if (err) { + failure(err); + // failure + } else { + try { + findBoooksByAuthor(author, function(books, err) { + if (err) { + failure(err); + } else { + try { + foundBooks(books); + } catch(reason) { + failure(reason); + } + } + }); + } catch(error) { + failure(err); + } + // success + } + }); + ``` + + Promise Example; + + ```javascript + findAuthor(). + then(findBooksByAuthor). + then(function(books){ + // found books + }).catch(function(reason){ + // something went wrong + }); + ``` + + @method then + @param {Function} onFulfilled + @param {Function} onRejected + Useful for tooling. + @return {Promise} + */ + then: then, + + /** + `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same + as the catch block of a try/catch statement. + + ```js + function findAuthor(){ + throw new Error('couldn't find that author'); + } + + // synchronous + try { + findAuthor(); + } catch(reason) { + // something went wrong + } + + // async with promises + findAuthor().catch(function(reason){ + // something went wrong + }); + ``` + + @method catch + @param {Function} onRejection + Useful for tooling. + @return {Promise} + */ + 'catch': function _catch(onRejection) { + return this.then(null, onRejection); + } +}; + +function polyfill() { + var local = undefined; + + if (typeof global !== 'undefined') { + local = global; + } else if (typeof self !== 'undefined') { + local = self; + } else { + try { + local = Function('return this')(); + } catch (e) { + throw new Error('polyfill failed because global object is unavailable in this environment'); + } + } + + var P = local.Promise; + + if (P) { + var promiseToString = null; + try { + promiseToString = Object.prototype.toString.call(P.resolve()); + } catch (e) { + // silently ignored + } + + if (promiseToString === '[object Promise]' && !P.cast) { + return; + } + } + + local.Promise = Promise; +} + +polyfill(); +// Strange compat.. +Promise.polyfill = polyfill; +Promise.Promise = Promise; + +return Promise; + +}))); + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"_process":4}],3:[function(require,module,exports){ +(function (global){ +/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */ +;(function () { + // Detect the `define` function exposed by asynchronous module loaders. The + // strict `define` check is necessary for compatibility with `r.js`. + var isLoader = typeof define === "function" && define.amd; + + // A set of types used to distinguish objects from primitives. + var objectTypes = { + "function": true, + "object": true + }; + + // Detect the `exports` object exposed by CommonJS implementations. + var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; + + // Use the `global` object exposed by Node (including Browserify via + // `insert-module-globals`), Narwhal, and Ringo as the default context, + // and the `window` object in browsers. Rhino exports a `global` function + // instead. + var root = objectTypes[typeof window] && window || this, + freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == "object" && global; + + if (freeGlobal && (freeGlobal["global"] === freeGlobal || freeGlobal["window"] === freeGlobal || freeGlobal["self"] === freeGlobal)) { + root = freeGlobal; + } + + // Public: Initializes JSON 3 using the given `context` object, attaching the + // `stringify` and `parse` functions to the specified `exports` object. + function runInContext(context, exports) { + context || (context = root["Object"]()); + exports || (exports = root["Object"]()); + + // Native constructor aliases. + var Number = context["Number"] || root["Number"], + String = context["String"] || root["String"], + Object = context["Object"] || root["Object"], + Date = context["Date"] || root["Date"], + SyntaxError = context["SyntaxError"] || root["SyntaxError"], + TypeError = context["TypeError"] || root["TypeError"], + Math = context["Math"] || root["Math"], + nativeJSON = context["JSON"] || root["JSON"]; + + // Delegate to the native `stringify` and `parse` implementations. + if (typeof nativeJSON == "object" && nativeJSON) { + exports.stringify = nativeJSON.stringify; + exports.parse = nativeJSON.parse; + } + + // Convenience aliases. + var objectProto = Object.prototype, + getClass = objectProto.toString, + isProperty, forEach, undef; + + // Test the `Date#getUTC*` methods. Based on work by @Yaffle. + var isExtended = new Date(-3509827334573292); + try { + // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical + // results for certain dates in Opera >= 10.53. + isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 && + // Safari < 2.0.2 stores the internal millisecond time value correctly, + // but clips the values returned by the date methods to the range of + // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]). + isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708; + } catch (exception) {} + + // Internal: Determines whether the native `JSON.stringify` and `parse` + // implementations are spec-compliant. Based on work by Ken Snyder. + function has(name) { + if (has[name] !== undef) { + // Return cached feature test result. + return has[name]; + } + var isSupported; + if (name == "bug-string-char-index") { + // IE <= 7 doesn't support accessing string characters using square + // bracket notation. IE 8 only supports this for primitives. + isSupported = "a"[0] != "a"; + } else if (name == "json") { + // Indicates whether both `JSON.stringify` and `JSON.parse` are + // supported. + isSupported = has("json-stringify") && has("json-parse"); + } else { + var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}'; + // Test `JSON.stringify`. + if (name == "json-stringify") { + var stringify = exports.stringify, stringifySupported = typeof stringify == "function" && isExtended; + if (stringifySupported) { + // A test function object with a custom `toJSON` method. + (value = function () { + return 1; + }).toJSON = value; + try { + stringifySupported = + // Firefox 3.1b1 and b2 serialize string, number, and boolean + // primitives as object literals. + stringify(0) === "0" && + // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object + // literals. + stringify(new Number()) === "0" && + stringify(new String()) == '""' && + // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or + // does not define a canonical JSON representation (this applies to + // objects with `toJSON` properties as well, *unless* they are nested + // within an object or array). + stringify(getClass) === undef && + // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and + // FF 3.1b3 pass this test. + stringify(undef) === undef && + // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s, + // respectively, if the value is omitted entirely. + stringify() === undef && + // FF 3.1b1, 2 throw an error if the given value is not a number, + // string, array, object, Boolean, or `null` literal. This applies to + // objects with custom `toJSON` methods as well, unless they are nested + // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON` + // methods entirely. + stringify(value) === "1" && + stringify([value]) == "[1]" && + // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of + // `"[null]"`. + stringify([undef]) == "[null]" && + // YUI 3.0.0b1 fails to serialize `null` literals. + stringify(null) == "null" && + // FF 3.1b1, 2 halts serialization if an array contains a function: + // `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3 + // elides non-JSON values from objects and arrays, unless they + // define custom `toJSON` methods. + stringify([undef, getClass, null]) == "[null,null,null]" && + // Simple serialization test. FF 3.1b1 uses Unicode escape sequences + // where character escape codes are expected (e.g., `\b` => `\u0008`). + stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized && + // FF 3.1b1 and b2 ignore the `filter` and `width` arguments. + stringify(null, value) === "1" && + stringify([1, 2], null, 1) == "[\n 1,\n 2\n]" && + // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly + // serialize extended years. + stringify(new Date(-8.64e15)) == '"-271821-04-20T00:00:00.000Z"' && + // The milliseconds are optional in ES 5, but required in 5.1. + stringify(new Date(8.64e15)) == '"+275760-09-13T00:00:00.000Z"' && + // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative + // four-digit years instead of six-digit years. Credits: @Yaffle. + stringify(new Date(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' && + // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond + // values less than 1000. Credits: @Yaffle. + stringify(new Date(-1)) == '"1969-12-31T23:59:59.999Z"'; + } catch (exception) { + stringifySupported = false; + } + } + isSupported = stringifySupported; + } + // Test `JSON.parse`. + if (name == "json-parse") { + var parse = exports.parse; + if (typeof parse == "function") { + try { + // FF 3.1b1, b2 will throw an exception if a bare literal is provided. + // Conforming implementations should also coerce the initial argument to + // a string prior to parsing. + if (parse("0") === 0 && !parse(false)) { + // Simple parsing test. + value = parse(serialized); + var parseSupported = value["a"].length == 5 && value["a"][0] === 1; + if (parseSupported) { + try { + // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings. + parseSupported = !parse('"\t"'); + } catch (exception) {} + if (parseSupported) { + try { + // FF 4.0 and 4.0.1 allow leading `+` signs and leading + // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow + // certain octal literals. + parseSupported = parse("01") !== 1; + } catch (exception) {} + } + if (parseSupported) { + try { + // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal + // points. These environments, along with FF 3.1b1 and 2, + // also allow trailing commas in JSON objects and arrays. + parseSupported = parse("1.") !== 1; + } catch (exception) {} + } + } + } + } catch (exception) { + parseSupported = false; + } + } + isSupported = parseSupported; + } + } + return has[name] = !!isSupported; + } + + if (!has("json")) { + // Common `[[Class]]` name aliases. + var functionClass = "[object Function]", + dateClass = "[object Date]", + numberClass = "[object Number]", + stringClass = "[object String]", + arrayClass = "[object Array]", + booleanClass = "[object Boolean]"; + + // Detect incomplete support for accessing string characters by index. + var charIndexBuggy = has("bug-string-char-index"); + + // Define additional utility methods if the `Date` methods are buggy. + if (!isExtended) { + var floor = Math.floor; + // A mapping between the months of the year and the number of days between + // January 1st and the first of the respective month. + var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; + // Internal: Calculates the number of days between the Unix epoch and the + // first day of the given month. + var getDay = function (year, month) { + return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400); + }; + } + + // Internal: Determines if a property is a direct property of the given + // object. Delegates to the native `Object#hasOwnProperty` method. + if (!(isProperty = objectProto.hasOwnProperty)) { + isProperty = function (property) { + var members = {}, constructor; + if ((members.__proto__ = null, members.__proto__ = { + // The *proto* property cannot be set multiple times in recent + // versions of Firefox and SeaMonkey. + "toString": 1 + }, members).toString != getClass) { + // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but + // supports the mutable *proto* property. + isProperty = function (property) { + // Capture and break the object's prototype chain (see section 8.6.2 + // of the ES 5.1 spec). The parenthesized expression prevents an + // unsafe transformation by the Closure Compiler. + var original = this.__proto__, result = property in (this.__proto__ = null, this); + // Restore the original prototype chain. + this.__proto__ = original; + return result; + }; + } else { + // Capture a reference to the top-level `Object` constructor. + constructor = members.constructor; + // Use the `constructor` property to simulate `Object#hasOwnProperty` in + // other environments. + isProperty = function (property) { + var parent = (this.constructor || constructor).prototype; + return property in this && !(property in parent && this[property] === parent[property]); + }; + } + members = null; + return isProperty.call(this, property); + }; + } + + // Internal: Normalizes the `for...in` iteration algorithm across + // environments. Each enumerated key is yielded to a `callback` function. + forEach = function (object, callback) { + var size = 0, Properties, members, property; + + // Tests for bugs in the current environment's `for...in` algorithm. The + // `valueOf` property inherits the non-enumerable flag from + // `Object.prototype` in older versions of IE, Netscape, and Mozilla. + (Properties = function () { + this.valueOf = 0; + }).prototype.valueOf = 0; + + // Iterate over a new instance of the `Properties` class. + members = new Properties(); + for (property in members) { + // Ignore all properties inherited from `Object.prototype`. + if (isProperty.call(members, property)) { + size++; + } + } + Properties = members = null; + + // Normalize the iteration algorithm. + if (!size) { + // A list of non-enumerable properties inherited from `Object.prototype`. + members = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"]; + // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable + // properties. + forEach = function (object, callback) { + var isFunction = getClass.call(object) == functionClass, property, length; + var hasProperty = !isFunction && typeof object.constructor != "function" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty; + for (property in object) { + // Gecko <= 1.0 enumerates the `prototype` property of functions under + // certain conditions; IE does not. + if (!(isFunction && property == "prototype") && hasProperty.call(object, property)) { + callback(property); + } + } + // Manually invoke the callback for each non-enumerable property. + for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property)); + }; + } else if (size == 2) { + // Safari <= 2.0.4 enumerates shadowed properties twice. + forEach = function (object, callback) { + // Create a set of iterated properties. + var members = {}, isFunction = getClass.call(object) == functionClass, property; + for (property in object) { + // Store each property name to prevent double enumeration. The + // `prototype` property of functions is not enumerated due to cross- + // environment inconsistencies. + if (!(isFunction && property == "prototype") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) { + callback(property); + } + } + }; + } else { + // No bugs detected; use the standard `for...in` algorithm. + forEach = function (object, callback) { + var isFunction = getClass.call(object) == functionClass, property, isConstructor; + for (property in object) { + if (!(isFunction && property == "prototype") && isProperty.call(object, property) && !(isConstructor = property === "constructor")) { + callback(property); + } + } + // Manually invoke the callback for the `constructor` property due to + // cross-environment inconsistencies. + if (isConstructor || isProperty.call(object, (property = "constructor"))) { + callback(property); + } + }; + } + return forEach(object, callback); + }; + + // Public: Serializes a JavaScript `value` as a JSON string. The optional + // `filter` argument may specify either a function that alters how object and + // array members are serialized, or an array of strings and numbers that + // indicates which properties should be serialized. The optional `width` + // argument may be either a string or number that specifies the indentation + // level of the output. + if (!has("json-stringify")) { + // Internal: A map of control characters and their escaped equivalents. + var Escapes = { + 92: "\\\\", + 34: '\\"', + 8: "\\b", + 12: "\\f", + 10: "\\n", + 13: "\\r", + 9: "\\t" + }; + + // Internal: Converts `value` into a zero-padded string such that its + // length is at least equal to `width`. The `width` must be <= 6. + var leadingZeroes = "000000"; + var toPaddedString = function (width, value) { + // The `|| 0` expression is necessary to work around a bug in + // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`. + return (leadingZeroes + (value || 0)).slice(-width); + }; + + // Internal: Double-quotes a string `value`, replacing all ASCII control + // characters (characters with code unit values between 0 and 31) with + // their escaped equivalents. This is an implementation of the + // `Quote(value)` operation defined in ES 5.1 section 15.12.3. + var unicodePrefix = "\\u00"; + var quote = function (value) { + var result = '"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10; + var symbols = useCharIndex && (charIndexBuggy ? value.split("") : value); + for (; index < length; index++) { + var charCode = value.charCodeAt(index); + // If the character is a control character, append its Unicode or + // shorthand escape sequence; otherwise, append the character as-is. + switch (charCode) { + case 8: case 9: case 10: case 12: case 13: case 34: case 92: + result += Escapes[charCode]; + break; + default: + if (charCode < 32) { + result += unicodePrefix + toPaddedString(2, charCode.toString(16)); + break; + } + result += useCharIndex ? symbols[index] : value.charAt(index); + } + } + return result + '"'; + }; + + // Internal: Recursively serializes an object. Implements the + // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations. + var serialize = function (property, object, callback, properties, whitespace, indentation, stack) { + var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result; + try { + // Necessary for host object support. + value = object[property]; + } catch (exception) {} + if (typeof value == "object" && value) { + className = getClass.call(value); + if (className == dateClass && !isProperty.call(value, "toJSON")) { + if (value > -1 / 0 && value < 1 / 0) { + // Dates are serialized according to the `Date#toJSON` method + // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15 + // for the ISO 8601 date time string format. + if (getDay) { + // Manually compute the year, month, date, hours, minutes, + // seconds, and milliseconds if the `getUTC*` methods are + // buggy. Adapted from @Yaffle's `date-shim` project. + date = floor(value / 864e5); + for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++); + for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++); + date = 1 + date - getDay(year, month); + // The `time` value specifies the time within the day (see ES + // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used + // to compute `A modulo B`, as the `%` operator does not + // correspond to the `modulo` operation for negative numbers. + time = (value % 864e5 + 864e5) % 864e5; + // The hours, minutes, seconds, and milliseconds are obtained by + // decomposing the time within the day. See section 15.9.1.10. + hours = floor(time / 36e5) % 24; + minutes = floor(time / 6e4) % 60; + seconds = floor(time / 1e3) % 60; + milliseconds = time % 1e3; + } else { + year = value.getUTCFullYear(); + month = value.getUTCMonth(); + date = value.getUTCDate(); + hours = value.getUTCHours(); + minutes = value.getUTCMinutes(); + seconds = value.getUTCSeconds(); + milliseconds = value.getUTCMilliseconds(); + } + // Serialize extended years correctly. + value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) + + "-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) + + // Months, dates, hours, minutes, and seconds should have two + // digits; milliseconds should have three. + "T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) + + // Milliseconds are optional in ES 5.0, but required in 5.1. + "." + toPaddedString(3, milliseconds) + "Z"; + } else { + value = null; + } + } else if (typeof value.toJSON == "function" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, "toJSON"))) { + // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the + // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3 + // ignores all `toJSON` methods on these objects unless they are + // defined directly on an instance. + value = value.toJSON(property); + } + } + if (callback) { + // If a replacement function was provided, call it to obtain the value + // for serialization. + value = callback.call(object, property, value); + } + if (value === null) { + return "null"; + } + className = getClass.call(value); + if (className == booleanClass) { + // Booleans are represented literally. + return "" + value; + } else if (className == numberClass) { + // JSON numbers must be finite. `Infinity` and `NaN` are serialized as + // `"null"`. + return value > -1 / 0 && value < 1 / 0 ? "" + value : "null"; + } else if (className == stringClass) { + // Strings are double-quoted and escaped. + return quote("" + value); + } + // Recursively serialize objects and arrays. + if (typeof value == "object") { + // Check for cyclic structures. This is a linear search; performance + // is inversely proportional to the number of unique nested objects. + for (length = stack.length; length--;) { + if (stack[length] === value) { + // Cyclic structures cannot be serialized by `JSON.stringify`. + throw TypeError(); + } + } + // Add the object to the stack of traversed objects. + stack.push(value); + results = []; + // Save the current indentation level and indent one additional level. + prefix = indentation; + indentation += whitespace; + if (className == arrayClass) { + // Recursively serialize array elements. + for (index = 0, length = value.length; index < length; index++) { + element = serialize(index, value, callback, properties, whitespace, indentation, stack); + results.push(element === undef ? "null" : element); + } + result = results.length ? (whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : ("[" + results.join(",") + "]")) : "[]"; + } else { + // Recursively serialize object members. Members are selected from + // either a user-specified list of property names, or the object + // itself. + forEach(properties || value, function (property) { + var element = serialize(property, value, callback, properties, whitespace, indentation, stack); + if (element !== undef) { + // According to ES 5.1 section 15.12.3: "If `gap` {whitespace} + // is not the empty string, let `member` {quote(property) + ":"} + // be the concatenation of `member` and the `space` character." + // The "`space` character" refers to the literal space + // character, not the `space` {width} argument provided to + // `JSON.stringify`. + results.push(quote(property) + ":" + (whitespace ? " " : "") + element); + } + }); + result = results.length ? (whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : ("{" + results.join(",") + "}")) : "{}"; + } + // Remove the object from the traversed object stack. + stack.pop(); + return result; + } + }; + + // Public: `JSON.stringify`. See ES 5.1 section 15.12.3. + exports.stringify = function (source, filter, width) { + var whitespace, callback, properties, className; + if (objectTypes[typeof filter] && filter) { + if ((className = getClass.call(filter)) == functionClass) { + callback = filter; + } else if (className == arrayClass) { + // Convert the property names array into a makeshift set. + properties = {}; + for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1)); + } + } + if (width) { + if ((className = getClass.call(width)) == numberClass) { + // Convert the `width` to an integer and create a string containing + // `width` number of space characters. + if ((width -= width % 1) > 0) { + for (whitespace = "", width > 10 && (width = 10); whitespace.length < width; whitespace += " "); + } + } else if (className == stringClass) { + whitespace = width.length <= 10 ? width : width.slice(0, 10); + } + } + // Opera <= 7.54u2 discards the values associated with empty string keys + // (`""`) only if they are used directly within an object member list + // (e.g., `!("" in { "": 1})`). + return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []); + }; + } + + // Public: Parses a JSON source string. + if (!has("json-parse")) { + var fromCharCode = String.fromCharCode; + + // Internal: A map of escaped control characters and their unescaped + // equivalents. + var Unescapes = { + 92: "\\", + 34: '"', + 47: "/", + 98: "\b", + 116: "\t", + 110: "\n", + 102: "\f", + 114: "\r" + }; + + // Internal: Stores the parser state. + var Index, Source; + + // Internal: Resets the parser state and throws a `SyntaxError`. + var abort = function () { + Index = Source = null; + throw SyntaxError(); + }; + + // Internal: Returns the next token, or `"$"` if the parser has reached + // the end of the source string. A token may be a string, number, `null` + // literal, or Boolean literal. + var lex = function () { + var source = Source, length = source.length, value, begin, position, isSigned, charCode; + while (Index < length) { + charCode = source.charCodeAt(Index); + switch (charCode) { + case 9: case 10: case 13: case 32: + // Skip whitespace tokens, including tabs, carriage returns, line + // feeds, and space characters. + Index++; + break; + case 123: case 125: case 91: case 93: case 58: case 44: + // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at + // the current position. + value = charIndexBuggy ? source.charAt(Index) : source[Index]; + Index++; + return value; + case 34: + // `"` delimits a JSON string; advance to the next character and + // begin parsing the string. String tokens are prefixed with the + // sentinel `@` character to distinguish them from punctuators and + // end-of-string tokens. + for (value = "@", Index++; Index < length;) { + charCode = source.charCodeAt(Index); + if (charCode < 32) { + // Unescaped ASCII control characters (those with a code unit + // less than the space character) are not permitted. + abort(); + } else if (charCode == 92) { + // A reverse solidus (`\`) marks the beginning of an escaped + // control character (including `"`, `\`, and `/`) or Unicode + // escape sequence. + charCode = source.charCodeAt(++Index); + switch (charCode) { + case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114: + // Revive escaped control characters. + value += Unescapes[charCode]; + Index++; + break; + case 117: + // `\u` marks the beginning of a Unicode escape sequence. + // Advance to the first character and validate the + // four-digit code point. + begin = ++Index; + for (position = Index + 4; Index < position; Index++) { + charCode = source.charCodeAt(Index); + // A valid sequence comprises four hexdigits (case- + // insensitive) that form a single hexadecimal value. + if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) { + // Invalid Unicode escape sequence. + abort(); + } + } + // Revive the escaped character. + value += fromCharCode("0x" + source.slice(begin, Index)); + break; + default: + // Invalid escape sequence. + abort(); + } + } else { + if (charCode == 34) { + // An unescaped double-quote character marks the end of the + // string. + break; + } + charCode = source.charCodeAt(Index); + begin = Index; + // Optimize for the common case where a string is valid. + while (charCode >= 32 && charCode != 92 && charCode != 34) { + charCode = source.charCodeAt(++Index); + } + // Append the string as-is. + value += source.slice(begin, Index); + } + } + if (source.charCodeAt(Index) == 34) { + // Advance to the next character and return the revived string. + Index++; + return value; + } + // Unterminated string. + abort(); + default: + // Parse numbers and literals. + begin = Index; + // Advance past the negative sign, if one is specified. + if (charCode == 45) { + isSigned = true; + charCode = source.charCodeAt(++Index); + } + // Parse an integer or floating-point value. + if (charCode >= 48 && charCode <= 57) { + // Leading zeroes are interpreted as octal literals. + if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) { + // Illegal octal literal. + abort(); + } + isSigned = false; + // Parse the integer component. + for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++); + // Floats cannot contain a leading decimal point; however, this + // case is already accounted for by the parser. + if (source.charCodeAt(Index) == 46) { + position = ++Index; + // Parse the decimal component. + for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++); + if (position == Index) { + // Illegal trailing decimal. + abort(); + } + Index = position; + } + // Parse exponents. The `e` denoting the exponent is + // case-insensitive. + charCode = source.charCodeAt(Index); + if (charCode == 101 || charCode == 69) { + charCode = source.charCodeAt(++Index); + // Skip past the sign following the exponent, if one is + // specified. + if (charCode == 43 || charCode == 45) { + Index++; + } + // Parse the exponential component. + for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++); + if (position == Index) { + // Illegal empty exponent. + abort(); + } + Index = position; + } + // Coerce the parsed value to a JavaScript number. + return +source.slice(begin, Index); + } + // A negative sign may only precede numbers. + if (isSigned) { + abort(); + } + // `true`, `false`, and `null` literals. + if (source.slice(Index, Index + 4) == "true") { + Index += 4; + return true; + } else if (source.slice(Index, Index + 5) == "false") { + Index += 5; + return false; + } else if (source.slice(Index, Index + 4) == "null") { + Index += 4; + return null; + } + // Unrecognized token. + abort(); + } + } + // Return the sentinel `$` character if the parser has reached the end + // of the source string. + return "$"; + }; + + // Internal: Parses a JSON `value` token. + var get = function (value) { + var results, hasMembers; + if (value == "$") { + // Unexpected end of input. + abort(); + } + if (typeof value == "string") { + if ((charIndexBuggy ? value.charAt(0) : value[0]) == "@") { + // Remove the sentinel `@` character. + return value.slice(1); + } + // Parse object and array literals. + if (value == "[") { + // Parses a JSON array, returning a new JavaScript array. + results = []; + for (;; hasMembers || (hasMembers = true)) { + value = lex(); + // A closing square bracket marks the end of the array literal. + if (value == "]") { + break; + } + // If the array literal contains elements, the current token + // should be a comma separating the previous element from the + // next. + if (hasMembers) { + if (value == ",") { + value = lex(); + if (value == "]") { + // Unexpected trailing `,` in array literal. + abort(); + } + } else { + // A `,` must separate each array element. + abort(); + } + } + // Elisions and leading commas are not permitted. + if (value == ",") { + abort(); + } + results.push(get(value)); + } + return results; + } else if (value == "{") { + // Parses a JSON object, returning a new JavaScript object. + results = {}; + for (;; hasMembers || (hasMembers = true)) { + value = lex(); + // A closing curly brace marks the end of the object literal. + if (value == "}") { + break; + } + // If the object literal contains members, the current token + // should be a comma separator. + if (hasMembers) { + if (value == ",") { + value = lex(); + if (value == "}") { + // Unexpected trailing `,` in object literal. + abort(); + } + } else { + // A `,` must separate each object member. + abort(); + } + } + // Leading commas are not permitted, object property names must be + // double-quoted strings, and a `:` must separate each property + // name and value. + if (value == "," || typeof value != "string" || (charIndexBuggy ? value.charAt(0) : value[0]) != "@" || lex() != ":") { + abort(); + } + results[value.slice(1)] = get(lex()); + } + return results; + } + // Unexpected token encountered. + abort(); + } + return value; + }; + + // Internal: Updates a traversed object member. + var update = function (source, property, callback) { + var element = walk(source, property, callback); + if (element === undef) { + delete source[property]; + } else { + source[property] = element; + } + }; + + // Internal: Recursively traverses a parsed JSON object, invoking the + // `callback` function for each value. This is an implementation of the + // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2. + var walk = function (source, property, callback) { + var value = source[property], length; + if (typeof value == "object" && value) { + // `forEach` can't be used to traverse an array in Opera <= 8.54 + // because its `Object#hasOwnProperty` implementation returns `false` + // for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`). + if (getClass.call(value) == arrayClass) { + for (length = value.length; length--;) { + update(value, length, callback); + } + } else { + forEach(value, function (property) { + update(value, property, callback); + }); + } + } + return callback.call(source, property, value); + }; + + // Public: `JSON.parse`. See ES 5.1 section 15.12.2. + exports.parse = function (source, callback) { + var result, value; + Index = 0; + Source = "" + source; + result = get(lex()); + // If a JSON string contains multiple tokens, it is invalid. + if (lex() != "$") { + abort(); + } + // Reset the parser state. + Index = Source = null; + return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[""] = result, value), "", callback) : result; + }; + } + } + + exports["runInContext"] = runInContext; + return exports; + } + + if (freeExports && !isLoader) { + // Export for CommonJS environments. + runInContext(root, freeExports); + } else { + // Export for web browsers and JavaScript engines. + var nativeJSON = root.JSON, + previousJSON = root["JSON3"], + isRestored = false; + + var JSON3 = runInContext(root, (root["JSON3"] = { + // Public: Restores the original value of the global `JSON` object and + // returns a reference to the `JSON3` object. + "noConflict": function () { + if (!isRestored) { + isRestored = true; + root.JSON = nativeJSON; + root["JSON3"] = previousJSON; + nativeJSON = previousJSON = null; + } + return JSON3; + } + })); + + root.JSON = { + "parse": JSON3.parse, + "stringify": JSON3.stringify + }; + } + + // Export for asynchronous module loaders. + if (isLoader) { + define(function () { + return JSON3; + }); + } +}).call(this); + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],4:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],5:[function(require,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var util = require('./util'); +var has = Object.prototype.hasOwnProperty; + +/** + * A data structure which is a combination of an array and a set. Adding a new + * member is O(1), testing for membership is O(1), and finding the index of an + * element is O(1). Removing elements from the set is not supported. Only + * strings are supported for membership. + */ +function ArraySet() { + this._array = []; + this._set = Object.create(null); +} + +/** + * Static method for creating ArraySet instances from an existing array. + */ +ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; +}; + +/** + * Return how many unique items are in this ArraySet. If duplicates have been + * added, than those do not count towards the size. + * + * @returns Number + */ +ArraySet.prototype.size = function ArraySet_size() { + return Object.getOwnPropertyNames(this._set).length; +}; + +/** + * Add the given string to this set. + * + * @param String aStr + */ +ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = util.toSetString(aStr); + var isDuplicate = has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + this._set[sStr] = idx; + } +}; + +/** + * Is the given string a member of this set? + * + * @param String aStr + */ +ArraySet.prototype.has = function ArraySet_has(aStr) { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); +}; + +/** + * What is the index of the given string in the array? + * + * @param String aStr + */ +ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + throw new Error('"' + aStr + '" is not in the set.'); +}; + +/** + * What is the element at the given index? + * + * @param Number aIdx + */ +ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error('No element indexed by ' + aIdx); +}; + +/** + * Returns the array representation of this set (which has the proper indices + * indicated by indexOf). Note that this is a copy of the internal array used + * for storing the members so that no one can mess with internal state. + */ +ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); +}; + +exports.ArraySet = ArraySet; + +},{"./util":11}],6:[function(require,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + * + * Based on the Base 64 VLQ implementation in Closure Compiler: + * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java + * + * Copyright 2011 The Closure Compiler Authors. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +var base64 = require('./base64'); + +// A single base 64 digit can contain 6 bits of data. For the base 64 variable +// length quantities we use in the source map spec, the first bit is the sign, +// the next four bits are the actual value, and the 6th bit is the +// continuation bit. The continuation bit tells us whether there are more +// digits in this value following this digit. +// +// Continuation +// | Sign +// | | +// V V +// 101011 + +var VLQ_BASE_SHIFT = 5; + +// binary: 100000 +var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + +// binary: 011111 +var VLQ_BASE_MASK = VLQ_BASE - 1; + +// binary: 100000 +var VLQ_CONTINUATION_BIT = VLQ_BASE; + +/** + * Converts from a two-complement value to a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + */ +function toVLQSigned(aValue) { + return aValue < 0 + ? ((-aValue) << 1) + 1 + : (aValue << 1) + 0; +} + +/** + * Converts to a two-complement value from a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + */ +function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative + ? -shifted + : shifted; +} + +/** + * Returns the base 64 VLQ encoded value. + */ +exports.encode = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + + var vlq = toVLQSigned(aValue); + + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + // There are still more digits in this value, so we must make sure the + // continuation bit is marked. + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + + return encoded; +}; + +/** + * Decodes the next base 64 VLQ value from the given string and returns the + * value and the rest of the string via the out parameter. + */ +exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + + do { + if (aIndex >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + + digit = base64.decode(aStr.charCodeAt(aIndex++)); + if (digit === -1) { + throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); + } + + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + + aOutParam.value = fromVLQSigned(result); + aOutParam.rest = aIndex; +}; + +},{"./base64":7}],7:[function(require,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); + +/** + * Encode an integer in the range of 0 to 63 to a single base 64 digit. + */ +exports.encode = function (number) { + if (0 <= number && number < intToCharMap.length) { + return intToCharMap[number]; + } + throw new TypeError("Must be between 0 and 63: " + number); +}; + +/** + * Decode a single base 64 character code digit to an integer. Returns -1 on + * failure. + */ +exports.decode = function (charCode) { + var bigA = 65; // 'A' + var bigZ = 90; // 'Z' + + var littleA = 97; // 'a' + var littleZ = 122; // 'z' + + var zero = 48; // '0' + var nine = 57; // '9' + + var plus = 43; // '+' + var slash = 47; // '/' + + var littleOffset = 26; + var numberOffset = 52; + + // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ + if (bigA <= charCode && charCode <= bigZ) { + return (charCode - bigA); + } + + // 26 - 51: abcdefghijklmnopqrstuvwxyz + if (littleA <= charCode && charCode <= littleZ) { + return (charCode - littleA + littleOffset); + } + + // 52 - 61: 0123456789 + if (zero <= charCode && charCode <= nine) { + return (charCode - zero + numberOffset); + } + + // 62: + + if (charCode == plus) { + return 62; + } + + // 63: / + if (charCode == slash) { + return 63; + } + + // Invalid base64 digit. + return -1; +}; + +},{}],8:[function(require,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +exports.GREATEST_LOWER_BOUND = 1; +exports.LEAST_UPPER_BOUND = 2; + +/** + * Recursive implementation of binary search. + * + * @param aLow Indices here and lower do not contain the needle. + * @param aHigh Indices here and higher do not contain the needle. + * @param aNeedle The element being searched for. + * @param aHaystack The non-empty array being searched. + * @param aCompare Function which takes two elements and returns -1, 0, or 1. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + */ +function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { + // This function terminates when one of the following is true: + // + // 1. We find the exact element we are looking for. + // + // 2. We did not find the exact element, but we can return the index of + // the next-closest element. + // + // 3. We did not find the exact element, and there is no next-closest + // element than the one we are searching for, so we return -1. + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + // Found the element we are looking for. + return mid; + } + else if (cmp > 0) { + // Our needle is greater than aHaystack[mid]. + if (aHigh - mid > 1) { + // The element is in the upper half. + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); + } + + // The exact needle element was not found in this haystack. Determine if + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return aHigh < aHaystack.length ? aHigh : -1; + } else { + return mid; + } + } + else { + // Our needle is less than aHaystack[mid]. + if (mid - aLow > 1) { + // The element is in the lower half. + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); + } + + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return mid; + } else { + return aLow < 0 ? -1 : aLow; + } + } +} + +/** + * This is an implementation of binary search which will always try and return + * the index of the closest element if there is no exact hit. This is because + * mappings between original and generated line/col pairs are single points, + * and there is an implicit region between each of them, so a miss just means + * that you aren't on the very start of a region. + * + * @param aNeedle The element you are looking for. + * @param aHaystack The array that is being searched. + * @param aCompare A function which takes the needle and an element in the + * array and returns -1, 0, or 1 depending on whether the needle is less + * than, equal to, or greater than the element, respectively. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. + */ +exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { + if (aHaystack.length === 0) { + return -1; + } + + var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, + aCompare, aBias || exports.GREATEST_LOWER_BOUND); + if (index < 0) { + return -1; + } + + // We have found either the exact element, or the next-closest element than + // the one we are searching for. However, there may be more than one such + // element. Make sure we always return the smallest of these. + while (index - 1 >= 0) { + if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { + break; + } + --index; + } + + return index; +}; + +},{}],9:[function(require,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +// It turns out that some (most?) JavaScript engines don't self-host +// `Array.prototype.sort`. This makes sense because C++ will likely remain +// faster than JS when doing raw CPU-intensive sorting. However, when using a +// custom comparator function, calling back and forth between the VM's C++ and +// JIT'd JS is rather slow *and* loses JIT type information, resulting in +// worse generated code for the comparator function than would be optimal. In +// fact, when sorting with a comparator, these costs outweigh the benefits of +// sorting in C++. By using our own JS-implemented Quick Sort (below), we get +// a ~3500ms mean speed-up in `bench/bench.html`. + +/** + * Swap the elements indexed by `x` and `y` in the array `ary`. + * + * @param {Array} ary + * The array. + * @param {Number} x + * The index of the first item. + * @param {Number} y + * The index of the second item. + */ +function swap(ary, x, y) { + var temp = ary[x]; + ary[x] = ary[y]; + ary[y] = temp; +} + +/** + * Returns a random integer within the range `low .. high` inclusive. + * + * @param {Number} low + * The lower bound on the range. + * @param {Number} high + * The upper bound on the range. + */ +function randomIntInRange(low, high) { + return Math.round(low + (Math.random() * (high - low))); +} + +/** + * The Quick Sort algorithm. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + * @param {Number} p + * Start index of the array + * @param {Number} r + * End index of the array + */ +function doQuickSort(ary, comparator, p, r) { + // If our lower bound is less than our upper bound, we (1) partition the + // array into two pieces and (2) recurse on each half. If it is not, this is + // the empty array and our base case. + + if (p < r) { + // (1) Partitioning. + // + // The partitioning chooses a pivot between `p` and `r` and moves all + // elements that are less than or equal to the pivot to the before it, and + // all the elements that are greater than it after it. The effect is that + // once partition is done, the pivot is in the exact place it will be when + // the array is put in sorted order, and it will not need to be moved + // again. This runs in O(n) time. + + // Always choose a random pivot so that an input array which is reverse + // sorted does not cause O(n^2) running time. + var pivotIndex = randomIntInRange(p, r); + var i = p - 1; + + swap(ary, pivotIndex, r); + var pivot = ary[r]; + + // Immediately after `j` is incremented in this loop, the following hold + // true: + // + // * Every element in `ary[p .. i]` is less than or equal to the pivot. + // + // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. + for (var j = p; j < r; j++) { + if (comparator(ary[j], pivot) <= 0) { + i += 1; + swap(ary, i, j); + } + } + + swap(ary, i + 1, j); + var q = i + 1; + + // (2) Recurse on each half. + + doQuickSort(ary, comparator, p, q - 1); + doQuickSort(ary, comparator, q + 1, r); + } +} + +/** + * Sort the given array in-place with the given comparator function. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + */ +exports.quickSort = function (ary, comparator) { + doQuickSort(ary, comparator, 0, ary.length - 1); +}; + +},{}],10:[function(require,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var util = require('./util'); +var binarySearch = require('./binary-search'); +var ArraySet = require('./array-set').ArraySet; +var base64VLQ = require('./base64-vlq'); +var quickSort = require('./quick-sort').quickSort; + +function SourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + return sourceMap.sections != null + ? new IndexedSourceMapConsumer(sourceMap) + : new BasicSourceMapConsumer(sourceMap); +} + +SourceMapConsumer.fromSourceMap = function(aSourceMap) { + return BasicSourceMapConsumer.fromSourceMap(aSourceMap); +} + +/** + * The version of the source mapping spec that we are consuming. + */ +SourceMapConsumer.prototype._version = 3; + +// `__generatedMappings` and `__originalMappings` are arrays that hold the +// parsed mapping coordinates from the source map's "mappings" attribute. They +// are lazily instantiated, accessed via the `_generatedMappings` and +// `_originalMappings` getters respectively, and we only parse the mappings +// and create these arrays once queried for a source location. We jump through +// these hoops because there can be many thousands of mappings, and parsing +// them is expensive, so we only want to do it if we must. +// +// Each object in the arrays is of the form: +// +// { +// generatedLine: The line number in the generated code, +// generatedColumn: The column number in the generated code, +// source: The path to the original source file that generated this +// chunk of code, +// originalLine: The line number in the original source that +// corresponds to this chunk of generated code, +// originalColumn: The column number in the original source that +// corresponds to this chunk of generated code, +// name: The name of the original symbol which generated this chunk of +// code. +// } +// +// All properties except for `generatedLine` and `generatedColumn` can be +// `null`. +// +// `_generatedMappings` is ordered by the generated positions. +// +// `_originalMappings` is ordered by the original positions. + +SourceMapConsumer.prototype.__generatedMappings = null; +Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + get: function () { + if (!this.__generatedMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } +}); + +SourceMapConsumer.prototype.__originalMappings = null; +Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + get: function () { + if (!this.__originalMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } +}); + +SourceMapConsumer.prototype._charIsMappingSeparator = + function SourceMapConsumer_charIsMappingSeparator(aStr, index) { + var c = aStr.charAt(index); + return c === ";" || c === ","; + }; + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + throw new Error("Subclasses must implement _parseMappings"); + }; + +SourceMapConsumer.GENERATED_ORDER = 1; +SourceMapConsumer.ORIGINAL_ORDER = 2; + +SourceMapConsumer.GREATEST_LOWER_BOUND = 1; +SourceMapConsumer.LEAST_UPPER_BOUND = 2; + +/** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ +SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source === null ? null : this._sources.at(mapping.source); + if (source != null && sourceRoot != null) { + source = util.join(sourceRoot, source); + } + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name === null ? null : this._names.at(mapping.name) + }; + }, this).forEach(aCallback, context); + }; + +/** + * Returns all generated line and column information for the original source, + * line, and column provided. If no column is provided, returns all mappings + * corresponding to a either the line we are searching for or the next + * closest line that has any mappings. Otherwise, returns all mappings + * corresponding to the given line and either the column we are searching for + * or the next closest column that has any offsets. + * + * The only argument is an object with the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: Optional. the column number in the original source. + * + * and an array of objects is returned, each with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ +SourceMapConsumer.prototype.allGeneratedPositionsFor = + function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { + var line = util.getArg(aArgs, 'line'); + + // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping + // returns the index of the closest mapping less than the needle. By + // setting needle.originalColumn to 0, we thus find the last mapping for + // the given line, provided such a mapping exists. + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: line, + originalColumn: util.getArg(aArgs, 'column', 0) + }; + + if (this.sourceRoot != null) { + needle.source = util.relative(this.sourceRoot, needle.source); + } + if (!this._sources.has(needle.source)) { + return []; + } + needle.source = this._sources.indexOf(needle.source); + + var mappings = []; + + var index = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + binarySearch.LEAST_UPPER_BOUND); + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (aArgs.column === undefined) { + var originalLine = mapping.originalLine; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we found. Since + // mappings are sorted, this is guaranteed to find all mappings for + // the line we found. + while (mapping && mapping.originalLine === originalLine) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } else { + var originalColumn = mapping.originalColumn; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we were searching for. + // Since mappings are sorted, this is guaranteed to find all mappings for + // the line we are searching for. + while (mapping && + mapping.originalLine === line && + mapping.originalColumn == originalColumn) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } + } + + return mappings; + }; + +exports.SourceMapConsumer = SourceMapConsumer; + +/** + * A BasicSourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The only parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: Optional. The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ +function BasicSourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + sources = sources + .map(String) + // Some source maps produce relative source paths like "./foo.js" instead of + // "foo.js". Normalize these first so that future comparisons will succeed. + // See bugzil.la/1090768. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet.fromArray(names.map(String), true); + this._sources = ArraySet.fromArray(sources, true); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this.file = file; +} + +BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); +BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; + +/** + * Create a BasicSourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @returns BasicSourceMapConsumer + */ +BasicSourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap) { + var smc = Object.create(BasicSourceMapConsumer.prototype); + + var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + + // Because we are modifying the entries (by converting string sources and + // names to indices into the sources and names ArraySets), we have to make + // a copy of the entry or else bad things happen. Shared mutable state + // strikes again! See github issue #191. + + var generatedMappings = aSourceMap._mappings.toArray().slice(); + var destGeneratedMappings = smc.__generatedMappings = []; + var destOriginalMappings = smc.__originalMappings = []; + + for (var i = 0, length = generatedMappings.length; i < length; i++) { + var srcMapping = generatedMappings[i]; + var destMapping = new Mapping; + destMapping.generatedLine = srcMapping.generatedLine; + destMapping.generatedColumn = srcMapping.generatedColumn; + + if (srcMapping.source) { + destMapping.source = sources.indexOf(srcMapping.source); + destMapping.originalLine = srcMapping.originalLine; + destMapping.originalColumn = srcMapping.originalColumn; + + if (srcMapping.name) { + destMapping.name = names.indexOf(srcMapping.name); + } + + destOriginalMappings.push(destMapping); + } + + destGeneratedMappings.push(destMapping); + } + + quickSort(smc.__originalMappings, util.compareByOriginalPositions); + + return smc; + }; + +/** + * The version of the source mapping spec that we are consuming. + */ +BasicSourceMapConsumer.prototype._version = 3; + +/** + * The list of original sources. + */ +Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { + get: function () { + return this._sources.toArray().map(function (s) { + return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; + }, this); + } +}); + +/** + * Provide the JIT with a nice shape / hidden class. + */ +function Mapping() { + this.generatedLine = 0; + this.generatedColumn = 0; + this.source = null; + this.originalLine = null; + this.originalColumn = null; + this.name = null; +} + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +BasicSourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var length = aStr.length; + var index = 0; + var cachedSegments = {}; + var temp = {}; + var originalMappings = []; + var generatedMappings = []; + var mapping, str, segment, end, value; + + while (index < length) { + if (aStr.charAt(index) === ';') { + generatedLine++; + index++; + previousGeneratedColumn = 0; + } + else if (aStr.charAt(index) === ',') { + index++; + } + else { + mapping = new Mapping(); + mapping.generatedLine = generatedLine; + + // Because each offset is encoded relative to the previous one, + // many segments often have the same encoding. We can exploit this + // fact by caching the parsed variable length fields of each segment, + // allowing us to avoid a second parse if we encounter the same + // segment again. + for (end = index; end < length; end++) { + if (this._charIsMappingSeparator(aStr, end)) { + break; + } + } + str = aStr.slice(index, end); + + segment = cachedSegments[str]; + if (segment) { + index += str.length; + } else { + segment = []; + while (index < end) { + base64VLQ.decode(aStr, index, temp); + value = temp.value; + index = temp.rest; + segment.push(value); + } + + if (segment.length === 2) { + throw new Error('Found a source, but no line and column'); + } + + if (segment.length === 3) { + throw new Error('Found a source and line, but no column'); + } + + cachedSegments[str] = segment; + } + + // Generated column. + mapping.generatedColumn = previousGeneratedColumn + segment[0]; + previousGeneratedColumn = mapping.generatedColumn; + + if (segment.length > 1) { + // Original source. + mapping.source = previousSource + segment[1]; + previousSource += segment[1]; + + // Original line. + mapping.originalLine = previousOriginalLine + segment[2]; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + + // Original column. + mapping.originalColumn = previousOriginalColumn + segment[3]; + previousOriginalColumn = mapping.originalColumn; + + if (segment.length > 4) { + // Original name. + mapping.name = previousName + segment[4]; + previousName += segment[4]; + } + } + + generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + originalMappings.push(mapping); + } + } + } + + quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); + this.__generatedMappings = generatedMappings; + + quickSort(originalMappings, util.compareByOriginalPositions); + this.__originalMappings = originalMappings; + }; + +/** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ +BasicSourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator, aBias) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator, aBias); + }; + +/** + * Compute the last column for each generated mapping. The last column is + * inclusive. + */ +BasicSourceMapConsumer.prototype.computeColumnSpans = + function SourceMapConsumer_computeColumnSpans() { + for (var index = 0; index < this._generatedMappings.length; ++index) { + var mapping = this._generatedMappings[index]; + + // Mappings do not contain a field for the last generated columnt. We + // can come up with an optimistic estimate, however, by assuming that + // mappings are contiguous (i.e. given two consecutive mappings, the + // first mapping ends where the second one starts). + if (index + 1 < this._generatedMappings.length) { + var nextMapping = this._generatedMappings[index + 1]; + + if (mapping.generatedLine === nextMapping.generatedLine) { + mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; + continue; + } + } + + // The last mapping for each line spans the entire line. + mapping.lastGeneratedColumn = Infinity; + } + }; + +/** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ +BasicSourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositionsDeflated, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._generatedMappings[index]; + + if (mapping.generatedLine === needle.generatedLine) { + var source = util.getArg(mapping, 'source', null); + if (source !== null) { + source = this._sources.at(source); + if (this.sourceRoot != null) { + source = util.join(this.sourceRoot, source); + } + } + var name = util.getArg(mapping, 'name', null); + if (name !== null) { + name = this._names.at(name); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: name + }; + } + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + +/** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ +BasicSourceMapConsumer.prototype.hasContentsOfAllSources = + function BasicSourceMapConsumer_hasContentsOfAllSources() { + if (!this.sourcesContent) { + return false; + } + return this.sourcesContent.length >= this._sources.size() && + !this.sourcesContent.some(function (sc) { return sc == null; }); + }; + +/** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ +BasicSourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + if (!this.sourcesContent) { + return null; + } + + if (this.sourceRoot != null) { + aSource = util.relative(this.sourceRoot, aSource); + } + + if (this._sources.has(aSource)) { + return this.sourcesContent[this._sources.indexOf(aSource)]; + } + + var url; + if (this.sourceRoot != null + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + aSource)) { + return this.sourcesContent[this._sources.indexOf("/" + aSource)]; + } + } + + // This function is used recursively from + // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we + // don't want to throw if we can't find the source - we just want to + // return null, so we provide a flag to exit gracefully. + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + +/** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ +BasicSourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var source = util.getArg(aArgs, 'source'); + if (this.sourceRoot != null) { + source = util.relative(this.sourceRoot, source); + } + if (!this._sources.has(source)) { + return { + line: null, + column: null, + lastColumn: null + }; + } + source = this._sources.indexOf(source); + + var needle = { + source: source, + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (mapping.source === needle.source) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }; + } + } + + return { + line: null, + column: null, + lastColumn: null + }; + }; + +exports.BasicSourceMapConsumer = BasicSourceMapConsumer; + +/** + * An IndexedSourceMapConsumer instance represents a parsed source map which + * we can query for information. It differs from BasicSourceMapConsumer in + * that it takes "indexed" source maps (i.e. ones with a "sections" field) as + * input. + * + * The only parameter is a raw source map (either as a JSON string, or already + * parsed to an object). According to the spec for indexed source maps, they + * have the following attributes: + * + * - version: Which version of the source map spec this map is following. + * - file: Optional. The generated file this source map is associated with. + * - sections: A list of section definitions. + * + * Each value under the "sections" field has two fields: + * - offset: The offset into the original specified at which this section + * begins to apply, defined as an object with a "line" and "column" + * field. + * - map: A source map definition. This source map could also be indexed, + * but doesn't have to be. + * + * Instead of the "map" field, it's also possible to have a "url" field + * specifying a URL to retrieve a source map from, but that's currently + * unsupported. + * + * Here's an example source map, taken from the source map spec[0], but + * modified to omit a section which uses the "url" field. + * + * { + * version : 3, + * file: "app.js", + * sections: [{ + * offset: {line:100, column:10}, + * map: { + * version : 3, + * file: "section.js", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AAAA,E;;ABCDE;" + * } + * }], + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt + */ +function IndexedSourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sections = util.getArg(sourceMap, 'sections'); + + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + this._sources = new ArraySet(); + this._names = new ArraySet(); + + var lastOffset = { + line: -1, + column: 0 + }; + this._sections = sections.map(function (s) { + if (s.url) { + // The url field will require support for asynchronicity. + // See https://github.com/mozilla/source-map/issues/16 + throw new Error('Support for url field in sections not implemented.'); + } + var offset = util.getArg(s, 'offset'); + var offsetLine = util.getArg(offset, 'line'); + var offsetColumn = util.getArg(offset, 'column'); + + if (offsetLine < lastOffset.line || + (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { + throw new Error('Section offsets must be ordered and non-overlapping.'); + } + lastOffset = offset; + + return { + generatedOffset: { + // The offset fields are 0-based, but we use 1-based indices when + // encoding/decoding from VLQ. + generatedLine: offsetLine + 1, + generatedColumn: offsetColumn + 1 + }, + consumer: new SourceMapConsumer(util.getArg(s, 'map')) + } + }); +} + +IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); +IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; + +/** + * The version of the source mapping spec that we are consuming. + */ +IndexedSourceMapConsumer.prototype._version = 3; + +/** + * The list of original sources. + */ +Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { + get: function () { + var sources = []; + for (var i = 0; i < this._sections.length; i++) { + for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { + sources.push(this._sections[i].consumer.sources[j]); + } + } + return sources; + } +}); + +/** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ +IndexedSourceMapConsumer.prototype.originalPositionFor = + function IndexedSourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + // Find the section containing the generated position we're trying to map + // to an original position. + var sectionIndex = binarySearch.search(needle, this._sections, + function(needle, section) { + var cmp = needle.generatedLine - section.generatedOffset.generatedLine; + if (cmp) { + return cmp; + } + + return (needle.generatedColumn - + section.generatedOffset.generatedColumn); + }); + var section = this._sections[sectionIndex]; + + if (!section) { + return { + source: null, + line: null, + column: null, + name: null + }; + } + + return section.consumer.originalPositionFor({ + line: needle.generatedLine - + (section.generatedOffset.generatedLine - 1), + column: needle.generatedColumn - + (section.generatedOffset.generatedLine === needle.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + bias: aArgs.bias + }); + }; + +/** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ +IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = + function IndexedSourceMapConsumer_hasContentsOfAllSources() { + return this._sections.every(function (s) { + return s.consumer.hasContentsOfAllSources(); + }); + }; + +/** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ +IndexedSourceMapConsumer.prototype.sourceContentFor = + function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + var content = section.consumer.sourceContentFor(aSource, true); + if (content) { + return content; + } + } + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + +/** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ +IndexedSourceMapConsumer.prototype.generatedPositionFor = + function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + // Only consider this section if the requested source is in the list of + // sources of the consumer. + if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { + continue; + } + var generatedPosition = section.consumer.generatedPositionFor(aArgs); + if (generatedPosition) { + var ret = { + line: generatedPosition.line + + (section.generatedOffset.generatedLine - 1), + column: generatedPosition.column + + (section.generatedOffset.generatedLine === generatedPosition.line + ? section.generatedOffset.generatedColumn - 1 + : 0) + }; + return ret; + } + } + + return { + line: null, + column: null + }; + }; + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +IndexedSourceMapConsumer.prototype._parseMappings = + function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { + this.__generatedMappings = []; + this.__originalMappings = []; + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + var sectionMappings = section.consumer._generatedMappings; + for (var j = 0; j < sectionMappings.length; j++) { + var mapping = sectionMappings[j]; + + var source = section.consumer._sources.at(mapping.source); + if (section.consumer.sourceRoot !== null) { + source = util.join(section.consumer.sourceRoot, source); + } + this._sources.add(source); + source = this._sources.indexOf(source); + + var name = section.consumer._names.at(mapping.name); + this._names.add(name); + name = this._names.indexOf(name); + + // The mappings coming from the consumer for the section have + // generated positions relative to the start of the section, so we + // need to offset them to be relative to the start of the concatenated + // generated file. + var adjustedMapping = { + source: source, + generatedLine: mapping.generatedLine + + (section.generatedOffset.generatedLine - 1), + generatedColumn: mapping.generatedColumn + + (section.generatedOffset.generatedLine === mapping.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: name + }; + + this.__generatedMappings.push(adjustedMapping); + if (typeof adjustedMapping.originalLine === 'number') { + this.__originalMappings.push(adjustedMapping); + } + } + } + + quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); + quickSort(this.__originalMappings, util.compareByOriginalPositions); + }; + +exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; + +},{"./array-set":5,"./base64-vlq":6,"./binary-search":8,"./quick-sort":9,"./util":11}],11:[function(require,module,exports){ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +/** + * This is a helper function for getting values from parameter/options + * objects. + * + * @param args The object we are extracting values from + * @param name The name of the property we are getting. + * @param defaultValue An optional value to return if the property is missing + * from the object. If this is not specified and the property is missing, an + * error will be thrown. + */ +function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } +} +exports.getArg = getArg; + +var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; +var dataUrlRegexp = /^data:.+\,.+$/; + +function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[2], + host: match[3], + port: match[4], + path: match[5] + }; +} +exports.urlParse = urlParse; + +function urlGenerate(aParsedUrl) { + var url = ''; + if (aParsedUrl.scheme) { + url += aParsedUrl.scheme + ':'; + } + url += '//'; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + '@'; + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; +} +exports.urlGenerate = urlGenerate; + +/** + * Normalizes a path, or the path portion of a URL: + * + * - Replaces consecutive slashes with one slash. + * - Removes unnecessary '.' parts. + * - Removes unnecessary '/..' parts. + * + * Based on code in the Node.js 'path' core module. + * + * @param aPath The path or url to normalize. + */ +function normalize(aPath) { + var path = aPath; + var url = urlParse(aPath); + if (url) { + if (!url.path) { + return aPath; + } + path = url.path; + } + var isAbsolute = exports.isAbsolute(path); + + var parts = path.split(/\/+/); + for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { + part = parts[i]; + if (part === '.') { + parts.splice(i, 1); + } else if (part === '..') { + up++; + } else if (up > 0) { + if (part === '') { + // The first part is blank if the path is absolute. Trying to go + // above the root is a no-op. Therefore we can remove all '..' parts + // directly after the root. + parts.splice(i + 1, up); + up = 0; + } else { + parts.splice(i, 2); + up--; + } + } + } + path = parts.join('/'); + + if (path === '') { + path = isAbsolute ? '/' : '.'; + } + + if (url) { + url.path = path; + return urlGenerate(url); + } + return path; +} +exports.normalize = normalize; + +/** + * Joins two paths/URLs. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be joined with the root. + * + * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a + * scheme-relative URL: Then the scheme of aRoot, if any, is prepended + * first. + * - Otherwise aPath is a path. If aRoot is a URL, then its path portion + * is updated with the result and aRoot is returned. Otherwise the result + * is returned. + * - If aPath is absolute, the result is aPath. + * - Otherwise the two paths are joined with a slash. + * - Joining for example 'http://' and 'www.example.com' is also supported. + */ +function join(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + if (aPath === "") { + aPath = "."; + } + var aPathUrl = urlParse(aPath); + var aRootUrl = urlParse(aRoot); + if (aRootUrl) { + aRoot = aRootUrl.path || '/'; + } + + // `join(foo, '//www.example.org')` + if (aPathUrl && !aPathUrl.scheme) { + if (aRootUrl) { + aPathUrl.scheme = aRootUrl.scheme; + } + return urlGenerate(aPathUrl); + } + + if (aPathUrl || aPath.match(dataUrlRegexp)) { + return aPath; + } + + // `join('http://', 'www.example.com')` + if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { + aRootUrl.host = aPath; + return urlGenerate(aRootUrl); + } + + var joined = aPath.charAt(0) === '/' + ? aPath + : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); + + if (aRootUrl) { + aRootUrl.path = joined; + return urlGenerate(aRootUrl); + } + return joined; +} +exports.join = join; + +exports.isAbsolute = function (aPath) { + return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); +}; + +/** + * Make a path relative to a URL or another path. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be made relative to aRoot. + */ +function relative(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + + aRoot = aRoot.replace(/\/$/, ''); + + // It is possible for the path to be above the root. In this case, simply + // checking whether the root is a prefix of the path won't work. Instead, we + // need to remove components from the root one by one, until either we find + // a prefix that fits, or we run out of components to remove. + var level = 0; + while (aPath.indexOf(aRoot + '/') !== 0) { + var index = aRoot.lastIndexOf("/"); + if (index < 0) { + return aPath; + } + + // If the only part of the root that is left is the scheme (i.e. http://, + // file:///, etc.), one or more slashes (/), or simply nothing at all, we + // have exhausted all components, so the path is not relative to the root. + aRoot = aRoot.slice(0, index); + if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { + return aPath; + } + + ++level; + } + + // Make sure we add a "../" for each component we removed from the root. + return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); +} +exports.relative = relative; + +var supportsNullProto = (function () { + var obj = Object.create(null); + return !('__proto__' in obj); +}()); + +function identity (s) { + return s; +} + +/** + * Because behavior goes wacky when you set `__proto__` on objects, we + * have to prefix all the strings in our set with an arbitrary character. + * + * See https://github.com/mozilla/source-map/pull/31 and + * https://github.com/mozilla/source-map/issues/30 + * + * @param String aStr + */ +function toSetString(aStr) { + if (isProtoString(aStr)) { + return '$' + aStr; + } + + return aStr; +} +exports.toSetString = supportsNullProto ? identity : toSetString; + +function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + + return aStr; +} +exports.fromSetString = supportsNullProto ? identity : fromSetString; + +function isProtoString(s) { + if (!s) { + return false; + } + + var length = s.length; + + if (length < 9 /* "__proto__".length */) { + return false; + } + + if (s.charCodeAt(length - 1) !== 95 /* '_' */ || + s.charCodeAt(length - 2) !== 95 /* '_' */ || + s.charCodeAt(length - 3) !== 111 /* 'o' */ || + s.charCodeAt(length - 4) !== 116 /* 't' */ || + s.charCodeAt(length - 5) !== 111 /* 'o' */ || + s.charCodeAt(length - 6) !== 114 /* 'r' */ || + s.charCodeAt(length - 7) !== 112 /* 'p' */ || + s.charCodeAt(length - 8) !== 95 /* '_' */ || + s.charCodeAt(length - 9) !== 95 /* '_' */) { + return false; + } + + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36 /* '$' */) { + return false; + } + } + + return true; +} + +/** + * Comparator between two mappings where the original positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same original source/line/column, but different generated + * line and column the same. Useful when searching for a mapping with a + * stubbed out mapping. + */ +function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp = mappingA.source - mappingB.source; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0 || onlyCompareOriginal) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + return mappingA.name - mappingB.name; +} +exports.compareByOriginalPositions = compareByOriginalPositions; + +/** + * Comparator between two mappings with deflated source and name indices where + * the generated positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same generated line and column, but different + * source/name/original line and column the same. Useful when searching for a + * mapping with a stubbed out mapping. + */ +function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0 || onlyCompareGenerated) { + return cmp; + } + + cmp = mappingA.source - mappingB.source; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return mappingA.name - mappingB.name; +} +exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; + +function strcmp(aStr1, aStr2) { + if (aStr1 === aStr2) { + return 0; + } + + if (aStr1 > aStr2) { + return 1; + } + + return -1; +} + +/** + * Comparator between two mappings with inflated source and name strings where + * the generated positions are compared. + */ +function compareByGeneratedPositionsInflated(mappingA, mappingB) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); +} +exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; + +},{}],12:[function(require,module,exports){ +(function(root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stack-generator', ['stackframe'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('stackframe')); + } else { + root.StackGenerator = factory(root.StackFrame); + } +}(this, function(StackFrame) { + return { + backtrace: function StackGenerator$$backtrace(opts) { + var stack = []; + var maxStackSize = 10; + + if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') { + maxStackSize = opts.maxStackSize; + } + + var curr = arguments.callee; + while (curr && stack.length < maxStackSize) { + // Allow V8 optimizations + var args = new Array(curr['arguments'].length); + for (var i = 0; i < args.length; ++i) { + args[i] = curr['arguments'][i]; + } + if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { + stack.push(new StackFrame({functionName: RegExp.$1 || undefined, args: args})); + } else { + stack.push(new StackFrame({args: args})); + } + + try { + curr = curr.caller; + } catch (e) { + break; + } + } + return stack; + } + }; +})); + +},{"stackframe":13}],13:[function(require,module,exports){ +(function (root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stackframe', [], factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + root.StackFrame = factory(); + } +}(this, function () { + 'use strict'; + function _isNumber(n) { + return !isNaN(parseFloat(n)) && isFinite(n); + } + + function _capitalize(str) { + return str[0].toUpperCase() + str.substring(1); + } + + function _getter(p) { + return function () { + return this[p]; + }; + } + + var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel']; + var numericProps = ['columnNumber', 'lineNumber']; + var stringProps = ['fileName', 'functionName', 'source']; + var arrayProps = ['args']; + + function StackFrame(obj) { + if (obj instanceof Object) { + var props = booleanProps.concat(numericProps.concat(stringProps.concat(arrayProps))); + for (var i = 0; i < props.length; i++) { + if (obj.hasOwnProperty(props[i]) && obj[props[i]] !== undefined) { + this['set' + _capitalize(props[i])](obj[props[i]]); + } + } + } + } + + StackFrame.prototype = { + getArgs: function () { + return this.args; + }, + setArgs: function (v) { + if (Object.prototype.toString.call(v) !== '[object Array]') { + throw new TypeError('Args must be an Array'); + } + this.args = v; + }, + + getEvalOrigin: function () { + return this.evalOrigin; + }, + setEvalOrigin: function (v) { + if (v instanceof StackFrame) { + this.evalOrigin = v; + } else if (v instanceof Object) { + this.evalOrigin = new StackFrame(v); + } else { + throw new TypeError('Eval Origin must be an Object or StackFrame'); + } + }, + + toString: function () { + var functionName = this.getFunctionName() || '{anonymous}'; + var args = '(' + (this.getArgs() || []).join(',') + ')'; + var fileName = this.getFileName() ? ('@' + this.getFileName()) : ''; + var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : ''; + var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : ''; + return functionName + args + fileName + lineNumber + columnNumber; + } + }; + + for (var i = 0; i < booleanProps.length; i++) { + StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]); + StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function (p) { + return function (v) { + this[p] = Boolean(v); + }; + })(booleanProps[i]); + } + + for (var j = 0; j < numericProps.length; j++) { + StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]); + StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function (p) { + return function (v) { + if (!_isNumber(v)) { + throw new TypeError(p + ' must be a Number'); + } + this[p] = Number(v); + }; + })(numericProps[j]); + } + + for (var k = 0; k < stringProps.length; k++) { + StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]); + StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function (p) { + return function (v) { + this[p] = String(v); + }; + })(stringProps[k]); + } + + return StackFrame; +})); + +},{}],14:[function(require,module,exports){ +(function(root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stacktrace-gps', ['source-map', 'stackframe'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('source-map/lib/source-map-consumer'), require('stackframe')); + } else { + root.StackTraceGPS = factory(root.SourceMap || root.sourceMap, root.StackFrame); + } +}(this, function(SourceMap, StackFrame) { + 'use strict'; + + /** + * Make a X-Domain request to url and callback. + * + * @param {String} url + * @returns {Promise} with response text if fulfilled + */ + function _xdr(url) { + return new Promise(function(resolve, reject) { + var req = new XMLHttpRequest(); + req.open('get', url); + req.onerror = reject; + req.onreadystatechange = function onreadystatechange() { + if (req.readyState === 4) { + if ((req.status >= 200 && req.status < 300) || + (url.substr(0, 7) === 'file://' && req.responseText)) { + resolve(req.responseText); + } else { + reject(new Error('HTTP status: ' + req.status + ' retrieving ' + url)); + } + } + }; + req.send(); + }); + + } + + /** + * Convert a Base64-encoded string into its original representation. + * Used for inline sourcemaps. + * + * @param {String} b64str Base-64 encoded string + * @returns {String} original representation of the base64-encoded string. + */ + function _atob(b64str) { + if (typeof window !== 'undefined' && window.atob) { + return window.atob(b64str); + } else { + throw new Error('You must supply a polyfill for window.atob in this environment'); + } + } + + function _parseJson(string) { + if (typeof JSON !== 'undefined' && JSON.parse) { + return JSON.parse(string); + } else { + throw new Error('You must supply a polyfill for JSON.parse in this environment'); + } + } + + function _findFunctionName(source, lineNumber/*, columnNumber*/) { + var syntaxes = [ + // {name} = function ({args}) TODO args capture + /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/, + // function {name}({args}) m[1]=name m[2]=args + /function\s+([^('"`]*?)\s*\(([^)]*)\)/, + // {name} = eval() + /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/, + // fn_name() { + /\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/, + // {name} = () => { + /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/ + ]; + var lines = source.split('\n'); + + // Walk backwards in the source lines until we find the line which matches one of the patterns above + var code = ''; + var maxLines = Math.min(lineNumber, 20); + for (var i = 0; i < maxLines; ++i) { + // lineNo is 1-based, source[] is 0-based + var line = lines[lineNumber - i - 1]; + var commentPos = line.indexOf('//'); + if (commentPos >= 0) { + line = line.substr(0, commentPos); + } + + if (line) { + code = line + code; + var len = syntaxes.length; + for (var index = 0; index < len; index++) { + var m = syntaxes[index].exec(code); + if (m && m[1]) { + return m[1]; + } + } + } + } + return undefined; + } + + function _ensureSupportedEnvironment() { + if (typeof Object.defineProperty !== 'function' || typeof Object.create !== 'function') { + throw new Error('Unable to consume source maps in older browsers'); + } + } + + function _ensureStackFrameIsLegit(stackframe) { + if (typeof stackframe !== 'object') { + throw new TypeError('Given StackFrame is not an object'); + } else if (typeof stackframe.fileName !== 'string') { + throw new TypeError('Given file name is not a String'); + } else if (typeof stackframe.lineNumber !== 'number' || + stackframe.lineNumber % 1 !== 0 || + stackframe.lineNumber < 1) { + throw new TypeError('Given line number must be a positive integer'); + } else if (typeof stackframe.columnNumber !== 'number' || + stackframe.columnNumber % 1 !== 0 || + stackframe.columnNumber < 0) { + throw new TypeError('Given column number must be a non-negative integer'); + } + return true; + } + + function _findSourceMappingURL(source) { + var m = /\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/m.exec(source); + if (m && m[1]) { + return m[1]; + } else { + throw new Error('sourceMappingURL not found'); + } + } + + function _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) { + return new Promise(function(resolve, reject) { + var loc = sourceMapConsumer.originalPositionFor({ + line: stackframe.lineNumber, + column: stackframe.columnNumber + }); + + if (loc.source) { + // cache mapped sources + var mappedSource = sourceMapConsumer.sourceContentFor(loc.source); + if (mappedSource) { + sourceCache[loc.source] = mappedSource; + } + + resolve( + // given stackframe and source location, update stackframe + new StackFrame({ + functionName: loc.name || stackframe.functionName, + args: stackframe.args, + fileName: loc.source, + lineNumber: loc.line, + columnNumber: loc.column + })); + } else { + reject(new Error('Could not get original source for given stackframe and source map')); + } + }); + } + + /** + * @constructor + * @param {Object} opts + * opts.sourceCache = {url: "Source String"} => preload source cache + * opts.sourceMapConsumerCache = {/path/file.js.map: SourceMapConsumer} + * opts.offline = True to prevent network requests. + * Best effort without sources or source maps. + * opts.ajax = Promise returning function to make X-Domain requests + */ + return function StackTraceGPS(opts) { + if (!(this instanceof StackTraceGPS)) { + return new StackTraceGPS(opts); + } + opts = opts || {}; + + this.sourceCache = opts.sourceCache || {}; + this.sourceMapConsumerCache = opts.sourceMapConsumerCache || {}; + + this.ajax = opts.ajax || _xdr; + + this._atob = opts.atob || _atob; + + this._get = function _get(location) { + return new Promise(function(resolve, reject) { + var isDataUrl = location.substr(0, 5) === 'data:'; + if (this.sourceCache[location]) { + resolve(this.sourceCache[location]); + } else if (opts.offline && !isDataUrl) { + reject(new Error('Cannot make network requests in offline mode')); + } else { + if (isDataUrl) { + // data URLs can have parameters. + // see http://tools.ietf.org/html/rfc2397 + var supportedEncodingRegexp = + /^data:application\/json;([\w=:"-]+;)*base64,/; + var match = location.match(supportedEncodingRegexp); + if (match) { + var sourceMapStart = match[0].length; + var encodedSource = location.substr(sourceMapStart); + var source = this._atob(encodedSource); + this.sourceCache[location] = source; + resolve(source); + } else { + reject(new Error('The encoding of the inline sourcemap is not supported')); + } + } else { + var xhrPromise = this.ajax(location, {method: 'get'}); + // Cache the Promise to prevent duplicate in-flight requests + this.sourceCache[location] = xhrPromise; + xhrPromise.then(resolve, reject); + } + } + }.bind(this)); + }; + + /** + * Creating SourceMapConsumers is expensive, so this wraps the creation of a + * SourceMapConsumer in a per-instance cache. + * + * @param sourceMappingURL = {String} URL to fetch source map from + * @param defaultSourceRoot = Default source root for source map if undefined + * @returns {Promise} that resolves a SourceMapConsumer + */ + this._getSourceMapConsumer = function _getSourceMapConsumer(sourceMappingURL, defaultSourceRoot) { + return new Promise(function(resolve, reject) { + if (this.sourceMapConsumerCache[sourceMappingURL]) { + resolve(this.sourceMapConsumerCache[sourceMappingURL]); + } else { + var sourceMapConsumerPromise = new Promise(function(resolve, reject) { + return this._get(sourceMappingURL).then(function(sourceMapSource) { + if (typeof sourceMapSource === 'string') { + sourceMapSource = _parseJson(sourceMapSource.replace(/^\)\]\}'/, '')); + } + if (typeof sourceMapSource.sourceRoot === 'undefined') { + sourceMapSource.sourceRoot = defaultSourceRoot; + } + + resolve(new SourceMap.SourceMapConsumer(sourceMapSource)); + }, reject); + }.bind(this)); + this.sourceMapConsumerCache[sourceMappingURL] = sourceMapConsumerPromise; + resolve(sourceMapConsumerPromise); + } + }.bind(this)); + }; + + /** + * Given a StackFrame, enhance function name and use source maps for a + * better StackFrame. + * + * @param {StackFrame} stackframe object + * @returns {Promise} that resolves with with source-mapped StackFrame + */ + this.pinpoint = function StackTraceGPS$$pinpoint(stackframe) { + return new Promise(function(resolve, reject) { + this.getMappedLocation(stackframe).then(function(mappedStackFrame) { + function resolveMappedStackFrame() { + resolve(mappedStackFrame); + } + + this.findFunctionName(mappedStackFrame) + .then(resolve, resolveMappedStackFrame) + ['catch'](resolveMappedStackFrame); + }.bind(this), reject); + }.bind(this)); + }; + + /** + * Given a StackFrame, guess function name from location information. + * + * @param {StackFrame} stackframe + * @returns {Promise} that resolves with enhanced StackFrame. + */ + this.findFunctionName = function StackTraceGPS$$findFunctionName(stackframe) { + return new Promise(function(resolve, reject) { + _ensureStackFrameIsLegit(stackframe); + this._get(stackframe.fileName).then(function getSourceCallback(source) { + var lineNumber = stackframe.lineNumber; + var columnNumber = stackframe.columnNumber; + var guessedFunctionName = _findFunctionName(source, lineNumber, columnNumber); + // Only replace functionName if we found something + if (guessedFunctionName) { + resolve(new StackFrame({ + functionName: guessedFunctionName, + args: stackframe.args, + fileName: stackframe.fileName, + lineNumber: lineNumber, + columnNumber: columnNumber + })); + } else { + resolve(stackframe); + } + }, reject)['catch'](reject); + }.bind(this)); + }; + + /** + * Given a StackFrame, seek source-mapped location and return new enhanced StackFrame. + * + * @param {StackFrame} stackframe + * @returns {Promise} that resolves with enhanced StackFrame. + */ + this.getMappedLocation = function StackTraceGPS$$getMappedLocation(stackframe) { + return new Promise(function(resolve, reject) { + _ensureSupportedEnvironment(); + _ensureStackFrameIsLegit(stackframe); + + var sourceCache = this.sourceCache; + var fileName = stackframe.fileName; + this._get(fileName).then(function(source) { + var sourceMappingURL = _findSourceMappingURL(source); + var isDataUrl = sourceMappingURL.substr(0, 5) === 'data:'; + var defaultSourceRoot = fileName.substring(0, fileName.lastIndexOf('/') + 1); + + if (sourceMappingURL[0] !== '/' && !isDataUrl && !(/^https?:\/\/|^\/\//i).test(sourceMappingURL)) { + sourceMappingURL = defaultSourceRoot + sourceMappingURL; + } + + return this._getSourceMapConsumer(sourceMappingURL, defaultSourceRoot).then(function(sourceMapConsumer) { + return _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) + .then(resolve)['catch'](function() { + resolve(stackframe); + }); + }); + }.bind(this), reject)['catch'](reject); + }.bind(this)); + }; + }; +})); + +},{"source-map/lib/source-map-consumer":10,"stackframe":13}],15:[function(require,module,exports){ +// Polyfill for old browsers +// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray +if (!Array.isArray) { + Array.isArray = function(arg) { + return Object.prototype.toString.call(arg) === '[object Array]'; + }; +} + +if (typeof Promise === 'undefined') { + ES6Promise.polyfill(); +} + +// ES5 Polyfills +// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind +if (!Function.prototype.bind) { + Function.prototype.bind = function(oThis) { + if (typeof this !== 'function') { + throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable'); + } + + var aArgs = Array.prototype.slice.call(arguments, 1); + var fToBind = this; + var NoOp = function() { + }; + var fBound = function() { + return fToBind.apply(this instanceof NoOp && oThis ? this : oThis, + aArgs.concat(Array.prototype.slice.call(arguments))); + }; + + NoOp.prototype = this.prototype; + fBound.prototype = new NoOp(); + + return fBound; + }; +} + +// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map +if (!Array.prototype.map) { + Array.prototype.map = function(callback, thisArg) { + if (this === void 0 || this === null) { + throw new TypeError('this is null or not defined'); + } + var O = Object(this); + var len = O.length >>> 0; + var T; + if (typeof callback !== 'function') { + throw new TypeError(callback + ' is not a function'); + } + if (arguments.length > 1) { + T = thisArg; + } + + var A = new Array(len); + var k = 0; + + while (k < len) { + var kValue; + var mappedValue; + if (k in O) { + kValue = O[k]; + mappedValue = callback.call(T, kValue, k, O); + A[k] = mappedValue; + } + k++; + } + + return A; + }; +} + +// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter +if (!Array.prototype.filter) { + Array.prototype.filter = function(callback/*, thisArg*/) { + if (this === void 0 || this === null) { + throw new TypeError('this is null or not defined'); + } + + var t = Object(this); + var len = t.length >>> 0; + if (typeof callback !== 'function') { + throw new TypeError(callback + ' is not a function'); + } + + var res = []; + var thisArg = arguments.length >= 2 ? arguments[1] : void 0; + for (var i = 0; i < len; i++) { + if (i in t) { + var val = t[i]; + if (callback.call(thisArg, val, i, t)) { + res.push(val); + } + } + } + + return res; + }; +} + +// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach +if (!Array.prototype.forEach) { + Array.prototype.forEach = function(callback, thisArg) { + var T; + var k; + if (this === null || this === undefined) { + throw new TypeError(' this is null or not defined'); + } + + var O = Object(this); + var len = O.length >>> 0; + if (typeof callback !== 'function') { + throw new TypeError(callback + ' is not a function'); + } + + if (arguments.length > 1) { + T = thisArg; + } + k = 0; + while (k < len) { + var kValue; + if (k in O) { + kValue = O[k]; + callback.call(T, kValue, k, O); + } + k++; + } + }; +} + +},{}],16:[function(require,module,exports){ +(function(root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps')); + } else { + root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS); + } +}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) { + var _options = { + filter: function(stackframe) { + // Filter out stackframes for this library by default + return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 && + (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 && + (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 && + (stackframe.functionName || '').indexOf('StackGenerator$$') === -1; + }, + sourceCache: {} + }; + + var _generateError = function StackTrace$$GenerateError() { + try { + // Error must be thrown to get stack in IE + throw new Error(); + } catch (err) { + return err; + } + }; + + /** + * Merge 2 given Objects. If a conflict occurs the second object wins. + * Does not do deep merges. + * + * @param {Object} first base object + * @param {Object} second overrides + * @returns {Object} merged first and second + * @private + */ + function _merge(first, second) { + var target = {}; + + [first, second].forEach(function(obj) { + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + target[prop] = obj[prop]; + } + } + return target; + }); + + return target; + } + + function _isShapedLikeParsableError(err) { + return err.stack || err['opera#sourceloc']; + } + + function _filtered(stackframes, filter) { + if (typeof filter === 'function') { + return stackframes.filter(filter); + } + return stackframes; + } + + return { + /** + * Get a backtrace from invocation point. + * + * @param {Object} opts + * @returns {Array} of StackFrame + */ + get: function StackTrace$$get(opts) { + var err = _generateError(); + return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts); + }, + + /** + * Get a backtrace from invocation point. + * IMPORTANT: Does not handle source maps or guess function names! + * + * @param {Object} opts + * @returns {Array} of StackFrame + */ + getSync: function StackTrace$$getSync(opts) { + opts = _merge(_options, opts); + var err = _generateError(); + var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts); + return _filtered(stack, opts.filter); + }, + + /** + * Given an error object, parse it. + * + * @param {Error} error object + * @param {Object} opts + * @returns {Promise} for Array[StackFrame} + */ + fromError: function StackTrace$$fromError(error, opts) { + opts = _merge(_options, opts); + var gps = new StackTraceGPS(opts); + return new Promise(function(resolve) { + var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter); + resolve(Promise.all(stackframes.map(function(sf) { + return new Promise(function(resolve) { + function resolveOriginal() { + resolve(sf); + } + + gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal); + }); + }))); + }.bind(this)); + }, + + /** + * Use StackGenerator to generate a backtrace. + * + * @param {Object} opts + * @returns {Promise} of Array[StackFrame] + */ + generateArtificially: function StackTrace$$generateArtificially(opts) { + opts = _merge(_options, opts); + var stackFrames = StackGenerator.backtrace(opts); + if (typeof opts.filter === 'function') { + stackFrames = stackFrames.filter(opts.filter); + } + return Promise.resolve(stackFrames); + }, + + /** + * Given a function, wrap it such that invocations trigger a callback that + * is called with a stack trace. + * + * @param {Function} fn to be instrumented + * @param {Function} callback function to call with a stack trace on invocation + * @param {Function} errback optional function to call with error if unable to get stack trace. + * @param {Object} thisArg optional context object (e.g. window) + */ + instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) { + if (typeof fn !== 'function') { + throw new Error('Cannot instrument non-function object'); + } else if (typeof fn.__stacktraceOriginalFn === 'function') { + // Already instrumented, return given Function + return fn; + } + + var instrumented = function StackTrace$$instrumented() { + try { + this.get().then(callback, errback)['catch'](errback); + return fn.apply(thisArg || this, arguments); + } catch (e) { + if (_isShapedLikeParsableError(e)) { + this.fromError(e).then(callback, errback)['catch'](errback); + } + throw e; + } + }.bind(this); + instrumented.__stacktraceOriginalFn = fn; + + return instrumented; + }, + + /** + * Given a function that has been instrumented, + * revert the function to it's original (non-instrumented) state. + * + * @param {Function} fn to de-instrument + */ + deinstrument: function StackTrace$$deinstrument(fn) { + if (typeof fn !== 'function') { + throw new Error('Cannot de-instrument non-function object'); + } else if (typeof fn.__stacktraceOriginalFn === 'function') { + return fn.__stacktraceOriginalFn; + } else { + // Function not instrumented, return original + return fn; + } + }, + + /** + * Given an error message and Array of StackFrames, serialize and POST to given URL. + * + * @param {Array} stackframes + * @param {String} url + * @param {String} errorMsg + * @param {Object} requestOptions + */ + report: function StackTrace$$report(stackframes, url, errorMsg, requestOptions) { + return new Promise(function(resolve, reject) { + var req = new XMLHttpRequest(); + req.onerror = reject; + req.onreadystatechange = function onreadystatechange() { + if (req.readyState === 4) { + if (req.status >= 200 && req.status < 400) { + resolve(req.responseText); + } else { + reject(new Error('POST to ' + url + ' failed with status: ' + req.status)); + } + } + }; + req.open('post', url); + + // Set request headers + req.setRequestHeader('Content-Type', 'application/json'); + if (requestOptions && typeof requestOptions.headers === 'object') { + var headers = requestOptions.headers; + for (var header in headers) { + if (headers.hasOwnProperty(header)) { + req.setRequestHeader(header, headers[header]); + } + } + } + + var reportPayload = {stack: stackframes}; + if (errorMsg !== undefined && errorMsg !== null) { + reportPayload.message = errorMsg; + } + + req.send(JSON.stringify(reportPayload)); + }); + } + }; +})); + +},{"error-stack-parser":1,"stack-generator":12,"stacktrace-gps":14}]},{},[2,3,15,16])(16) +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9lczYtcHJvbWlzZS9kaXN0L2VzNi1wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2pzb24zL2xpYi9qc29uMy5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYXJyYXktc2V0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2Jhc2U2NC12bHEuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2JpbmFyeS1zZWFyY2guanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvcXVpY2stc29ydC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyLmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3V0aWwuanMiLCJub2RlX21vZHVsZXMvc3RhY2stZ2VuZXJhdG9yL3N0YWNrLWdlbmVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja2ZyYW1lL3N0YWNrZnJhbWUuanMiLCJub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1ncHMvc3RhY2t0cmFjZS1ncHMuanMiLCJwb2x5ZmlsbHMuanMiLCJzdGFja3RyYWNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNqb0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3Q0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2phQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnZXJyb3Itc3RhY2stcGFyc2VyJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuRXJyb3JTdGFja1BhcnNlciA9IGZhY3Rvcnkocm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIoU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFAgPSAvKF58QClcXFMrXFw6XFxkKy87XG4gICAgdmFyIENIUk9NRV9JRV9TVEFDS19SRUdFWFAgPSAvXlxccyphdCAuKihcXFMrXFw6XFxkK3xcXChuYXRpdmVcXCkpL207XG4gICAgdmFyIFNBRkFSSV9OQVRJVkVfQ09ERV9SRUdFWFAgPSAvXihldmFsQCk/KFxcW25hdGl2ZSBjb2RlXFxdKT8kLztcblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhbiBFcnJvciBvYmplY3QsIGV4dHJhY3QgdGhlIG1vc3QgaW5mb3JtYXRpb24gZnJvbSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBvZiBTdGFja0ZyYW1lc1xuICAgICAgICAgKi9cbiAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVycm9yLnN0YWNrdHJhY2UgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBlcnJvclsnb3BlcmEjc291cmNlbG9jJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YWNrICYmIGVycm9yLnN0YWNrLm1hdGNoKENIUk9NRV9JRV9TVEFDS19SRUdFWFApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VWOE9ySUUoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRkZPclNhZmFyaShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIGdpdmVuIEVycm9yIG9iamVjdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFNlcGFyYXRlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGZyb20gYSBzdHJpbmcgb2YgdGhlIGZvcm06IChVUkk6TGluZTpDb2x1bW4pXG4gICAgICAgIGV4dHJhY3RMb2NhdGlvbjogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkZXh0cmFjdExvY2F0aW9uKHVybExpa2UpIHtcbiAgICAgICAgICAgIC8vIEZhaWwtZmFzdCBidXQgcmV0dXJuIGxvY2F0aW9ucyBsaWtlIFwiKG5hdGl2ZSlcIlxuICAgICAgICAgICAgaWYgKHVybExpa2UuaW5kZXhPZignOicpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbdXJsTGlrZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByZWdFeHAgPSAvKC4rPykoPzpcXDooXFxkKykpPyg/OlxcOihcXGQrKSk/JC87XG4gICAgICAgICAgICB2YXIgcGFydHMgPSByZWdFeHAuZXhlYyh1cmxMaWtlLnJlcGxhY2UoL1tcXChcXCldL2csICcnKSk7XG4gICAgICAgICAgICByZXR1cm4gW3BhcnRzWzFdLCBwYXJ0c1syXSB8fCB1bmRlZmluZWQsIHBhcnRzWzNdIHx8IHVuZGVmaW5lZF07XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VWOE9ySUU6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlVjhPcklFKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFsaW5lLm1hdGNoKENIUk9NRV9JRV9TVEFDS19SRUdFWFApO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJyhldmFsICcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSBldmFsIGluZm9ybWF0aW9uIHVudGlsIHdlIGltcGxlbWVudCBzdGFja3RyYWNlLmpzL3N0YWNrZnJhbWUjOFxuICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC9ldmFsIGNvZGUvZywgJ2V2YWwnKS5yZXBsYWNlKC8oXFwoZXZhbCBhdCBbXlxcKCldKil8KFxcKVxcLC4qJCkvZywgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5yZXBsYWNlKC9eXFxzKy8sICcnKS5yZXBsYWNlKC9cXChldmFsIGNvZGUvZywgJygnKS5zcGxpdCgvXFxzKy8pLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gdG9rZW5zLmpvaW4oJyAnKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gWydldmFsJywgJzxhbm9ueW1vdXM+J10uaW5kZXhPZihsb2NhdGlvblBhcnRzWzBdKSA+IC0xID8gdW5kZWZpbmVkIDogbG9jYXRpb25QYXJ0c1swXTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZUZGT3JTYWZhcmk6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlRkZPclNhZmFyaShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFsaW5lLm1hdGNoKFNBRkFSSV9OQVRJVkVfQ09ERV9SRUdFWFApO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgZXZhbCBpbmZvcm1hdGlvbiB1bnRpbCB3ZSBpbXBsZW1lbnQgc3RhY2t0cmFjZS5qcy9zdGFja2ZyYW1lIzhcbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCcgPiBldmFsJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC8gbGluZSAoXFxkKykoPzogPiBldmFsIGxpbmUgXFxkKykqID4gZXZhbFxcOlxcZCtcXDpcXGQrL2csICc6JDEnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCdAJykgPT09IC0xICYmIGxpbmUuaW5kZXhPZignOicpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTYWZhcmkgZXZhbCBmcmFtZXMgb25seSBoYXZlIGZ1bmN0aW9uIG5hbWVzIGFuZCBub3RoaW5nIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbGluZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5zcGxpdCgnQCcpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0b2tlbnMuam9pbignQCcpIHx8IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbG9jYXRpb25QYXJ0c1swXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYShlKSB7XG4gICAgICAgICAgICBpZiAoIWUuc3RhY2t0cmFjZSB8fCAoZS5tZXNzYWdlLmluZGV4T2YoJ1xcbicpID4gLTEgJiZcbiAgICAgICAgICAgICAgICBlLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpLmxlbmd0aCA+IGUuc3RhY2t0cmFjZS5zcGxpdCgnXFxuJykubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmE5KGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghZS5zdGFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmExMChlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTExKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmE5OiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhOShlKSB7XG4gICAgICAgICAgICB2YXIgbGluZVJFID0gL0xpbmUgKFxcZCspLipzY3JpcHQgKD86aW4gKT8oXFxTKykvaTtcbiAgICAgICAgICAgIHZhciBsaW5lcyA9IGUubWVzc2FnZS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAyLCBsZW4gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmVSRS5leGVjKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVzW2ldXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTEwOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhMTAoZSkge1xuICAgICAgICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspKD86OiBJbiBmdW5jdGlvbiAoXFxTKykpPyQvaTtcbiAgICAgICAgICAgIHZhciBsaW5lcyA9IGUuc3RhY2t0cmFjZS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmVSRS5leGVjKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBtYXRjaFszXSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZXNbaV1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIE9wZXJhIDEwLjY1KyBFcnJvci5zdGFjayB2ZXJ5IHNpbWlsYXIgdG8gRkYvU2FmYXJpXG4gICAgICAgIHBhcnNlT3BlcmExMTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTExKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFsaW5lLm1hdGNoKEZJUkVGT1hfU0FGQVJJX1NUQUNLX1JFR0VYUCkgJiYgIWxpbmUubWF0Y2goL15FcnJvciBjcmVhdGVkIGF0Lyk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGxpbmUuc3BsaXQoJ0AnKTtcbiAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uQ2FsbCA9ICh0b2tlbnMuc2hpZnQoKSB8fCAnJyk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uQ2FsbFxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzxhbm9ueW1vdXMgZnVuY3Rpb24oOiAoXFx3KykpPz4vLCAnJDInKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteXFwpXSpcXCkvZywgJycpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB2YXIgYXJnc1JhdztcbiAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25DYWxsLm1hdGNoKC9cXCgoW15cXCldKilcXCkvKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzUmF3ID0gZnVuY3Rpb25DYWxsLnJlcGxhY2UoL15bXlxcKF0rXFwoKFteXFwpXSopXFwpJC8sICckMScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IChhcmdzUmF3ID09PSB1bmRlZmluZWQgfHwgYXJnc1JhdyA9PT0gJ1thcmd1bWVudHMgbm90IGF2YWlsYWJsZV0nKSA/XG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA6IGFyZ3NSYXcuc3BsaXQoJywnKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbG9jYXRpb25QYXJ0c1swXSxcbiAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcbiIsIi8qIVxuICogQG92ZXJ2aWV3IGVzNi1wcm9taXNlIC0gYSB0aW55IGltcGxlbWVudGF0aW9uIG9mIFByb21pc2VzL0ErLlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTQgWWVodWRhIEthdHosIFRvbSBEYWxlLCBTdGVmYW4gUGVubmVyIGFuZCBjb250cmlidXRvcnMgKENvbnZlcnNpb24gdG8gRVM2IEFQSSBieSBKYWtlIEFyY2hpYmFsZClcbiAqIEBsaWNlbnNlICAgTGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2VcbiAqICAgICAgICAgICAgU2VlIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zdGVmYW5wZW5uZXIvZXM2LXByb21pc2UvbWFzdGVyL0xJQ0VOU0VcbiAqIEB2ZXJzaW9uICAgMy4zLjFcbiAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIChnbG9iYWwuRVM2UHJvbWlzZSA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gb2JqZWN0T3JGdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeCAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxudmFyIF9pc0FycmF5ID0gdW5kZWZpbmVkO1xuaWYgKCFBcnJheS5pc0FycmF5KSB7XG4gIF9pc0FycmF5ID0gZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xufSBlbHNlIHtcbiAgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xufVxuXG52YXIgaXNBcnJheSA9IF9pc0FycmF5O1xuXG52YXIgbGVuID0gMDtcbnZhciB2ZXJ0eE5leHQgPSB1bmRlZmluZWQ7XG52YXIgY3VzdG9tU2NoZWR1bGVyRm4gPSB1bmRlZmluZWQ7XG5cbnZhciBhc2FwID0gZnVuY3Rpb24gYXNhcChjYWxsYmFjaywgYXJnKSB7XG4gIHF1ZXVlW2xlbl0gPSBjYWxsYmFjaztcbiAgcXVldWVbbGVuICsgMV0gPSBhcmc7XG4gIGxlbiArPSAyO1xuICBpZiAobGVuID09PSAyKSB7XG4gICAgLy8gSWYgbGVuIGlzIDIsIHRoYXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHNjaGVkdWxlIGFuIGFzeW5jIGZsdXNoLlxuICAgIC8vIElmIGFkZGl0aW9uYWwgY2FsbGJhY2tzIGFyZSBxdWV1ZWQgYmVmb3JlIHRoZSBxdWV1ZSBpcyBmbHVzaGVkLCB0aGV5XG4gICAgLy8gd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhpcyBmbHVzaCB0aGF0IHdlIGFyZSBzY2hlZHVsaW5nLlxuICAgIGlmIChjdXN0b21TY2hlZHVsZXJGbikge1xuICAgICAgY3VzdG9tU2NoZWR1bGVyRm4oZmx1c2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2hlZHVsZUZsdXNoKCk7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBzZXRTY2hlZHVsZXIoc2NoZWR1bGVGbikge1xuICBjdXN0b21TY2hlZHVsZXJGbiA9IHNjaGVkdWxlRm47XG59XG5cbmZ1bmN0aW9uIHNldEFzYXAoYXNhcEZuKSB7XG4gIGFzYXAgPSBhc2FwRm47XG59XG5cbnZhciBicm93c2VyV2luZG93ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB1bmRlZmluZWQ7XG52YXIgYnJvd3Nlckdsb2JhbCA9IGJyb3dzZXJXaW5kb3cgfHwge307XG52YXIgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIgPSBicm93c2VyR2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgYnJvd3Nlckdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGlzTm9kZSA9IHR5cGVvZiBzZWxmID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHt9KS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXSc7XG5cbi8vIHRlc3QgZm9yIHdlYiB3b3JrZXIgYnV0IG5vdCBpbiBJRTEwXG52YXIgaXNXb3JrZXIgPSB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBub2RlXG5mdW5jdGlvbiB1c2VOZXh0VGljaygpIHtcbiAgLy8gbm9kZSB2ZXJzaW9uIDAuMTAueCBkaXNwbGF5cyBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2hlbiBuZXh0VGljayBpcyB1c2VkIHJlY3Vyc2l2ZWx5XG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY3Vqb2pzL3doZW4vaXNzdWVzLzQxMCBmb3IgZGV0YWlsc1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgfTtcbn1cblxuLy8gdmVydHhcbmZ1bmN0aW9uIHVzZVZlcnR4VGltZXIoKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmVydHhOZXh0KGZsdXNoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcigpIHtcbiAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpO1xuICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBub2RlLmRhdGEgPSBpdGVyYXRpb25zID0gKytpdGVyYXRpb25zICUgMjtcbiAgfTtcbn1cblxuLy8gd2ViIHdvcmtlclxuZnVuY3Rpb24gdXNlTWVzc2FnZUNoYW5uZWwoKSB7XG4gIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZmx1c2g7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVNldFRpbWVvdXQoKSB7XG4gIC8vIFN0b3JlIHNldFRpbWVvdXQgcmVmZXJlbmNlIHNvIGVzNi1wcm9taXNlIHdpbGwgYmUgdW5hZmZlY3RlZCBieVxuICAvLyBvdGhlciBjb2RlIG1vZGlmeWluZyBzZXRUaW1lb3V0IChsaWtlIHNpbm9uLnVzZUZha2VUaW1lcnMoKSlcbiAgdmFyIGdsb2JhbFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnbG9iYWxTZXRUaW1lb3V0KGZsdXNoLCAxKTtcbiAgfTtcbn1cblxudmFyIHF1ZXVlID0gbmV3IEFycmF5KDEwMDApO1xuZnVuY3Rpb24gZmx1c2goKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICB2YXIgY2FsbGJhY2sgPSBxdWV1ZVtpXTtcbiAgICB2YXIgYXJnID0gcXVldWVbaSArIDFdO1xuXG4gICAgY2FsbGJhY2soYXJnKTtcblxuICAgIHF1ZXVlW2ldID0gdW5kZWZpbmVkO1xuICAgIHF1ZXVlW2kgKyAxXSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxlbiA9IDA7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRWZXJ0eCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgciA9IHJlcXVpcmU7XG4gICAgdmFyIHZlcnR4ID0gcigndmVydHgnKTtcbiAgICB2ZXJ0eE5leHQgPSB2ZXJ0eC5ydW5Pbkxvb3AgfHwgdmVydHgucnVuT25Db250ZXh0O1xuICAgIHJldHVybiB1c2VWZXJ0eFRpbWVyKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdXNlU2V0VGltZW91dCgpO1xuICB9XG59XG5cbnZhciBzY2hlZHVsZUZsdXNoID0gdW5kZWZpbmVkO1xuLy8gRGVjaWRlIHdoYXQgYXN5bmMgbWV0aG9kIHRvIHVzZSB0byB0cmlnZ2VyaW5nIHByb2Nlc3Npbmcgb2YgcXVldWVkIGNhbGxiYWNrczpcbmlmIChpc05vZGUpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZU5leHRUaWNrKCk7XG59IGVsc2UgaWYgKEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNdXRhdGlvbk9ic2VydmVyKCk7XG59IGVsc2UgaWYgKGlzV29ya2VyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNZXNzYWdlQ2hhbm5lbCgpO1xufSBlbHNlIGlmIChicm93c2VyV2luZG93ID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IGF0dGVtcHRWZXJ0eCgpO1xufSBlbHNlIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZVNldFRpbWVvdXQoKTtcbn1cblxuZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX2FyZ3VtZW50cyA9IGFyZ3VtZW50cztcblxuICB2YXIgcGFyZW50ID0gdGhpcztcblxuICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcihub29wKTtcblxuICBpZiAoY2hpbGRbUFJPTUlTRV9JRF0gPT09IHVuZGVmaW5lZCkge1xuICAgIG1ha2VQcm9taXNlKGNoaWxkKTtcbiAgfVxuXG4gIHZhciBfc3RhdGUgPSBwYXJlbnQuX3N0YXRlO1xuXG4gIGlmIChfc3RhdGUpIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNhbGxiYWNrID0gX2FyZ3VtZW50c1tfc3RhdGUgLSAxXTtcbiAgICAgIGFzYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gaW52b2tlQ2FsbGJhY2soX3N0YXRlLCBjaGlsZCwgY2FsbGJhY2ssIHBhcmVudC5fcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pKCk7XG4gIH0gZWxzZSB7XG4gICAgc3Vic2NyaWJlKHBhcmVudCwgY2hpbGQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZDtcbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlc29sdmVgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgcmVzb2x2ZWQgd2l0aCB0aGVcbiAgcGFzc2VkIGB2YWx1ZWAuIEl0IGlzIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICByZXNvbHZlKDEpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGFib3ZlLCB5b3VyIGNvZGUgbm93IHNpbXBseSBiZWNvbWVzIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgxKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIHJlc29sdmVcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gdmFsdWUgdmFsdWUgdGhhdCB0aGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGhcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCB3aWxsIGJlY29tZSBmdWxmaWxsZWQgd2l0aCB0aGUgZ2l2ZW5cbiAgYHZhbHVlYFxuKi9cbmZ1bmN0aW9uIHJlc29sdmUob2JqZWN0KSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QuY29uc3RydWN0b3IgPT09IENvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVzb2x2ZShwcm9taXNlLCBvYmplY3QpO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIFBST01JU0VfSUQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpO1xuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIFBFTkRJTkcgPSB2b2lkIDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG5cbnZhciBHRVRfVEhFTl9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiBzZWxmRnVsZmlsbG1lbnQoKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZlwiKTtcbn1cblxuZnVuY3Rpb24gY2Fubm90UmV0dXJuT3duKCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcignQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLicpO1xufVxuXG5mdW5jdGlvbiBnZXRUaGVuKHByb21pc2UpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcHJvbWlzZS50aGVuO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIEdFVF9USEVOX0VSUk9SLmVycm9yID0gZXJyb3I7XG4gICAgcmV0dXJuIEdFVF9USEVOX0VSUk9SO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVRoZW4odGhlbiwgdmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcikge1xuICB0cnkge1xuICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSwgdGhlbikge1xuICBhc2FwKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgdmFyIHNlYWxlZCA9IGZhbHNlO1xuICAgIHZhciBlcnJvciA9IHRyeVRoZW4odGhlbiwgdGhlbmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkge1xuICAgICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoc2VhbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlYWxlZCA9IHRydWU7XG5cbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9LCAnU2V0dGxlOiAnICsgKHByb21pc2UuX2xhYmVsIHx8ICcgdW5rbm93biBwcm9taXNlJykpO1xuXG4gICAgaWYgKCFzZWFsZWQgJiYgZXJyb3IpIHtcbiAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9XG4gIH0sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSkge1xuICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBGVUxGSUxMRUQpIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2UgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZSh0aGVuYWJsZSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUsIHRoZW4kJCkge1xuICBpZiAobWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3RvciA9PT0gcHJvbWlzZS5jb25zdHJ1Y3RvciAmJiB0aGVuJCQgPT09IHRoZW4gJiYgbWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3Rvci5yZXNvbHZlID09PSByZXNvbHZlKSB7XG4gICAgaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRoZW4kJCA9PT0gR0VUX1RIRU5fRVJST1IpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgR0VUX1RIRU5fRVJST1IuZXJyb3IpO1xuICAgIH0gZWxzZSBpZiAodGhlbiQkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoZW4kJCkpIHtcbiAgICAgIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuJCQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHNlbGZGdWxmaWxsbWVudCgpKTtcbiAgfSBlbHNlIGlmIChvYmplY3RPckZ1bmN0aW9uKHZhbHVlKSkge1xuICAgIGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUsIGdldFRoZW4odmFsdWUpKTtcbiAgfSBlbHNlIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdWJsaXNoUmVqZWN0aW9uKHByb21pc2UpIHtcbiAgaWYgKHByb21pc2UuX29uZXJyb3IpIHtcbiAgICBwcm9taXNlLl9vbmVycm9yKHByb21pc2UuX3Jlc3VsdCk7XG4gIH1cblxuICBwdWJsaXNoKHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHByb21pc2UsIHZhbHVlKSB7XG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHByb21pc2UuX3Jlc3VsdCA9IHZhbHVlO1xuICBwcm9taXNlLl9zdGF0ZSA9IEZVTEZJTExFRDtcblxuICBpZiAocHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgYXNhcChwdWJsaXNoLCBwcm9taXNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVqZWN0KHByb21pc2UsIHJlYXNvbikge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJvbWlzZS5fc3RhdGUgPSBSRUpFQ1RFRDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gcmVhc29uO1xuXG4gIGFzYXAocHVibGlzaFJlamVjdGlvbiwgcHJvbWlzZSk7XG59XG5cbmZ1bmN0aW9uIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX3N1YnNjcmliZXJzID0gcGFyZW50Ll9zdWJzY3JpYmVycztcbiAgdmFyIGxlbmd0aCA9IF9zdWJzY3JpYmVycy5sZW5ndGg7XG5cbiAgcGFyZW50Ll9vbmVycm9yID0gbnVsbDtcblxuICBfc3Vic2NyaWJlcnNbbGVuZ3RoXSA9IGNoaWxkO1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgRlVMRklMTEVEXSA9IG9uRnVsZmlsbG1lbnQ7XG4gIF9zdWJzY3JpYmVyc1tsZW5ndGggKyBSRUpFQ1RFRF0gPSBvblJlamVjdGlvbjtcblxuICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHtcbiAgICBhc2FwKHB1Ymxpc2gsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaChwcm9taXNlKSB7XG4gIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJzO1xuICB2YXIgc2V0dGxlZCA9IHByb21pc2UuX3N0YXRlO1xuXG4gIGlmIChzdWJzY3JpYmVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY2hpbGQgPSB1bmRlZmluZWQsXG4gICAgICBjYWxsYmFjayA9IHVuZGVmaW5lZCxcbiAgICAgIGRldGFpbCA9IHByb21pc2UuX3Jlc3VsdDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgY2hpbGQgPSBzdWJzY3JpYmVyc1tpXTtcbiAgICBjYWxsYmFjayA9IHN1YnNjcmliZXJzW2kgKyBzZXR0bGVkXTtcblxuICAgIGlmIChjaGlsZCkge1xuICAgICAgaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgY2hpbGQsIGNhbGxiYWNrLCBkZXRhaWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhkZXRhaWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG59XG5cbmZ1bmN0aW9uIEVycm9yT2JqZWN0KCkge1xuICB0aGlzLmVycm9yID0gbnVsbDtcbn1cblxudmFyIFRSWV9DQVRDSF9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGRldGFpbCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBUUllfQ0FUQ0hfRVJST1IuZXJyb3IgPSBlO1xuICAgIHJldHVybiBUUllfQ0FUQ0hfRVJST1I7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgcHJvbWlzZSwgY2FsbGJhY2ssIGRldGFpbCkge1xuICB2YXIgaGFzQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKGNhbGxiYWNrKSxcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkLFxuICAgICAgZXJyb3IgPSB1bmRlZmluZWQsXG4gICAgICBzdWNjZWVkZWQgPSB1bmRlZmluZWQsXG4gICAgICBmYWlsZWQgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKGhhc0NhbGxiYWNrKSB7XG4gICAgdmFsdWUgPSB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gVFJZX0NBVENIX0VSUk9SKSB7XG4gICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgZXJyb3IgPSB2YWx1ZS5lcnJvcjtcbiAgICAgIHZhbHVlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgY2Fubm90UmV0dXJuT3duKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGRldGFpbDtcbiAgICBzdWNjZWVkZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgLy8gbm9vcFxuICB9IGVsc2UgaWYgKGhhc0NhbGxiYWNrICYmIHN1Y2NlZWRlZCkge1xuICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoZmFpbGVkKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9IGVsc2UgaWYgKHNldHRsZWQgPT09IEZVTEZJTExFRCkge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplUHJvbWlzZShwcm9taXNlLCByZXNvbHZlcikge1xuICB0cnkge1xuICAgIHJlc29sdmVyKGZ1bmN0aW9uIHJlc29sdmVQcm9taXNlKHZhbHVlKSB7XG4gICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gcmVqZWN0UHJvbWlzZShyZWFzb24pIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIF9yZWplY3QocHJvbWlzZSwgZSk7XG4gIH1cbn1cblxudmFyIGlkID0gMDtcbmZ1bmN0aW9uIG5leHRJZCgpIHtcbiAgcmV0dXJuIGlkKys7XG59XG5cbmZ1bmN0aW9uIG1ha2VQcm9taXNlKHByb21pc2UpIHtcbiAgcHJvbWlzZVtQUk9NSVNFX0lEXSA9IGlkKys7XG4gIHByb21pc2UuX3N0YXRlID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9yZXN1bHQgPSB1bmRlZmluZWQ7XG4gIHByb21pc2UuX3N1YnNjcmliZXJzID0gW107XG59XG5cbmZ1bmN0aW9uIEVudW1lcmF0b3IoQ29uc3RydWN0b3IsIGlucHV0KSB7XG4gIHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgdGhpcy5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuXG4gIGlmICghdGhpcy5wcm9taXNlW1BST01JU0VfSURdKSB7XG4gICAgbWFrZVByb21pc2UodGhpcy5wcm9taXNlKTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5sZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgdGhpcy5fcmVtYWluaW5nID0gaW5wdXQubGVuZ3RoO1xuXG4gICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGggfHwgMDtcbiAgICAgIHRoaXMuX2VudW1lcmF0ZSgpO1xuICAgICAgaWYgKHRoaXMuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICBmdWxmaWxsKHRoaXMucHJvbWlzZSwgdGhpcy5fcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgX3JlamVjdCh0aGlzLnByb21pc2UsIHZhbGlkYXRpb25FcnJvcigpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0aW9uRXJyb3IoKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0FycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheScpO1xufTtcblxuRW51bWVyYXRvci5wcm90b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICB2YXIgX2lucHV0ID0gdGhpcy5faW5wdXQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IHRoaXMuX3N0YXRlID09PSBQRU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHRoaXMuX2VhY2hFbnRyeShfaW5wdXRbaV0sIGkpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVudHJ5ID0gZnVuY3Rpb24gKGVudHJ5LCBpKSB7XG4gIHZhciBjID0gdGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcjtcbiAgdmFyIHJlc29sdmUkJCA9IGMucmVzb2x2ZTtcblxuICBpZiAocmVzb2x2ZSQkID09PSByZXNvbHZlKSB7XG4gICAgdmFyIF90aGVuID0gZ2V0VGhlbihlbnRyeSk7XG5cbiAgICBpZiAoX3RoZW4gPT09IHRoZW4gJiYgZW50cnkuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgICB0aGlzLl9zZXR0bGVkQXQoZW50cnkuX3N0YXRlLCBpLCBlbnRyeS5fcmVzdWx0KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBfdGhlbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fcmVtYWluaW5nLS07XG4gICAgICB0aGlzLl9yZXN1bHRbaV0gPSBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGMgPT09IFByb21pc2UpIHtcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IGMobm9vcCk7XG4gICAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIGVudHJ5LCBfdGhlbik7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQocHJvbWlzZSwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgYyhmdW5jdGlvbiAocmVzb2x2ZSQkKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlJCQoZW50cnkpO1xuICAgICAgfSksIGkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl93aWxsU2V0dGxlQXQocmVzb2x2ZSQkKGVudHJ5KSwgaSk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl9zZXR0bGVkQXQgPSBmdW5jdGlvbiAoc3RhdGUsIGksIHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gUEVORElORykge1xuICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuXG4gICAgaWYgKHN0YXRlID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jlc3VsdFtpXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbiAocHJvbWlzZSwgaSkge1xuICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgc3Vic2NyaWJlKHByb21pc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVudW1lcmF0b3IuX3NldHRsZWRBdChGVUxGSUxMRUQsIGksIHZhbHVlKTtcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoUkVKRUNURUQsIGksIHJlYXNvbik7XG4gIH0pO1xufTtcblxuLyoqXG4gIGBQcm9taXNlLmFsbGAgYWNjZXB0cyBhbiBhcnJheSBvZiBwcm9taXNlcywgYW5kIHJldHVybnMgYSBuZXcgcHJvbWlzZSB3aGljaFxuICBpcyBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSBvZiBmdWxmaWxsbWVudCB2YWx1ZXMgZm9yIHRoZSBwYXNzZWQgcHJvbWlzZXMsIG9yXG4gIHJlamVjdGVkIHdpdGggdGhlIHJlYXNvbiBvZiB0aGUgZmlyc3QgcGFzc2VkIHByb21pc2UgdG8gYmUgcmVqZWN0ZWQuIEl0IGNhc3RzIGFsbFxuICBlbGVtZW50cyBvZiB0aGUgcGFzc2VkIGl0ZXJhYmxlIHRvIHByb21pc2VzIGFzIGl0IHJ1bnMgdGhpcyBhbGdvcml0aG0uXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlc29sdmUoMik7XG4gIGxldCBwcm9taXNlMyA9IHJlc29sdmUoMyk7XG4gIGxldCBwcm9taXNlcyA9IFsgcHJvbWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdO1xuXG4gIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGFycmF5KXtcbiAgICAvLyBUaGUgYXJyYXkgaGVyZSB3b3VsZCBiZSBbIDEsIDIsIDMgXTtcbiAgfSk7XG4gIGBgYFxuXG4gIElmIGFueSBvZiB0aGUgYHByb21pc2VzYCBnaXZlbiB0byBgYWxsYCBhcmUgcmVqZWN0ZWQsIHRoZSBmaXJzdCBwcm9taXNlXG4gIHRoYXQgaXMgcmVqZWN0ZWQgd2lsbCBiZSBnaXZlbiBhcyBhbiBhcmd1bWVudCB0byB0aGUgcmV0dXJuZWQgcHJvbWlzZXMnc1xuICByZWplY3Rpb24gaGFuZGxlci4gRm9yIGV4YW1wbGU6XG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlamVjdChuZXcgRXJyb3IoXCIyXCIpKTtcbiAgbGV0IHByb21pc2UzID0gcmVqZWN0KG5ldyBFcnJvcihcIjNcIikpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gQ29kZSBoZXJlIG5ldmVyIHJ1bnMgYmVjYXVzZSB0aGVyZSBhcmUgcmVqZWN0ZWQgcHJvbWlzZXMhXG4gIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgLy8gZXJyb3IubWVzc2FnZSA9PT0gXCIyXCJcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgYWxsXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBcnJheX0gZW50cmllcyBhcnJheSBvZiBwcm9taXNlc1xuICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsIGBwcm9taXNlc2AgaGF2ZSBiZWVuXG4gIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQgaWYgYW55IG9mIHRoZW0gYmVjb21lIHJlamVjdGVkLlxuICBAc3RhdGljXG4qL1xuZnVuY3Rpb24gYWxsKGVudHJpZXMpIHtcbiAgcmV0dXJuIG5ldyBFbnVtZXJhdG9yKHRoaXMsIGVudHJpZXMpLnByb21pc2U7XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yYWNlYCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2ggaXMgc2V0dGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlXG4gIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIHNldHRsZS5cblxuICBFeGFtcGxlOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMicpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIHJlc3VsdCA9PT0gJ3Byb21pc2UgMicgYmVjYXVzZSBpdCB3YXMgcmVzb2x2ZWQgYmVmb3JlIHByb21pc2UxXG4gICAgLy8gd2FzIHJlc29sdmVkLlxuICB9KTtcbiAgYGBgXG5cbiAgYFByb21pc2UucmFjZWAgaXMgZGV0ZXJtaW5pc3RpYyBpbiB0aGF0IG9ubHkgdGhlIHN0YXRlIG9mIHRoZSBmaXJzdFxuICBzZXR0bGVkIHByb21pc2UgbWF0dGVycy4gRm9yIGV4YW1wbGUsIGV2ZW4gaWYgb3RoZXIgcHJvbWlzZXMgZ2l2ZW4gdG8gdGhlXG4gIGBwcm9taXNlc2AgYXJyYXkgYXJndW1lbnQgYXJlIHJlc29sdmVkLCBidXQgdGhlIGZpcnN0IHNldHRsZWQgcHJvbWlzZSBoYXNcbiAgYmVjb21lIHJlamVjdGVkIGJlZm9yZSB0aGUgb3RoZXIgcHJvbWlzZXMgYmVjYW1lIGZ1bGZpbGxlZCwgdGhlIHJldHVybmVkXG4gIHByb21pc2Ugd2lsbCBiZWNvbWUgcmVqZWN0ZWQ6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMScpO1xuICAgIH0sIDIwMCk7XG4gIH0pO1xuXG4gIGxldCBwcm9taXNlMiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcigncHJvbWlzZSAyJykpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgcHJvbWlzZSAyIGJlY2FtZSByZWplY3RlZCBiZWZvcmVcbiAgICAvLyBwcm9taXNlIDEgYmVjYW1lIGZ1bGZpbGxlZFxuICB9KTtcbiAgYGBgXG5cbiAgQW4gZXhhbXBsZSByZWFsLXdvcmxkIHVzZSBjYXNlIGlzIGltcGxlbWVudGluZyB0aW1lb3V0czpcblxuICBgYGBqYXZhc2NyaXB0XG4gIFByb21pc2UucmFjZShbYWpheCgnZm9vLmpzb24nKSwgdGltZW91dCg1MDAwKV0pXG4gIGBgYFxuXG4gIEBtZXRob2QgcmFjZVxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IHByb21pc2VzIGFycmF5IG9mIHByb21pc2VzIHRvIG9ic2VydmVcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2Ugd2hpY2ggc2V0dGxlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGZpcnN0IHBhc3NlZFxuICBwcm9taXNlIHRvIHNldHRsZS5cbiovXG5mdW5jdGlvbiByYWNlKGVudHJpZXMpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuICBpZiAoIWlzQXJyYXkoZW50cmllcykpIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChfLCByZWplY3QpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLicpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBsZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgQ29uc3RydWN0b3IucmVzb2x2ZShlbnRyaWVzW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlamVjdGAgcmV0dXJucyBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgcGFzc2VkIGByZWFzb25gLlxuICBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgcmVqZWN0KG5ldyBFcnJvcignV0hPT1BTJykpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCByZWplY3RcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gcmVhc29uIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCB3aXRoLlxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSByZWplY3RlZCB3aXRoIHRoZSBnaXZlbiBgcmVhc29uYC5cbiovXG5mdW5jdGlvbiByZWplY3QocmVhc29uKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBuZWVkc1Jlc29sdmVyKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yJyk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzTmV3KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xufVxuXG4vKipcbiAgUHJvbWlzZSBvYmplY3RzIHJlcHJlc2VudCB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFRoZVxuICBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaFxuICByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb25cbiAgd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG5cbiAgVGVybWlub2xvZ3lcbiAgLS0tLS0tLS0tLS1cblxuICAtIGBwcm9taXNlYCBpcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24gd2l0aCBhIGB0aGVuYCBtZXRob2Qgd2hvc2UgYmVoYXZpb3IgY29uZm9ybXMgdG8gdGhpcyBzcGVjaWZpY2F0aW9uLlxuICAtIGB0aGVuYWJsZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBhIGB0aGVuYCBtZXRob2QuXG4gIC0gYHZhbHVlYCBpcyBhbnkgbGVnYWwgSmF2YVNjcmlwdCB2YWx1ZSAoaW5jbHVkaW5nIHVuZGVmaW5lZCwgYSB0aGVuYWJsZSwgb3IgYSBwcm9taXNlKS5cbiAgLSBgZXhjZXB0aW9uYCBpcyBhIHZhbHVlIHRoYXQgaXMgdGhyb3duIHVzaW5nIHRoZSB0aHJvdyBzdGF0ZW1lbnQuXG4gIC0gYHJlYXNvbmAgaXMgYSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aHkgYSBwcm9taXNlIHdhcyByZWplY3RlZC5cbiAgLSBgc2V0dGxlZGAgdGhlIGZpbmFsIHJlc3Rpbmcgc3RhdGUgb2YgYSBwcm9taXNlLCBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG5cbiAgQSBwcm9taXNlIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOiBwZW5kaW5nLCBmdWxmaWxsZWQsIG9yIHJlamVjdGVkLlxuXG4gIFByb21pc2VzIHRoYXQgYXJlIGZ1bGZpbGxlZCBoYXZlIGEgZnVsZmlsbG1lbnQgdmFsdWUgYW5kIGFyZSBpbiB0aGUgZnVsZmlsbGVkXG4gIHN0YXRlLiAgUHJvbWlzZXMgdGhhdCBhcmUgcmVqZWN0ZWQgaGF2ZSBhIHJlamVjdGlvbiByZWFzb24gYW5kIGFyZSBpbiB0aGVcbiAgcmVqZWN0ZWQgc3RhdGUuICBBIGZ1bGZpbGxtZW50IHZhbHVlIGlzIG5ldmVyIGEgdGhlbmFibGUuXG5cbiAgUHJvbWlzZXMgY2FuIGFsc28gYmUgc2FpZCB0byAqcmVzb2x2ZSogYSB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgYWxzbyBhXG4gIHByb21pc2UsIHRoZW4gdGhlIG9yaWdpbmFsIHByb21pc2UncyBzZXR0bGVkIHN0YXRlIHdpbGwgbWF0Y2ggdGhlIHZhbHVlJ3NcbiAgc2V0dGxlZCBzdGF0ZS4gIFNvIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyB3aWxsXG4gIGl0c2VsZiByZWplY3QsIGFuZCBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpbGxcbiAgaXRzZWxmIGZ1bGZpbGwuXG5cblxuICBCYXNpYyBVc2FnZTpcbiAgLS0tLS0tLS0tLS0tXG5cbiAgYGBganNcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAvLyBvbiBzdWNjZXNzXG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG5cbiAgICAvLyBvbiBmYWlsdXJlXG4gICAgcmVqZWN0KHJlYXNvbik7XG4gIH0pO1xuXG4gIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgQWR2YW5jZWQgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLS0tLVxuXG4gIFByb21pc2VzIHNoaW5lIHdoZW4gYWJzdHJhY3RpbmcgYXdheSBhc3luY2hyb25vdXMgaW50ZXJhY3Rpb25zIHN1Y2ggYXNcbiAgYFhNTEh0dHBSZXF1ZXN0YHMuXG5cbiAgYGBganNcbiAgZnVuY3Rpb24gZ2V0SlNPTih1cmwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICAgIGxldCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7XG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHhoci5zZW5kKCk7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IHRoaXMuRE9ORSkge1xuICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdnZXRKU09OOiBgJyArIHVybCArICdgIGZhaWxlZCB3aXRoIHN0YXR1czogWycgKyB0aGlzLnN0YXR1cyArICddJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEpTT04oJy9wb3N0cy5qc29uJykudGhlbihmdW5jdGlvbihqc29uKSB7XG4gICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgLy8gb24gcmVqZWN0aW9uXG4gIH0pO1xuICBgYGBcblxuICBVbmxpa2UgY2FsbGJhY2tzLCBwcm9taXNlcyBhcmUgZ3JlYXQgY29tcG9zYWJsZSBwcmltaXRpdmVzLlxuXG4gIGBgYGpzXG4gIFByb21pc2UuYWxsKFtcbiAgICBnZXRKU09OKCcvcG9zdHMnKSxcbiAgICBnZXRKU09OKCcvY29tbWVudHMnKVxuICBdKS50aGVuKGZ1bmN0aW9uKHZhbHVlcyl7XG4gICAgdmFsdWVzWzBdIC8vID0+IHBvc3RzSlNPTlxuICAgIHZhbHVlc1sxXSAvLyA9PiBjb21tZW50c0pTT05cblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH0pO1xuICBgYGBcblxuICBAY2xhc3MgUHJvbWlzZVxuICBAcGFyYW0ge2Z1bmN0aW9ufSByZXNvbHZlclxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEBjb25zdHJ1Y3RvclxuKi9cbmZ1bmN0aW9uIFByb21pc2UocmVzb2x2ZXIpIHtcbiAgdGhpc1tQUk9NSVNFX0lEXSA9IG5leHRJZCgpO1xuICB0aGlzLl9yZXN1bHQgPSB0aGlzLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fc3Vic2NyaWJlcnMgPSBbXTtcblxuICBpZiAobm9vcCAhPT0gcmVzb2x2ZXIpIHtcbiAgICB0eXBlb2YgcmVzb2x2ZXIgIT09ICdmdW5jdGlvbicgJiYgbmVlZHNSZXNvbHZlcigpO1xuICAgIHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlID8gaW5pdGlhbGl6ZVByb21pc2UodGhpcywgcmVzb2x2ZXIpIDogbmVlZHNOZXcoKTtcbiAgfVxufVxuXG5Qcm9taXNlLmFsbCA9IGFsbDtcblByb21pc2UucmFjZSA9IHJhY2U7XG5Qcm9taXNlLnJlc29sdmUgPSByZXNvbHZlO1xuUHJvbWlzZS5yZWplY3QgPSByZWplY3Q7XG5Qcm9taXNlLl9zZXRTY2hlZHVsZXIgPSBzZXRTY2hlZHVsZXI7XG5Qcm9taXNlLl9zZXRBc2FwID0gc2V0QXNhcDtcblByb21pc2UuX2FzYXAgPSBhc2FwO1xuXG5Qcm9taXNlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFByb21pc2UsXG5cbiAgLyoqXG4gICAgVGhlIHByaW1hcnkgd2F5IG9mIGludGVyYWN0aW5nIHdpdGggYSBwcm9taXNlIGlzIHRocm91Z2ggaXRzIGB0aGVuYCBtZXRob2QsXG4gICAgd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGVcbiAgICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uKHVzZXIpe1xuICAgICAgLy8gdXNlciBpcyBhdmFpbGFibGVcbiAgICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gdXNlciBpcyB1bmF2YWlsYWJsZSwgYW5kIHlvdSBhcmUgZ2l2ZW4gdGhlIHJlYXNvbiB3aHlcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQ2hhaW5pbmdcbiAgICAtLS0tLS0tLVxuICBcbiAgICBUaGUgcmV0dXJuIHZhbHVlIG9mIGB0aGVuYCBpcyBpdHNlbGYgYSBwcm9taXNlLiAgVGhpcyBzZWNvbmQsICdkb3duc3RyZWFtJ1xuICAgIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmaXJzdCBwcm9taXNlJ3MgZnVsZmlsbG1lbnRcbiAgICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiB1c2VyLm5hbWU7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuICdkZWZhdWx0IG5hbWUnO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHVzZXJOYW1lKSB7XG4gICAgICAvLyBJZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHVzZXJOYW1lYCB3aWxsIGJlIHRoZSB1c2VyJ3MgbmFtZSwgb3RoZXJ3aXNlIGl0XG4gICAgICAvLyB3aWxsIGJlIGAnZGVmYXVsdCBuYW1lJ2BcbiAgICB9KTtcbiAgXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jyk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdyZSB1bmhhcHB5Jyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAvLyBpZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHJlYXNvbmAgd2lsbCBiZSAnRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknLlxuICAgICAgLy8gSWYgYGZpbmRVc2VyYCByZWplY3RlZCwgYHJlYXNvbmAgd2lsbCBiZSAnYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScuXG4gICAgfSk7XG4gICAgYGBgXG4gICAgSWYgdGhlIGRvd25zdHJlYW0gcHJvbWlzZSBkb2VzIG5vdCBzcGVjaWZ5IGEgcmVqZWN0aW9uIGhhbmRsZXIsIHJlamVjdGlvbiByZWFzb25zIHdpbGwgYmUgcHJvcGFnYXRlZCBmdXJ0aGVyIGRvd25zdHJlYW0uXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEFzc2ltaWxhdGlvblxuICAgIC0tLS0tLS0tLS0tLVxuICBcbiAgICBTb21ldGltZXMgdGhlIHZhbHVlIHlvdSB3YW50IHRvIHByb3BhZ2F0ZSB0byBhIGRvd25zdHJlYW0gcHJvbWlzZSBjYW4gb25seSBiZVxuICAgIHJldHJpZXZlZCBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpbiB0aGVcbiAgICBmdWxmaWxsbWVudCBvciByZWplY3Rpb24gaGFuZGxlci4gVGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIHRoZW4gYmUgcGVuZGluZ1xuICAgIHVudGlsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHNldHRsZWQuIFRoaXMgaXMgY2FsbGVkICphc3NpbWlsYXRpb24qLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBUaGUgdXNlcidzIGNvbW1lbnRzIGFyZSBub3cgYXZhaWxhYmxlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIElmIHRoZSBhc3NpbWxpYXRlZCBwcm9taXNlIHJlamVjdHMsIHRoZW4gdGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIGFsc28gcmVqZWN0LlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIGZ1bGZpbGxzLCB3ZSdsbCBoYXZlIHRoZSB2YWx1ZSBoZXJlXG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCByZWplY3RzLCB3ZSdsbCBoYXZlIHRoZSByZWFzb24gaGVyZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBTaW1wbGUgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCByZXN1bHQ7XG4gIFxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBmaW5kUmVzdWx0KCk7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9XG4gICAgYGBgXG4gIFxuICAgIEVycmJhY2sgRXhhbXBsZVxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRSZXN1bHQoZnVuY3Rpb24ocmVzdWx0LCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIFByb21pc2UgRXhhbXBsZTtcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGZpbmRSZXN1bHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQWR2YW5jZWQgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCBhdXRob3IsIGJvb2tzO1xuICBcbiAgICB0cnkge1xuICAgICAgYXV0aG9yID0gZmluZEF1dGhvcigpO1xuICAgICAgYm9va3MgID0gZmluZEJvb2tzQnlBdXRob3IoYXV0aG9yKTtcbiAgICAgIC8vIHN1Y2Nlc3NcbiAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgLy8gZmFpbHVyZVxuICAgIH1cbiAgICBgYGBcbiAgXG4gICAgRXJyYmFjayBFeGFtcGxlXG4gIFxuICAgIGBgYGpzXG4gIFxuICAgIGZ1bmN0aW9uIGZvdW5kQm9va3MoYm9va3MpIHtcbiAgXG4gICAgfVxuICBcbiAgICBmdW5jdGlvbiBmYWlsdXJlKHJlYXNvbikge1xuICBcbiAgICB9XG4gIFxuICAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgIC8vIGZhaWx1cmVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvdW5kQm9va3MoYm9va3MpO1xuICAgICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICAgIGZhaWx1cmUocmVhc29uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgUHJvbWlzZSBFeGFtcGxlO1xuICBcbiAgICBgYGBqYXZhc2NyaXB0XG4gICAgZmluZEF1dGhvcigpLlxuICAgICAgdGhlbihmaW5kQm9va3NCeUF1dGhvcikuXG4gICAgICB0aGVuKGZ1bmN0aW9uKGJvb2tzKXtcbiAgICAgICAgLy8gZm91bmQgYm9va3NcbiAgICB9KS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQG1ldGhvZCB0aGVuXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25GdWxmaWxsZWRcbiAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG4gIHRoZW46IHRoZW4sXG5cbiAgLyoqXG4gICAgYGNhdGNoYCBpcyBzaW1wbHkgc3VnYXIgZm9yIGB0aGVuKHVuZGVmaW5lZCwgb25SZWplY3Rpb24pYCB3aGljaCBtYWtlcyBpdCB0aGUgc2FtZVxuICAgIGFzIHRoZSBjYXRjaCBibG9jayBvZiBhIHRyeS9jYXRjaCBzdGF0ZW1lbnQuXG4gIFxuICAgIGBgYGpzXG4gICAgZnVuY3Rpb24gZmluZEF1dGhvcigpe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZG4ndCBmaW5kIHRoYXQgYXV0aG9yJyk7XG4gICAgfVxuICBcbiAgICAvLyBzeW5jaHJvbm91c1xuICAgIHRyeSB7XG4gICAgICBmaW5kQXV0aG9yKCk7XG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfVxuICBcbiAgICAvLyBhc3luYyB3aXRoIHByb21pc2VzXG4gICAgZmluZEF1dGhvcigpLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBAbWV0aG9kIGNhdGNoXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgQHJldHVybiB7UHJvbWlzZX1cbiAgKi9cbiAgJ2NhdGNoJzogZnVuY3Rpb24gX2NhdGNoKG9uUmVqZWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGlvbik7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHBvbHlmaWxsKCkge1xuICAgIHZhciBsb2NhbCA9IHVuZGVmaW5lZDtcblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IGdsb2JhbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvY2FsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBQID0gbG9jYWwuUHJvbWlzZTtcblxuICAgIGlmIChQKSB7XG4gICAgICAgIHZhciBwcm9taXNlVG9TdHJpbmcgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvbWlzZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFAucmVzb2x2ZSgpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gc2lsZW50bHkgaWdub3JlZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb21pc2VUb1N0cmluZyA9PT0gJ1tvYmplY3QgUHJvbWlzZV0nICYmICFQLmNhc3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvY2FsLlByb21pc2UgPSBQcm9taXNlO1xufVxuXG5wb2x5ZmlsbCgpO1xuLy8gU3RyYW5nZSBjb21wYXQuLlxuUHJvbWlzZS5wb2x5ZmlsbCA9IHBvbHlmaWxsO1xuUHJvbWlzZS5Qcm9taXNlID0gUHJvbWlzZTtcblxucmV0dXJuIFByb21pc2U7XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lczYtcHJvbWlzZS5tYXAiLCIvKiEgSlNPTiB2My4zLjIgfCBodHRwOi8vYmVzdGllanMuZ2l0aHViLmlvL2pzb24zIHwgQ29weXJpZ2h0IDIwMTItMjAxNCwgS2l0IENhbWJyaWRnZSB8IGh0dHA6Ly9raXQubWl0LWxpY2Vuc2Uub3JnICovXG47KGZ1bmN0aW9uICgpIHtcbiAgLy8gRGV0ZWN0IHRoZSBgZGVmaW5lYCBmdW5jdGlvbiBleHBvc2VkIGJ5IGFzeW5jaHJvbm91cyBtb2R1bGUgbG9hZGVycy4gVGhlXG4gIC8vIHN0cmljdCBgZGVmaW5lYCBjaGVjayBpcyBuZWNlc3NhcnkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBgci5qc2AuXG4gIHZhciBpc0xvYWRlciA9IHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kO1xuXG4gIC8vIEEgc2V0IG9mIHR5cGVzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggb2JqZWN0cyBmcm9tIHByaW1pdGl2ZXMuXG4gIHZhciBvYmplY3RUeXBlcyA9IHtcbiAgICBcImZ1bmN0aW9uXCI6IHRydWUsXG4gICAgXCJvYmplY3RcIjogdHJ1ZVxuICB9O1xuXG4gIC8vIERldGVjdCB0aGUgYGV4cG9ydHNgIG9iamVjdCBleHBvc2VkIGJ5IENvbW1vbkpTIGltcGxlbWVudGF0aW9ucy5cbiAgdmFyIGZyZWVFeHBvcnRzID0gb2JqZWN0VHlwZXNbdHlwZW9mIGV4cG9ydHNdICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuICAvLyBVc2UgdGhlIGBnbG9iYWxgIG9iamVjdCBleHBvc2VkIGJ5IE5vZGUgKGluY2x1ZGluZyBCcm93c2VyaWZ5IHZpYVxuICAvLyBgaW5zZXJ0LW1vZHVsZS1nbG9iYWxzYCksIE5hcndoYWwsIGFuZCBSaW5nbyBhcyB0aGUgZGVmYXVsdCBjb250ZXh0LFxuICAvLyBhbmQgdGhlIGB3aW5kb3dgIG9iamVjdCBpbiBicm93c2Vycy4gUmhpbm8gZXhwb3J0cyBhIGBnbG9iYWxgIGZ1bmN0aW9uXG4gIC8vIGluc3RlYWQuXG4gIHZhciByb290ID0gb2JqZWN0VHlwZXNbdHlwZW9mIHdpbmRvd10gJiYgd2luZG93IHx8IHRoaXMsXG4gICAgICBmcmVlR2xvYmFsID0gZnJlZUV4cG9ydHMgJiYgb2JqZWN0VHlwZXNbdHlwZW9mIG1vZHVsZV0gJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgdHlwZW9mIGdsb2JhbCA9PSBcIm9iamVjdFwiICYmIGdsb2JhbDtcblxuICBpZiAoZnJlZUdsb2JhbCAmJiAoZnJlZUdsb2JhbFtcImdsb2JhbFwiXSA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsW1wid2luZG93XCJdID09PSBmcmVlR2xvYmFsIHx8IGZyZWVHbG9iYWxbXCJzZWxmXCJdID09PSBmcmVlR2xvYmFsKSkge1xuICAgIHJvb3QgPSBmcmVlR2xvYmFsO1xuICB9XG5cbiAgLy8gUHVibGljOiBJbml0aWFsaXplcyBKU09OIDMgdXNpbmcgdGhlIGdpdmVuIGBjb250ZXh0YCBvYmplY3QsIGF0dGFjaGluZyB0aGVcbiAgLy8gYHN0cmluZ2lmeWAgYW5kIGBwYXJzZWAgZnVuY3Rpb25zIHRvIHRoZSBzcGVjaWZpZWQgYGV4cG9ydHNgIG9iamVjdC5cbiAgZnVuY3Rpb24gcnVuSW5Db250ZXh0KGNvbnRleHQsIGV4cG9ydHMpIHtcbiAgICBjb250ZXh0IHx8IChjb250ZXh0ID0gcm9vdFtcIk9iamVjdFwiXSgpKTtcbiAgICBleHBvcnRzIHx8IChleHBvcnRzID0gcm9vdFtcIk9iamVjdFwiXSgpKTtcblxuICAgIC8vIE5hdGl2ZSBjb25zdHJ1Y3RvciBhbGlhc2VzLlxuICAgIHZhciBOdW1iZXIgPSBjb250ZXh0W1wiTnVtYmVyXCJdIHx8IHJvb3RbXCJOdW1iZXJcIl0sXG4gICAgICAgIFN0cmluZyA9IGNvbnRleHRbXCJTdHJpbmdcIl0gfHwgcm9vdFtcIlN0cmluZ1wiXSxcbiAgICAgICAgT2JqZWN0ID0gY29udGV4dFtcIk9iamVjdFwiXSB8fCByb290W1wiT2JqZWN0XCJdLFxuICAgICAgICBEYXRlID0gY29udGV4dFtcIkRhdGVcIl0gfHwgcm9vdFtcIkRhdGVcIl0sXG4gICAgICAgIFN5bnRheEVycm9yID0gY29udGV4dFtcIlN5bnRheEVycm9yXCJdIHx8IHJvb3RbXCJTeW50YXhFcnJvclwiXSxcbiAgICAgICAgVHlwZUVycm9yID0gY29udGV4dFtcIlR5cGVFcnJvclwiXSB8fCByb290W1wiVHlwZUVycm9yXCJdLFxuICAgICAgICBNYXRoID0gY29udGV4dFtcIk1hdGhcIl0gfHwgcm9vdFtcIk1hdGhcIl0sXG4gICAgICAgIG5hdGl2ZUpTT04gPSBjb250ZXh0W1wiSlNPTlwiXSB8fCByb290W1wiSlNPTlwiXTtcblxuICAgIC8vIERlbGVnYXRlIHRvIHRoZSBuYXRpdmUgYHN0cmluZ2lmeWAgYW5kIGBwYXJzZWAgaW1wbGVtZW50YXRpb25zLlxuICAgIGlmICh0eXBlb2YgbmF0aXZlSlNPTiA9PSBcIm9iamVjdFwiICYmIG5hdGl2ZUpTT04pIHtcbiAgICAgIGV4cG9ydHMuc3RyaW5naWZ5ID0gbmF0aXZlSlNPTi5zdHJpbmdpZnk7XG4gICAgICBleHBvcnRzLnBhcnNlID0gbmF0aXZlSlNPTi5wYXJzZTtcbiAgICB9XG5cbiAgICAvLyBDb252ZW5pZW5jZSBhbGlhc2VzLlxuICAgIHZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgICAgIGdldENsYXNzID0gb2JqZWN0UHJvdG8udG9TdHJpbmcsXG4gICAgICAgIGlzUHJvcGVydHksIGZvckVhY2gsIHVuZGVmO1xuXG4gICAgLy8gVGVzdCB0aGUgYERhdGUjZ2V0VVRDKmAgbWV0aG9kcy4gQmFzZWQgb24gd29yayBieSBAWWFmZmxlLlxuICAgIHZhciBpc0V4dGVuZGVkID0gbmV3IERhdGUoLTM1MDk4MjczMzQ1NzMyOTIpO1xuICAgIHRyeSB7XG4gICAgICAvLyBUaGUgYGdldFVUQ0Z1bGxZZWFyYCwgYE1vbnRoYCwgYW5kIGBEYXRlYCBtZXRob2RzIHJldHVybiBub25zZW5zaWNhbFxuICAgICAgLy8gcmVzdWx0cyBmb3IgY2VydGFpbiBkYXRlcyBpbiBPcGVyYSA+PSAxMC41My5cbiAgICAgIGlzRXh0ZW5kZWQgPSBpc0V4dGVuZGVkLmdldFVUQ0Z1bGxZZWFyKCkgPT0gLTEwOTI1MiAmJiBpc0V4dGVuZGVkLmdldFVUQ01vbnRoKCkgPT09IDAgJiYgaXNFeHRlbmRlZC5nZXRVVENEYXRlKCkgPT09IDEgJiZcbiAgICAgICAgLy8gU2FmYXJpIDwgMi4wLjIgc3RvcmVzIHRoZSBpbnRlcm5hbCBtaWxsaXNlY29uZCB0aW1lIHZhbHVlIGNvcnJlY3RseSxcbiAgICAgICAgLy8gYnV0IGNsaXBzIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGRhdGUgbWV0aG9kcyB0byB0aGUgcmFuZ2Ugb2ZcbiAgICAgICAgLy8gc2lnbmVkIDMyLWJpdCBpbnRlZ2VycyAoWy0yICoqIDMxLCAyICoqIDMxIC0gMV0pLlxuICAgICAgICBpc0V4dGVuZGVkLmdldFVUQ0hvdXJzKCkgPT0gMTAgJiYgaXNFeHRlbmRlZC5nZXRVVENNaW51dGVzKCkgPT0gMzcgJiYgaXNFeHRlbmRlZC5nZXRVVENTZWNvbmRzKCkgPT0gNiAmJiBpc0V4dGVuZGVkLmdldFVUQ01pbGxpc2Vjb25kcygpID09IDcwODtcbiAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG5cbiAgICAvLyBJbnRlcm5hbDogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBuYXRpdmUgYEpTT04uc3RyaW5naWZ5YCBhbmQgYHBhcnNlYFxuICAgIC8vIGltcGxlbWVudGF0aW9ucyBhcmUgc3BlYy1jb21wbGlhbnQuIEJhc2VkIG9uIHdvcmsgYnkgS2VuIFNueWRlci5cbiAgICBmdW5jdGlvbiBoYXMobmFtZSkge1xuICAgICAgaWYgKGhhc1tuYW1lXSAhPT0gdW5kZWYpIHtcbiAgICAgICAgLy8gUmV0dXJuIGNhY2hlZCBmZWF0dXJlIHRlc3QgcmVzdWx0LlxuICAgICAgICByZXR1cm4gaGFzW25hbWVdO1xuICAgICAgfVxuICAgICAgdmFyIGlzU3VwcG9ydGVkO1xuICAgICAgaWYgKG5hbWUgPT0gXCJidWctc3RyaW5nLWNoYXItaW5kZXhcIikge1xuICAgICAgICAvLyBJRSA8PSA3IGRvZXNuJ3Qgc3VwcG9ydCBhY2Nlc3Npbmcgc3RyaW5nIGNoYXJhY3RlcnMgdXNpbmcgc3F1YXJlXG4gICAgICAgIC8vIGJyYWNrZXQgbm90YXRpb24uIElFIDggb25seSBzdXBwb3J0cyB0aGlzIGZvciBwcmltaXRpdmVzLlxuICAgICAgICBpc1N1cHBvcnRlZCA9IFwiYVwiWzBdICE9IFwiYVwiO1xuICAgICAgfSBlbHNlIGlmIChuYW1lID09IFwianNvblwiKSB7XG4gICAgICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIGJvdGggYEpTT04uc3RyaW5naWZ5YCBhbmQgYEpTT04ucGFyc2VgIGFyZVxuICAgICAgICAvLyBzdXBwb3J0ZWQuXG4gICAgICAgIGlzU3VwcG9ydGVkID0gaGFzKFwianNvbi1zdHJpbmdpZnlcIikgJiYgaGFzKFwianNvbi1wYXJzZVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB2YWx1ZSwgc2VyaWFsaXplZCA9ICd7XCJhXCI6WzEsdHJ1ZSxmYWxzZSxudWxsLFwiXFxcXHUwMDAwXFxcXGJcXFxcblxcXFxmXFxcXHJcXFxcdFwiXX0nO1xuICAgICAgICAvLyBUZXN0IGBKU09OLnN0cmluZ2lmeWAuXG4gICAgICAgIGlmIChuYW1lID09IFwianNvbi1zdHJpbmdpZnlcIikge1xuICAgICAgICAgIHZhciBzdHJpbmdpZnkgPSBleHBvcnRzLnN0cmluZ2lmeSwgc3RyaW5naWZ5U3VwcG9ydGVkID0gdHlwZW9mIHN0cmluZ2lmeSA9PSBcImZ1bmN0aW9uXCIgJiYgaXNFeHRlbmRlZDtcbiAgICAgICAgICBpZiAoc3RyaW5naWZ5U3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAvLyBBIHRlc3QgZnVuY3Rpb24gb2JqZWN0IHdpdGggYSBjdXN0b20gYHRvSlNPTmAgbWV0aG9kLlxuICAgICAgICAgICAgKHZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH0pLnRvSlNPTiA9IHZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc3RyaW5naWZ5U3VwcG9ydGVkID1cbiAgICAgICAgICAgICAgICAvLyBGaXJlZm94IDMuMWIxIGFuZCBiMiBzZXJpYWxpemUgc3RyaW5nLCBudW1iZXIsIGFuZCBib29sZWFuXG4gICAgICAgICAgICAgICAgLy8gcHJpbWl0aXZlcyBhcyBvYmplY3QgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KDApID09PSBcIjBcIiAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCBiMiwgYW5kIEpTT04gMiBzZXJpYWxpemUgd3JhcHBlZCBwcmltaXRpdmVzIGFzIG9iamVjdFxuICAgICAgICAgICAgICAgIC8vIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgTnVtYmVyKCkpID09PSBcIjBcIiAmJlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgU3RyaW5nKCkpID09ICdcIlwiJyAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCAyIHRocm93IGFuIGVycm9yIGlmIHRoZSB2YWx1ZSBpcyBgbnVsbGAsIGB1bmRlZmluZWRgLCBvclxuICAgICAgICAgICAgICAgIC8vIGRvZXMgbm90IGRlZmluZSBhIGNhbm9uaWNhbCBKU09OIHJlcHJlc2VudGF0aW9uICh0aGlzIGFwcGxpZXMgdG9cbiAgICAgICAgICAgICAgICAvLyBvYmplY3RzIHdpdGggYHRvSlNPTmAgcHJvcGVydGllcyBhcyB3ZWxsLCAqdW5sZXNzKiB0aGV5IGFyZSBuZXN0ZWRcbiAgICAgICAgICAgICAgICAvLyB3aXRoaW4gYW4gb2JqZWN0IG9yIGFycmF5KS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoZ2V0Q2xhc3MpID09PSB1bmRlZiAmJlxuICAgICAgICAgICAgICAgIC8vIElFIDggc2VyaWFsaXplcyBgdW5kZWZpbmVkYCBhcyBgXCJ1bmRlZmluZWRcImAuIFNhZmFyaSA8PSA1LjEuNyBhbmRcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMyBwYXNzIHRoaXMgdGVzdC5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkodW5kZWYpID09PSB1bmRlZiAmJlxuICAgICAgICAgICAgICAgIC8vIFNhZmFyaSA8PSA1LjEuNyBhbmQgRkYgMy4xYjMgdGhyb3cgYEVycm9yYHMgYW5kIGBUeXBlRXJyb3JgcyxcbiAgICAgICAgICAgICAgICAvLyByZXNwZWN0aXZlbHksIGlmIHRoZSB2YWx1ZSBpcyBvbWl0dGVkIGVudGlyZWx5LlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSgpID09PSB1bmRlZiAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCAyIHRocm93IGFuIGVycm9yIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBub3QgYSBudW1iZXIsXG4gICAgICAgICAgICAgICAgLy8gc3RyaW5nLCBhcnJheSwgb2JqZWN0LCBCb29sZWFuLCBvciBgbnVsbGAgbGl0ZXJhbC4gVGhpcyBhcHBsaWVzIHRvXG4gICAgICAgICAgICAgICAgLy8gb2JqZWN0cyB3aXRoIGN1c3RvbSBgdG9KU09OYCBtZXRob2RzIGFzIHdlbGwsIHVubGVzcyB0aGV5IGFyZSBuZXN0ZWRcbiAgICAgICAgICAgICAgICAvLyBpbnNpZGUgb2JqZWN0IG9yIGFycmF5IGxpdGVyYWxzLiBZVUkgMy4wLjBiMSBpZ25vcmVzIGN1c3RvbSBgdG9KU09OYFxuICAgICAgICAgICAgICAgIC8vIG1ldGhvZHMgZW50aXJlbHkuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KHZhbHVlKSA9PT0gXCIxXCIgJiZcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoW3ZhbHVlXSkgPT0gXCJbMV1cIiAmJlxuICAgICAgICAgICAgICAgIC8vIFByb3RvdHlwZSA8PSAxLjYuMSBzZXJpYWxpemVzIGBbdW5kZWZpbmVkXWAgYXMgYFwiW11cImAgaW5zdGVhZCBvZlxuICAgICAgICAgICAgICAgIC8vIGBcIltudWxsXVwiYC5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoW3VuZGVmXSkgPT0gXCJbbnVsbF1cIiAmJlxuICAgICAgICAgICAgICAgIC8vIFlVSSAzLjAuMGIxIGZhaWxzIHRvIHNlcmlhbGl6ZSBgbnVsbGAgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG51bGwpID09IFwibnVsbFwiICYmXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjEsIDIgaGFsdHMgc2VyaWFsaXphdGlvbiBpZiBhbiBhcnJheSBjb250YWlucyBhIGZ1bmN0aW9uOlxuICAgICAgICAgICAgICAgIC8vIGBbMSwgdHJ1ZSwgZ2V0Q2xhc3MsIDFdYCBzZXJpYWxpemVzIGFzIFwiWzEsdHJ1ZSxdLFwiLiBGRiAzLjFiM1xuICAgICAgICAgICAgICAgIC8vIGVsaWRlcyBub24tSlNPTiB2YWx1ZXMgZnJvbSBvYmplY3RzIGFuZCBhcnJheXMsIHVubGVzcyB0aGV5XG4gICAgICAgICAgICAgICAgLy8gZGVmaW5lIGN1c3RvbSBgdG9KU09OYCBtZXRob2RzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShbdW5kZWYsIGdldENsYXNzLCBudWxsXSkgPT0gXCJbbnVsbCxudWxsLG51bGxdXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBTaW1wbGUgc2VyaWFsaXphdGlvbiB0ZXN0LiBGRiAzLjFiMSB1c2VzIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlc1xuICAgICAgICAgICAgICAgIC8vIHdoZXJlIGNoYXJhY3RlciBlc2NhcGUgY29kZXMgYXJlIGV4cGVjdGVkIChlLmcuLCBgXFxiYCA9PiBgXFx1MDAwOGApLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSh7IFwiYVwiOiBbdmFsdWUsIHRydWUsIGZhbHNlLCBudWxsLCBcIlxceDAwXFxiXFxuXFxmXFxyXFx0XCJdIH0pID09IHNlcmlhbGl6ZWQgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSBhbmQgYjIgaWdub3JlIHRoZSBgZmlsdGVyYCBhbmQgYHdpZHRoYCBhcmd1bWVudHMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG51bGwsIHZhbHVlKSA9PT0gXCIxXCIgJiZcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoWzEsIDJdLCBudWxsLCAxKSA9PSBcIltcXG4gMSxcXG4gMlxcbl1cIiAmJlxuICAgICAgICAgICAgICAgIC8vIEpTT04gMiwgUHJvdG90eXBlIDw9IDEuNywgYW5kIG9sZGVyIFdlYktpdCBidWlsZHMgaW5jb3JyZWN0bHlcbiAgICAgICAgICAgICAgICAvLyBzZXJpYWxpemUgZXh0ZW5kZWQgeWVhcnMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBEYXRlKC04LjY0ZTE1KSkgPT0gJ1wiLTI3MTgyMS0wNC0yMFQwMDowMDowMC4wMDBaXCInICYmXG4gICAgICAgICAgICAgICAgLy8gVGhlIG1pbGxpc2Vjb25kcyBhcmUgb3B0aW9uYWwgaW4gRVMgNSwgYnV0IHJlcXVpcmVkIGluIDUuMS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IERhdGUoOC42NGUxNSkpID09ICdcIisyNzU3NjAtMDktMTNUMDA6MDA6MDAuMDAwWlwiJyAmJlxuICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggPD0gMTEuMCBpbmNvcnJlY3RseSBzZXJpYWxpemVzIHllYXJzIHByaW9yIHRvIDAgYXMgbmVnYXRpdmVcbiAgICAgICAgICAgICAgICAvLyBmb3VyLWRpZ2l0IHllYXJzIGluc3RlYWQgb2Ygc2l4LWRpZ2l0IHllYXJzLiBDcmVkaXRzOiBAWWFmZmxlLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgRGF0ZSgtNjIxOTg3NTUyZTUpKSA9PSAnXCItMDAwMDAxLTAxLTAxVDAwOjAwOjAwLjAwMFpcIicgJiZcbiAgICAgICAgICAgICAgICAvLyBTYWZhcmkgPD0gNS4xLjUgYW5kIE9wZXJhID49IDEwLjUzIGluY29ycmVjdGx5IHNlcmlhbGl6ZSBtaWxsaXNlY29uZFxuICAgICAgICAgICAgICAgIC8vIHZhbHVlcyBsZXNzIHRoYW4gMTAwMC4gQ3JlZGl0czogQFlhZmZsZS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IERhdGUoLTEpKSA9PSAnXCIxOTY5LTEyLTMxVDIzOjU5OjU5Ljk5OVpcIic7XG4gICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgc3RyaW5naWZ5U3VwcG9ydGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlzU3VwcG9ydGVkID0gc3RyaW5naWZ5U3VwcG9ydGVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRlc3QgYEpTT04ucGFyc2VgLlxuICAgICAgICBpZiAobmFtZSA9PSBcImpzb24tcGFyc2VcIikge1xuICAgICAgICAgIHZhciBwYXJzZSA9IGV4cG9ydHMucGFyc2U7XG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJzZSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCBiMiB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhIGJhcmUgbGl0ZXJhbCBpcyBwcm92aWRlZC5cbiAgICAgICAgICAgICAgLy8gQ29uZm9ybWluZyBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGFsc28gY29lcmNlIHRoZSBpbml0aWFsIGFyZ3VtZW50IHRvXG4gICAgICAgICAgICAgIC8vIGEgc3RyaW5nIHByaW9yIHRvIHBhcnNpbmcuXG4gICAgICAgICAgICAgIGlmIChwYXJzZShcIjBcIikgPT09IDAgJiYgIXBhcnNlKGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIC8vIFNpbXBsZSBwYXJzaW5nIHRlc3QuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZShzZXJpYWxpemVkKTtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VTdXBwb3J0ZWQgPSB2YWx1ZVtcImFcIl0ubGVuZ3RoID09IDUgJiYgdmFsdWVbXCJhXCJdWzBdID09PSAxO1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDUuMS4yIGFuZCBGRiAzLjFiMSBhbGxvdyB1bmVzY2FwZWQgdGFicyBpbiBzdHJpbmdzLlxuICAgICAgICAgICAgICAgICAgICBwYXJzZVN1cHBvcnRlZCA9ICFwYXJzZSgnXCJcXHRcIicpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gRkYgNC4wIGFuZCA0LjAuMSBhbGxvdyBsZWFkaW5nIGArYCBzaWducyBhbmQgbGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGRlY2ltYWwgcG9pbnRzLiBGRiA0LjAsIDQuMC4xLCBhbmQgSUUgOS0xMCBhbHNvIGFsbG93XG4gICAgICAgICAgICAgICAgICAgICAgLy8gY2VydGFpbiBvY3RhbCBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICAgICAgICBwYXJzZVN1cHBvcnRlZCA9IHBhcnNlKFwiMDFcIikgIT09IDE7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge31cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEZGIDQuMCwgNC4wLjEsIGFuZCBSaGlubyAxLjdSMy1SNCBhbGxvdyB0cmFpbGluZyBkZWNpbWFsXG4gICAgICAgICAgICAgICAgICAgICAgLy8gcG9pbnRzLiBUaGVzZSBlbnZpcm9ubWVudHMsIGFsb25nIHdpdGggRkYgMy4xYjEgYW5kIDIsXG4gICAgICAgICAgICAgICAgICAgICAgLy8gYWxzbyBhbGxvdyB0cmFpbGluZyBjb21tYXMgaW4gSlNPTiBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgICAgICAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSBwYXJzZShcIjEuXCIpICE9PSAxO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaXNTdXBwb3J0ZWQgPSBwYXJzZVN1cHBvcnRlZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc1tuYW1lXSA9ICEhaXNTdXBwb3J0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFoYXMoXCJqc29uXCIpKSB7XG4gICAgICAvLyBDb21tb24gYFtbQ2xhc3NdXWAgbmFtZSBhbGlhc2VzLlxuICAgICAgdmFyIGZ1bmN0aW9uQ2xhc3MgPSBcIltvYmplY3QgRnVuY3Rpb25dXCIsXG4gICAgICAgICAgZGF0ZUNsYXNzID0gXCJbb2JqZWN0IERhdGVdXCIsXG4gICAgICAgICAgbnVtYmVyQ2xhc3MgPSBcIltvYmplY3QgTnVtYmVyXVwiLFxuICAgICAgICAgIHN0cmluZ0NsYXNzID0gXCJbb2JqZWN0IFN0cmluZ11cIixcbiAgICAgICAgICBhcnJheUNsYXNzID0gXCJbb2JqZWN0IEFycmF5XVwiLFxuICAgICAgICAgIGJvb2xlYW5DbGFzcyA9IFwiW29iamVjdCBCb29sZWFuXVwiO1xuXG4gICAgICAvLyBEZXRlY3QgaW5jb21wbGV0ZSBzdXBwb3J0IGZvciBhY2Nlc3Npbmcgc3RyaW5nIGNoYXJhY3RlcnMgYnkgaW5kZXguXG4gICAgICB2YXIgY2hhckluZGV4QnVnZ3kgPSBoYXMoXCJidWctc3RyaW5nLWNoYXItaW5kZXhcIik7XG5cbiAgICAgIC8vIERlZmluZSBhZGRpdGlvbmFsIHV0aWxpdHkgbWV0aG9kcyBpZiB0aGUgYERhdGVgIG1ldGhvZHMgYXJlIGJ1Z2d5LlxuICAgICAgaWYgKCFpc0V4dGVuZGVkKSB7XG4gICAgICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG4gICAgICAgIC8vIEEgbWFwcGluZyBiZXR3ZWVuIHRoZSBtb250aHMgb2YgdGhlIHllYXIgYW5kIHRoZSBudW1iZXIgb2YgZGF5cyBiZXR3ZWVuXG4gICAgICAgIC8vIEphbnVhcnkgMXN0IGFuZCB0aGUgZmlyc3Qgb2YgdGhlIHJlc3BlY3RpdmUgbW9udGguXG4gICAgICAgIHZhciBNb250aHMgPSBbMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzRdO1xuICAgICAgICAvLyBJbnRlcm5hbDogQ2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIGRheXMgYmV0d2VlbiB0aGUgVW5peCBlcG9jaCBhbmQgdGhlXG4gICAgICAgIC8vIGZpcnN0IGRheSBvZiB0aGUgZ2l2ZW4gbW9udGguXG4gICAgICAgIHZhciBnZXREYXkgPSBmdW5jdGlvbiAoeWVhciwgbW9udGgpIHtcbiAgICAgICAgICByZXR1cm4gTW9udGhzW21vbnRoXSArIDM2NSAqICh5ZWFyIC0gMTk3MCkgKyBmbG9vcigoeWVhciAtIDE5NjkgKyAobW9udGggPSArKG1vbnRoID4gMSkpKSAvIDQpIC0gZmxvb3IoKHllYXIgLSAxOTAxICsgbW9udGgpIC8gMTAwKSArIGZsb29yKCh5ZWFyIC0gMTYwMSArIG1vbnRoKSAvIDQwMCk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEludGVybmFsOiBEZXRlcm1pbmVzIGlmIGEgcHJvcGVydHkgaXMgYSBkaXJlY3QgcHJvcGVydHkgb2YgdGhlIGdpdmVuXG4gICAgICAvLyBvYmplY3QuIERlbGVnYXRlcyB0byB0aGUgbmF0aXZlIGBPYmplY3QjaGFzT3duUHJvcGVydHlgIG1ldGhvZC5cbiAgICAgIGlmICghKGlzUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eSkpIHtcbiAgICAgICAgaXNQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgIHZhciBtZW1iZXJzID0ge30sIGNvbnN0cnVjdG9yO1xuICAgICAgICAgIGlmICgobWVtYmVycy5fX3Byb3RvX18gPSBudWxsLCBtZW1iZXJzLl9fcHJvdG9fXyA9IHtcbiAgICAgICAgICAgIC8vIFRoZSAqcHJvdG8qIHByb3BlcnR5IGNhbm5vdCBiZSBzZXQgbXVsdGlwbGUgdGltZXMgaW4gcmVjZW50XG4gICAgICAgICAgICAvLyB2ZXJzaW9ucyBvZiBGaXJlZm94IGFuZCBTZWFNb25rZXkuXG4gICAgICAgICAgICBcInRvU3RyaW5nXCI6IDFcbiAgICAgICAgICB9LCBtZW1iZXJzKS50b1N0cmluZyAhPSBnZXRDbGFzcykge1xuICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDIuMC4zIGRvZXNuJ3QgaW1wbGVtZW50IGBPYmplY3QjaGFzT3duUHJvcGVydHlgLCBidXRcbiAgICAgICAgICAgIC8vIHN1cHBvcnRzIHRoZSBtdXRhYmxlICpwcm90byogcHJvcGVydHkuXG4gICAgICAgICAgICBpc1Byb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIC8vIENhcHR1cmUgYW5kIGJyZWFrIHRoZSBvYmplY3QncyBwcm90b3R5cGUgY2hhaW4gKHNlZSBzZWN0aW9uIDguNi4yXG4gICAgICAgICAgICAgIC8vIG9mIHRoZSBFUyA1LjEgc3BlYykuIFRoZSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24gcHJldmVudHMgYW5cbiAgICAgICAgICAgICAgLy8gdW5zYWZlIHRyYW5zZm9ybWF0aW9uIGJ5IHRoZSBDbG9zdXJlIENvbXBpbGVyLlxuICAgICAgICAgICAgICB2YXIgb3JpZ2luYWwgPSB0aGlzLl9fcHJvdG9fXywgcmVzdWx0ID0gcHJvcGVydHkgaW4gKHRoaXMuX19wcm90b19fID0gbnVsbCwgdGhpcyk7XG4gICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb3RvdHlwZSBjaGFpbi5cbiAgICAgICAgICAgICAgdGhpcy5fX3Byb3RvX18gPSBvcmlnaW5hbDtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENhcHR1cmUgYSByZWZlcmVuY2UgdG8gdGhlIHRvcC1sZXZlbCBgT2JqZWN0YCBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gbWVtYmVycy5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgYGNvbnN0cnVjdG9yYCBwcm9wZXJ0eSB0byBzaW11bGF0ZSBgT2JqZWN0I2hhc093blByb3BlcnR5YCBpblxuICAgICAgICAgICAgLy8gb3RoZXIgZW52aXJvbm1lbnRzLlxuICAgICAgICAgICAgaXNQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gKHRoaXMuY29uc3RydWN0b3IgfHwgY29uc3RydWN0b3IpLnByb3RvdHlwZTtcbiAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5IGluIHRoaXMgJiYgIShwcm9wZXJ0eSBpbiBwYXJlbnQgJiYgdGhpc1twcm9wZXJ0eV0gPT09IHBhcmVudFtwcm9wZXJ0eV0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWVtYmVycyA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGlzUHJvcGVydHkuY2FsbCh0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEludGVybmFsOiBOb3JtYWxpemVzIHRoZSBgZm9yLi4uaW5gIGl0ZXJhdGlvbiBhbGdvcml0aG0gYWNyb3NzXG4gICAgICAvLyBlbnZpcm9ubWVudHMuIEVhY2ggZW51bWVyYXRlZCBrZXkgaXMgeWllbGRlZCB0byBhIGBjYWxsYmFja2AgZnVuY3Rpb24uXG4gICAgICBmb3JFYWNoID0gZnVuY3Rpb24gKG9iamVjdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNpemUgPSAwLCBQcm9wZXJ0aWVzLCBtZW1iZXJzLCBwcm9wZXJ0eTtcblxuICAgICAgICAvLyBUZXN0cyBmb3IgYnVncyBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCdzIGBmb3IuLi5pbmAgYWxnb3JpdGhtLiBUaGVcbiAgICAgICAgLy8gYHZhbHVlT2ZgIHByb3BlcnR5IGluaGVyaXRzIHRoZSBub24tZW51bWVyYWJsZSBmbGFnIGZyb21cbiAgICAgICAgLy8gYE9iamVjdC5wcm90b3R5cGVgIGluIG9sZGVyIHZlcnNpb25zIG9mIElFLCBOZXRzY2FwZSwgYW5kIE1vemlsbGEuXG4gICAgICAgIChQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMudmFsdWVPZiA9IDA7XG4gICAgICAgIH0pLnByb3RvdHlwZS52YWx1ZU9mID0gMDtcblxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGBQcm9wZXJ0aWVzYCBjbGFzcy5cbiAgICAgICAgbWVtYmVycyA9IG5ldyBQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGZvciAocHJvcGVydHkgaW4gbWVtYmVycykge1xuICAgICAgICAgIC8vIElnbm9yZSBhbGwgcHJvcGVydGllcyBpbmhlcml0ZWQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuXG4gICAgICAgICAgaWYgKGlzUHJvcGVydHkuY2FsbChtZW1iZXJzLCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgIHNpemUrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgUHJvcGVydGllcyA9IG1lbWJlcnMgPSBudWxsO1xuXG4gICAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgaXRlcmF0aW9uIGFsZ29yaXRobS5cbiAgICAgICAgaWYgKCFzaXplKSB7XG4gICAgICAgICAgLy8gQSBsaXN0IG9mIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgaW5oZXJpdGVkIGZyb20gYE9iamVjdC5wcm90b3R5cGVgLlxuICAgICAgICAgIG1lbWJlcnMgPSBbXCJ2YWx1ZU9mXCIsIFwidG9TdHJpbmdcIiwgXCJ0b0xvY2FsZVN0cmluZ1wiLCBcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsIFwiaXNQcm90b3R5cGVPZlwiLCBcImhhc093blByb3BlcnR5XCIsIFwiY29uc3RydWN0b3JcIl07XG4gICAgICAgICAgLy8gSUUgPD0gOCwgTW96aWxsYSAxLjAsIGFuZCBOZXRzY2FwZSA2LjIgaWdub3JlIHNoYWRvd2VkIG5vbi1lbnVtZXJhYmxlXG4gICAgICAgICAgLy8gcHJvcGVydGllcy5cbiAgICAgICAgICBmb3JFYWNoID0gZnVuY3Rpb24gKG9iamVjdCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciBpc0Z1bmN0aW9uID0gZ2V0Q2xhc3MuY2FsbChvYmplY3QpID09IGZ1bmN0aW9uQ2xhc3MsIHByb3BlcnR5LCBsZW5ndGg7XG4gICAgICAgICAgICB2YXIgaGFzUHJvcGVydHkgPSAhaXNGdW5jdGlvbiAmJiB0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yICE9IFwiZnVuY3Rpb25cIiAmJiBvYmplY3RUeXBlc1t0eXBlb2Ygb2JqZWN0Lmhhc093blByb3BlcnR5XSAmJiBvYmplY3QuaGFzT3duUHJvcGVydHkgfHwgaXNQcm9wZXJ0eTtcbiAgICAgICAgICAgIGZvciAocHJvcGVydHkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgIC8vIEdlY2tvIDw9IDEuMCBlbnVtZXJhdGVzIHRoZSBgcHJvdG90eXBlYCBwcm9wZXJ0eSBvZiBmdW5jdGlvbnMgdW5kZXJcbiAgICAgICAgICAgICAgLy8gY2VydGFpbiBjb25kaXRpb25zOyBJRSBkb2VzIG5vdC5cbiAgICAgICAgICAgICAgaWYgKCEoaXNGdW5jdGlvbiAmJiBwcm9wZXJ0eSA9PSBcInByb3RvdHlwZVwiKSAmJiBoYXNQcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2socHJvcGVydHkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNYW51YWxseSBpbnZva2UgdGhlIGNhbGxiYWNrIGZvciBlYWNoIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5LlxuICAgICAgICAgICAgZm9yIChsZW5ndGggPSBtZW1iZXJzLmxlbmd0aDsgcHJvcGVydHkgPSBtZW1iZXJzWy0tbGVuZ3RoXTsgaGFzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSAmJiBjYWxsYmFjayhwcm9wZXJ0eSkpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoc2l6ZSA9PSAyKSB7XG4gICAgICAgICAgLy8gU2FmYXJpIDw9IDIuMC40IGVudW1lcmF0ZXMgc2hhZG93ZWQgcHJvcGVydGllcyB0d2ljZS5cbiAgICAgICAgICBmb3JFYWNoID0gZnVuY3Rpb24gKG9iamVjdCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHNldCBvZiBpdGVyYXRlZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgdmFyIG1lbWJlcnMgPSB7fSwgaXNGdW5jdGlvbiA9IGdldENsYXNzLmNhbGwob2JqZWN0KSA9PSBmdW5jdGlvbkNsYXNzLCBwcm9wZXJ0eTtcbiAgICAgICAgICAgIGZvciAocHJvcGVydHkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgIC8vIFN0b3JlIGVhY2ggcHJvcGVydHkgbmFtZSB0byBwcmV2ZW50IGRvdWJsZSBlbnVtZXJhdGlvbi4gVGhlXG4gICAgICAgICAgICAgIC8vIGBwcm90b3R5cGVgIHByb3BlcnR5IG9mIGZ1bmN0aW9ucyBpcyBub3QgZW51bWVyYXRlZCBkdWUgdG8gY3Jvc3MtXG4gICAgICAgICAgICAgIC8vIGVudmlyb25tZW50IGluY29uc2lzdGVuY2llcy5cbiAgICAgICAgICAgICAgaWYgKCEoaXNGdW5jdGlvbiAmJiBwcm9wZXJ0eSA9PSBcInByb3RvdHlwZVwiKSAmJiAhaXNQcm9wZXJ0eS5jYWxsKG1lbWJlcnMsIHByb3BlcnR5KSAmJiAobWVtYmVyc1twcm9wZXJ0eV0gPSAxKSAmJiBpc1Byb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vIGJ1Z3MgZGV0ZWN0ZWQ7IHVzZSB0aGUgc3RhbmRhcmQgYGZvci4uLmluYCBhbGdvcml0aG0uXG4gICAgICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IGdldENsYXNzLmNhbGwob2JqZWN0KSA9PSBmdW5jdGlvbkNsYXNzLCBwcm9wZXJ0eSwgaXNDb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIGZvciAocHJvcGVydHkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgIGlmICghKGlzRnVuY3Rpb24gJiYgcHJvcGVydHkgPT0gXCJwcm90b3R5cGVcIikgJiYgaXNQcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpICYmICEoaXNDb25zdHJ1Y3RvciA9IHByb3BlcnR5ID09PSBcImNvbnN0cnVjdG9yXCIpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2socHJvcGVydHkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNYW51YWxseSBpbnZva2UgdGhlIGNhbGxiYWNrIGZvciB0aGUgYGNvbnN0cnVjdG9yYCBwcm9wZXJ0eSBkdWUgdG9cbiAgICAgICAgICAgIC8vIGNyb3NzLWVudmlyb25tZW50IGluY29uc2lzdGVuY2llcy5cbiAgICAgICAgICAgIGlmIChpc0NvbnN0cnVjdG9yIHx8IGlzUHJvcGVydHkuY2FsbChvYmplY3QsIChwcm9wZXJ0eSA9IFwiY29uc3RydWN0b3JcIikpKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JFYWNoKG9iamVjdCwgY2FsbGJhY2spO1xuICAgICAgfTtcblxuICAgICAgLy8gUHVibGljOiBTZXJpYWxpemVzIGEgSmF2YVNjcmlwdCBgdmFsdWVgIGFzIGEgSlNPTiBzdHJpbmcuIFRoZSBvcHRpb25hbFxuICAgICAgLy8gYGZpbHRlcmAgYXJndW1lbnQgbWF5IHNwZWNpZnkgZWl0aGVyIGEgZnVuY3Rpb24gdGhhdCBhbHRlcnMgaG93IG9iamVjdCBhbmRcbiAgICAgIC8vIGFycmF5IG1lbWJlcnMgYXJlIHNlcmlhbGl6ZWQsIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MgYW5kIG51bWJlcnMgdGhhdFxuICAgICAgLy8gaW5kaWNhdGVzIHdoaWNoIHByb3BlcnRpZXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQuIFRoZSBvcHRpb25hbCBgd2lkdGhgXG4gICAgICAvLyBhcmd1bWVudCBtYXkgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIG51bWJlciB0aGF0IHNwZWNpZmllcyB0aGUgaW5kZW50YXRpb25cbiAgICAgIC8vIGxldmVsIG9mIHRoZSBvdXRwdXQuXG4gICAgICBpZiAoIWhhcyhcImpzb24tc3RyaW5naWZ5XCIpKSB7XG4gICAgICAgIC8vIEludGVybmFsOiBBIG1hcCBvZiBjb250cm9sIGNoYXJhY3RlcnMgYW5kIHRoZWlyIGVzY2FwZWQgZXF1aXZhbGVudHMuXG4gICAgICAgIHZhciBFc2NhcGVzID0ge1xuICAgICAgICAgIDkyOiBcIlxcXFxcXFxcXCIsXG4gICAgICAgICAgMzQ6ICdcXFxcXCInLFxuICAgICAgICAgIDg6IFwiXFxcXGJcIixcbiAgICAgICAgICAxMjogXCJcXFxcZlwiLFxuICAgICAgICAgIDEwOiBcIlxcXFxuXCIsXG4gICAgICAgICAgMTM6IFwiXFxcXHJcIixcbiAgICAgICAgICA5OiBcIlxcXFx0XCJcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogQ29udmVydHMgYHZhbHVlYCBpbnRvIGEgemVyby1wYWRkZWQgc3RyaW5nIHN1Y2ggdGhhdCBpdHNcbiAgICAgICAgLy8gbGVuZ3RoIGlzIGF0IGxlYXN0IGVxdWFsIHRvIGB3aWR0aGAuIFRoZSBgd2lkdGhgIG11c3QgYmUgPD0gNi5cbiAgICAgICAgdmFyIGxlYWRpbmdaZXJvZXMgPSBcIjAwMDAwMFwiO1xuICAgICAgICB2YXIgdG9QYWRkZWRTdHJpbmcgPSBmdW5jdGlvbiAod2lkdGgsIHZhbHVlKSB7XG4gICAgICAgICAgLy8gVGhlIGB8fCAwYCBleHByZXNzaW9uIGlzIG5lY2Vzc2FyeSB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpblxuICAgICAgICAgIC8vIE9wZXJhIDw9IDcuNTR1MiB3aGVyZSBgMCA9PSAtMGAsIGJ1dCBgU3RyaW5nKC0wKSAhPT0gXCIwXCJgLlxuICAgICAgICAgIHJldHVybiAobGVhZGluZ1plcm9lcyArICh2YWx1ZSB8fCAwKSkuc2xpY2UoLXdpZHRoKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogRG91YmxlLXF1b3RlcyBhIHN0cmluZyBgdmFsdWVgLCByZXBsYWNpbmcgYWxsIEFTQ0lJIGNvbnRyb2xcbiAgICAgICAgLy8gY2hhcmFjdGVycyAoY2hhcmFjdGVycyB3aXRoIGNvZGUgdW5pdCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAzMSkgd2l0aFxuICAgICAgICAvLyB0aGVpciBlc2NhcGVkIGVxdWl2YWxlbnRzLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZVxuICAgICAgICAvLyBgUXVvdGUodmFsdWUpYCBvcGVyYXRpb24gZGVmaW5lZCBpbiBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLlxuICAgICAgICB2YXIgdW5pY29kZVByZWZpeCA9IFwiXFxcXHUwMFwiO1xuICAgICAgICB2YXIgcXVvdGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gJ1wiJywgaW5kZXggPSAwLCBsZW5ndGggPSB2YWx1ZS5sZW5ndGgsIHVzZUNoYXJJbmRleCA9ICFjaGFySW5kZXhCdWdneSB8fCBsZW5ndGggPiAxMDtcbiAgICAgICAgICB2YXIgc3ltYm9scyA9IHVzZUNoYXJJbmRleCAmJiAoY2hhckluZGV4QnVnZ3kgPyB2YWx1ZS5zcGxpdChcIlwiKSA6IHZhbHVlKTtcbiAgICAgICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIHZhciBjaGFyQ29kZSA9IHZhbHVlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgLy8gSWYgdGhlIGNoYXJhY3RlciBpcyBhIGNvbnRyb2wgY2hhcmFjdGVyLCBhcHBlbmQgaXRzIFVuaWNvZGUgb3JcbiAgICAgICAgICAgIC8vIHNob3J0aGFuZCBlc2NhcGUgc2VxdWVuY2U7IG90aGVyd2lzZSwgYXBwZW5kIHRoZSBjaGFyYWN0ZXIgYXMtaXMuXG4gICAgICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7XG4gICAgICAgICAgICAgIGNhc2UgODogY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEyOiBjYXNlIDEzOiBjYXNlIDM0OiBjYXNlIDkyOlxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBFc2NhcGVzW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPCAzMikge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHVuaWNvZGVQcmVmaXggKyB0b1BhZGRlZFN0cmluZygyLCBjaGFyQ29kZS50b1N0cmluZygxNikpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB1c2VDaGFySW5kZXggPyBzeW1ib2xzW2luZGV4XSA6IHZhbHVlLmNoYXJBdChpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnXCInO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZWN1cnNpdmVseSBzZXJpYWxpemVzIGFuIG9iamVjdC4gSW1wbGVtZW50cyB0aGVcbiAgICAgICAgLy8gYFN0cihrZXksIGhvbGRlcilgLCBgSk8odmFsdWUpYCwgYW5kIGBKQSh2YWx1ZSlgIG9wZXJhdGlvbnMuXG4gICAgICAgIHZhciBzZXJpYWxpemUgPSBmdW5jdGlvbiAocHJvcGVydHksIG9iamVjdCwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIGluZGVudGF0aW9uLCBzdGFjaykge1xuICAgICAgICAgIHZhciB2YWx1ZSwgY2xhc3NOYW1lLCB5ZWFyLCBtb250aCwgZGF0ZSwgdGltZSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgcmVzdWx0cywgZWxlbWVudCwgaW5kZXgsIGxlbmd0aCwgcHJlZml4LCByZXN1bHQ7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIE5lY2Vzc2FyeSBmb3IgaG9zdCBvYmplY3Qgc3VwcG9ydC5cbiAgICAgICAgICAgIHZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTtcbiAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT0gZGF0ZUNsYXNzICYmICFpc1Byb3BlcnR5LmNhbGwodmFsdWUsIFwidG9KU09OXCIpKSB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZSA+IC0xIC8gMCAmJiB2YWx1ZSA8IDEgLyAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRGF0ZXMgYXJlIHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIHRoZSBgRGF0ZSN0b0pTT05gIG1ldGhvZFxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllZCBpbiBFUyA1LjEgc2VjdGlvbiAxNS45LjUuNDQuIFNlZSBzZWN0aW9uIDE1LjkuMS4xNVxuICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgSVNPIDg2MDEgZGF0ZSB0aW1lIHN0cmluZyBmb3JtYXQuXG4gICAgICAgICAgICAgICAgaWYgKGdldERheSkge1xuICAgICAgICAgICAgICAgICAgLy8gTWFudWFsbHkgY29tcHV0ZSB0aGUgeWVhciwgbW9udGgsIGRhdGUsIGhvdXJzLCBtaW51dGVzLFxuICAgICAgICAgICAgICAgICAgLy8gc2Vjb25kcywgYW5kIG1pbGxpc2Vjb25kcyBpZiB0aGUgYGdldFVUQypgIG1ldGhvZHMgYXJlXG4gICAgICAgICAgICAgICAgICAvLyBidWdneS4gQWRhcHRlZCBmcm9tIEBZYWZmbGUncyBgZGF0ZS1zaGltYCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgZGF0ZSA9IGZsb29yKHZhbHVlIC8gODY0ZTUpO1xuICAgICAgICAgICAgICAgICAgZm9yICh5ZWFyID0gZmxvb3IoZGF0ZSAvIDM2NS4yNDI1KSArIDE5NzAgLSAxOyBnZXREYXkoeWVhciArIDEsIDApIDw9IGRhdGU7IHllYXIrKyk7XG4gICAgICAgICAgICAgICAgICBmb3IgKG1vbnRoID0gZmxvb3IoKGRhdGUgLSBnZXREYXkoeWVhciwgMCkpIC8gMzAuNDIpOyBnZXREYXkoeWVhciwgbW9udGggKyAxKSA8PSBkYXRlOyBtb250aCsrKTtcbiAgICAgICAgICAgICAgICAgIGRhdGUgPSAxICsgZGF0ZSAtIGdldERheSh5ZWFyLCBtb250aCk7XG4gICAgICAgICAgICAgICAgICAvLyBUaGUgYHRpbWVgIHZhbHVlIHNwZWNpZmllcyB0aGUgdGltZSB3aXRoaW4gdGhlIGRheSAoc2VlIEVTXG4gICAgICAgICAgICAgICAgICAvLyA1LjEgc2VjdGlvbiAxNS45LjEuMikuIFRoZSBmb3JtdWxhIGAoQSAlIEIgKyBCKSAlIEJgIGlzIHVzZWRcbiAgICAgICAgICAgICAgICAgIC8vIHRvIGNvbXB1dGUgYEEgbW9kdWxvIEJgLCBhcyB0aGUgYCVgIG9wZXJhdG9yIGRvZXMgbm90XG4gICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kIHRvIHRoZSBgbW9kdWxvYCBvcGVyYXRpb24gZm9yIG5lZ2F0aXZlIG51bWJlcnMuXG4gICAgICAgICAgICAgICAgICB0aW1lID0gKHZhbHVlICUgODY0ZTUgKyA4NjRlNSkgJSA4NjRlNTtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBob3VycywgbWludXRlcywgc2Vjb25kcywgYW5kIG1pbGxpc2Vjb25kcyBhcmUgb2J0YWluZWQgYnlcbiAgICAgICAgICAgICAgICAgIC8vIGRlY29tcG9zaW5nIHRoZSB0aW1lIHdpdGhpbiB0aGUgZGF5LiBTZWUgc2VjdGlvbiAxNS45LjEuMTAuXG4gICAgICAgICAgICAgICAgICBob3VycyA9IGZsb29yKHRpbWUgLyAzNmU1KSAlIDI0O1xuICAgICAgICAgICAgICAgICAgbWludXRlcyA9IGZsb29yKHRpbWUgLyA2ZTQpICUgNjA7XG4gICAgICAgICAgICAgICAgICBzZWNvbmRzID0gZmxvb3IodGltZSAvIDFlMykgJSA2MDtcbiAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IHRpbWUgJSAxZTM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHllYXIgPSB2YWx1ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgICAgbW9udGggPSB2YWx1ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgICAgICAgZGF0ZSA9IHZhbHVlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgICAgICAgICAgIGhvdXJzID0gdmFsdWUuZ2V0VVRDSG91cnMoKTtcbiAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSB2YWx1ZS5nZXRVVENNaW51dGVzKCk7XG4gICAgICAgICAgICAgICAgICBzZWNvbmRzID0gdmFsdWUuZ2V0VVRDU2Vjb25kcygpO1xuICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdmFsdWUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSBleHRlbmRlZCB5ZWFycyBjb3JyZWN0bHkuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSAoeWVhciA8PSAwIHx8IHllYXIgPj0gMWU0ID8gKHllYXIgPCAwID8gXCItXCIgOiBcIitcIikgKyB0b1BhZGRlZFN0cmluZyg2LCB5ZWFyIDwgMCA/IC15ZWFyIDogeWVhcikgOiB0b1BhZGRlZFN0cmluZyg0LCB5ZWFyKSkgK1xuICAgICAgICAgICAgICAgICAgXCItXCIgKyB0b1BhZGRlZFN0cmluZygyLCBtb250aCArIDEpICsgXCItXCIgKyB0b1BhZGRlZFN0cmluZygyLCBkYXRlKSArXG4gICAgICAgICAgICAgICAgICAvLyBNb250aHMsIGRhdGVzLCBob3VycywgbWludXRlcywgYW5kIHNlY29uZHMgc2hvdWxkIGhhdmUgdHdvXG4gICAgICAgICAgICAgICAgICAvLyBkaWdpdHM7IG1pbGxpc2Vjb25kcyBzaG91bGQgaGF2ZSB0aHJlZS5cbiAgICAgICAgICAgICAgICAgIFwiVFwiICsgdG9QYWRkZWRTdHJpbmcoMiwgaG91cnMpICsgXCI6XCIgKyB0b1BhZGRlZFN0cmluZygyLCBtaW51dGVzKSArIFwiOlwiICsgdG9QYWRkZWRTdHJpbmcoMiwgc2Vjb25kcykgK1xuICAgICAgICAgICAgICAgICAgLy8gTWlsbGlzZWNvbmRzIGFyZSBvcHRpb25hbCBpbiBFUyA1LjAsIGJ1dCByZXF1aXJlZCBpbiA1LjEuXG4gICAgICAgICAgICAgICAgICBcIi5cIiArIHRvUGFkZGVkU3RyaW5nKDMsIG1pbGxpc2Vjb25kcykgKyBcIlpcIjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlLnRvSlNPTiA9PSBcImZ1bmN0aW9uXCIgJiYgKChjbGFzc05hbWUgIT0gbnVtYmVyQ2xhc3MgJiYgY2xhc3NOYW1lICE9IHN0cmluZ0NsYXNzICYmIGNsYXNzTmFtZSAhPSBhcnJheUNsYXNzKSB8fCBpc1Byb3BlcnR5LmNhbGwodmFsdWUsIFwidG9KU09OXCIpKSkge1xuICAgICAgICAgICAgICAvLyBQcm90b3R5cGUgPD0gMS42LjEgYWRkcyBub24tc3RhbmRhcmQgYHRvSlNPTmAgbWV0aG9kcyB0byB0aGVcbiAgICAgICAgICAgICAgLy8gYE51bWJlcmAsIGBTdHJpbmdgLCBgRGF0ZWAsIGFuZCBgQXJyYXlgIHByb3RvdHlwZXMuIEpTT04gM1xuICAgICAgICAgICAgICAvLyBpZ25vcmVzIGFsbCBgdG9KU09OYCBtZXRob2RzIG9uIHRoZXNlIG9iamVjdHMgdW5sZXNzIHRoZXkgYXJlXG4gICAgICAgICAgICAgIC8vIGRlZmluZWQgZGlyZWN0bHkgb24gYW4gaW5zdGFuY2UuXG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKHByb3BlcnR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBJZiBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHdhcyBwcm92aWRlZCwgY2FsbCBpdCB0byBvYnRhaW4gdGhlIHZhbHVlXG4gICAgICAgICAgICAvLyBmb3Igc2VyaWFsaXphdGlvbi5cbiAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2suY2FsbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKHZhbHVlKTtcbiAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IGJvb2xlYW5DbGFzcykge1xuICAgICAgICAgICAgLy8gQm9vbGVhbnMgYXJlIHJlcHJlc2VudGVkIGxpdGVyYWxseS5cbiAgICAgICAgICAgIHJldHVybiBcIlwiICsgdmFsdWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChjbGFzc05hbWUgPT0gbnVtYmVyQ2xhc3MpIHtcbiAgICAgICAgICAgIC8vIEpTT04gbnVtYmVycyBtdXN0IGJlIGZpbml0ZS4gYEluZmluaXR5YCBhbmQgYE5hTmAgYXJlIHNlcmlhbGl6ZWQgYXNcbiAgICAgICAgICAgIC8vIGBcIm51bGxcImAuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPiAtMSAvIDAgJiYgdmFsdWUgPCAxIC8gMCA/IFwiXCIgKyB2YWx1ZSA6IFwibnVsbFwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IHN0cmluZ0NsYXNzKSB7XG4gICAgICAgICAgICAvLyBTdHJpbmdzIGFyZSBkb3VibGUtcXVvdGVkIGFuZCBlc2NhcGVkLlxuICAgICAgICAgICAgcmV0dXJuIHF1b3RlKFwiXCIgKyB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNlcmlhbGl6ZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoaXMgaXMgYSBsaW5lYXIgc2VhcmNoOyBwZXJmb3JtYW5jZVxuICAgICAgICAgICAgLy8gaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBuZXN0ZWQgb2JqZWN0cy5cbiAgICAgICAgICAgIGZvciAobGVuZ3RoID0gc3RhY2subGVuZ3RoOyBsZW5ndGgtLTspIHtcbiAgICAgICAgICAgICAgaWYgKHN0YWNrW2xlbmd0aF0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgLy8gQ3ljbGljIHN0cnVjdHVyZXMgY2Fubm90IGJlIHNlcmlhbGl6ZWQgYnkgYEpTT04uc3RyaW5naWZ5YC5cbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQWRkIHRoZSBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgICAgICAgICAgc3RhY2sucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICByZXN1bHRzID0gW107XG4gICAgICAgICAgICAvLyBTYXZlIHRoZSBjdXJyZW50IGluZGVudGF0aW9uIGxldmVsIGFuZCBpbmRlbnQgb25lIGFkZGl0aW9uYWwgbGV2ZWwuXG4gICAgICAgICAgICBwcmVmaXggPSBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIGluZGVudGF0aW9uICs9IHdoaXRlc3BhY2U7XG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IGFycmF5Q2xhc3MpIHtcbiAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgc2VyaWFsaXplIGFycmF5IGVsZW1lbnRzLlxuICAgICAgICAgICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gdmFsdWUubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBzZXJpYWxpemUoaW5kZXgsIHZhbHVlLCBjYWxsYmFjaywgcHJvcGVydGllcywgd2hpdGVzcGFjZSwgaW5kZW50YXRpb24sIHN0YWNrKTtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudCA9PT0gdW5kZWYgPyBcIm51bGxcIiA6IGVsZW1lbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdHMubGVuZ3RoID8gKHdoaXRlc3BhY2UgPyBcIltcXG5cIiArIGluZGVudGF0aW9uICsgcmVzdWx0cy5qb2luKFwiLFxcblwiICsgaW5kZW50YXRpb24pICsgXCJcXG5cIiArIHByZWZpeCArIFwiXVwiIDogKFwiW1wiICsgcmVzdWx0cy5qb2luKFwiLFwiKSArIFwiXVwiKSkgOiBcIltdXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXJpYWxpemUgb2JqZWN0IG1lbWJlcnMuIE1lbWJlcnMgYXJlIHNlbGVjdGVkIGZyb21cbiAgICAgICAgICAgICAgLy8gZWl0aGVyIGEgdXNlci1zcGVjaWZpZWQgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lcywgb3IgdGhlIG9iamVjdFxuICAgICAgICAgICAgICAvLyBpdHNlbGYuXG4gICAgICAgICAgICAgIGZvckVhY2gocHJvcGVydGllcyB8fCB2YWx1ZSwgZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBzZXJpYWxpemUocHJvcGVydHksIHZhbHVlLCBjYWxsYmFjaywgcHJvcGVydGllcywgd2hpdGVzcGFjZSwgaW5kZW50YXRpb24sIHN0YWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCAhPT0gdW5kZWYpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zOiBcIklmIGBnYXBgIHt3aGl0ZXNwYWNlfVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCBgbWVtYmVyYCB7cXVvdGUocHJvcGVydHkpICsgXCI6XCJ9XG4gICAgICAgICAgICAgICAgICAvLyBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBgbWVtYmVyYCBhbmQgdGhlIGBzcGFjZWAgY2hhcmFjdGVyLlwiXG4gICAgICAgICAgICAgICAgICAvLyBUaGUgXCJgc3BhY2VgIGNoYXJhY3RlclwiIHJlZmVycyB0byB0aGUgbGl0ZXJhbCBzcGFjZVxuICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVyLCBub3QgdGhlIGBzcGFjZWAge3dpZHRofSBhcmd1bWVudCBwcm92aWRlZCB0b1xuICAgICAgICAgICAgICAgICAgLy8gYEpTT04uc3RyaW5naWZ5YC5cbiAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChxdW90ZShwcm9wZXJ0eSkgKyBcIjpcIiArICh3aGl0ZXNwYWNlID8gXCIgXCIgOiBcIlwiKSArIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdHMubGVuZ3RoID8gKHdoaXRlc3BhY2UgPyBcIntcXG5cIiArIGluZGVudGF0aW9uICsgcmVzdWx0cy5qb2luKFwiLFxcblwiICsgaW5kZW50YXRpb24pICsgXCJcXG5cIiArIHByZWZpeCArIFwifVwiIDogKFwie1wiICsgcmVzdWx0cy5qb2luKFwiLFwiKSArIFwifVwiKSkgOiBcInt9XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRoZSB0cmF2ZXJzZWQgb2JqZWN0IHN0YWNrLlxuICAgICAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQdWJsaWM6IGBKU09OLnN0cmluZ2lmeWAuIFNlZSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLlxuICAgICAgICBleHBvcnRzLnN0cmluZ2lmeSA9IGZ1bmN0aW9uIChzb3VyY2UsIGZpbHRlciwgd2lkdGgpIHtcbiAgICAgICAgICB2YXIgd2hpdGVzcGFjZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIGNsYXNzTmFtZTtcbiAgICAgICAgICBpZiAob2JqZWN0VHlwZXNbdHlwZW9mIGZpbHRlcl0gJiYgZmlsdGVyKSB7XG4gICAgICAgICAgICBpZiAoKGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwoZmlsdGVyKSkgPT0gZnVuY3Rpb25DbGFzcykge1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZpbHRlcjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IGFycmF5Q2xhc3MpIHtcbiAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgcHJvcGVydHkgbmFtZXMgYXJyYXkgaW50byBhIG1ha2VzaGlmdCBzZXQuXG4gICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBmaWx0ZXIubGVuZ3RoLCB2YWx1ZTsgaW5kZXggPCBsZW5ndGg7IHZhbHVlID0gZmlsdGVyW2luZGV4KytdLCAoKGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwodmFsdWUpKSwgY2xhc3NOYW1lID09IHN0cmluZ0NsYXNzIHx8IGNsYXNzTmFtZSA9PSBudW1iZXJDbGFzcykgJiYgKHByb3BlcnRpZXNbdmFsdWVdID0gMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAod2lkdGgpIHtcbiAgICAgICAgICAgIGlmICgoY2xhc3NOYW1lID0gZ2V0Q2xhc3MuY2FsbCh3aWR0aCkpID09IG51bWJlckNsYXNzKSB7XG4gICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGB3aWR0aGAgdG8gYW4gaW50ZWdlciBhbmQgY3JlYXRlIGEgc3RyaW5nIGNvbnRhaW5pbmdcbiAgICAgICAgICAgICAgLy8gYHdpZHRoYCBudW1iZXIgb2Ygc3BhY2UgY2hhcmFjdGVycy5cbiAgICAgICAgICAgICAgaWYgKCh3aWR0aCAtPSB3aWR0aCAlIDEpID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAod2hpdGVzcGFjZSA9IFwiXCIsIHdpZHRoID4gMTAgJiYgKHdpZHRoID0gMTApOyB3aGl0ZXNwYWNlLmxlbmd0aCA8IHdpZHRoOyB3aGl0ZXNwYWNlICs9IFwiIFwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjbGFzc05hbWUgPT0gc3RyaW5nQ2xhc3MpIHtcbiAgICAgICAgICAgICAgd2hpdGVzcGFjZSA9IHdpZHRoLmxlbmd0aCA8PSAxMCA/IHdpZHRoIDogd2lkdGguc2xpY2UoMCwgMTApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBPcGVyYSA8PSA3LjU0dTIgZGlzY2FyZHMgdGhlIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggZW1wdHkgc3RyaW5nIGtleXNcbiAgICAgICAgICAvLyAoYFwiXCJgKSBvbmx5IGlmIHRoZXkgYXJlIHVzZWQgZGlyZWN0bHkgd2l0aGluIGFuIG9iamVjdCBtZW1iZXIgbGlzdFxuICAgICAgICAgIC8vIChlLmcuLCBgIShcIlwiIGluIHsgXCJcIjogMX0pYCkuXG4gICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShcIlwiLCAodmFsdWUgPSB7fSwgdmFsdWVbXCJcIl0gPSBzb3VyY2UsIHZhbHVlKSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIFwiXCIsIFtdKTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gUHVibGljOiBQYXJzZXMgYSBKU09OIHNvdXJjZSBzdHJpbmcuXG4gICAgICBpZiAoIWhhcyhcImpzb24tcGFyc2VcIikpIHtcbiAgICAgICAgdmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IEEgbWFwIG9mIGVzY2FwZWQgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCB0aGVpciB1bmVzY2FwZWRcbiAgICAgICAgLy8gZXF1aXZhbGVudHMuXG4gICAgICAgIHZhciBVbmVzY2FwZXMgPSB7XG4gICAgICAgICAgOTI6IFwiXFxcXFwiLFxuICAgICAgICAgIDM0OiAnXCInLFxuICAgICAgICAgIDQ3OiBcIi9cIixcbiAgICAgICAgICA5ODogXCJcXGJcIixcbiAgICAgICAgICAxMTY6IFwiXFx0XCIsXG4gICAgICAgICAgMTEwOiBcIlxcblwiLFxuICAgICAgICAgIDEwMjogXCJcXGZcIixcbiAgICAgICAgICAxMTQ6IFwiXFxyXCJcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogU3RvcmVzIHRoZSBwYXJzZXIgc3RhdGUuXG4gICAgICAgIHZhciBJbmRleCwgU291cmNlO1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZXNldHMgdGhlIHBhcnNlciBzdGF0ZSBhbmQgdGhyb3dzIGEgYFN5bnRheEVycm9yYC5cbiAgICAgICAgdmFyIGFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIEluZGV4ID0gU291cmNlID0gbnVsbDtcbiAgICAgICAgICB0aHJvdyBTeW50YXhFcnJvcigpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZXR1cm5zIHRoZSBuZXh0IHRva2VuLCBvciBgXCIkXCJgIGlmIHRoZSBwYXJzZXIgaGFzIHJlYWNoZWRcbiAgICAgICAgLy8gdGhlIGVuZCBvZiB0aGUgc291cmNlIHN0cmluZy4gQSB0b2tlbiBtYXkgYmUgYSBzdHJpbmcsIG51bWJlciwgYG51bGxgXG4gICAgICAgIC8vIGxpdGVyYWwsIG9yIEJvb2xlYW4gbGl0ZXJhbC5cbiAgICAgICAgdmFyIGxleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgc291cmNlID0gU291cmNlLCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoLCB2YWx1ZSwgYmVnaW4sIHBvc2l0aW9uLCBpc1NpZ25lZCwgY2hhckNvZGU7XG4gICAgICAgICAgd2hpbGUgKEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KTtcbiAgICAgICAgICAgIHN3aXRjaCAoY2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuICAgICAgICAgICAgICAgIC8vIFNraXAgd2hpdGVzcGFjZSB0b2tlbnMsIGluY2x1ZGluZyB0YWJzLCBjYXJyaWFnZSByZXR1cm5zLCBsaW5lXG4gICAgICAgICAgICAgICAgLy8gZmVlZHMsIGFuZCBzcGFjZSBjaGFyYWN0ZXJzLlxuICAgICAgICAgICAgICAgIEluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgMTIzOiBjYXNlIDEyNTogY2FzZSA5MTogY2FzZSA5MzogY2FzZSA1ODogY2FzZSA0NDpcbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBhIHB1bmN0dWF0b3IgdG9rZW4gKGB7YCwgYH1gLCBgW2AsIGBdYCwgYDpgLCBvciBgLGApIGF0XG4gICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgcG9zaXRpb24uXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBjaGFySW5kZXhCdWdneSA/IHNvdXJjZS5jaGFyQXQoSW5kZXgpIDogc291cmNlW0luZGV4XTtcbiAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgICAgICAvLyBgXCJgIGRlbGltaXRzIGEgSlNPTiBzdHJpbmc7IGFkdmFuY2UgdG8gdGhlIG5leHQgY2hhcmFjdGVyIGFuZFxuICAgICAgICAgICAgICAgIC8vIGJlZ2luIHBhcnNpbmcgdGhlIHN0cmluZy4gU3RyaW5nIHRva2VucyBhcmUgcHJlZml4ZWQgd2l0aCB0aGVcbiAgICAgICAgICAgICAgICAvLyBzZW50aW5lbCBgQGAgY2hhcmFjdGVyIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSBwdW5jdHVhdG9ycyBhbmRcbiAgICAgICAgICAgICAgICAvLyBlbmQtb2Ytc3RyaW5nIHRva2Vucy5cbiAgICAgICAgICAgICAgICBmb3IgKHZhbHVlID0gXCJAXCIsIEluZGV4Kys7IEluZGV4IDwgbGVuZ3RoOykge1xuICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPCAzMikge1xuICAgICAgICAgICAgICAgICAgICAvLyBVbmVzY2FwZWQgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzICh0aG9zZSB3aXRoIGEgY29kZSB1bml0XG4gICAgICAgICAgICAgICAgICAgIC8vIGxlc3MgdGhhbiB0aGUgc3BhY2UgY2hhcmFjdGVyKSBhcmUgbm90IHBlcm1pdHRlZC5cbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhckNvZGUgPT0gOTIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSByZXZlcnNlIHNvbGlkdXMgKGBcXGApIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYW4gZXNjYXBlZFxuICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9sIGNoYXJhY3RlciAoaW5jbHVkaW5nIGBcImAsIGBcXGAsIGFuZCBgL2ApIG9yIFVuaWNvZGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA5MjogY2FzZSAzNDogY2FzZSA0NzogY2FzZSA5ODogY2FzZSAxMTY6IGNhc2UgMTEwOiBjYXNlIDEwMjogY2FzZSAxMTQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZpdmUgZXNjYXBlZCBjb250cm9sIGNoYXJhY3RlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBVbmVzY2FwZXNbY2hhckNvZGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTE3OlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYFxcdWAgbWFya3MgdGhlIGJlZ2lubmluZyBvZiBhIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCB2YWxpZGF0ZSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdXItZGlnaXQgY29kZSBwb2ludC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luID0gKytJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocG9zaXRpb24gPSBJbmRleCArIDQ7IEluZGV4IDwgcG9zaXRpb247IEluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgdmFsaWQgc2VxdWVuY2UgY29tcHJpc2VzIGZvdXIgaGV4ZGlnaXRzIChjYXNlLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnNlbnNpdGl2ZSkgdGhhdCBmb3JtIGEgc2luZ2xlIGhleGFkZWNpbWFsIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1NyB8fCBjaGFyQ29kZSA+PSA5NyAmJiBjaGFyQ29kZSA8PSAxMDIgfHwgY2hhckNvZGUgPj0gNjUgJiYgY2hhckNvZGUgPD0gNzApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZpdmUgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gZnJvbUNoYXJDb2RlKFwiMHhcIiArIHNvdXJjZS5zbGljZShiZWdpbiwgSW5kZXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSAzNCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEFuIHVuZXNjYXBlZCBkb3VibGUtcXVvdGUgY2hhcmFjdGVyIG1hcmtzIHRoZSBlbmQgb2YgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgLy8gc3RyaW5nLlxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBiZWdpbiA9IEluZGV4O1xuICAgICAgICAgICAgICAgICAgICAvLyBPcHRpbWl6ZSBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGEgc3RyaW5nIGlzIHZhbGlkLlxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hhckNvZGUgPj0gMzIgJiYgY2hhckNvZGUgIT0gOTIgJiYgY2hhckNvZGUgIT0gMzQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgc3RyaW5nIGFzLWlzLlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBzb3VyY2Uuc2xpY2UoYmVnaW4sIEluZGV4KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KSA9PSAzNCkge1xuICAgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgYW5kIHJldHVybiB0aGUgcmV2aXZlZCBzdHJpbmcuXG4gICAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBVbnRlcm1pbmF0ZWQgc3RyaW5nLlxuICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgbnVtYmVycyBhbmQgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgYmVnaW4gPSBJbmRleDtcbiAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHBhc3QgdGhlIG5lZ2F0aXZlIHNpZ24sIGlmIG9uZSBpcyBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDQ1KSB7XG4gICAgICAgICAgICAgICAgICBpc1NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBhbiBpbnRlZ2VyIG9yIGZsb2F0aW5nLXBvaW50IHZhbHVlLlxuICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nykge1xuICAgICAgICAgICAgICAgICAgLy8gTGVhZGluZyB6ZXJvZXMgYXJlIGludGVycHJldGVkIGFzIG9jdGFsIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDQ4ICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCArIDEpKSwgY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWwgb2N0YWwgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlzU2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAvLyBQYXJzZSB0aGUgaW50ZWdlciBjb21wb25lbnQuXG4gICAgICAgICAgICAgICAgICBmb3IgKDsgSW5kZXggPCBsZW5ndGggJiYgKChjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KTsgSW5kZXgrKyk7XG4gICAgICAgICAgICAgICAgICAvLyBGbG9hdHMgY2Fubm90IGNvbnRhaW4gYSBsZWFkaW5nIGRlY2ltYWwgcG9pbnQ7IGhvd2V2ZXIsIHRoaXNcbiAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaXMgYWxyZWFkeSBhY2NvdW50ZWQgZm9yIGJ5IHRoZSBwYXJzZXIuXG4gICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpID09IDQ2KSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gKytJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGhlIGRlY2ltYWwgY29tcG9uZW50LlxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcG9zaXRpb24gPCBsZW5ndGggJiYgKChjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KHBvc2l0aW9uKSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KTsgcG9zaXRpb24rKyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWwgdHJhaWxpbmcgZGVjaW1hbC5cbiAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEluZGV4ID0gcG9zaXRpb247XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBQYXJzZSBleHBvbmVudHMuIFRoZSBgZWAgZGVub3RpbmcgdGhlIGV4cG9uZW50IGlzXG4gICAgICAgICAgICAgICAgICAvLyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gMTAxIHx8IGNoYXJDb2RlID09IDY5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoKytJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNraXAgcGFzdCB0aGUgc2lnbiBmb2xsb3dpbmcgdGhlIGV4cG9uZW50LCBpZiBvbmUgaXNcbiAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gNDMgfHwgY2hhckNvZGUgPT0gNDUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIHRoZSBleHBvbmVudGlhbCBjb21wb25lbnQuXG4gICAgICAgICAgICAgICAgICAgIGZvciAocG9zaXRpb24gPSBJbmRleDsgcG9zaXRpb24gPCBsZW5ndGggJiYgKChjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KHBvc2l0aW9uKSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KTsgcG9zaXRpb24rKyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWwgZW1wdHkgZXhwb25lbnQuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBJbmRleCA9IHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy8gQ29lcmNlIHRoZSBwYXJzZWQgdmFsdWUgdG8gYSBKYXZhU2NyaXB0IG51bWJlci5cbiAgICAgICAgICAgICAgICAgIHJldHVybiArc291cmNlLnNsaWNlKGJlZ2luLCBJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEEgbmVnYXRpdmUgc2lnbiBtYXkgb25seSBwcmVjZWRlIG51bWJlcnMuXG4gICAgICAgICAgICAgICAgaWYgKGlzU2lnbmVkKSB7XG4gICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBgdHJ1ZWAsIGBmYWxzZWAsIGFuZCBgbnVsbGAgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5zbGljZShJbmRleCwgSW5kZXggKyA0KSA9PSBcInRydWVcIikge1xuICAgICAgICAgICAgICAgICAgSW5kZXggKz0gNDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlLnNsaWNlKEluZGV4LCBJbmRleCArIDUpID09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgICAgICAgSW5kZXggKz0gNTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZS5zbGljZShJbmRleCwgSW5kZXggKyA0KSA9PSBcIm51bGxcIikge1xuICAgICAgICAgICAgICAgICAgSW5kZXggKz0gNDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBVbnJlY29nbml6ZWQgdG9rZW4uXG4gICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmV0dXJuIHRoZSBzZW50aW5lbCBgJGAgY2hhcmFjdGVyIGlmIHRoZSBwYXJzZXIgaGFzIHJlYWNoZWQgdGhlIGVuZFxuICAgICAgICAgIC8vIG9mIHRoZSBzb3VyY2Ugc3RyaW5nLlxuICAgICAgICAgIHJldHVybiBcIiRcIjtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUGFyc2VzIGEgSlNPTiBgdmFsdWVgIHRva2VuLlxuICAgICAgICB2YXIgZ2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdHMsIGhhc01lbWJlcnM7XG4gICAgICAgICAgaWYgKHZhbHVlID09IFwiJFwiKSB7XG4gICAgICAgICAgICAvLyBVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dC5cbiAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKChjaGFySW5kZXhCdWdneSA/IHZhbHVlLmNoYXJBdCgwKSA6IHZhbHVlWzBdKSA9PSBcIkBcIikge1xuICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHNlbnRpbmVsIGBAYCBjaGFyYWN0ZXIuXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zbGljZSgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFBhcnNlIG9iamVjdCBhbmQgYXJyYXkgbGl0ZXJhbHMuXG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJbXCIpIHtcbiAgICAgICAgICAgICAgLy8gUGFyc2VzIGEgSlNPTiBhcnJheSwgcmV0dXJuaW5nIGEgbmV3IEphdmFTY3JpcHQgYXJyYXkuXG4gICAgICAgICAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICg7OyBoYXNNZW1iZXJzIHx8IChoYXNNZW1iZXJzID0gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGxleCgpO1xuICAgICAgICAgICAgICAgIC8vIEEgY2xvc2luZyBzcXVhcmUgYnJhY2tldCBtYXJrcyB0aGUgZW5kIG9mIHRoZSBhcnJheSBsaXRlcmFsLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIl1cIikge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBhcnJheSBsaXRlcmFsIGNvbnRhaW5zIGVsZW1lbnRzLCB0aGUgY3VycmVudCB0b2tlblxuICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBhIGNvbW1hIHNlcGFyYXRpbmcgdGhlIHByZXZpb3VzIGVsZW1lbnQgZnJvbSB0aGVcbiAgICAgICAgICAgICAgICAvLyBuZXh0LlxuICAgICAgICAgICAgICAgIGlmIChoYXNNZW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiXVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVW5leHBlY3RlZCB0cmFpbGluZyBgLGAgaW4gYXJyYXkgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBBIGAsYCBtdXN0IHNlcGFyYXRlIGVhY2ggYXJyYXkgZWxlbWVudC5cbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRWxpc2lvbnMgYW5kIGxlYWRpbmcgY29tbWFzIGFyZSBub3QgcGVybWl0dGVkLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIixcIikge1xuICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGdldCh2YWx1ZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBcIntcIikge1xuICAgICAgICAgICAgICAvLyBQYXJzZXMgYSBKU09OIG9iamVjdCwgcmV0dXJuaW5nIGEgbmV3IEphdmFTY3JpcHQgb2JqZWN0LlxuICAgICAgICAgICAgICByZXN1bHRzID0ge307XG4gICAgICAgICAgICAgIGZvciAoOzsgaGFzTWVtYmVycyB8fCAoaGFzTWVtYmVycyA9IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAvLyBBIGNsb3NpbmcgY3VybHkgYnJhY2UgbWFya3MgdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwifVwiKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBsaXRlcmFsIGNvbnRhaW5zIG1lbWJlcnMsIHRoZSBjdXJyZW50IHRva2VuXG4gICAgICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGEgY29tbWEgc2VwYXJhdG9yLlxuICAgICAgICAgICAgICAgIGlmIChoYXNNZW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwifVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVW5leHBlY3RlZCB0cmFpbGluZyBgLGAgaW4gb2JqZWN0IGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBgLGAgbXVzdCBzZXBhcmF0ZSBlYWNoIG9iamVjdCBtZW1iZXIuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIExlYWRpbmcgY29tbWFzIGFyZSBub3QgcGVybWl0dGVkLCBvYmplY3QgcHJvcGVydHkgbmFtZXMgbXVzdCBiZVxuICAgICAgICAgICAgICAgIC8vIGRvdWJsZS1xdW90ZWQgc3RyaW5ncywgYW5kIGEgYDpgIG11c3Qgc2VwYXJhdGUgZWFjaCBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIC8vIG5hbWUgYW5kIHZhbHVlLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIixcIiB8fCB0eXBlb2YgdmFsdWUgIT0gXCJzdHJpbmdcIiB8fCAoY2hhckluZGV4QnVnZ3kgPyB2YWx1ZS5jaGFyQXQoMCkgOiB2YWx1ZVswXSkgIT0gXCJAXCIgfHwgbGV4KCkgIT0gXCI6XCIpIHtcbiAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNbdmFsdWUuc2xpY2UoMSldID0gZ2V0KGxleCgpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdG9rZW4gZW5jb3VudGVyZWQuXG4gICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFVwZGF0ZXMgYSB0cmF2ZXJzZWQgb2JqZWN0IG1lbWJlci5cbiAgICAgICAgdmFyIHVwZGF0ZSA9IGZ1bmN0aW9uIChzb3VyY2UsIHByb3BlcnR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIHZhciBlbGVtZW50ID0gd2Fsayhzb3VyY2UsIHByb3BlcnR5LCBjYWxsYmFjayk7XG4gICAgICAgICAgaWYgKGVsZW1lbnQgPT09IHVuZGVmKSB7XG4gICAgICAgICAgICBkZWxldGUgc291cmNlW3Byb3BlcnR5XTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc291cmNlW3Byb3BlcnR5XSA9IGVsZW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZWN1cnNpdmVseSB0cmF2ZXJzZXMgYSBwYXJzZWQgSlNPTiBvYmplY3QsIGludm9raW5nIHRoZVxuICAgICAgICAvLyBgY2FsbGJhY2tgIGZ1bmN0aW9uIGZvciBlYWNoIHZhbHVlLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZVxuICAgICAgICAvLyBgV2Fsayhob2xkZXIsIG5hbWUpYCBvcGVyYXRpb24gZGVmaW5lZCBpbiBFUyA1LjEgc2VjdGlvbiAxNS4xMi4yLlxuICAgICAgICB2YXIgd2FsayA9IGZ1bmN0aW9uIChzb3VyY2UsIHByb3BlcnR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVtwcm9wZXJ0eV0sIGxlbmd0aDtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGBmb3JFYWNoYCBjYW4ndCBiZSB1c2VkIHRvIHRyYXZlcnNlIGFuIGFycmF5IGluIE9wZXJhIDw9IDguNTRcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgaXRzIGBPYmplY3QjaGFzT3duUHJvcGVydHlgIGltcGxlbWVudGF0aW9uIHJldHVybnMgYGZhbHNlYFxuICAgICAgICAgICAgLy8gZm9yIGFycmF5IGluZGljZXMgKGUuZy4sIGAhWzEsIDIsIDNdLmhhc093blByb3BlcnR5KFwiMFwiKWApLlxuICAgICAgICAgICAgaWYgKGdldENsYXNzLmNhbGwodmFsdWUpID09IGFycmF5Q2xhc3MpIHtcbiAgICAgICAgICAgICAgZm9yIChsZW5ndGggPSB2YWx1ZS5sZW5ndGg7IGxlbmd0aC0tOykge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSh2YWx1ZSwgbGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvckVhY2godmFsdWUsIGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSh2YWx1ZSwgcHJvcGVydHksIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHNvdXJjZSwgcHJvcGVydHksIHZhbHVlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQdWJsaWM6IGBKU09OLnBhcnNlYC4gU2VlIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjIuXG4gICAgICAgIGV4cG9ydHMucGFyc2UgPSBmdW5jdGlvbiAoc291cmNlLCBjYWxsYmFjaykge1xuICAgICAgICAgIHZhciByZXN1bHQsIHZhbHVlO1xuICAgICAgICAgIEluZGV4ID0gMDtcbiAgICAgICAgICBTb3VyY2UgPSBcIlwiICsgc291cmNlO1xuICAgICAgICAgIHJlc3VsdCA9IGdldChsZXgoKSk7XG4gICAgICAgICAgLy8gSWYgYSBKU09OIHN0cmluZyBjb250YWlucyBtdWx0aXBsZSB0b2tlbnMsIGl0IGlzIGludmFsaWQuXG4gICAgICAgICAgaWYgKGxleCgpICE9IFwiJFwiKSB7XG4gICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZXNldCB0aGUgcGFyc2VyIHN0YXRlLlxuICAgICAgICAgIEluZGV4ID0gU291cmNlID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sgJiYgZ2V0Q2xhc3MuY2FsbChjYWxsYmFjaykgPT0gZnVuY3Rpb25DbGFzcyA/IHdhbGsoKHZhbHVlID0ge30sIHZhbHVlW1wiXCJdID0gcmVzdWx0LCB2YWx1ZSksIFwiXCIsIGNhbGxiYWNrKSA6IHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnRzW1wicnVuSW5Db250ZXh0XCJdID0gcnVuSW5Db250ZXh0O1xuICAgIHJldHVybiBleHBvcnRzO1xuICB9XG5cbiAgaWYgKGZyZWVFeHBvcnRzICYmICFpc0xvYWRlcikge1xuICAgIC8vIEV4cG9ydCBmb3IgQ29tbW9uSlMgZW52aXJvbm1lbnRzLlxuICAgIHJ1bkluQ29udGV4dChyb290LCBmcmVlRXhwb3J0cyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRXhwb3J0IGZvciB3ZWIgYnJvd3NlcnMgYW5kIEphdmFTY3JpcHQgZW5naW5lcy5cbiAgICB2YXIgbmF0aXZlSlNPTiA9IHJvb3QuSlNPTixcbiAgICAgICAgcHJldmlvdXNKU09OID0gcm9vdFtcIkpTT04zXCJdLFxuICAgICAgICBpc1Jlc3RvcmVkID0gZmFsc2U7XG5cbiAgICB2YXIgSlNPTjMgPSBydW5JbkNvbnRleHQocm9vdCwgKHJvb3RbXCJKU09OM1wiXSA9IHtcbiAgICAgIC8vIFB1YmxpYzogUmVzdG9yZXMgdGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSBnbG9iYWwgYEpTT05gIG9iamVjdCBhbmRcbiAgICAgIC8vIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGBKU09OM2Agb2JqZWN0LlxuICAgICAgXCJub0NvbmZsaWN0XCI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFpc1Jlc3RvcmVkKSB7XG4gICAgICAgICAgaXNSZXN0b3JlZCA9IHRydWU7XG4gICAgICAgICAgcm9vdC5KU09OID0gbmF0aXZlSlNPTjtcbiAgICAgICAgICByb290W1wiSlNPTjNcIl0gPSBwcmV2aW91c0pTT047XG4gICAgICAgICAgbmF0aXZlSlNPTiA9IHByZXZpb3VzSlNPTiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04zO1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIHJvb3QuSlNPTiA9IHtcbiAgICAgIFwicGFyc2VcIjogSlNPTjMucGFyc2UsXG4gICAgICBcInN0cmluZ2lmeVwiOiBKU09OMy5zdHJpbmdpZnlcbiAgICB9O1xuICB9XG5cbiAgLy8gRXhwb3J0IGZvciBhc3luY2hyb25vdXMgbW9kdWxlIGxvYWRlcnMuXG4gIGlmIChpc0xvYWRlcikge1xuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gSlNPTjM7XG4gICAgfSk7XG4gIH1cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3XG4gKiBtZW1iZXIgaXMgTygxKSwgdGVzdGluZyBmb3IgbWVtYmVyc2hpcCBpcyBPKDEpLCBhbmQgZmluZGluZyB0aGUgaW5kZXggb2YgYW5cbiAqIGVsZW1lbnQgaXMgTygxKS4gUmVtb3ZpbmcgZWxlbWVudHMgZnJvbSB0aGUgc2V0IGlzIG5vdCBzdXBwb3J0ZWQuIE9ubHlcbiAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgbWVtYmVyc2hpcC5cbiAqL1xuZnVuY3Rpb24gQXJyYXlTZXQoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8qKlxuICogU3RhdGljIG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gKi9cbkFycmF5U2V0LmZyb21BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X2Zyb21BcnJheShhQXJyYXksIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYUFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgc2V0LmFkZChhQXJyYXlbaV0sIGFBbGxvd0R1cGxpY2F0ZXMpO1xuICB9XG4gIHJldHVybiBzZXQ7XG59O1xuXG4vKipcbiAqIFJldHVybiBob3cgbWFueSB1bmlxdWUgaXRlbXMgYXJlIGluIHRoaXMgQXJyYXlTZXQuIElmIGR1cGxpY2F0ZXMgaGF2ZSBiZWVuXG4gKiBhZGRlZCwgdGhhbiB0aG9zZSBkbyBub3QgY291bnQgdG93YXJkcyB0aGUgc2l6ZS5cbiAqXG4gKiBAcmV0dXJucyBOdW1iZXJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiBBcnJheVNldF9zaXplKCkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fc2V0KS5sZW5ndGg7XG59O1xuXG4vKipcbiAqIEFkZCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoaXMgc2V0LlxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gQXJyYXlTZXRfYWRkKGFTdHIsIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICB2YXIgaXNEdXBsaWNhdGUgPSBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB2YXIgaWR4ID0gdGhpcy5fYXJyYXkubGVuZ3RoO1xuICBpZiAoIWlzRHVwbGljYXRlIHx8IGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICB0aGlzLl9hcnJheS5wdXNoKGFTdHIpO1xuICB9XG4gIGlmICghaXNEdXBsaWNhdGUpIHtcbiAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gIH1cbn07XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIHN0cmluZyBhIG1lbWJlciBvZiB0aGlzIHNldD9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIEFycmF5U2V0X2hhcyhhU3RyKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgcmV0dXJuIGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIGlmIChoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgaW50VG9DaGFyTWFwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcblxuLyoqXG4gKiBFbmNvZGUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMCB0byA2MyB0byBhIHNpbmdsZSBiYXNlIDY0IGRpZ2l0LlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgaWYgKDAgPD0gbnVtYmVyICYmIG51bWJlciA8IGludFRvQ2hhck1hcC5sZW5ndGgpIHtcbiAgICByZXR1cm4gaW50VG9DaGFyTWFwW251bWJlcl07XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogXCIgKyBudW1iZXIpO1xufTtcblxuLyoqXG4gKiBEZWNvZGUgYSBzaW5nbGUgYmFzZSA2NCBjaGFyYWN0ZXIgY29kZSBkaWdpdCB0byBhbiBpbnRlZ2VyLiBSZXR1cm5zIC0xIG9uXG4gKiBmYWlsdXJlLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIChjaGFyQ29kZSkge1xuICB2YXIgYmlnQSA9IDY1OyAgICAgLy8gJ0EnXG4gIHZhciBiaWdaID0gOTA7ICAgICAvLyAnWidcblxuICB2YXIgbGl0dGxlQSA9IDk3OyAgLy8gJ2EnXG4gIHZhciBsaXR0bGVaID0gMTIyOyAvLyAneidcblxuICB2YXIgemVybyA9IDQ4OyAgICAgLy8gJzAnXG4gIHZhciBuaW5lID0gNTc7ICAgICAvLyAnOSdcblxuICB2YXIgcGx1cyA9IDQzOyAgICAgLy8gJysnXG4gIHZhciBzbGFzaCA9IDQ3OyAgICAvLyAnLydcblxuICB2YXIgbGl0dGxlT2Zmc2V0ID0gMjY7XG4gIHZhciBudW1iZXJPZmZzZXQgPSA1MjtcblxuICAvLyAwIC0gMjU6IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXG4gIGlmIChiaWdBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGJpZ1opIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gYmlnQSk7XG4gIH1cblxuICAvLyAyNiAtIDUxOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuICBpZiAobGl0dGxlQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBsaXR0bGVaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGxpdHRsZUEgKyBsaXR0bGVPZmZzZXQpO1xuICB9XG5cbiAgLy8gNTIgLSA2MTogMDEyMzQ1Njc4OVxuICBpZiAoemVybyA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBuaW5lKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIHplcm8gKyBudW1iZXJPZmZzZXQpO1xuICB9XG5cbiAgLy8gNjI6ICtcbiAgaWYgKGNoYXJDb2RlID09IHBsdXMpIHtcbiAgICByZXR1cm4gNjI7XG4gIH1cblxuICAvLyA2MzogL1xuICBpZiAoY2hhckNvZGUgPT0gc2xhc2gpIHtcbiAgICByZXR1cm4gNjM7XG4gIH1cblxuICAvLyBJbnZhbGlkIGJhc2U2NCBkaWdpdC5cbiAgcmV0dXJuIC0xO1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5leHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBSZWN1cnNpdmUgaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaC5cbiAqXG4gKiBAcGFyYW0gYUxvdyBJbmRpY2VzIGhlcmUgYW5kIGxvd2VyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYUhpZ2ggSW5kaWNlcyBoZXJlIGFuZCBoaWdoZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IGJlaW5nIHNlYXJjaGVkIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIG5vbi1lbXB0eSBhcnJheSBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBGdW5jdGlvbiB3aGljaCB0YWtlcyB0d28gZWxlbWVudHMgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgLy9cbiAgLy8gICAxLiBXZSBmaW5kIHRoZSBleGFjdCBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgLy9cbiAgLy8gICAyLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGJ1dCB3ZSBjYW4gcmV0dXJuIHRoZSBpbmRleCBvZlxuICAvLyAgICAgIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudC5cbiAgLy9cbiAgLy8gICAzLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGFuZCB0aGVyZSBpcyBubyBuZXh0LWNsb3Nlc3RcbiAgLy8gICAgICBlbGVtZW50IHRoYW4gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgc28gd2UgcmV0dXJuIC0xLlxuICB2YXIgbWlkID0gTWF0aC5mbG9vcigoYUhpZ2ggLSBhTG93KSAvIDIpICsgYUxvdztcbiAgdmFyIGNtcCA9IGFDb21wYXJlKGFOZWVkbGUsIGFIYXlzdGFja1ttaWRdLCB0cnVlKTtcbiAgaWYgKGNtcCA9PT0gMCkge1xuICAgIC8vIEZvdW5kIHRoZSBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgICByZXR1cm4gbWlkO1xuICB9XG4gIGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGdyZWF0ZXIgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAoYUhpZ2ggLSBtaWQgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgdXBwZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2gobWlkLCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIFRoZSBleGFjdCBuZWVkbGUgZWxlbWVudCB3YXMgbm90IGZvdW5kIGluIHRoaXMgaGF5c3RhY2suIERldGVybWluZSBpZlxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBhSGlnaCA8IGFIYXlzdGFjay5sZW5ndGggPyBhSGlnaCA6IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGxlc3MgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAobWlkIC0gYUxvdyA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSBsb3dlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBtaWQsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYUxvdyA8IDAgPyAtMSA6IGFMb3c7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoIHdoaWNoIHdpbGwgYWx3YXlzIHRyeSBhbmQgcmV0dXJuXG4gKiB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgZWxlbWVudCBpZiB0aGVyZSBpcyBubyBleGFjdCBoaXQuIFRoaXMgaXMgYmVjYXVzZVxuICogbWFwcGluZ3MgYmV0d2VlbiBvcmlnaW5hbCBhbmQgZ2VuZXJhdGVkIGxpbmUvY29sIHBhaXJzIGFyZSBzaW5nbGUgcG9pbnRzLFxuICogYW5kIHRoZXJlIGlzIGFuIGltcGxpY2l0IHJlZ2lvbiBiZXR3ZWVuIGVhY2ggb2YgdGhlbSwgc28gYSBtaXNzIGp1c3QgbWVhbnNcbiAqIHRoYXQgeW91IGFyZW4ndCBvbiB0aGUgdmVyeSBzdGFydCBvZiBhIHJlZ2lvbi5cbiAqXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCB5b3UgYXJlIGxvb2tpbmcgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgYXJyYXkgdGhhdCBpcyBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBuZWVkbGUgYW5kIGFuIGVsZW1lbnQgaW4gdGhlXG4gKiAgICAgYXJyYXkgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5lZWRsZSBpcyBsZXNzXG4gKiAgICAgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgZWxlbWVudCwgcmVzcGVjdGl2ZWx5LlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICovXG5leHBvcnRzLnNlYXJjaCA9IGZ1bmN0aW9uIHNlYXJjaChhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICBpZiAoYUhheXN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHJlY3Vyc2l2ZVNlYXJjaCgtMSwgYUhheXN0YWNrLmxlbmd0aCwgYU5lZWRsZSwgYUhheXN0YWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbXBhcmUsIGFCaWFzIHx8IGV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLy8gV2UgaGF2ZSBmb3VuZCBlaXRoZXIgdGhlIGV4YWN0IGVsZW1lbnQsIG9yIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudCB0aGFuXG4gIC8vIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIHN1Y2hcbiAgLy8gZWxlbWVudC4gTWFrZSBzdXJlIHdlIGFsd2F5cyByZXR1cm4gdGhlIHNtYWxsZXN0IG9mIHRoZXNlLlxuICB3aGlsZSAoaW5kZXggLSAxID49IDApIHtcbiAgICBpZiAoYUNvbXBhcmUoYUhheXN0YWNrW2luZGV4XSwgYUhheXN0YWNrW2luZGV4IC0gMV0sIHRydWUpICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLS1pbmRleDtcbiAgfVxuXG4gIHJldHVybiBpbmRleDtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGdldHRpbmcgdmFsdWVzIGZyb20gcGFyYW1ldGVyL29wdGlvbnNcbiAqIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGFyZ3MgVGhlIG9iamVjdCB3ZSBhcmUgZXh0cmFjdGluZyB2YWx1ZXMgZnJvbVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdlIGFyZSBnZXR0aW5nLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBBbiBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmdcbiAqIGZyb20gdGhlIG9iamVjdC4gSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkIGFuZCB0aGUgcHJvcGVydHkgaXMgbWlzc2luZywgYW5cbiAqIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICovXG5mdW5jdGlvbiBnZXRBcmcoYUFyZ3MsIGFOYW1lLCBhRGVmYXVsdFZhbHVlKSB7XG4gIGlmIChhTmFtZSBpbiBhQXJncykge1xuICAgIHJldHVybiBhQXJnc1thTmFtZV07XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBhRGVmYXVsdFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYU5hbWUgKyAnXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKTtcbiAgfVxufVxuZXhwb3J0cy5nZXRBcmcgPSBnZXRBcmc7XG5cbnZhciB1cmxSZWdleHAgPSAvXig/OihbXFx3K1xcLS5dKyk6KT9cXC9cXC8oPzooXFx3KzpcXHcrKUApPyhbXFx3Ll0qKSg/OjooXFxkKykpPyhcXFMqKSQvO1xudmFyIGRhdGFVcmxSZWdleHAgPSAvXmRhdGE6LitcXCwuKyQvO1xuXG5mdW5jdGlvbiB1cmxQYXJzZShhVXJsKSB7XG4gIHZhciBtYXRjaCA9IGFVcmwubWF0Y2godXJsUmVnZXhwKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NoZW1lOiBtYXRjaFsxXSxcbiAgICBhdXRoOiBtYXRjaFsyXSxcbiAgICBob3N0OiBtYXRjaFszXSxcbiAgICBwb3J0OiBtYXRjaFs0XSxcbiAgICBwYXRoOiBtYXRjaFs1XVxuICB9O1xufVxuZXhwb3J0cy51cmxQYXJzZSA9IHVybFBhcnNlO1xuXG5mdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFyc2VkVXJsKSB7XG4gIHZhciB1cmwgPSAnJztcbiAgaWYgKGFQYXJzZWRVcmwuc2NoZW1lKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuc2NoZW1lICsgJzonO1xuICB9XG4gIHVybCArPSAnLy8nO1xuICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuYXV0aCArICdAJztcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuaG9zdDtcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7XG4gICAgdXJsICs9IFwiOlwiICsgYVBhcnNlZFVybC5wb3J0XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucGF0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnBhdGg7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cbmV4cG9ydHMudXJsR2VuZXJhdGUgPSB1cmxHZW5lcmF0ZTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGF0aCwgb3IgdGhlIHBhdGggcG9ydGlvbiBvZiBhIFVSTDpcbiAqXG4gKiAtIFJlcGxhY2VzIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aCBvbmUgc2xhc2guXG4gKiAtIFJlbW92ZXMgdW5uZWNlc3NhcnkgJy4nIHBhcnRzLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICc8ZGlyPi8uLicgcGFydHMuXG4gKlxuICogQmFzZWQgb24gY29kZSBpbiB0aGUgTm9kZS5qcyAncGF0aCcgY29yZSBtb2R1bGUuXG4gKlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIHVybCB0byBub3JtYWxpemUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhUGF0aCkge1xuICB2YXIgcGF0aCA9IGFQYXRoO1xuICB2YXIgdXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICBpZiAodXJsKSB7XG4gICAgaWYgKCF1cmwucGF0aCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cbiAgICBwYXRoID0gdXJsLnBhdGg7XG4gIH1cbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCk7XG5cbiAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuICBmb3IgKHZhciBwYXJ0LCB1cCA9IDAsIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHBhcnQgPSBwYXJ0c1tpXTtcbiAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXAgPiAwKSB7XG4gICAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYmxhbmsgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuIFRyeWluZyB0byBnb1xuICAgICAgICAvLyBhYm92ZSB0aGUgcm9vdCBpcyBhIG5vLW9wLiBUaGVyZWZvcmUgd2UgY2FuIHJlbW92ZSBhbGwgJy4uJyBwYXJ0c1xuICAgICAgICAvLyBkaXJlY3RseSBhZnRlciB0aGUgcm9vdC5cbiAgICAgICAgcGFydHMuc3BsaWNlKGkgKyAxLCB1cCk7XG4gICAgICAgIHVwID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShpLCAyKTtcbiAgICAgICAgdXAtLTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcblxuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICBwYXRoID0gaXNBYnNvbHV0ZSA/ICcvJyA6ICcuJztcbiAgfVxuXG4gIGlmICh1cmwpIHtcbiAgICB1cmwucGF0aCA9IHBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKHVybCk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcblxuLyoqXG4gKiBKb2lucyB0d28gcGF0aHMvVVJMcy5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIGpvaW5lZCB3aXRoIHRoZSByb290LlxuICpcbiAqIC0gSWYgYVBhdGggaXMgYSBVUkwgb3IgYSBkYXRhIFVSSSwgYVBhdGggaXMgcmV0dXJuZWQsIHVubGVzcyBhUGF0aCBpcyBhXG4gKiAgIHNjaGVtZS1yZWxhdGl2ZSBVUkw6IFRoZW4gdGhlIHNjaGVtZSBvZiBhUm9vdCwgaWYgYW55LCBpcyBwcmVwZW5kZWRcbiAqICAgZmlyc3QuXG4gKiAtIE90aGVyd2lzZSBhUGF0aCBpcyBhIHBhdGguIElmIGFSb290IGlzIGEgVVJMLCB0aGVuIGl0cyBwYXRoIHBvcnRpb25cbiAqICAgaXMgdXBkYXRlZCB3aXRoIHRoZSByZXN1bHQgYW5kIGFSb290IGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhlIHJlc3VsdFxuICogICBpcyByZXR1cm5lZC5cbiAqICAgLSBJZiBhUGF0aCBpcyBhYnNvbHV0ZSwgdGhlIHJlc3VsdCBpcyBhUGF0aC5cbiAqICAgLSBPdGhlcndpc2UgdGhlIHR3byBwYXRocyBhcmUgam9pbmVkIHdpdGggYSBzbGFzaC5cbiAqIC0gSm9pbmluZyBmb3IgZXhhbXBsZSAnaHR0cDovLycgYW5kICd3d3cuZXhhbXBsZS5jb20nIGlzIGFsc28gc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBqb2luKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG4gIGlmIChhUGF0aCA9PT0gXCJcIikge1xuICAgIGFQYXRoID0gXCIuXCI7XG4gIH1cbiAgdmFyIGFQYXRoVXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICB2YXIgYVJvb3RVcmwgPSB1cmxQYXJzZShhUm9vdCk7XG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290ID0gYVJvb3RVcmwucGF0aCB8fCAnLyc7XG4gIH1cblxuICAvLyBgam9pbihmb28sICcvL3d3dy5leGFtcGxlLm9yZycpYFxuICBpZiAoYVBhdGhVcmwgJiYgIWFQYXRoVXJsLnNjaGVtZSkge1xuICAgIGlmIChhUm9vdFVybCkge1xuICAgICAgYVBhdGhVcmwuc2NoZW1lID0gYVJvb3RVcmwuc2NoZW1lO1xuICAgIH1cbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVBhdGhVcmwpO1xuICB9XG5cbiAgaWYgKGFQYXRoVXJsIHx8IGFQYXRoLm1hdGNoKGRhdGFVcmxSZWdleHApKSB7XG4gICAgcmV0dXJuIGFQYXRoO1xuICB9XG5cbiAgLy8gYGpvaW4oJ2h0dHA6Ly8nLCAnd3d3LmV4YW1wbGUuY29tJylgXG4gIGlmIChhUm9vdFVybCAmJiAhYVJvb3RVcmwuaG9zdCAmJiAhYVJvb3RVcmwucGF0aCkge1xuICAgIGFSb290VXJsLmhvc3QgPSBhUGF0aDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG5cbiAgdmFyIGpvaW5lZCA9IGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgPyBhUGF0aFxuICAgIDogbm9ybWFsaXplKGFSb290LnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgYVBhdGgpO1xuXG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290VXJsLnBhdGggPSBqb2luZWQ7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuICByZXR1cm4gam9pbmVkO1xufVxuZXhwb3J0cy5qb2luID0gam9pbjtcblxuZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24gKGFQYXRoKSB7XG4gIHJldHVybiBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJyB8fCAhIWFQYXRoLm1hdGNoKHVybFJlZ2V4cCk7XG59O1xuXG4vKipcbiAqIE1ha2UgYSBwYXRoIHJlbGF0aXZlIHRvIGEgVVJMIG9yIGFub3RoZXIgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIG1hZGUgcmVsYXRpdmUgdG8gYVJvb3QuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0aXZlKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG5cbiAgYVJvb3QgPSBhUm9vdC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgcGF0aCB0byBiZSBhYm92ZSB0aGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBzaW1wbHlcbiAgLy8gY2hlY2tpbmcgd2hldGhlciB0aGUgcm9vdCBpcyBhIHByZWZpeCBvZiB0aGUgcGF0aCB3b24ndCB3b3JrLiBJbnN0ZWFkLCB3ZVxuICAvLyBuZWVkIHRvIHJlbW92ZSBjb21wb25lbnRzIGZyb20gdGhlIHJvb3Qgb25lIGJ5IG9uZSwgdW50aWwgZWl0aGVyIHdlIGZpbmRcbiAgLy8gYSBwcmVmaXggdGhhdCBmaXRzLCBvciB3ZSBydW4gb3V0IG9mIGNvbXBvbmVudHMgdG8gcmVtb3ZlLlxuICB2YXIgbGV2ZWwgPSAwO1xuICB3aGlsZSAoYVBhdGguaW5kZXhPZihhUm9vdCArICcvJykgIT09IDApIHtcbiAgICB2YXIgaW5kZXggPSBhUm9vdC5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBvbmx5IHBhcnQgb2YgdGhlIHJvb3QgdGhhdCBpcyBsZWZ0IGlzIHRoZSBzY2hlbWUgKGkuZS4gaHR0cDovLyxcbiAgICAvLyBmaWxlOi8vLywgZXRjLiksIG9uZSBvciBtb3JlIHNsYXNoZXMgKC8pLCBvciBzaW1wbHkgbm90aGluZyBhdCBhbGwsIHdlXG4gICAgLy8gaGF2ZSBleGhhdXN0ZWQgYWxsIGNvbXBvbmVudHMsIHNvIHRoZSBwYXRoIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcm9vdC5cbiAgICBhUm9vdCA9IGFSb290LnNsaWNlKDAsIGluZGV4KTtcbiAgICBpZiAoYVJvb3QubWF0Y2goL14oW15cXC9dKzpcXC8pP1xcLyokLykpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICArK2xldmVsO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGFkZCBhIFwiLi4vXCIgZm9yIGVhY2ggY29tcG9uZW50IHdlIHJlbW92ZWQgZnJvbSB0aGUgcm9vdC5cbiAgcmV0dXJuIEFycmF5KGxldmVsICsgMSkuam9pbihcIi4uL1wiKSArIGFQYXRoLnN1YnN0cihhUm9vdC5sZW5ndGggKyAxKTtcbn1cbmV4cG9ydHMucmVsYXRpdmUgPSByZWxhdGl2ZTtcblxudmFyIHN1cHBvcnRzTnVsbFByb3RvID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAhKCdfX3Byb3RvX18nIGluIG9iaik7XG59KCkpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSAocykge1xuICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBCZWNhdXNlIGJlaGF2aW9yIGdvZXMgd2Fja3kgd2hlbiB5b3Ugc2V0IGBfX3Byb3RvX19gIG9uIG9iamVjdHMsIHdlXG4gKiBoYXZlIHRvIHByZWZpeCBhbGwgdGhlIHN0cmluZ3MgaW4gb3VyIHNldCB3aXRoIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXIuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvcHVsbC8zMSBhbmRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzMwXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbmZ1bmN0aW9uIHRvU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gJyQnICsgYVN0cjtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy50b1NldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiB0b1NldFN0cmluZztcblxuZnVuY3Rpb24gZnJvbVNldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuIGFTdHIuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMuZnJvbVNldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiBmcm9tU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBpc1Byb3RvU3RyaW5nKHMpIHtcbiAgaWYgKCFzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IHMubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPCA5IC8qIFwiX19wcm90b19fXCIubGVuZ3RoICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHMuY2hhckNvZGVBdChsZW5ndGggLSAxKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDIpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMykgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA0KSAhPT0gMTE2IC8qICd0JyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDUpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNikgIT09IDExNCAvKiAncicgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA3KSAhPT0gMTEyIC8qICdwJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDgpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOSkgIT09IDk1ICAvKiAnXycgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gbGVuZ3RoIC0gMTA7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHMuY2hhckNvZGVBdChpKSAhPT0gMzYgLyogJyQnICovKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiwgYnV0IGRpZmZlcmVudCBnZW5lcmF0ZWRcbiAqIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhIG1hcHBpbmcgd2l0aCBhXG4gKiBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyhtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGRlZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBpbmRpY2VzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICogbWFwcGluZyB3aXRoIGEgc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQ7XG5cbmZ1bmN0aW9uIHN0cmNtcChhU3RyMSwgYVN0cjIpIHtcbiAgaWYgKGFTdHIxID09PSBhU3RyMikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKGFTdHIxID4gYVN0cjIpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggaW5mbGF0ZWQgc291cmNlIGFuZCBuYW1lIHN0cmluZ3Mgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gc3RyY21wKG1hcHBpbmdBLnNvdXJjZSwgbWFwcGluZ0Iuc291cmNlKTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gc3RyY21wKG1hcHBpbmdBLm5hbWUsIG1hcHBpbmdCLm5hbWUpO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2stZ2VuZXJhdG9yJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tHZW5lcmF0b3IgPSBmYWN0b3J5KHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTdGFja0ZyYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFja3RyYWNlOiBmdW5jdGlvbiBTdGFja0dlbmVyYXRvciQkYmFja3RyYWNlKG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICAgICAgdmFyIG1heFN0YWNrU2l6ZSA9IDEwO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcHRzLm1heFN0YWNrU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBtYXhTdGFja1NpemUgPSBvcHRzLm1heFN0YWNrU2l6ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGN1cnIgPSBhcmd1bWVudHMuY2FsbGVlO1xuICAgICAgICAgICAgd2hpbGUgKGN1cnIgJiYgc3RhY2subGVuZ3RoIDwgbWF4U3RhY2tTaXplKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxsb3cgVjggb3B0aW1pemF0aW9uc1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGN1cnJbJ2FyZ3VtZW50cyddLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBjdXJyWydhcmd1bWVudHMnXVtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKC9mdW5jdGlvbig/OlxccysoW1xcdyRdKykpK1xccypcXCgvLnRlc3QoY3Vyci50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ldyBTdGFja0ZyYW1lKHtmdW5jdGlvbk5hbWU6IFJlZ0V4cC4kMSB8fCB1bmRlZmluZWQsIGFyZ3M6IGFyZ3N9KSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh7YXJnczogYXJnc30pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci5jYWxsZXI7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrZnJhbWUnLCBbXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja0ZyYW1lID0gZmFjdG9yeSgpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICBmdW5jdGlvbiBfaXNOdW1iZXIobikge1xuICAgICAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQobikpICYmIGlzRmluaXRlKG4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9jYXBpdGFsaXplKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9nZXR0ZXIocCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbcF07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGJvb2xlYW5Qcm9wcyA9IFsnaXNDb25zdHJ1Y3RvcicsICdpc0V2YWwnLCAnaXNOYXRpdmUnLCAnaXNUb3BsZXZlbCddO1xuICAgIHZhciBudW1lcmljUHJvcHMgPSBbJ2NvbHVtbk51bWJlcicsICdsaW5lTnVtYmVyJ107XG4gICAgdmFyIHN0cmluZ1Byb3BzID0gWydmaWxlTmFtZScsICdmdW5jdGlvbk5hbWUnLCAnc291cmNlJ107XG4gICAgdmFyIGFycmF5UHJvcHMgPSBbJ2FyZ3MnXTtcblxuICAgIGZ1bmN0aW9uIFN0YWNrRnJhbWUob2JqKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIHZhciBwcm9wcyA9IGJvb2xlYW5Qcm9wcy5jb25jYXQobnVtZXJpY1Byb3BzLmNvbmNhdChzdHJpbmdQcm9wcy5jb25jYXQoYXJyYXlQcm9wcykpKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3BzW2ldKSAmJiBvYmpbcHJvcHNbaV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snc2V0JyArIF9jYXBpdGFsaXplKHByb3BzW2ldKV0ob2JqW3Byb3BzW2ldXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgU3RhY2tGcmFtZS5wcm90b3R5cGUgPSB7XG4gICAgICAgIGdldEFyZ3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFyZ3M7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEFyZ3M6IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJncyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFyZ3MgPSB2O1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldEV2YWxPcmlnaW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2YWxPcmlnaW47XG4gICAgICAgIH0sXG4gICAgICAgIHNldEV2YWxPcmlnaW46IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICBpZiAodiBpbnN0YW5jZW9mIFN0YWNrRnJhbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2YWxPcmlnaW4gPSB2O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2IGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsT3JpZ2luID0gbmV3IFN0YWNrRnJhbWUodik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V2YWwgT3JpZ2luIG11c3QgYmUgYW4gT2JqZWN0IG9yIFN0YWNrRnJhbWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2V0RnVuY3Rpb25OYW1lKCkgfHwgJ3thbm9ueW1vdXN9JztcbiAgICAgICAgICAgIHZhciBhcmdzID0gJygnICsgKHRoaXMuZ2V0QXJncygpIHx8IFtdKS5qb2luKCcsJykgKyAnKSc7XG4gICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSB0aGlzLmdldEZpbGVOYW1lKCkgPyAoJ0AnICsgdGhpcy5nZXRGaWxlTmFtZSgpKSA6ICcnO1xuICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBfaXNOdW1iZXIodGhpcy5nZXRMaW5lTnVtYmVyKCkpID8gKCc6JyArIHRoaXMuZ2V0TGluZU51bWJlcigpKSA6ICcnO1xuICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IF9pc051bWJlcih0aGlzLmdldENvbHVtbk51bWJlcigpKSA/ICgnOicgKyB0aGlzLmdldENvbHVtbk51bWJlcigpKSA6ICcnO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZSArIGFyZ3MgKyBmaWxlTmFtZSArIGxpbmVOdW1iZXIgKyBjb2x1bW5OdW1iZXI7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib29sZWFuUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IF9nZXR0ZXIoYm9vbGVhblByb3BzW2ldKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IChmdW5jdGlvbiAocCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgdGhpc1twXSA9IEJvb2xlYW4odik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShib29sZWFuUHJvcHNbaV0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtZXJpY1Byb3BzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUobnVtZXJpY1Byb3BzW2pdKV0gPSBfZ2V0dGVyKG51bWVyaWNQcm9wc1tqXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUobnVtZXJpY1Byb3BzW2pdKV0gPSAoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghX2lzTnVtYmVyKHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IocCArICcgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gTnVtYmVyKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkobnVtZXJpY1Byb3BzW2pdKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IHN0cmluZ1Byb3BzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUoc3RyaW5nUHJvcHNba10pXSA9IF9nZXR0ZXIoc3RyaW5nUHJvcHNba10pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKHN0cmluZ1Byb3BzW2tdKV0gPSAoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBTdHJpbmcodik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShzdHJpbmdQcm9wc1trXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0YWNrRnJhbWU7XG59KSk7XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFja3RyYWNlLWdwcycsIFsnc291cmNlLW1hcCcsICdzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyJyksIHJlcXVpcmUoJ3N0YWNrZnJhbWUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja1RyYWNlR1BTID0gZmFjdG9yeShyb290LlNvdXJjZU1hcCB8fCByb290LnNvdXJjZU1hcCwgcm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uKFNvdXJjZU1hcCwgU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIE1ha2UgYSBYLURvbWFpbiByZXF1ZXN0IHRvIHVybCBhbmQgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IHdpdGggcmVzcG9uc2UgdGV4dCBpZiBmdWxmaWxsZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfeGRyKHVybCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICByZXEub3BlbignZ2V0JywgdXJsKTtcbiAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIG9ucmVhZHlzdGF0ZWNoYW5nZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChyZXEuc3RhdHVzID49IDIwMCAmJiByZXEuc3RhdHVzIDwgMzAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKHVybC5zdWJzdHIoMCwgNykgPT09ICdmaWxlOi8vJyAmJiByZXEucmVzcG9uc2VUZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0hUVFAgc3RhdHVzOiAnICsgcmVxLnN0YXR1cyArICcgcmV0cmlldmluZyAnICsgdXJsKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVxLnNlbmQoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgQmFzZTY0LWVuY29kZWQgc3RyaW5nIGludG8gaXRzIG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uLlxuICAgICAqIFVzZWQgZm9yIGlubGluZSBzb3VyY2VtYXBzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGI2NHN0ciBCYXNlLTY0IGVuY29kZWQgc3RyaW5nXG4gICAgICogQHJldHVybnMge1N0cmluZ30gb3JpZ2luYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NC1lbmNvZGVkIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfYXRvYihiNjRzdHIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5hdG9iKSB7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93LmF0b2IoYjY0c3RyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3VwcGx5IGEgcG9seWZpbGwgZm9yIHdpbmRvdy5hdG9iIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9wYXJzZUpzb24oc3RyaW5nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgSlNPTiAhPT0gJ3VuZGVmaW5lZCcgJiYgSlNPTi5wYXJzZSkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3VwcGx5IGEgcG9seWZpbGwgZm9yIEpTT04ucGFyc2UgaW4gdGhpcyBlbnZpcm9ubWVudCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRGdW5jdGlvbk5hbWUoc291cmNlLCBsaW5lTnVtYmVyLyosIGNvbHVtbk51bWJlciovKSB7XG4gICAgICAgIHZhciBzeW50YXhlcyA9IFtcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGZ1bmN0aW9uICh7YXJnc30pIFRPRE8gYXJncyBjYXB0dXJlXG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypmdW5jdGlvblxcYi8sXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiB7bmFtZX0oe2FyZ3N9KSBtWzFdPW5hbWUgbVsyXT1hcmdzXG4gICAgICAgICAgICAvZnVuY3Rpb25cXHMrKFteKCdcImBdKj8pXFxzKlxcKChbXildKilcXCkvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gZXZhbCgpXG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccyooPzpldmFsfG5ldyBGdW5jdGlvbilcXGIvLFxuICAgICAgICAgICAgLy8gZm5fbmFtZSgpIHtcbiAgICAgICAgICAgIC9cXGIoPyEoPzppZnxmb3J8c3dpdGNofHdoaWxlfHdpdGh8Y2F0Y2gpXFxiKSg/Oig/OnN0YXRpYylcXHMrKT8oXFxTKylcXHMqXFwoLio/XFwpXFxzKlxcey8sXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSAoKSA9PiB7XG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypcXCguKj9cXClcXHMqPT4vXG4gICAgICAgIF07XG4gICAgICAgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgnXFxuJyk7XG5cbiAgICAgICAgLy8gV2FsayBiYWNrd2FyZHMgaW4gdGhlIHNvdXJjZSBsaW5lcyB1bnRpbCB3ZSBmaW5kIHRoZSBsaW5lIHdoaWNoIG1hdGNoZXMgb25lIG9mIHRoZSBwYXR0ZXJucyBhYm92ZVxuICAgICAgICB2YXIgY29kZSA9ICcnO1xuICAgICAgICB2YXIgbWF4TGluZXMgPSBNYXRoLm1pbihsaW5lTnVtYmVyLCAyMCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4TGluZXM7ICsraSkge1xuICAgICAgICAgICAgLy8gbGluZU5vIGlzIDEtYmFzZWQsIHNvdXJjZVtdIGlzIDAtYmFzZWRcbiAgICAgICAgICAgIHZhciBsaW5lID0gbGluZXNbbGluZU51bWJlciAtIGkgLSAxXTtcbiAgICAgICAgICAgIHZhciBjb21tZW50UG9zID0gbGluZS5pbmRleE9mKCcvLycpO1xuICAgICAgICAgICAgaWYgKGNvbW1lbnRQb3MgPj0gMCkge1xuICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cigwLCBjb21tZW50UG9zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gbGluZSArIGNvZGU7XG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IHN5bnRheGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtID0gc3ludGF4ZXNbaW5kZXhdLmV4ZWMoY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG1bMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtWzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Vuc3VyZVN1cHBvcnRlZEVudmlyb25tZW50KCkge1xuICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY29uc3VtZSBzb3VyY2UgbWFwcyBpbiBvbGRlciBicm93c2VycycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGFja2ZyYW1lICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gU3RhY2tGcmFtZSBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUuZmlsZU5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBmaWxlIG5hbWUgaXMgbm90IGEgU3RyaW5nJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUubGluZU51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciAlIDEgIT09IDAgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGxpbmUgbnVtYmVyIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGNvbHVtbiBudW1iZXIgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSkge1xuICAgICAgICB2YXIgbSA9IC9cXC9cXC9bI0BdID9zb3VyY2VNYXBwaW5nVVJMPShbXlxccydcIl0rKVxccyokL20uZXhlYyhzb3VyY2UpO1xuICAgICAgICBpZiAobSAmJiBtWzFdKSB7XG4gICAgICAgICAgICByZXR1cm4gbVsxXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc291cmNlTWFwcGluZ1VSTCBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9leHRyYWN0TG9jYXRpb25JbmZvRnJvbVNvdXJjZU1hcFNvdXJjZShzdGFja2ZyYW1lLCBzb3VyY2VNYXBDb25zdW1lciwgc291cmNlQ2FjaGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIGxvYyA9IHNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgICAgICAgIGxpbmU6IHN0YWNrZnJhbWUubGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGxvYy5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWNoZSBtYXBwZWQgc291cmNlc1xuICAgICAgICAgICAgICAgIHZhciBtYXBwZWRTb3VyY2UgPSBzb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGxvYy5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIGlmIChtYXBwZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlQ2FjaGVbbG9jLnNvdXJjZV0gPSBtYXBwZWRTb3VyY2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2l2ZW4gc3RhY2tmcmFtZSBhbmQgc291cmNlIGxvY2F0aW9uLCB1cGRhdGUgc3RhY2tmcmFtZVxuICAgICAgICAgICAgICAgICAgICBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGxvYy5uYW1lIHx8IHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogc3RhY2tmcmFtZS5hcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvYy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2MubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jLmNvbHVtblxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgb3JpZ2luYWwgc291cmNlIGZvciBnaXZlbiBzdGFja2ZyYW1lIGFuZCBzb3VyY2UgbWFwJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAqICAgICAgb3B0cy5zb3VyY2VDYWNoZSA9IHt1cmw6IFwiU291cmNlIFN0cmluZ1wifSA9PiBwcmVsb2FkIHNvdXJjZSBjYWNoZVxuICAgICAqICAgICAgb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gey9wYXRoL2ZpbGUuanMubWFwOiBTb3VyY2VNYXBDb25zdW1lcn1cbiAgICAgKiAgICAgIG9wdHMub2ZmbGluZSA9IFRydWUgdG8gcHJldmVudCBuZXR3b3JrIHJlcXVlc3RzLlxuICAgICAqICAgICAgICAgICAgICBCZXN0IGVmZm9ydCB3aXRob3V0IHNvdXJjZXMgb3Igc291cmNlIG1hcHMuXG4gICAgICogICAgICBvcHRzLmFqYXggPSBQcm9taXNlIHJldHVybmluZyBmdW5jdGlvbiB0byBtYWtlIFgtRG9tYWluIHJlcXVlc3RzXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMob3B0cykge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3RhY2tUcmFjZUdQUykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlID0gb3B0cy5zb3VyY2VDYWNoZSB8fCB7fTtcbiAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuYWpheCA9IG9wdHMuYWpheCB8fCBfeGRyO1xuXG4gICAgICAgIHRoaXMuX2F0b2IgPSBvcHRzLmF0b2IgfHwgX2F0b2I7XG5cbiAgICAgICAgdGhpcy5fZ2V0ID0gZnVuY3Rpb24gX2dldChsb2NhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBsb2NhdGlvbi5zdWJzdHIoMCwgNSkgPT09ICdkYXRhOic7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0cy5vZmZsaW5lICYmICFpc0RhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ2Fubm90IG1ha2UgbmV0d29yayByZXF1ZXN0cyBpbiBvZmZsaW5lIG1vZGUnKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF0YSBVUkxzIGNhbiBoYXZlIHBhcmFtZXRlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM5N1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1cHBvcnRlZEVuY29kaW5nUmVnZXhwID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXmRhdGE6YXBwbGljYXRpb25cXC9qc29uOyhbXFx3PTpcIi1dKzspKmJhc2U2NCwvO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbG9jYXRpb24ubWF0Y2goc3VwcG9ydGVkRW5jb2RpbmdSZWdleHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcFN0YXJ0ID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGVkU291cmNlID0gbG9jYXRpb24uc3Vic3RyKHNvdXJjZU1hcFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fYXRvYihlbmNvZGVkU291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSA9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RoZSBlbmNvZGluZyBvZiB0aGUgaW5saW5lIHNvdXJjZW1hcCBpcyBub3Qgc3VwcG9ydGVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhoclByb21pc2UgPSB0aGlzLmFqYXgobG9jYXRpb24sIHttZXRob2Q6ICdnZXQnfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZSB0aGUgUHJvbWlzZSB0byBwcmV2ZW50IGR1cGxpY2F0ZSBpbi1mbGlnaHQgcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0geGhyUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclByb21pc2UudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRpbmcgU291cmNlTWFwQ29uc3VtZXJzIGlzIGV4cGVuc2l2ZSwgc28gdGhpcyB3cmFwcyB0aGUgY3JlYXRpb24gb2YgYVxuICAgICAgICAgKiBTb3VyY2VNYXBDb25zdW1lciBpbiBhIHBlci1pbnN0YW5jZSBjYWNoZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHNvdXJjZU1hcHBpbmdVUkwgPSB7U3RyaW5nfSBVUkwgdG8gZmV0Y2ggc291cmNlIG1hcCBmcm9tXG4gICAgICAgICAqIEBwYXJhbSBkZWZhdWx0U291cmNlUm9vdCA9IERlZmF1bHQgc291cmNlIHJvb3QgZm9yIHNvdXJjZSBtYXAgaWYgdW5kZWZpbmVkXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIGEgU291cmNlTWFwQ29uc3VtZXJcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyID0gZnVuY3Rpb24gX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldChzb3VyY2VNYXBwaW5nVVJMKS50aGVuKGZ1bmN0aW9uKHNvdXJjZU1hcFNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlTWFwU291cmNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBTb3VyY2UgPSBfcGFyc2VKc29uKHNvdXJjZU1hcFNvdXJjZS5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlTWFwU291cmNlLnNvdXJjZVJvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcFNvdXJjZS5zb3VyY2VSb290ID0gZGVmYXVsdFNvdXJjZVJvb3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU291cmNlTWFwLlNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcFNvdXJjZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdID0gc291cmNlTWFwQ29uc3VtZXJQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBlbmhhbmNlIGZ1bmN0aW9uIG5hbWUgYW5kIHVzZSBzb3VyY2UgbWFwcyBmb3IgYVxuICAgICAgICAgKiBiZXR0ZXIgU3RhY2tGcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lIG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHdpdGggc291cmNlLW1hcHBlZCBTdGFja0ZyYW1lXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBpbnBvaW50ID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkcGlucG9pbnQoc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkudGhlbihmdW5jdGlvbihtYXBwZWRTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVNYXBwZWRTdGFja0ZyYW1lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtYXBwZWRTdGFja0ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZEZ1bmN0aW9uTmFtZShtYXBwZWRTdGFja0ZyYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSwgcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ2NhdGNoJ10ocmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgZ3Vlc3MgZnVuY3Rpb24gbmFtZSBmcm9tIGxvY2F0aW9uIGluZm9ybWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWVcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBlbmhhbmNlZCBTdGFja0ZyYW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZmluZEZ1bmN0aW9uTmFtZShzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChzdGFja2ZyYW1lLmZpbGVOYW1lKS50aGVuKGZ1bmN0aW9uIGdldFNvdXJjZUNhbGxiYWNrKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHN0YWNrZnJhbWUubGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ3Vlc3NlZEZ1bmN0aW9uTmFtZSA9IF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZXBsYWNlIGZ1bmN0aW9uTmFtZSBpZiB3ZSBmb3VuZCBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICAgICAgaWYgKGd1ZXNzZWRGdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZ3Vlc3NlZEZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBzdGFja2ZyYW1lLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IHN0YWNrZnJhbWUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgc2VlayBzb3VyY2UtbWFwcGVkIGxvY2F0aW9uIGFuZCByZXR1cm4gbmV3IGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdldE1hcHBlZExvY2F0aW9uID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKTtcblxuICAgICAgICAgICAgICAgIHZhciBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGU7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gc3RhY2tmcmFtZS5maWxlTmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXQoZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VNYXBwaW5nVVJMID0gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBzb3VyY2VNYXBwaW5nVVJMLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRTb3VyY2VSb290ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlTWFwcGluZ1VSTFswXSAhPT0gJy8nICYmICFpc0RhdGFVcmwgJiYgISgvXmh0dHBzPzpcXC9cXC98XlxcL1xcLy9pKS50ZXN0KHNvdXJjZU1hcHBpbmdVUkwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBwaW5nVVJMID0gZGVmYXVsdFNvdXJjZVJvb3QgKyBzb3VyY2VNYXBwaW5nVVJMO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KS50aGVuKGZ1bmN0aW9uKHNvdXJjZU1hcENvbnN1bWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwU291cmNlKHN0YWNrZnJhbWUsIHNvdXJjZU1hcENvbnN1bWVyLCBzb3VyY2VDYWNoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVsnY2F0Y2gnXShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcbiAgICB9O1xufSkpO1xuIiwiLy8gUG9seWZpbGwgZm9yIG9sZCBicm93c2Vyc1xuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2lzQXJyYXlcbmlmICghQXJyYXkuaXNBcnJheSkge1xuICAgIEFycmF5LmlzQXJyYXkgPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG59XG5cbmlmICh0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBFUzZQcm9taXNlLnBvbHlmaWxsKCk7XG59XG5cbi8vIEVTNSBQb2x5ZmlsbHNcbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GdW5jdGlvbi9iaW5kXG5pZiAoIUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKSB7XG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihvVGhpcykge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kIC0gd2hhdCBpcyB0cnlpbmcgdG8gYmUgYm91bmQgaXMgbm90IGNhbGxhYmxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYUFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICB2YXIgZlRvQmluZCA9IHRoaXM7XG4gICAgICAgIHZhciBOb09wID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBmQm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBmVG9CaW5kLmFwcGx5KHRoaXMgaW5zdGFuY2VvZiBOb09wICYmIG9UaGlzID8gdGhpcyA6IG9UaGlzLFxuICAgICAgICAgICAgICAgIGFBcmdzLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgTm9PcC5wcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcbiAgICAgICAgZkJvdW5kLnByb3RvdHlwZSA9IG5ldyBOb09wKCk7XG5cbiAgICAgICAgcmV0dXJuIGZCb3VuZDtcbiAgICB9O1xufVxuXG4vLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvbWFwXG5pZiAoIUFycmF5LnByb3RvdHlwZS5tYXApIHtcbiAgICBBcnJheS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgaWYgKHRoaXMgPT09IHZvaWQgMCB8fCB0aGlzID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0aGlzIGlzIG51bGwgb3Igbm90IGRlZmluZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgTyA9IE9iamVjdCh0aGlzKTtcbiAgICAgICAgdmFyIGxlbiA9IE8ubGVuZ3RoID4+PiAwO1xuICAgICAgICB2YXIgVDtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIFQgPSB0aGlzQXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIEEgPSBuZXcgQXJyYXkobGVuKTtcbiAgICAgICAgdmFyIGsgPSAwO1xuXG4gICAgICAgIHdoaWxlIChrIDwgbGVuKSB7XG4gICAgICAgICAgICB2YXIga1ZhbHVlO1xuICAgICAgICAgICAgdmFyIG1hcHBlZFZhbHVlO1xuICAgICAgICAgICAgaWYgKGsgaW4gTykge1xuICAgICAgICAgICAgICAgIGtWYWx1ZSA9IE9ba107XG4gICAgICAgICAgICAgICAgbWFwcGVkVmFsdWUgPSBjYWxsYmFjay5jYWxsKFQsIGtWYWx1ZSwgaywgTyk7XG4gICAgICAgICAgICAgICAgQVtrXSA9IG1hcHBlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaysrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEE7XG4gICAgfTtcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2ZpbHRlclxuaWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uKGNhbGxiYWNrLyosIHRoaXNBcmcqLykge1xuICAgICAgICBpZiAodGhpcyA9PT0gdm9pZCAwIHx8IHRoaXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RoaXMgaXMgbnVsbCBvciBub3QgZGVmaW5lZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHQgPSBPYmplY3QodGhpcyk7XG4gICAgICAgIHZhciBsZW4gPSB0Lmxlbmd0aCA+Pj4gMDtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHMubGVuZ3RoID49IDIgPyBhcmd1bWVudHNbMV0gOiB2b2lkIDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpIGluIHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gdFtpXTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB2YWwsIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xufVxuXG4vLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvZm9yRWFjaFxuaWYgKCFBcnJheS5wcm90b3R5cGUuZm9yRWFjaCkge1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgdmFyIFQ7XG4gICAgICAgIHZhciBrO1xuICAgICAgICBpZiAodGhpcyA9PT0gbnVsbCB8fCB0aGlzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyB0aGlzIGlzIG51bGwgb3Igbm90IGRlZmluZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBPID0gT2JqZWN0KHRoaXMpO1xuICAgICAgICB2YXIgbGVuID0gTy5sZW5ndGggPj4+IDA7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIFQgPSB0aGlzQXJnO1xuICAgICAgICB9XG4gICAgICAgIGsgPSAwO1xuICAgICAgICB3aGlsZSAoayA8IGxlbikge1xuICAgICAgICAgICAgdmFyIGtWYWx1ZTtcbiAgICAgICAgICAgIGlmIChrIGluIE8pIHtcbiAgICAgICAgICAgICAgICBrVmFsdWUgPSBPW2tdO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoVCwga1ZhbHVlLCBrLCBPKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgfVxuICAgIH07XG59XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFja3RyYWNlJywgWydlcnJvci1zdGFjay1wYXJzZXInLCAnc3RhY2stZ2VuZXJhdG9yJywgJ3N0YWNrdHJhY2UtZ3BzJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdlcnJvci1zdGFjay1wYXJzZXInKSwgcmVxdWlyZSgnc3RhY2stZ2VuZXJhdG9yJyksIHJlcXVpcmUoJ3N0YWNrdHJhY2UtZ3BzJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tUcmFjZSA9IGZhY3Rvcnkocm9vdC5FcnJvclN0YWNrUGFyc2VyLCByb290LlN0YWNrR2VuZXJhdG9yLCByb290LlN0YWNrVHJhY2VHUFMpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gU3RhY2tUcmFjZShFcnJvclN0YWNrUGFyc2VyLCBTdGFja0dlbmVyYXRvciwgU3RhY2tUcmFjZUdQUykge1xuICAgIHZhciBfb3B0aW9ucyA9IHtcbiAgICAgICAgZmlsdGVyOiBmdW5jdGlvbihzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHN0YWNrZnJhbWVzIGZvciB0aGlzIGxpYnJhcnkgYnkgZGVmYXVsdFxuICAgICAgICAgICAgcmV0dXJuIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignU3RhY2tUcmFjZSQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdFcnJvclN0YWNrUGFyc2VyJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2VHUFMkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignU3RhY2tHZW5lcmF0b3IkJCcpID09PSAtMTtcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlQ2FjaGU6IHt9XG4gICAgfTtcblxuICAgIHZhciBfZ2VuZXJhdGVFcnJvciA9IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJEdlbmVyYXRlRXJyb3IoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBFcnJvciBtdXN0IGJlIHRocm93biB0byBnZXQgc3RhY2sgaW4gSUVcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnI7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogTWVyZ2UgMiBnaXZlbiBPYmplY3RzLiBJZiBhIGNvbmZsaWN0IG9jY3VycyB0aGUgc2Vjb25kIG9iamVjdCB3aW5zLlxuICAgICAqIERvZXMgbm90IGRvIGRlZXAgbWVyZ2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGZpcnN0IGJhc2Ugb2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNlY29uZCBvdmVycmlkZXNcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBtZXJnZWQgZmlyc3QgYW5kIHNlY29uZFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZnVuY3Rpb24gX21lcmdlKGZpcnN0LCBzZWNvbmQpIHtcbiAgICAgICAgdmFyIHRhcmdldCA9IHt9O1xuXG4gICAgICAgIFtmaXJzdCwgc2Vjb25kXS5mb3JFYWNoKGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IG9ialtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikge1xuICAgICAgICByZXR1cm4gZXJyLnN0YWNrIHx8IGVyclsnb3BlcmEjc291cmNlbG9jJ107XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcmVkKHN0YWNrZnJhbWVzLCBmaWx0ZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGFja2ZyYW1lcy5maWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIGJhY2t0cmFjZSBmcm9tIGludm9jYXRpb24gcG9pbnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRnZXQob3B0cykge1xuICAgICAgICAgICAgdmFyIGVyciA9IF9nZW5lcmF0ZUVycm9yKCk7XG4gICAgICAgICAgICByZXR1cm4gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IHRoaXMuZnJvbUVycm9yKGVyciwgb3B0cykgOiB0aGlzLmdlbmVyYXRlQXJ0aWZpY2lhbGx5KG9wdHMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKiBJTVBPUlRBTlQ6IERvZXMgbm90IGhhbmRsZSBzb3VyY2UgbWFwcyBvciBndWVzcyBmdW5jdGlvbiBuYW1lcyFcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBvZiBTdGFja0ZyYW1lXG4gICAgICAgICAqL1xuICAgICAgICBnZXRTeW5jOiBmdW5jdGlvbiBTdGFja1RyYWNlJCRnZXRTeW5jKG9wdHMpIHtcbiAgICAgICAgICAgIG9wdHMgPSBfbWVyZ2UoX29wdGlvbnMsIG9wdHMpO1xuICAgICAgICAgICAgdmFyIGVyciA9IF9nZW5lcmF0ZUVycm9yKCk7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpID8gRXJyb3JTdGFja1BhcnNlci5wYXJzZShlcnIpIDogU3RhY2tHZW5lcmF0b3IuYmFja3RyYWNlKG9wdHMpO1xuICAgICAgICAgICAgcmV0dXJuIF9maWx0ZXJlZChzdGFjaywgb3B0cy5maWx0ZXIpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhbiBlcnJvciBvYmplY3QsIHBhcnNlIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBvYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZvciBBcnJheVtTdGFja0ZyYW1lfVxuICAgICAgICAgKi9cbiAgICAgICAgZnJvbUVycm9yOiBmdW5jdGlvbiBTdGFja1RyYWNlJCRmcm9tRXJyb3IoZXJyb3IsIG9wdHMpIHtcbiAgICAgICAgICAgIG9wdHMgPSBfbWVyZ2UoX29wdGlvbnMsIG9wdHMpO1xuICAgICAgICAgICAgdmFyIGdwcyA9IG5ldyBTdGFja1RyYWNlR1BTKG9wdHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhY2tmcmFtZXMgPSBfZmlsdGVyZWQoRXJyb3JTdGFja1BhcnNlci5wYXJzZShlcnJvciksIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKFByb21pc2UuYWxsKHN0YWNrZnJhbWVzLm1hcChmdW5jdGlvbihzZikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU9yaWdpbmFsKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc2YpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBncHMucGlucG9pbnQoc2YpLnRoZW4ocmVzb2x2ZSwgcmVzb2x2ZU9yaWdpbmFsKVsnY2F0Y2gnXShyZXNvbHZlT3JpZ2luYWwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSkpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVXNlIFN0YWNrR2VuZXJhdG9yIHRvIGdlbmVyYXRlIGEgYmFja3RyYWNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gb2YgQXJyYXlbU3RhY2tGcmFtZV1cbiAgICAgICAgICovXG4gICAgICAgIGdlbmVyYXRlQXJ0aWZpY2lhbGx5OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRnZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBzdGFja0ZyYW1lcyA9IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0cy5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBzdGFja0ZyYW1lcyA9IHN0YWNrRnJhbWVzLmZpbHRlcihvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN0YWNrRnJhbWVzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBmdW5jdGlvbiwgd3JhcCBpdCBzdWNoIHRoYXQgaW52b2NhdGlvbnMgdHJpZ2dlciBhIGNhbGxiYWNrIHRoYXRcbiAgICAgICAgICogaXMgY2FsbGVkIHdpdGggYSBzdGFjayB0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdG8gYmUgaW5zdHJ1bWVudGVkXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhIHN0YWNrIHRyYWNlIG9uIGludm9jYXRpb25cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyYmFjayBvcHRpb25hbCBmdW5jdGlvbiB0byBjYWxsIHdpdGggZXJyb3IgaWYgdW5hYmxlIHRvIGdldCBzdGFjayB0cmFjZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgb3B0aW9uYWwgY29udGV4dCBvYmplY3QgKGUuZy4gd2luZG93KVxuICAgICAgICAgKi9cbiAgICAgICAgaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkaW5zdHJ1bWVudChmbiwgY2FsbGJhY2ssIGVycmJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnN0cnVtZW50IG5vbi1mdW5jdGlvbiBvYmplY3QnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAvLyBBbHJlYWR5IGluc3RydW1lbnRlZCwgcmV0dXJuIGdpdmVuIEZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgaW5zdHJ1bWVudGVkID0gZnVuY3Rpb24gU3RhY2tUcmFjZSQkaW5zdHJ1bWVudGVkKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0KCkudGhlbihjYWxsYmFjaywgZXJyYmFjaylbJ2NhdGNoJ10oZXJyYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnIHx8IHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZnJvbUVycm9yKGUpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgaW5zdHJ1bWVudGVkLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm4gPSBmbjtcblxuICAgICAgICAgICAgcmV0dXJuIGluc3RydW1lbnRlZDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBmdW5jdGlvbiB0aGF0IGhhcyBiZWVuIGluc3RydW1lbnRlZCxcbiAgICAgICAgICogcmV2ZXJ0IHRoZSBmdW5jdGlvbiB0byBpdCdzIG9yaWdpbmFsIChub24taW5zdHJ1bWVudGVkKSBzdGF0ZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdG8gZGUtaW5zdHJ1bWVudFxuICAgICAgICAgKi9cbiAgICAgICAgZGVpbnN0cnVtZW50OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRkZWluc3RydW1lbnQoZm4pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZS1pbnN0cnVtZW50IG5vbi1mdW5jdGlvbiBvYmplY3QnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4uX19zdGFja3RyYWNlT3JpZ2luYWxGbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gbm90IGluc3RydW1lbnRlZCwgcmV0dXJuIG9yaWdpbmFsXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhbiBlcnJvciBtZXNzYWdlIGFuZCBBcnJheSBvZiBTdGFja0ZyYW1lcywgc2VyaWFsaXplIGFuZCBQT1NUIHRvIGdpdmVuIFVSTC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gc3RhY2tmcmFtZXNcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXJyb3JNc2dcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3RPcHRpb25zXG4gICAgICAgICAqL1xuICAgICAgICByZXBvcnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJHJlcG9ydChzdGFja2ZyYW1lcywgdXJsLCBlcnJvck1zZywgcmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIG9ucmVhZHlzdGF0ZWNoYW5nZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA+PSAyMDAgJiYgcmVxLnN0YXR1cyA8IDQwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVxLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1BPU1QgdG8gJyArIHVybCArICcgZmFpbGVkIHdpdGggc3RhdHVzOiAnICsgcmVxLnN0YXR1cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXEub3BlbigncG9zdCcsIHVybCk7XG5cbiAgICAgICAgICAgICAgICAvLyBTZXQgcmVxdWVzdCBoZWFkZXJzXG4gICAgICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zICYmIHR5cGVvZiByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVycyA9IHJlcXVlc3RPcHRpb25zLmhlYWRlcnM7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGhlYWRlciBpbiBoZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShoZWFkZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyLCBoZWFkZXJzW2hlYWRlcl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHJlcG9ydFBheWxvYWQgPSB7c3RhY2s6IHN0YWNrZnJhbWVzfTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JNc2cgIT09IHVuZGVmaW5lZCAmJiBlcnJvck1zZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnRQYXlsb2FkLm1lc3NhZ2UgPSBlcnJvck1zZztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXEuc2VuZChKU09OLnN0cmluZ2lmeShyZXBvcnRQYXlsb2FkKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KSk7XG4iXX0= diff --git a/gulpfile.js b/gulpfile.js index bd9b843..9b17ac2 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -74,6 +74,7 @@ gulp.task('dist', function() { .pipe(vinylSourceStream('stacktrace.js')) .pipe(vinylBuffer()) .pipe(concat(sources.replace('.js', '-with-promises-and-json-polyfills.js'))) + .pipe(gulp.dest('dist')) .pipe(uglify()) .pipe(rename({extname: '.min.js'})) .pipe(sourcemaps.init({loadMaps: true})) From 64f754c963751cf87c771a8a72cf056f798f982f Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sun, 7 May 2017 14:27:29 -0700 Subject: [PATCH 088/110] Attempt to fix iOS tests on Sauce using upgraded Appium --- karma.conf.ci.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/karma.conf.ci.js b/karma.conf.ci.js index d5fbc3a..363a89d 100644 --- a/karma.conf.ci.js +++ b/karma.conf.ci.js @@ -15,16 +15,22 @@ module.exports = function(config) { version: '8.4' }, slIOS9: { + appiumVersion: '1.6.3', base: 'SauceLabs', - browserName: 'iPhone', - platform: 'OS X 10.11', - version: '9.2' + browserName: 'Safari', + deviceName: 'iPhone 6s Simulator', + deviceOrientation: 'portrait', + platformName: 'iOS', + platformVersion: '9.3' }, slIOS10: { + appiumVersion: '1.6.3', base: 'SauceLabs', - browserName: 'iPhone', - platform: 'macOS 10.12', - version: '10.2' + browserName: 'Safari', + deviceName: 'iPhone 7 Simulator', + deviceOrientation: 'portrait', + platformName: 'iOS', + platformVersion: '10.2' }, slAndroid4: { base: 'SauceLabs', From c10ca16a0cb2b4499433ef1b3b5269097be0ac60 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 12 Aug 2017 13:06:32 -0700 Subject: [PATCH 089/110] Update npm dependencies --- package-lock.json | 8803 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 34 +- 2 files changed, 8820 insertions(+), 17 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..c827564 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,8803 @@ +{ + "name": "stacktrace-js", + "version": "2.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@gulp-sourcemaps/map-sources": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", + "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=", + "dev": true, + "requires": { + "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz" + } + }, + "JSONStream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", + "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "dev": true, + "requires": { + "jsonparse": "1.3.1", + "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + } + }, + "JSV": { + "version": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", + "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", + "dev": true + }, + "abbrev": { + "version": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "dev": true, + "requires": { + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + }, + "adm-zip": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", + "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=", + "dev": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "agent-base": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", + "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", + "dev": true, + "requires": { + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "semver": "5.0.3" + }, + "dependencies": { + "semver": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", + "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", + "dev": true + } + } + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + }, + "dependencies": { + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + } + } + }, + "align-text": { + "version": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", + "longest": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + } + }, + "alter": { + "version": "https://registry.npmjs.org/alter/-/alter-0.2.0.tgz", + "integrity": "sha1-x1iICGF1cgNKrmJICvJrHU0cs80=", + "dev": true, + "requires": { + "stable": "https://registry.npmjs.org/stable/-/stable-0.1.5.tgz" + } + }, + "amdefine": { + "version": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-regex": { + "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", + "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=", + "dev": true + }, + "ansi-styles": { + "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz" + } + }, + "aproba": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz", + "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==", + "dev": true + }, + "archiver": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", + "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=", + "dev": true, + "requires": { + "archiver-utils": "1.3.0", + "async": "2.5.0", + "buffer-crc32": "0.2.13", + "glob": "7.1.2", + "lodash": "4.17.4", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "tar-stream": "1.5.4", + "walkdir": "0.0.11", + "zip-stream": "1.2.0" + }, + "dependencies": { + "async": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "3.0.4", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "archiver-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", + "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", + "dev": true, + "requires": { + "glob": "7.1.2", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "lazystream": "1.0.0", + "lodash": "4.17.4", + "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "3.0.4", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "archy": { + "version": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + } + }, + "argparse": { + "version": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + } + }, + "arr-diff": { + "version": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz" + } + }, + "arr-flatten": { + "version": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz", + "integrity": "sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=", + "dev": true + }, + "array-differ": { + "version": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "array-find-index": { + "version": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + } + }, + "array-uniq": { + "version": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "dev": true + }, + "asn1": { + "version": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "asn1.js": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", + "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimalistic-assert": "1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "ast-traverse": { + "version": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", + "integrity": "sha1-ac8rg4bxnc2hux4F1o/jWdiJfeY=", + "dev": true + }, + "ast-types": { + "version": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.2.tgz", + "integrity": "sha1-LMGZedFcZVEIv1ZTI7jn7jh1H2s=", + "dev": true + }, + "astw": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", + "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", + "dev": true, + "requires": { + "acorn": "4.0.13" + } + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "asynckit": { + "version": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz", + "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M=", + "dev": true + }, + "aws-sign2": { + "version": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", + "integrity": "sha1-Cin/t5wxyecS7rCH6OemS0pW11U=", + "dev": true + }, + "babel-core": { + "version": "https://registry.npmjs.org/babel-core/-/babel-core-5.8.38.tgz", + "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", + "dev": true, + "requires": { + "babel-plugin-constant-folding": "https://registry.npmjs.org/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz", + "babel-plugin-dead-code-elimination": "https://registry.npmjs.org/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz", + "babel-plugin-eval": "https://registry.npmjs.org/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz", + "babel-plugin-inline-environment-variables": "https://registry.npmjs.org/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz", + "babel-plugin-jscript": "https://registry.npmjs.org/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz", + "babel-plugin-member-expression-literals": "https://registry.npmjs.org/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz", + "babel-plugin-property-literals": "https://registry.npmjs.org/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz", + "babel-plugin-proto-to-assign": "https://registry.npmjs.org/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz", + "babel-plugin-react-constant-elements": "https://registry.npmjs.org/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz", + "babel-plugin-react-display-name": "https://registry.npmjs.org/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz", + "babel-plugin-remove-console": "https://registry.npmjs.org/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz", + "babel-plugin-remove-debugger": "https://registry.npmjs.org/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz", + "babel-plugin-runtime": "https://registry.npmjs.org/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz", + "babel-plugin-undeclared-variables-check": "https://registry.npmjs.org/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz", + "babel-plugin-undefined-to-void": "https://registry.npmjs.org/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz", + "babylon": "https://registry.npmjs.org/babylon/-/babylon-5.8.38.tgz", + "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "convert-source-map": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "core-js": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", + "detect-indent": "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "fs-readdir-recursive": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz", + "globals": "https://registry.npmjs.org/globals/-/globals-6.4.1.tgz", + "home-or-tmp": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-1.0.0.tgz", + "is-integer": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.6.tgz", + "js-tokens": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.1.tgz", + "json5": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "output-file-sync": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "path-exists": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "private": "https://registry.npmjs.org/private/-/private-0.1.6.tgz", + "regenerator": "https://registry.npmjs.org/regenerator/-/regenerator-0.8.40.tgz", + "regexpu": "https://registry.npmjs.org/regexpu/-/regexpu-1.3.0.tgz", + "repeating": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", + "shebang-regex": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "slash": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "source-map-support": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", + "to-fast-properties": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.2.tgz", + "trim-right": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "try-resolve": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz" + }, + "dependencies": { + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true, + "requires": { + "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" + } + }, + "path-exists": { + "version": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz", + "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", + "dev": true + }, + "repeating": { + "version": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", + "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", + "dev": true, + "requires": { + "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz" + } + } + } + }, + "babel-jscs": { + "version": "https://registry.npmjs.org/babel-jscs/-/babel-jscs-2.0.5.tgz", + "integrity": "sha1-CjRwRrSBRay8pW6MjtX3NrxU+dA=", + "dev": true, + "requires": { + "babel-core": "https://registry.npmjs.org/babel-core/-/babel-core-5.8.38.tgz", + "lodash.assign": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz" + } + }, + "babel-plugin-constant-folding": { + "version": "https://registry.npmjs.org/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz", + "integrity": "sha1-g2HTZMmORJw2kr26Ue/whEKQqo4=", + "dev": true + }, + "babel-plugin-dead-code-elimination": { + "version": "https://registry.npmjs.org/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz", + "integrity": "sha1-X3xFEnTc18zNv7s+C4XdKBIfD2U=", + "dev": true + }, + "babel-plugin-eval": { + "version": "https://registry.npmjs.org/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz", + "integrity": "sha1-ovrtJc5r5preS/7CY/cBaRlZUNo=", + "dev": true + }, + "babel-plugin-inline-environment-variables": { + "version": "https://registry.npmjs.org/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz", + "integrity": "sha1-H1jOkSB61qgmqL9kX6/mj/X+P/4=", + "dev": true + }, + "babel-plugin-jscript": { + "version": "https://registry.npmjs.org/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz", + "integrity": "sha1-jzQsOCduh6R9X6CovT1etsytj8w=", + "dev": true + }, + "babel-plugin-member-expression-literals": { + "version": "https://registry.npmjs.org/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz", + "integrity": "sha1-zF7bD6qNyScXDnTW0cAkQAIWJNM=", + "dev": true + }, + "babel-plugin-property-literals": { + "version": "https://registry.npmjs.org/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz", + "integrity": "sha1-AlIwGQAZKYCxwRjv6kjOk6q4MzY=", + "dev": true + }, + "babel-plugin-proto-to-assign": { + "version": "https://registry.npmjs.org/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz", + "integrity": "sha1-xJ56/QL1d7xNoF6i3wAiUM980SM=", + "dev": true, + "requires": { + "lodash": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz" + }, + "dependencies": { + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "babel-plugin-react-constant-elements": { + "version": "https://registry.npmjs.org/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz", + "integrity": "sha1-lGc26DeEKcvDSdz/YvUcFDs041o=", + "dev": true + }, + "babel-plugin-react-display-name": { + "version": "https://registry.npmjs.org/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz", + "integrity": "sha1-dU/jiSboQkpOexWrbqYTne4FFPw=", + "dev": true + }, + "babel-plugin-remove-console": { + "version": "https://registry.npmjs.org/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz", + "integrity": "sha1-2PJFVsOgUAXUKqqv0neH9T/wE6c=", + "dev": true + }, + "babel-plugin-remove-debugger": { + "version": "https://registry.npmjs.org/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz", + "integrity": "sha1-/S6jzWGkKK0fO5yJiC/0KT6MFMc=", + "dev": true + }, + "babel-plugin-runtime": { + "version": "https://registry.npmjs.org/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz", + "integrity": "sha1-v3x9lm3Vbs1cF/ocslPJrLflSq8=", + "dev": true + }, + "babel-plugin-undeclared-variables-check": { + "version": "https://registry.npmjs.org/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz", + "integrity": "sha1-XPGqU52BP/ZOmWQSkK9iCWX2Xe4=", + "dev": true, + "requires": { + "leven": "https://registry.npmjs.org/leven/-/leven-1.0.2.tgz" + } + }, + "babel-plugin-undefined-to-void": { + "version": "https://registry.npmjs.org/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz", + "integrity": "sha1-f1eO+LeN+uYAM4XYQXph7aBuL4E=", + "dev": true + }, + "babylon": { + "version": "https://registry.npmjs.org/babylon/-/babylon-5.8.38.tgz", + "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz", + "integrity": "sha1-PKdrhSQccXC/fZcD57mqdGMAQNQ=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + } + }, + "beeper": { + "version": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "binary-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.9.0.tgz", + "integrity": "sha1-ZlBsFs5vTWkopbPNajPKQelB43s=", + "dev": true + }, + "bl": { + "version": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", + "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz" + }, + "dependencies": { + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + } + } + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "bluebird": { + "version": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body-parser": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", + "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", + "dev": true, + "requires": { + "bytes": "2.4.0", + "content-type": "1.0.2", + "debug": "2.6.7", + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "http-errors": "1.6.2", + "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "on-finished": "2.3.0", + "qs": "6.4.0", + "raw-body": "2.2.0", + "type-is": "1.6.15" + }, + "dependencies": { + "debug": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", + "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + } + } + }, + "boom": { + "version": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" + } + }, + "brace-expansion": { + "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", + "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=", + "dev": true, + "requires": { + "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + }, + "braces": { + "version": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "preserve": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz" + } + }, + "breakable": { + "version": "https://registry.npmjs.org/breakable/-/breakable-1.0.0.tgz", + "integrity": "sha1-eEp5eRWjjq0nutRWtVcstLuqeME=", + "dev": true + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-pack": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.2.tgz", + "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", + "dev": true, + "requires": { + "JSONStream": "1.3.1", + "combine-source-map": "0.7.2", + "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "umd": "3.0.1" + } + }, + "browser-resolve": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", + "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browserify": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-13.3.0.tgz", + "integrity": "sha1-tanJAgJD8McORnW+yCI7xifkFc4=", + "dev": true, + "requires": { + "JSONStream": "1.3.1", + "assert": "1.4.1", + "browser-pack": "6.0.2", + "browser-resolve": "1.11.2", + "browserify-zlib": "0.1.4", + "buffer": "4.9.1", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "console-browserify": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.11.1", + "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "deps-sort": "2.0.0", + "domain-browser": "1.1.7", + "duplexer2": "0.1.4", + "events": "1.1.1", + "glob": "7.1.2", + "has": "1.0.1", + "htmlescape": "1.1.1", + "https-browserify": "0.0.1", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "insert-module-globals": "7.0.1", + "labeled-stream-splicer": "2.0.0", + "module-deps": "4.1.1", + "os-browserify": "0.1.2", + "parents": "1.0.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "querystring-es3": "0.2.1", + "read-only-stream": "2.0.0", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", + "shasum": "1.0.2", + "shell-quote": "1.6.1", + "stream-browserify": "2.0.1", + "stream-http": "2.7.2", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "subarg": "1.0.0", + "syntax-error": "1.3.0", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "timers-browserify": "1.4.2", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "3.0.4", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "browserify-aes": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", + "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.0", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true, + "requires": { + "browserify-aes": "1.0.6", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.0" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.5" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "parse-asn1": "5.1.0" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true, + "requires": { + "pako": "0.2.9" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.2.1", + "ieee754": "1.1.8", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-shims": { + "version": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", + "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", + "dev": true + }, + "cached-path-relative": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", + "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", + "dev": true + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "map-obj": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + } + }, + "caseless": { + "version": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true + }, + "center-align": { + "version": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "lazy-cache": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz" + } + }, + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.1.2", + "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "is-binary-path": "1.0.1", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "readdirp": "2.1.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "safe-buffer": "5.1.1" + } + }, + "cli": { + "version": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", + "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", + "dev": true, + "requires": { + "exit": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz" + }, + "dependencies": { + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + } + } + }, + "cli-table": { + "version": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "dev": true, + "requires": { + "colors": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz" + }, + "dependencies": { + "colors": { + "version": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true + } + } + }, + "cliui": { + "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "right-align": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" + } + }, + "clone": { + "version": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "dev": true + }, + "clone-buffer": { + "version": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-stats": { + "version": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "cloneable-readable": { + "version": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", + "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "colors": { + "version": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combine-lists": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "dev": true, + "requires": { + "lodash": "4.17.4" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "combine-source-map": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", + "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", + "dev": true, + "requires": { + "convert-source-map": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "inline-source-map": "0.6.2", + "lodash.memoize": "3.0.4", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" + } + }, + "combined-stream": { + "version": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + } + }, + "commander": { + "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" + } + }, + "comment-parser": { + "version": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.3.1.tgz", + "integrity": "sha1-/WV6rIwUktMIyaYQD8m0nSQ1q6E=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + } + }, + "commoner": { + "version": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", + "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", + "dev": true, + "requires": { + "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "detective": "https://registry.npmjs.org/detective/-/detective-4.3.2.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "private": "https://registry.npmjs.org/private/-/private-0.1.6.tgz", + "q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "recast": "https://registry.npmjs.org/recast/-/recast-0.11.18.tgz" + }, + "dependencies": { + "esprima": { + "version": "https://registry.npmjs.org/esprima/-/esprima-3.1.2.tgz", + "integrity": "sha1-lUtdGTIcpDYJL6kPBtZ5hTH+gYQ=", + "dev": true + }, + "recast": { + "version": "https://registry.npmjs.org/recast/-/recast-0.11.18.tgz", + "integrity": "sha1-B69iV8p2mGiBUglAHU1g7vG1uUc=", + "dev": true, + "requires": { + "ast-types": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.2.tgz", + "esprima": "https://registry.npmjs.org/esprima/-/esprima-3.1.2.tgz", + "private": "https://registry.npmjs.org/private/-/private-0.1.6.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" + } + } + } + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compress-commons": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.0.tgz", + "integrity": "sha1-WFhwku8g03y1i68AARLJJ4/3O58=", + "dev": true, + "requires": { + "buffer-crc32": "0.2.13", + "crc32-stream": "2.0.0", + "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + } + }, + "concat-map": { + "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + } + } + }, + "concat-with-sourcemaps": { + "version": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.4.tgz", + "integrity": "sha1-9Vs74q60dgGxCi1SWcz7cP0vHdY=", + "dev": true, + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" + } + }, + "config-chain": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", + "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", + "dev": true, + "requires": { + "ini": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "proto-list": "1.2.4" + } + }, + "connect": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.3.tgz", + "integrity": "sha512-GLSZqgjVxPvGYVD/2vz//gS201MEXk4b7t3nHV6OVnTdDNWi/Gm7Rpxs/ybvljPWvULys/wrzIV3jB3YvEc3nQ==", + "dev": true, + "requires": { + "debug": "2.6.8", + "finalhandler": "1.0.4", + "parseurl": "1.3.1", + "utils-merge": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "console-browserify": { + "version": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-type": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=", + "dev": true + }, + "convert-source-map": { + "version": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "core-js": { + "version": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "dev": true + }, + "core-util-is": { + "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "coveralls": { + "version": "https://registry.npmjs.org/coveralls/-/coveralls-2.11.15.tgz", + "integrity": "sha1-N9NHQ2nWbBTzP6c6nSXO5uCZ/KA=", + "dev": true, + "requires": { + "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", + "lcov-parse": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", + "log-driver": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "request": "https://registry.npmjs.org/request/-/request-2.75.0.tgz" + } + }, + "crc": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", + "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=", + "dev": true + }, + "crc32-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", + "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", + "dev": true, + "requires": { + "crc": "3.4.4", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + } + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "ripemd160": "2.0.1", + "sha.js": "2.4.8" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.8" + } + }, + "cross-env": { + "version": "https://registry.npmjs.org/cross-env/-/cross-env-3.1.3.tgz", + "integrity": "sha1-WM2CMYCPUAiXCLCR9903J1qOgVQ=", + "dev": true, + "requires": { + "cross-spawn": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz" + } + }, + "cross-spawn": { + "version": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", + "which": "https://registry.npmjs.org/which/-/which-1.2.12.tgz" + }, + "dependencies": { + "lru-cache": { + "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", + "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", + "dev": true, + "requires": { + "pseudomap": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "yallist": "https://registry.npmjs.org/yallist/-/yallist-2.0.0.tgz" + } + } + } + }, + "cryptiles": { + "version": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz" + } + }, + "crypto-browserify": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", + "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", + "dev": true, + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "pbkdf2": "3.0.13", + "public-encrypt": "4.0.0", + "randombytes": "2.0.5" + } + }, + "css": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz", + "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "source-map": "0.1.43", + "source-map-resolve": "0.3.1", + "urix": "0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + } + } + } + }, + "ctype": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", + "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", + "dev": true + }, + "currently-unhandled": { + "version": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" + } + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "cycle": { + "version": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", + "dev": true + }, + "d": { + "version": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", + "integrity": "sha1-2hhMU10Y2O57oqoim5FACfrhEwk=", + "dev": true, + "requires": { + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz" + } + }, + "dashdash": { + "version": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + }, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "date-now": { + "version": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "dateformat": { + "version": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "meow": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" + } + }, + "deap": { + "version": "https://registry.npmjs.org/deap/-/deap-1.0.0.tgz", + "integrity": "sha1-sUi/gkMKJ2mbdIOgPra2dYW/yIg=", + "dev": true + }, + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", + "integrity": "sha1-wE0XplTpICRkgD8JYVP3Cm8x9L4=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + }, + "debug-fabulous": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-0.0.4.tgz", + "integrity": "sha1-+gccXYdIRoVCSAdCHKSxawsaB2M=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", + "lazy-debug-legacy": "0.0.1", + "object-assign": "4.1.0" + }, + "dependencies": { + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "decamelize": { + "version": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-equal": { + "version": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "defaults": { + "version": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz" + } + }, + "defined": { + "version": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "defs": { + "version": "https://registry.npmjs.org/defs/-/defs-1.1.1.tgz", + "integrity": "sha1-siYJ8sehG6ej2xFoBcE5scr/qdI=", + "dev": true, + "requires": { + "alter": "https://registry.npmjs.org/alter/-/alter-0.2.0.tgz", + "ast-traverse": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", + "breakable": "https://registry.npmjs.org/breakable/-/breakable-1.0.0.tgz", + "esprima-fb": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", + "simple-fmt": "https://registry.npmjs.org/simple-fmt/-/simple-fmt-0.1.0.tgz", + "simple-is": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz", + "stringmap": "https://registry.npmjs.org/stringmap/-/stringmap-0.2.2.tgz", + "stringset": "https://registry.npmjs.org/stringset/-/stringset-0.2.1.tgz", + "tryor": "https://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz", + "yargs": "https://registry.npmjs.org/yargs/-/yargs-3.27.0.tgz" + }, + "dependencies": { + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "esprima-fb": { + "version": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", + "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", + "dev": true + }, + "window-size": { + "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", + "dev": true + }, + "yargs": { + "version": "https://registry.npmjs.org/yargs/-/yargs-3.27.0.tgz", + "integrity": "sha1-ISBUaTFuk5Ex1Z8toMbX+YIh6kA=", + "dev": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "cliui": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "os-locale": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "window-size": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "y18n": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz" + } + } + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "p-map": "1.1.1", + "pify": "3.0.0", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", + "dev": true + }, + "deprecated": { + "version": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", + "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", + "dev": true + }, + "deps-sort": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", + "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", + "dev": true, + "requires": { + "JSONStream": "1.3.1", + "shasum": "1.0.2", + "subarg": "1.0.0", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz" + } + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimalistic-assert": "1.0.0" + } + }, + "detect-file": { + "version": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", + "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", + "dev": true, + "requires": { + "fs-exists-sync": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz" + } + }, + "detect-indent": { + "version": "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz", + "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", + "dev": true, + "requires": { + "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "repeating": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz" + }, + "dependencies": { + "repeating": { + "version": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", + "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", + "dev": true, + "requires": { + "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz" + } + } + } + }, + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "dev": true + }, + "detective": { + "version": "https://registry.npmjs.org/detective/-/detective-4.3.2.tgz", + "integrity": "sha1-d2l+LnlHrD/nyOJqbW8RUjWvqRw=", + "dev": true, + "requires": { + "acorn": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz" + }, + "dependencies": { + "acorn": { + "version": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.0", + "randombytes": "2.0.5" + } + }, + "docset-generator": { + "version": "https://registry.npmjs.org/docset-generator/-/docset-generator-0.2.2.tgz", + "integrity": "sha1-hCdOTIbxpCXIdDvmumMCRpoChHg=", + "dev": true, + "requires": { + "extended-fs": "https://registry.npmjs.org/extended-fs/-/extended-fs-0.3.3.tgz", + "sequelize": "https://registry.npmjs.org/sequelize/-/sequelize-3.27.0.tgz", + "sqlite3": "https://registry.npmjs.org/sqlite3/-/sqlite3-3.1.8.tgz" + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "1.0.1", + "ent": "2.2.0", + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "void-elements": "2.0.1" + } + }, + "dom-serializer": { + "version": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz" + }, + "dependencies": { + "domelementtype": { + "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + }, + "entities": { + "version": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, + "domelementtype": { + "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dev": true, + "requires": { + "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz" + } + }, + "domutils": { + "version": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz" + } + }, + "dottie": { + "version": "https://registry.npmjs.org/dottie/-/dottie-1.1.1.tgz", + "integrity": "sha1-RcKj9IvWUo7u0memmoSOqspvqmo=", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + } + }, + "ecc-jsbn": { + "version": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "encodeurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", + "dev": true + }, + "end-of-stream": { + "version": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", + "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.3.3.tgz" + }, + "dependencies": { + "once": { + "version": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "requires": { + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + } + } + }, + "engine.io": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", + "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "ws": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + } + } + }, + "engine.io-client": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", + "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "1.1.0", + "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.2", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + } + } + }, + "engine.io-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.7", + "wtf-8": "1.0.0" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "entities": { + "version": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", + "dev": true + }, + "error-ex": { + "version": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", + "integrity": "sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=", + "dev": true, + "requires": { + "is-arrayish": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + } + }, + "error-stack-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.1.tgz", + "integrity": "sha1-oyArj7AxFKqbQKDjZp5IsrZaAQo=", + "requires": { + "stackframe": "1.0.4" + } + }, + "es5-ext": { + "version": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz", + "integrity": "sha1-qoRkHU23a2Krul5F/YBey6sUAEc=", + "dev": true, + "requires": { + "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz" + } + }, + "es6-iterator": { + "version": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz", + "integrity": "sha1-vZaFZ9YWNeM8C4BydhPJy0sJa6w=", + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz" + } + }, + "es6-map": { + "version": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.4.tgz", + "integrity": "sha1-o0sUe+IkdzpNfagHJ5TO+jYyuJc=", + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz", + "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz", + "es6-set": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.4.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz", + "event-emitter": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.4.tgz" + } + }, + "es6-promise": { + "version": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", + "dev": true + }, + "es6-set": { + "version": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.4.tgz", + "integrity": "sha1-lRa2dhwpZLkv9HlFYjOiR9xwfOg=", + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz", + "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz", + "event-emitter": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.4.tgz" + } + }, + "es6-symbol": { + "version": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz", + "integrity": "sha1-lEgcZV56fK2C66gy2X1UM0ltf/o=", + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz" + } + }, + "es6-weak-map": { + "version": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.1.tgz", + "integrity": "sha1-DSu9iCfrX7S6j5f7/qUNQ9sh6oE=", + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz", + "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "estraverse": "1.9.3", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "optionator": "0.8.2", + "source-map": "0.2.0" + }, + "dependencies": { + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + } + } + } + }, + "escope": { + "version": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.4.tgz", + "es6-weak-map": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.1.tgz", + "esrecurse": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz", + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" + } + }, + "esprima": { + "version": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esrecurse": { + "version": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz", + "integrity": "sha1-RxO2U2rffyrE8yfVWed1a/9kgiA=", + "dev": true, + "requires": { + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz" + }, + "dependencies": { + "estraverse": { + "version": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz", + "integrity": "sha1-9srKcokzqFDvkGYdDheYK6RxEaI=", + "dev": true + }, + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "estraverse": { + "version": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "event-emitter": { + "version": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.4.tgz", + "integrity": "sha1-jWPd+0z+H647MsomXExyAiIIC7U=", + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz" + } + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", + "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", + "dev": true, + "requires": { + "create-hash": "1.1.3" + } + }, + "exit": { + "version": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-braces": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "requires": { + "array-slice": "0.2.3", + "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "braces": "0.1.5" + }, + "dependencies": { + "braces": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "dev": true, + "requires": { + "expand-range": "0.1.1" + } + }, + "expand-range": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "dev": true, + "requires": { + "is-number": "0.1.1", + "repeat-string": "0.2.2" + } + }, + "is-number": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true + }, + "repeat-string": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true + } + } + }, + "expand-brackets": { + "version": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz" + } + }, + "expand-range": { + "version": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz" + } + }, + "expand-tilde": { + "version": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", + "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", + "dev": true, + "requires": { + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" + } + }, + "extend": { + "version": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=", + "dev": true + }, + "extended-fs": { + "version": "https://registry.npmjs.org/extended-fs/-/extended-fs-0.3.3.tgz", + "integrity": "sha1-i6esNx7Gb/HT1Y17F798qYInmZw=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "q": "https://registry.npmjs.org/q/-/q-0.9.7.tgz" + }, + "dependencies": { + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=", + "dev": true + }, + "q": { + "version": "https://registry.npmjs.org/q/-/q-0.9.7.tgz", + "integrity": "sha1-TeLmyzspCIyeTLwDv51C+5bOL3U=", + "dev": true + } + } + }, + "extglob": { + "version": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + }, + "extsprintf": { + "version": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", + "dev": true + }, + "eyes": { + "version": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", + "dev": true + }, + "fancy-log": { + "version": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.2.0.tgz", + "integrity": "sha1-1aUbU+mrIsoH1VjytnrlX9tfy9g=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "time-stamp": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.0.1.tgz" + } + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "filename-regex": { + "version": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", + "integrity": "sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=", + "dev": true + }, + "fill-range": { + "version": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "isobject": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "randomatic": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", + "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + } + }, + "finalhandler": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.4.tgz", + "integrity": "sha512-16l/r8RgzlXKmFOhZpHBztvye+lAhC5SU7hXavnerC9UfZqZxxXl3BzL8MhffPT3kF61lj9Oav2LKEzh0ei7tg==", + "dev": true, + "requires": { + "debug": "2.6.8", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.1", + "statuses": "1.3.1", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-index": { + "version": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", + "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", + "dev": true + }, + "find-up": { + "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "findup-sync": { + "version": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", + "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", + "dev": true, + "requires": { + "detect-file": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "micromatch": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "resolve-dir": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz" + } + }, + "fined": { + "version": "https://registry.npmjs.org/fined/-/fined-1.0.2.tgz", + "integrity": "sha1-WyhCS3YNdZiWC374SA3/itNmDpc=", + "dev": true, + "requires": { + "expand-tilde": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", + "lodash.assignwith": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", + "lodash.isempty": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "lodash.isplainobject": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "lodash.isstring": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "lodash.pick": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "parse-filepath": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz" + } + }, + "first-chunk-stream": { + "version": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "dev": true + }, + "flagged-respawn": { + "version": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", + "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", + "dev": true + }, + "for-in": { + "version": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz", + "integrity": "sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=", + "dev": true + }, + "for-own": { + "version": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", + "integrity": "sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=", + "dev": true, + "requires": { + "for-in": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz" + } + }, + "forever-agent": { + "version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz", + "integrity": "sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU=", + "dev": true, + "requires": { + "asynckit": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz" + } + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "1.0.0" + } + }, + "fs-exists-sync": { + "version": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", + "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", + "dev": true + }, + "fs-readdir-recursive": { + "version": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz", + "integrity": "sha1-MVtPuMHKW4xH3v7zGdBz2tNWgFk=", + "dev": true + }, + "fs.realpath": { + "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "dev": true, + "optional": true, + "requires": { + "nan": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", + "node-pre-gyp": "0.6.36" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.36", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", + "dev": true, + "requires": { + "fstream": "1.0.11", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz" + } + }, + "function-bind": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", + "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "1.1.2", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "string-width": "1.0.2", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "wide-align": "1.1.2" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + } + } + }, + "gaze": { + "version": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", + "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", + "dev": true, + "requires": { + "globule": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz" + } + }, + "generate-function": { + "version": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" + } + }, + "generic-pool": { + "version": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.2.tgz", + "integrity": "sha1-iGvFvwvrfblugby7oHiBjeWmJoM=", + "dev": true + }, + "get-stdin": { + "version": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "getpass": { + "version": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", + "integrity": "sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + }, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "glob-base": { + "version": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + } + }, + "glob-parent": { + "version": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + } + }, + "glob-stream": { + "version": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", + "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", + "glob2base": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "ordered-read-streams": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "unique-stream": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz" + }, + "dependencies": { + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", + "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", + "dev": true, + "requires": { + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + } + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true, + "requires": { + "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" + } + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + } + } + }, + "glob-watcher": { + "version": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", + "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", + "dev": true, + "requires": { + "gaze": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz" + } + }, + "glob2base": { + "version": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", + "dev": true, + "requires": { + "find-index": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz" + } + }, + "global-modules": { + "version": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", + "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", + "dev": true, + "requires": { + "global-prefix": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", + "is-windows": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz" + } + }, + "global-prefix": { + "version": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", + "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", + "dev": true, + "requires": { + "homedir-polyfill": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "ini": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "is-windows": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "which": "https://registry.npmjs.org/which/-/which-1.2.12.tgz" + } + }, + "globals": { + "version": "https://registry.npmjs.org/globals/-/globals-6.4.1.tgz", + "integrity": "sha1-hJgDKzttHMge68X3lpDY/in6v08=", + "dev": true + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "3.0.4", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + } + } + }, + "globule": { + "version": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", + "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz" + }, + "dependencies": { + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz" + } + }, + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true + }, + "inherits": { + "version": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true, + "requires": { + "lru-cache": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "sigmund": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" + } + } + } + }, + "glogg": { + "version": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", + "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", + "dev": true, + "requires": { + "sparkles": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz" + } + }, + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "gulp": { + "version": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", + "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", + "dev": true, + "requires": { + "archy": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "deprecated": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", + "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", + "interpret": "https://registry.npmjs.org/interpret/-/interpret-1.0.1.tgz", + "liftoff": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "orchestrator": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", + "pretty-hrtime": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "tildify": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", + "v8flags": "https://registry.npmjs.org/v8flags/-/v8flags-2.0.11.tgz", + "vinyl-fs": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz" + } + }, + "gulp-concat": { + "version": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", + "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", + "dev": true, + "requires": { + "concat-with-sourcemaps": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.4.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-2.0.1.tgz" + }, + "dependencies": { + "clone-stats": { + "version": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "replace-ext": { + "version": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-2.0.1.tgz", + "integrity": "sha1-HDtJMeesTB7+50PzuRp0wJRAe7Y=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "clone-buffer": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "cloneable-readable": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", + "is-stream": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "remove-trailing-separator": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz" + } + } + } + }, + "gulp-coveralls": { + "version": "https://registry.npmjs.org/gulp-coveralls/-/gulp-coveralls-0.1.4.tgz", + "integrity": "sha1-L2IKyN9i0LhrS73mTaNnzEGhkMk=", + "dev": true, + "requires": { + "coveralls": "https://registry.npmjs.org/coveralls/-/coveralls-2.11.15.tgz", + "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz" + }, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", + "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + } + } + }, + "gulp-jshint": { + "version": "https://registry.npmjs.org/gulp-jshint/-/gulp-jshint-1.12.0.tgz", + "integrity": "sha1-I/vRuv3W+/5h6mRmenSAmpYdA94=", + "dev": true, + "requires": { + "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", + "jshint": "https://registry.npmjs.org/jshint/-/jshint-2.9.4.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "rcloader": "https://registry.npmjs.org/rcloader/-/rcloader-0.1.2.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz" + }, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true, + "requires": { + "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" + } + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + } + } + }, + "gulp-rename": { + "version": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", + "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=", + "dev": true + }, + "gulp-sourcemaps": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.12.0.tgz", + "integrity": "sha1-eG+XyUoPloSSRl1wVY4EJCxnlZg=", + "dev": true, + "requires": { + "@gulp-sourcemaps/map-sources": "1.0.0", + "acorn": "4.0.13", + "convert-source-map": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "css": "2.2.1", + "debug-fabulous": "0.0.4", + "detect-newline": "2.1.0", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "vinyl": "1.2.0" + }, + "dependencies": { + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz" + } + } + } + }, + "gulp-uglify": { + "version": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-1.5.4.tgz", + "integrity": "sha1-UkeI2HZm0J+dDCH7IXf5ADmmWMk=", + "dev": true, + "requires": { + "deap": "https://registry.npmjs.org/deap/-/deap-1.0.0.tgz", + "fancy-log": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.2.0.tgz", + "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", + "isobject": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "uglify-js": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", + "uglify-save-license": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz", + "vinyl-sourcemaps-apply": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz" + } + }, + "gulp-util": { + "version": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", + "integrity": "sha1-eJJcS4+LSQBawBoBHFV+YhiUHLs=", + "dev": true, + "requires": { + "array-differ": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "array-uniq": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "beeper": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "dateformat": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "fancy-log": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.2.0.tgz", + "gulplog": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "has-gulplog": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "lodash._reescape": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "lodash._reevaluate": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "lodash._reinterpolate": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "lodash.template": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "multipipe": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz" + } + }, + "gulplog": { + "version": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "requires": { + "glogg": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz" + } + }, + "handlebars": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", + "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + } + } + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true + }, + "har-validator": { + "version": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "is-my-json-valid": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.0" + } + }, + "has-ansi": { + "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" + } + }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "has-color": { + "version": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "dev": true + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-gulplog": { + "version": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true, + "requires": { + "sparkles": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimalistic-assert": "1.0.0" + } + }, + "hawk": { + "version": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "sntp": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "home-or-tmp": { + "version": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-1.0.0.tgz", + "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", + "dev": true, + "requires": { + "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "user-home": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz" + } + }, + "homedir-polyfill": { + "version": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" + } + }, + "hosted-git-info": { + "version": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", + "integrity": "sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=", + "dev": true + }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "dev": true + }, + "htmlparser2": { + "version": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "dev": true, + "requires": { + "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "domhandler": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "domutils": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "entities": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + }, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + } + } + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } + }, + "http-signature": { + "version": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "jsprim": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", + "sshpk": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz" + } + }, + "https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "dev": true + }, + "https-proxy-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", + "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", + "dev": true, + "requires": { + "agent-base": "2.1.1", + "debug": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz" + } + }, + "i": { + "version": "https://registry.npmjs.org/i/-/i-0.3.5.tgz", + "integrity": "sha1-HSuFQVjsgWkRPGy39raAHpniEdU=", + "dev": true + }, + "iconv-lite": { + "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", + "dev": true + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, + "indent-string": { + "version": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz" + } + }, + "indexof": { + "version": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflection": { + "version": "https://registry.npmjs.org/inflection/-/inflection-1.10.0.tgz", + "integrity": "sha1-W//LEZetPoEFD44X4hZoCH7p6y8=", + "dev": true + }, + "inflight": { + "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + }, + "inherit": { + "version": "https://registry.npmjs.org/inherit/-/inherit-2.2.6.tgz", + "integrity": "sha1-8WFLBshUToEo5CKchjR9tzrZeI0=", + "dev": true + }, + "inherits": { + "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true + }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dev": true, + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" + } + }, + "insert-module-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", + "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", + "dev": true, + "requires": { + "JSONStream": "1.3.1", + "combine-source-map": "0.7.2", + "concat-stream": "1.5.2", + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", + "lexical-scope": "1.2.0", + "process": "0.11.10", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "interpret": { + "version": "https://registry.npmjs.org/interpret/-/interpret-1.0.1.tgz", + "integrity": "sha1-1Xn7f2k7hYAElHrzn6DbSfeVYCw=", + "dev": true + }, + "invert-kv": { + "version": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-absolute": { + "version": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", + "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", + "dev": true, + "requires": { + "is-relative": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", + "is-windows": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz" + } + }, + "is-arrayish": { + "version": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.9.0" + } + }, + "is-buffer": { + "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", + "integrity": "sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=", + "dev": true + }, + "is-builtin-module": { + "version": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" + } + }, + "is-dotfile": { + "version": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", + "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=", + "dev": true + }, + "is-equal-shallow": { + "version": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" + } + }, + "is-extendable": { + "version": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + } + }, + "is-glob": { + "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + }, + "is-integer": { + "version": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.6.tgz", + "integrity": "sha1-UnOBn62ogNEj4awAqTjnFy3Y2V4=", + "dev": true, + "requires": { + "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz" + } + }, + "is-my-json-valid": { + "version": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", + "integrity": "sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=", + "dev": true, + "requires": { + "generate-function": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "generate-object-property": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "jsonpointer": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "is-number": { + "version": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz" + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-posix-bracket": { + "version": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-property": { + "version": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-relative": { + "version": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", + "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", + "dev": true, + "requires": { + "is-unc-path": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz" + } + }, + "is-stream": { + "version": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unc-path": { + "version": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", + "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", + "dev": true, + "requires": { + "unc-path-regex": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz" + } + }, + "is-utf8": { + "version": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", + "dev": true + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", + "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", + "dev": true + }, + "isexe": { + "version": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", + "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=", + "dev": true + }, + "isobject": { + "version": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + } + }, + "isstream": { + "version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "requires": { + "abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "handlebars": "4.0.10", + "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "nopt": "3.0.6", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "https://registry.npmjs.org/which/-/which-1.2.12.tgz", + "wordwrap": "1.0.0" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "jasmine": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.7.0.tgz", + "integrity": "sha1-XPC7TllLRgC7QjVWA2YhKsWuobI=", + "dev": true, + "requires": { + "exit": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "glob": "7.1.2", + "jasmine-core": "2.7.0" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "3.0.4", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "jasmine-ajax": { + "version": "https://registry.npmjs.org/jasmine-ajax/-/jasmine-ajax-3.3.1.tgz", + "integrity": "sha1-+MrZ/Unf1E8895jTb06FfRJcdcU=", + "dev": true + }, + "jasmine-core": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.7.0.tgz", + "integrity": "sha1-UP+MT5LY71wLLBuEbdJj7YUVIJE=", + "dev": true + }, + "jodid25519": { + "version": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz" + } + }, + "js-tokens": { + "version": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.1.tgz", + "integrity": "sha1-zENaXIuUrRWst5gxQPyAGCyJrq4=", + "dev": true + }, + "js-yaml": { + "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", + "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", + "dev": true, + "requires": { + "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz" + } + }, + "jsbn": { + "version": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", + "integrity": "sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=", + "dev": true, + "optional": true + }, + "jscs": { + "version": "https://registry.npmjs.org/jscs/-/jscs-2.11.0.tgz", + "integrity": "sha1-bhHvDKqgdzH53MKysn2OzuHdvLY=", + "dev": true, + "requires": { + "babel-jscs": "https://registry.npmjs.org/babel-jscs/-/babel-jscs-2.0.5.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "cli-table": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "escope": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "exit": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "htmlparser2": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.4.6.tgz", + "jscs-jsdoc": "https://registry.npmjs.org/jscs-jsdoc/-/jscs-jsdoc-1.3.2.tgz", + "jscs-preset-wikimedia": "https://registry.npmjs.org/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.0.tgz", + "jsonlint": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.2.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "natural-compare": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.2.2.tgz", + "pathval": "https://registry.npmjs.org/pathval/-/pathval-0.1.1.tgz", + "prompt": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", + "reserved-words": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.1.tgz", + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "strip-json-comments": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "to-double-quotes": "https://registry.npmjs.org/to-double-quotes/-/to-double-quotes-2.0.0.tgz", + "to-single-quotes": "https://registry.npmjs.org/to-single-quotes/-/to-single-quotes-2.0.1.tgz", + "vow": "https://registry.npmjs.org/vow/-/vow-0.4.13.tgz", + "vow-fs": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.6.tgz", + "xmlbuilder": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-3.1.0.tgz" + }, + "dependencies": { + "js-yaml": { + "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.4.6.tgz", + "integrity": "sha1-a+GyP2JJ9T0pM3D9TRqqY84bTrA=", + "dev": true, + "requires": { + "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "inherit": "https://registry.npmjs.org/inherit/-/inherit-2.2.6.tgz" + } + }, + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "jscs-jsdoc": { + "version": "https://registry.npmjs.org/jscs-jsdoc/-/jscs-jsdoc-1.3.2.tgz", + "integrity": "sha1-HyyCtqtLl1JNqVj0a05WLgMF+ac=", + "dev": true, + "requires": { + "comment-parser": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.3.1.tgz", + "jsdoctypeparser": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz" + } + }, + "jscs-preset-wikimedia": { + "version": "https://registry.npmjs.org/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.0.tgz", + "integrity": "sha1-//VjNCA4/C6IJre7cwnDrjQG/H4=", + "dev": true + }, + "jsdoc-dash-template": { + "version": "https://registry.npmjs.org/jsdoc-dash-template/-/jsdoc-dash-template-1.2.0.tgz", + "integrity": "sha1-8iUxyOvERmJ5pxNuVO+SDHKtEOk=", + "dev": true, + "requires": { + "jsdoc-docset": "https://registry.npmjs.org/jsdoc-docset/-/jsdoc-docset-0.2.1.tgz" + } + }, + "jsdoc-docset": { + "version": "https://registry.npmjs.org/jsdoc-docset/-/jsdoc-docset-0.2.1.tgz", + "integrity": "sha1-5XLsy4aj+lYBrnxrtkMBU1MeezU=", + "dev": true, + "requires": { + "docset-generator": "https://registry.npmjs.org/docset-generator/-/docset-generator-0.2.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz" + }, + "dependencies": { + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "jsdoctypeparser": { + "version": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz", + "integrity": "sha1-597cFToRhJ/8UUEUSuhqfvDCU5I=", + "dev": true, + "requires": { + "lodash": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz" + }, + "dependencies": { + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "jsesc": { + "version": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "jshint": { + "version": "https://registry.npmjs.org/jshint/-/jshint-2.9.4.tgz", + "integrity": "sha1-XjupeEjVKQJz21FK7kf+JM9ZKTQ=", + "dev": true, + "requires": { + "cli": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", + "console-browserify": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "exit": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "htmlparser2": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "shelljs": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "strip-json-comments": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz" + }, + "dependencies": { + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", + "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=", + "dev": true + } + } + }, + "json-schema": { + "version": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", + "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=", + "dev": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonlint": { + "version": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.2.tgz", + "integrity": "sha1-VzcEUIX1XrRVxosf9OvAG9UOiDA=", + "dev": true, + "requires": { + "JSV": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", + "nomnom": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsonpointer": { + "version": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz", + "integrity": "sha1-ZmHhYdL8RF8Z+YQwIxNDci4fy9U=", + "dev": true + }, + "jsprim": { + "version": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", + "integrity": "sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=", + "dev": true, + "requires": { + "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "json-schema": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "verror": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz" + } + }, + "karma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.0.tgz", + "integrity": "sha1-b3oaQGRG+i4YfslTmGmPTO5HYmk=", + "dev": true, + "requires": { + "bluebird": "3.5.0", + "body-parser": "1.17.2", + "chokidar": "1.7.0", + "colors": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "combine-lists": "1.0.1", + "connect": "3.6.3", + "core-js": "2.5.0", + "di": "0.0.1", + "dom-serialize": "2.2.1", + "expand-braces": "0.1.2", + "glob": "7.1.2", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "http-proxy": "1.16.2", + "isbinaryfile": "3.0.2", + "lodash": "3.10.1", + "log4js": "0.6.38", + "mime": "1.3.6", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "optimist": "0.6.1", + "qjobs": "1.1.5", + "range-parser": "1.2.0", + "rimraf": "2.6.1", + "safe-buffer": "5.1.1", + "socket.io": "1.7.3", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "tmp": "0.0.31", + "useragent": "2.2.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "bluebird": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + }, + "core-js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz", + "integrity": "sha1-VpwFCRi+ZIazg3VSAorgRmtxcIY=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "3.0.4", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, + "requires": { + "glob": "7.1.2" + } + } + } + }, + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "dev": true, + "requires": { + "fs-access": "1.0.1", + "which": "https://registry.npmjs.org/which/-/which-1.2.12.tgz" + } + }, + "karma-coverage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.1.tgz", + "integrity": "sha1-Wv+LOc9plNwi3kyENix2ABtjfPY=", + "dev": true, + "requires": { + "dateformat": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "istanbul": "0.4.5", + "lodash": "3.10.1", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "karma-firefox-launcher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.0.1.tgz", + "integrity": "sha1-zlj0fCATqIFW1VpdYTN8CZz1u1E=", + "dev": true + }, + "karma-ie-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/karma-ie-launcher/-/karma-ie-launcher-1.0.0.tgz", + "integrity": "sha1-SXmGhCxJAZA0bNifVJTKmDDG1Zw=", + "dev": true, + "requires": { + "lodash": "4.17.4" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "karma-jasmine": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.0.tgz", + "integrity": "sha1-IuTAa/mhguUpTR9wXjczgRuBCs8=", + "dev": true + }, + "karma-jasmine-ajax": { + "version": "https://registry.npmjs.org/karma-jasmine-ajax/-/karma-jasmine-ajax-0.1.13.tgz", + "integrity": "sha1-eLuS2Jb+MqJaGACYxHci4dlgW/w=", + "dev": true, + "requires": { + "jasmine-ajax": "https://registry.npmjs.org/jasmine-ajax/-/jasmine-ajax-3.3.1.tgz" + } + }, + "karma-opera-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/karma-opera-launcher/-/karma-opera-launcher-1.0.0.tgz", + "integrity": "sha1-+lFihTGh0L6EstjcDX7iCfyP+Ro=", + "dev": true + }, + "karma-phantomjs2-launcher": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/karma-phantomjs2-launcher/-/karma-phantomjs2-launcher-0.5.0.tgz", + "integrity": "sha1-X/jI8i0N+OZygoyoeQhiq8Amk0U=", + "dev": true, + "requires": { + "lodash": "3.10.1", + "phantomjs2-ext": "0.2.2" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "karma-safari-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/karma-safari-launcher/-/karma-safari-launcher-1.0.0.tgz", + "integrity": "sha1-lpgqLMR9BmquccVTursoMZEVos4=", + "dev": true + }, + "karma-sauce-launcher": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/karma-sauce-launcher/-/karma-sauce-launcher-1.1.0.tgz", + "integrity": "sha1-PQg89WWdZzarl7zuXYrNhq1SIhI=", + "dev": true, + "requires": { + "q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "sauce-connect-launcher": "0.17.0", + "saucelabs": "1.4.0", + "wd": "1.4.0" + } + }, + "karma-spec-reporter": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.31.tgz", + "integrity": "sha1-SDDccUihVcfXoYbmMjOaDYD63sM=", + "dev": true, + "requires": { + "colors": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz" + } + }, + "kew": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.5.0.tgz", + "integrity": "sha1-7OEctdjQGoH4zoBMjQu6BuayXKI=", + "dev": true + }, + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", + "integrity": "sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz" + } + }, + "labeled-stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", + "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "0.0.1", + "stream-splicer": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "lazy-cache": { + "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lazy-debug-legacy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/lazy-debug-legacy/-/lazy-debug-legacy-0.0.1.tgz", + "integrity": "sha1-U3cWwHduTPeePtG2IfdljCkRsbE=", + "dev": true + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + } + }, + "lcid": { + "version": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz" + } + }, + "lcov-parse": { + "version": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", + "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", + "dev": true + }, + "leven": { + "version": "https://registry.npmjs.org/leven/-/leven-1.0.2.tgz", + "integrity": "sha1-kUS27ryl8dBoAWnxpncNzqYLdcM=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "lexical-scope": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", + "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", + "dev": true, + "requires": { + "astw": "2.2.0" + } + }, + "liftoff": { + "version": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", + "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", + "dev": true, + "requires": { + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "findup-sync": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", + "fined": "https://registry.npmjs.org/fined/-/fined-1.0.2.tgz", + "flagged-respawn": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", + "lodash.isplainobject": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "lodash.isstring": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "lodash.mapvalues": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "rechoir": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz" + } + }, + "load-json-file": { + "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "parse-json": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" + } + }, + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", + "dev": true + }, + "lodash._baseassign": { + "version": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "lodash.keys": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz" + } + }, + "lodash._basecopy": { + "version": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basetostring": { + "version": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true + }, + "lodash._basevalues": { + "version": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._bindcallback": { + "version": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "dev": true + }, + "lodash._createassigner": { + "version": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", + "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "dev": true, + "requires": { + "lodash._bindcallback": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "lodash._isiterateecall": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "lodash.restparam": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz" + } + }, + "lodash._getnative": { + "version": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reescape": { + "version": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._root": { + "version": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.assign": { + "version": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", + "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", + "dev": true, + "requires": { + "lodash._baseassign": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "lodash._createassigner": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", + "lodash.keys": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz" + } + }, + "lodash.assignwith": { + "version": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", + "integrity": "sha1-EnqX8CrcQXUalU0ksN4X4QDgOOs=", + "dev": true + }, + "lodash.clonedeep": { + "version": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.escape": { + "version": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true, + "requires": { + "lodash._root": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz" + } + }, + "lodash.isarguments": { + "version": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isempty": { + "version": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=", + "dev": true + }, + "lodash.isplainobject": { + "version": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.isstring": { + "version": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, + "lodash.keys": { + "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "lodash.isarguments": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "lodash.isarray": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz" + } + }, + "lodash.mapvalues": { + "version": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "dev": true + }, + "lodash.pick": { + "version": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "dev": true + }, + "lodash.restparam": { + "version": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.template": { + "version": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true, + "requires": { + "lodash._basecopy": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "lodash._basetostring": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "lodash._basevalues": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "lodash._isiterateecall": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "lodash._reinterpolate": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "lodash.escape": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "lodash.keys": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "lodash.restparam": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "lodash.templatesettings": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz" + } + }, + "lodash.templatesettings": { + "version": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true, + "requires": { + "lodash._reinterpolate": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "lodash.escape": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz" + } + }, + "log-driver": { + "version": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", + "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=", + "dev": true + }, + "log4js": { + "version": "0.6.38", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "0.0.1", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + } + } + }, + "longest": { + "version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loud-rejection": { + "version": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "signal-exit": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz" + } + }, + "lru-cache": { + "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "map-cache": { + "version": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "meow": { + "version": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "loud-rejection": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "map-obj": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "read-pkg-up": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "redent": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "trim-newlines": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" + }, + "dependencies": { + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "micromatch": { + "version": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "braces": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "expand-brackets": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "extglob": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "filename-regex": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", + "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", + "object.omit": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "parse-glob": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "regex-cache": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz" + } + }, + "miller-rabin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", + "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "dev": true + }, + "mime-db": { + "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz", + "integrity": "sha1-wY29fHOl2/b0SgJNwNFloeexw5I=", + "dev": true + }, + "mime-types": { + "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", + "integrity": "sha1-4HqqnGxrmnyjASxpADrSWjnpKog=", + "dev": true, + "requires": { + "mime-db": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz" + } + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "dev": true, + "requires": { + "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" + } + }, + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mkdirp": { + "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + }, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "module-deps": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", + "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", + "dev": true, + "requires": { + "JSONStream": "1.3.1", + "browser-resolve": "1.11.2", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "detective": "https://registry.npmjs.org/detective/-/detective-4.3.2.tgz", + "duplexer2": "0.1.4", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "parents": "1.0.1", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", + "stream-combiner2": "1.1.1", + "subarg": "1.0.0", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "moment": { + "version": "https://registry.npmjs.org/moment/-/moment-2.17.1.tgz", + "integrity": "sha1-/tlQYGPzaxDwZsi1mhRNf66+HYI=", + "dev": true + }, + "moment-timezone": { + "version": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.10.tgz", + "integrity": "sha1-N2YknC0xfQjwfYltMDPCb4fEris=", + "dev": true, + "requires": { + "moment": "https://registry.npmjs.org/moment/-/moment-2.17.1.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "multipipe": { + "version": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "requires": { + "duplexer2": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz" + }, + "dependencies": { + "duplexer2": { + "version": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + } + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + } + } + }, + "mute-stream": { + "version": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", + "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=", + "dev": true + }, + "nan": { + "version": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", + "integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=", + "dev": true + }, + "natives": { + "version": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", + "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", + "dev": true + }, + "natural-compare": { + "version": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.2.2.tgz", + "integrity": "sha1-H5bWDjFBysG20FZTzg2urHY69qo=", + "dev": true + }, + "ncp": { + "version": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", + "integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "node-pre-gyp": { + "version": "0.6.36", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz", + "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=", + "dev": true, + "requires": { + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "nopt": "4.0.1", + "npmlog": "4.1.2", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.4.1", + "tar": "2.2.1", + "tar-pack": "3.4.0" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "3.0.4", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "requires": { + "abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "osenv": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz" + } + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "aws4": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", + "caseless": "0.12.0", + "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "http-signature": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "is-typedarray": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", + "oauth-sign": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } + }, + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "dev": true + } + } + }, + "node-uuid": { + "version": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", + "integrity": "sha1-baWhdmjEs91ZYjvaEc9/pMH2Cm8=", + "dev": true + }, + "nomnom": { + "version": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "underscore": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz" + }, + "dependencies": { + "ansi-styles": { + "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "has-color": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz" + } + }, + "strip-ansi": { + "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz" + } + }, + "normalize-package-data": { + "version": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", + "integrity": "sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=", + "dev": true, + "requires": { + "hosted-git-info": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", + "is-builtin-module": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "validate-npm-package-license": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz" + } + }, + "normalize-path": { + "version": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", + "integrity": "sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=", + "dev": true + }, + "npmconf": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/npmconf/-/npmconf-2.1.1.tgz", + "integrity": "sha1-ombH5cVmlet/VcrzpacyjyRRDa4=", + "dev": true, + "requires": { + "config-chain": "1.1.11", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "ini": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "nopt": "3.0.6", + "once": "1.3.3", + "osenv": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "uid-number": "0.0.5" + }, + "dependencies": { + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "requires": { + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + } + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "number-is-nan": { + "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object.omit": { + "version": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.10", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "orchestrator": { + "version": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", + "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", + "dev": true, + "requires": { + "end-of-stream": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", + "sequencify": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", + "stream-consume": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz" + } + }, + "ordered-read-streams": { + "version": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", + "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", + "dev": true + }, + "os-browserify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", + "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=", + "dev": true + }, + "os-homedir": { + "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz" + } + }, + "os-tmpdir": { + "version": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "dev": true, + "requires": { + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + } + }, + "output-file-sync": { + "version": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz" + }, + "dependencies": { + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "p-map": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.1.1.tgz", + "integrity": "sha1-BfXkrpegaDcbwqXMhr+9vBnErno=", + "dev": true + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dev": true, + "requires": { + "path-platform": "0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true, + "requires": { + "asn1.js": "4.9.1", + "browserify-aes": "1.0.6", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.0", + "pbkdf2": "3.0.13" + } + }, + "parse-filepath": { + "version": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", + "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", + "dev": true, + "requires": { + "is-absolute": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", + "map-cache": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "path-root": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz" + } + }, + "parse-glob": { + "version": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "is-dotfile": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + } + }, + "parse-json": { + "version": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz" + } + }, + "parse-passwd": { + "version": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-exists": { + "version": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "path-is-absolute": { + "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true + }, + "path-root": { + "version": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz" + } + }, + "path-root-regex": { + "version": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "path-type": { + "version": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "pathval": { + "version": "https://registry.npmjs.org/pathval/-/pathval-0.1.1.tgz", + "integrity": "sha1-CPkRzcqczllCiA2ngXvAtyO2bYI=", + "dev": true + }, + "pbkdf2": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.13.tgz", + "integrity": "sha512-+dCHxDH+djNtjgWmvVC/my3SYBAKpKNqKSjLkp+GtWWYe4XPE+e/PSD2aCanlEZZnqPk2uekTKNC/ccbwd2X2Q==", + "dev": true, + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.8" + } + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true + }, + "phantomjs2-ext": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/phantomjs2-ext/-/phantomjs2-ext-0.2.2.tgz", + "integrity": "sha1-v8oHkeYPniZVVctr76Pw3PVaviw=", + "dev": true, + "requires": { + "adm-zip": "0.4.7", + "kew": "0.5.0", + "mkdirp": "0.5.0", + "ncp": "2.0.0", + "npmconf": "2.1.1", + "progress": "1.1.8", + "request": "2.55.0", + "request-progress": "0.3.1", + "rimraf": "2.3.4", + "which": "1.0.9" + }, + "dependencies": { + "asn1": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", + "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", + "dev": true + }, + "assert-plus": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", + "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", + "dev": true + }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, + "aws-sign2": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", + "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", + "dev": true + }, + "bl": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", + "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", + "dev": true, + "requires": { + "readable-stream": "1.0.34" + } + }, + "caseless": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.9.0.tgz", + "integrity": "sha1-t7Zc5r8UE4hlOc/VM/CzDv+pz4g=", + "dev": true + }, + "combined-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", + "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", + "dev": true, + "requires": { + "delayed-stream": "0.0.5" + } + }, + "delayed-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", + "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", + "dev": true + }, + "form-data": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz", + "integrity": "sha1-Jvi8JtpkQOKZy9z7aQNcT3em5GY=", + "dev": true, + "requires": { + "async": "0.9.2", + "combined-stream": "0.0.7", + "mime-types": "2.0.14" + } + }, + "glob": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", + "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", + "dev": true, + "requires": { + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "2.0.10", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + } + }, + "har-validator": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-1.8.0.tgz", + "integrity": "sha1-2DhCsOtMQ1lgrrEIoGejqpTA7rI=", + "dev": true, + "requires": { + "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "is-my-json-valid": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz" + } + }, + "hawk": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz", + "integrity": "sha1-HnMc45RH+h0PbXB/e87r7A/R7B8=", + "dev": true, + "requires": { + "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "sntp": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" + } + }, + "http-signature": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", + "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", + "dev": true, + "requires": { + "asn1": "0.1.11", + "assert-plus": "0.1.5", + "ctype": "0.5.3" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "mime-db": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", + "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=", + "dev": true + }, + "mime-types": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", + "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", + "dev": true, + "requires": { + "mime-db": "1.12.0" + } + }, + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true, + "requires": { + "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "dev": true + }, + "oauth-sign": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.6.0.tgz", + "integrity": "sha1-fb6uRPbKRU4fFoRR1jB0ZzWBPOM=", + "dev": true + }, + "qs": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-2.4.2.tgz", + "integrity": "sha1-9854jld33wtQENp/fE5zujJHD1o=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "0.0.1", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "request": { + "version": "2.55.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.55.0.tgz", + "integrity": "sha1-11wc32eddrsQD5v/4f5VG1wk6T0=", + "dev": true, + "requires": { + "aws-sign2": "0.5.0", + "bl": "0.9.5", + "caseless": "0.9.0", + "combined-stream": "0.0.7", + "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "form-data": "0.2.0", + "har-validator": "1.8.0", + "hawk": "2.3.1", + "http-signature": "0.10.1", + "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "mime-types": "2.0.14", + "node-uuid": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", + "oauth-sign": "0.6.0", + "qs": "2.4.2", + "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "tunnel-agent": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz" + } + }, + "rimraf": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.3.4.tgz", + "integrity": "sha1-gtm8Gy/PMeIFrHsoE4oCXQjpFZo=", + "dev": true, + "requires": { + "glob": "4.5.3" + } + }, + "which": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", + "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", + "dev": true + } + } + }, + "pify": { + "version": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + } + }, + "pkginfo": { + "version": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.0.tgz", + "integrity": "sha1-NJ27f/04CB/K3AhT32h/DHdEzWU=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-hrtime": { + "version": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "private": { + "version": "https://registry.npmjs.org/private/-/private-0.1.6.tgz", + "integrity": "sha1-VcapdtD5uvuZJIUTUP5HubX7t8E=", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "prompt": { + "version": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", + "integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=", + "dev": true, + "requires": { + "pkginfo": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.0.tgz", + "read": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "revalidator": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "utile": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", + "winston": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "pseudomap": { + "version": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.5" + } + }, + "punycode": { + "version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true + }, + "qjobs": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", + "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", + "dev": true + }, + "qs": { + "version": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz", + "integrity": "sha1-zgPF/wk1vB2daanxTL0Y5WjWdiU=", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "randomatic": { + "version": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", + "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=", + "dev": true, + "requires": { + "is-number": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz" + } + }, + "randombytes": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", + "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", + "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", + "dev": true, + "requires": { + "bytes": "2.4.0", + "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", + "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "dev": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + }, + "rcfinder": { + "version": "https://registry.npmjs.org/rcfinder/-/rcfinder-0.1.9.tgz", + "integrity": "sha1-8+gPOH3fmugK4wpBADKWQuroERU=", + "dev": true, + "requires": { + "lodash.clonedeep": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" + } + }, + "rcloader": { + "version": "https://registry.npmjs.org/rcloader/-/rcloader-0.1.2.tgz", + "integrity": "sha1-oJY6ZDfQnvjLktky0trUl7DRc2w=", + "dev": true, + "requires": { + "lodash": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "rcfinder": "https://registry.npmjs.org/rcfinder/-/rcfinder-0.1.9.tgz" + }, + "dependencies": { + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + } + } + }, + "read": { + "version": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dev": true, + "requires": { + "mute-stream": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz" + } + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + } + }, + "read-pkg": { + "version": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", + "path-type": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" + } + }, + "read-pkg-up": { + "version": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "read-pkg": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" + } + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=", + "dev": true, + "requires": { + "buffer-shims": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "set-immediate-shim": "1.0.1" + } + }, + "recast": { + "version": "https://registry.npmjs.org/recast/-/recast-0.10.33.tgz", + "integrity": "sha1-lCgI96oBbx+nFCxGHX5XBKqo1pc=", + "dev": true, + "requires": { + "ast-types": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.12.tgz", + "esprima-fb": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", + "private": "https://registry.npmjs.org/private/-/private-0.1.6.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" + }, + "dependencies": { + "ast-types": { + "version": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.12.tgz", + "integrity": "sha1-oNkOQ1G7iHcWyD/WN+v4GK9K38w=", + "dev": true + }, + "esprima-fb": { + "version": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", + "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", + "dev": true + } + } + }, + "rechoir": { + "version": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz" + } + }, + "redent": { + "version": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "strip-indent": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz" + } + }, + "regenerate": { + "version": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", + "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=", + "dev": true + }, + "regenerator": { + "version": "https://registry.npmjs.org/regenerator/-/regenerator-0.8.40.tgz", + "integrity": "sha1-oORXxY69uuV1yfjNdRJ+k3VkNdg=", + "dev": true, + "requires": { + "commoner": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", + "defs": "https://registry.npmjs.org/defs/-/defs-1.1.1.tgz", + "esprima-fb": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", + "private": "https://registry.npmjs.org/private/-/private-0.1.6.tgz", + "recast": "https://registry.npmjs.org/recast/-/recast-0.10.33.tgz", + "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + }, + "dependencies": { + "esprima-fb": { + "version": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", + "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", + "dev": true + } + } + }, + "regex-cache": { + "version": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "dev": true, + "requires": { + "is-equal-shallow": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "is-primitive": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" + } + }, + "regexpu": { + "version": "https://registry.npmjs.org/regexpu/-/regexpu-1.3.0.tgz", + "integrity": "sha1-5TTcmRqeWEYFDJjebX3UpVyeoW0=", + "dev": true, + "requires": { + "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "recast": "https://registry.npmjs.org/recast/-/recast-0.10.33.tgz", + "regenerate": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", + "regjsgen": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "regjsparser": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz" + } + }, + "regjsgen": { + "version": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + } + }, + "remove-trailing-separator": { + "version": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz", + "integrity": "sha1-YV67lq9VlVLUv0BXyENtSGq2PMQ=", + "dev": true + }, + "repeat-element": { + "version": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz" + } + }, + "replace-ext": { + "version": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "request": { + "version": "https://registry.npmjs.org/request/-/request-2.75.0.tgz", + "integrity": "sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM=", + "dev": true, + "requires": { + "aws-sign2": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "aws4": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", + "bl": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", + "caseless": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "form-data": "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz", + "har-validator": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "hawk": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "http-signature": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "is-typedarray": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", + "node-uuid": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", + "oauth-sign": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "qs": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz", + "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "tunnel-agent": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz" + } + }, + "request-progress": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz", + "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=", + "dev": true, + "requires": { + "throttleit": "0.0.2" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "reserved-words": { + "version": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.1.tgz", + "integrity": "sha1-b3wV5eVhTFDalhYw2kat3IfAzvI=", + "dev": true + }, + "resolve": { + "version": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", + "integrity": "sha1-lYnD8vYUnRQXpAvswWY9tuxrwmw=", + "dev": true + }, + "resolve-dir": { + "version": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", + "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", + "dev": true, + "requires": { + "expand-tilde": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", + "global-modules": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "retry-as-promised": { + "version": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.2.0.tgz", + "integrity": "sha1-sEY9f9PPWy/tZFAKtui4pJxbjmw=", + "dev": true, + "requires": { + "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.6.tgz", + "cross-env": "https://registry.npmjs.org/cross-env/-/cross-env-3.1.3.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz" + }, + "dependencies": { + "bluebird": { + "version": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.6.tgz", + "integrity": "sha1-AdqNgh2HgT0ViWfnQ9X+bGLPjA8=", + "dev": true + } + } + }, + "revalidator": { + "version": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=", + "dev": true + }, + "right-align": { + "version": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz" + } + }, + "rimraf": { + "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", + "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz" + }, + "dependencies": { + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + } + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "run-sequence": { + "version": "https://registry.npmjs.org/run-sequence/-/run-sequence-1.2.2.tgz", + "integrity": "sha1-UJWgvr6YczsBQL0I3YDsAw3azes=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "sauce-connect-launcher": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-0.17.0.tgz", + "integrity": "sha1-kI2TEeyvF92bRkehQ1/UogcugM4=", + "dev": true, + "requires": { + "adm-zip": "0.4.7", + "async": "1.4.0", + "https-proxy-agent": "1.0.0", + "lodash": "3.10.1", + "rimraf": "2.4.3" + }, + "dependencies": { + "async": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.4.0.tgz", + "integrity": "sha1-Nfhvg8WeBCHQmc2akdgnj7V4wA0=", + "dev": true + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "rimraf": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.3.tgz", + "integrity": "sha1-5bUclDekxYKtuVXp8oz42UXicq8=", + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" + } + } + } + }, + "saucelabs": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.4.0.tgz", + "integrity": "sha1-uTSpr52ih0s/QKrh/N5QpEZvXzg=", + "dev": true, + "requires": { + "https-proxy-agent": "1.0.0" + } + }, + "semver": { + "version": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "sequelize": { + "version": "https://registry.npmjs.org/sequelize/-/sequelize-3.27.0.tgz", + "integrity": "sha1-agolI24Ok8J/DE6tUHm2A6M2ppc=", + "dev": true, + "requires": { + "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.6.tgz", + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "dottie": "https://registry.npmjs.org/dottie/-/dottie-1.1.1.tgz", + "generic-pool": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.2.tgz", + "inflection": "https://registry.npmjs.org/inflection/-/inflection-1.10.0.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.12.0.tgz", + "moment": "https://registry.npmjs.org/moment/-/moment-2.17.1.tgz", + "moment-timezone": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.10.tgz", + "node-uuid": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", + "retry-as-promised": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.2.0.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "shimmer": "https://registry.npmjs.org/shimmer/-/shimmer-1.1.0.tgz", + "terraformer-wkt-parser": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.1.2.tgz", + "toposort-class": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "validator": "https://registry.npmjs.org/validator/-/validator-5.7.0.tgz", + "wkx": "https://registry.npmjs.org/wkx/-/wkx-0.2.0.tgz" + }, + "dependencies": { + "bluebird": { + "version": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.6.tgz", + "integrity": "sha1-AdqNgh2HgT0ViWfnQ9X+bGLPjA8=", + "dev": true + }, + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-4.12.0.tgz", + "integrity": "sha1-K9bcRqBA9Z5obJcu0h2T3FkFMlg=", + "dev": true + }, + "semver": { + "version": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "sequencify": { + "version": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", + "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + }, + "sha.js": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", + "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "dev": true, + "requires": { + "json-stable-stringify": "0.0.1", + "sha.js": "2.4.8" + } + }, + "shebang-regex": { + "version": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "requires": { + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" + } + }, + "shelljs": { + "version": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", + "dev": true + }, + "shimmer": { + "version": "https://registry.npmjs.org/shimmer/-/shimmer-1.1.0.tgz", + "integrity": "sha1-l9c3cTf/u6tCVSLkKf4KqJpIizU=", + "dev": true + }, + "sigmund": { + "version": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "signal-exit": { + "version": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "simple-fmt": { + "version": "https://registry.npmjs.org/simple-fmt/-/simple-fmt-0.1.0.tgz", + "integrity": "sha1-GRv1ZqWeZTBILLJatTtKjchcOms=", + "dev": true + }, + "simple-is": { + "version": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz", + "integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=", + "dev": true + }, + "slash": { + "version": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "sntp": { + "version": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" + } + }, + "socket.io": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", + "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "dev": true, + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.3", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.7.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "dev": true, + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + } + } + }, + "socket.io-client": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", + "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.3", + "has-binary": "0.1.7", + "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "dev": true, + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + }, + "source-map-resolve": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz", + "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", + "dev": true, + "requires": { + "atob": "1.1.3", + "resolve-url": "0.2.1", + "source-map-url": "0.3.0", + "urix": "0.1.0" + } + }, + "source-map-support": { + "version": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", + "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", + "dev": true, + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz" + }, + "dependencies": { + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", + "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", + "dev": true, + "requires": { + "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + } + } + } + }, + "source-map-url": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz", + "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=", + "dev": true + }, + "sparkles": { + "version": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", + "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", + "dev": true + }, + "spdx-correct": { + "version": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz" + } + }, + "spdx-expression-parse": { + "version": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "sprintf-js": { + "version": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sqlite3": { + "version": "https://registry.npmjs.org/sqlite3/-/sqlite3-3.1.8.tgz", + "integrity": "sha1-TLz5Zdi5AdGxAVy8f8QVquFX36o=", + "dev": true, + "requires": { + "nan": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", + "node-pre-gyp": "0.6.36" + } + }, + "sshpk": { + "version": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz", + "integrity": "sha1-MOGl0ykkSXShr2FREznVla9mOLA=", + "dev": true, + "requires": { + "asn1": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "bcrypt-pbkdf": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz", + "dashdash": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "ecc-jsbn": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "getpass": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", + "jodid25519": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", + "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + }, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "stable": { + "version": "https://registry.npmjs.org/stable/-/stable-0.1.5.tgz", + "integrity": "sha1-CCMvYMcy6YkHhLW+0HNPizKoh7k=", + "dev": true + }, + "stack-generator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.1.tgz", + "integrity": "sha1-s32LDZoqblLAbMjhhfmPGZ+2OAQ=", + "requires": { + "stackframe": "1.0.4" + } + }, + "stack-trace": { + "version": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", + "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=", + "dev": true + }, + "stackframe": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", + "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==" + }, + "stacktrace-gps": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.2.tgz", + "integrity": "sha512-9o+nWhiz5wFnrB3hBHs2PTyYrS60M1vvpSzHxwxnIbtY2q9Nt51hZvhrG1+2AxD374ecwyS+IUwfkHRE/2zuGg==", + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "stackframe": "1.0.4" + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "requires": { + "duplexer2": "0.1.4", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + } + }, + "stream-consume": { + "version": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", + "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", + "dev": true + }, + "stream-http": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "2.3.3", + "to-arraybuffer": "1.0.1", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", + "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "stringmap": { + "version": "https://registry.npmjs.org/stringmap/-/stringmap-0.2.2.tgz", + "integrity": "sha1-VWwTeyWPlCuHdvWy71gqoGnX0bE=", + "dev": true + }, + "stringset": { + "version": "https://registry.npmjs.org/stringset/-/stringset-0.2.1.tgz", + "integrity": "sha1-7yWcTjSTRDd/zRyRPdLoSMnAQrU=", + "dev": true + }, + "stringstream": { + "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" + } + }, + "strip-bom": { + "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + } + }, + "strip-indent": { + "version": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" + } + }, + "strip-json-comments": { + "version": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" + } + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "syntax-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", + "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", + "dev": true, + "requires": { + "acorn": "4.0.13" + } + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "tar-pack": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", + "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", + "tar": "2.2.1", + "uid-number": "0.0.6" + }, + "dependencies": { + "uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "dev": true + } + } + }, + "tar-stream": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", + "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", + "dev": true, + "requires": { + "bl": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", + "end-of-stream": "1.4.0", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + }, + "dependencies": { + "end-of-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + } + } + } + }, + "terraformer": { + "version": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.7.tgz", + "integrity": "sha1-2KGaVvvyWWbqBi0h9RW5NYlwLWk=", + "dev": true + }, + "terraformer-wkt-parser": { + "version": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.1.2.tgz", + "integrity": "sha1-M2oMj8gglKWv+DKI9prt7NNpvww=", + "dev": true, + "requires": { + "terraformer": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.7.tgz" + } + }, + "throttleit": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", + "dev": true + }, + "through": { + "version": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "tildify": { + "version": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", + "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", + "dev": true, + "requires": { + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" + } + }, + "time-stamp": { + "version": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.0.1.tgz", + "integrity": "sha1-n0vSNVnJNllm8zAtu6KwfGuZsVE=", + "dev": true + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dev": true, + "requires": { + "process": "0.11.10" + } + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true, + "requires": { + "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-double-quotes": { + "version": "https://registry.npmjs.org/to-double-quotes/-/to-double-quotes-2.0.0.tgz", + "integrity": "sha1-qvIx1vqUiUn4GTAburRITYWI5Kc=", + "dev": true + }, + "to-fast-properties": { + "version": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.2.tgz", + "integrity": "sha1-8/XAw7pymafvmUJ+RGMyV63kMyA=", + "dev": true + }, + "to-single-quotes": { + "version": "https://registry.npmjs.org/to-single-quotes/-/to-single-quotes-2.0.1.tgz", + "integrity": "sha1-fMKRUfD18sQZRvEZ9ZMv5VQXASU=", + "dev": true + }, + "toposort-class": { + "version": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=", + "dev": true + }, + "tough-cookie": { + "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "dev": true, + "requires": { + "punycode": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + } + }, + "trim-newlines": { + "version": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "try-resolve": { + "version": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz", + "integrity": "sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=", + "dev": true + }, + "tryor": { + "version": "https://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz", + "integrity": "sha1-gUXkynyv9ArN48z5Rui4u3W0Fys=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + }, + "tweetnacl": { + "version": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.16" + }, + "dependencies": { + "mime-db": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", + "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=", + "dev": true + }, + "mime-types": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", + "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", + "dev": true, + "requires": { + "mime-db": "1.29.0" + } + } + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", + "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=", + "dev": true, + "requires": { + "async": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "uglify-to-browserify": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "yargs": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz" + }, + "dependencies": { + "async": { + "version": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + } + } + }, + "uglify-save-license": { + "version": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz", + "integrity": "sha1-lXJsF8xv0XHDYX479NjYKqjEzOE=", + "dev": true + }, + "uglify-to-browserify": { + "version": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true + }, + "uid-number": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.5.tgz", + "integrity": "sha1-Wj2yPvXb1VuB/ODsmirG/M3ruB4=", + "dev": true + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "umd": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", + "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", + "dev": true + }, + "unc-path-regex": { + "version": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "underscore": { + "version": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + }, + "underscore.string": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", + "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", + "dev": true, + "requires": { + "sprintf-js": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "unique-stream": { + "version": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", + "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "user-home": { + "version": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "useragent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", + "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", + "dev": true, + "requires": { + "lru-cache": "2.2.4", + "tmp": "0.0.31" + }, + "dependencies": { + "lru-cache": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", + "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", + "dev": true + } + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utile": { + "version": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", + "integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=", + "dev": true, + "requires": { + "async": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "deep-equal": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "i": "https://registry.npmjs.org/i/-/i-0.3.5.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "ncp": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz" + }, + "dependencies": { + "async": { + "version": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + } + } + }, + "utils-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", + "dev": true + }, + "uuid": { + "version": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + }, + "v8flags": { + "version": "https://registry.npmjs.org/v8flags/-/v8flags-2.0.11.tgz", + "integrity": "sha1-vKjzDw1tYGEswsAGQeaWLUKuaIE=", + "dev": true, + "requires": { + "user-home": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz" + } + }, + "validate-npm-package-license": { + "version": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "spdx-expression-parse": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz" + } + }, + "validator": { + "version": "https://registry.npmjs.org/validator/-/validator-5.7.0.tgz", + "integrity": "sha1-eoelgUa2laxIYHEUHAxJ1n2gXlw=", + "dev": true + }, + "vargs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vargs/-/vargs-0.1.0.tgz", + "integrity": "sha1-a2GE2mUgzDIEzhtAfKwm2SYJ6/8=", + "dev": true + }, + "verror": { + "version": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "dev": true, + "requires": { + "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz" + } + }, + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz" + } + }, + "vinyl-buffer": { + "version": "https://registry.npmjs.org/vinyl-buffer/-/vinyl-buffer-1.0.0.tgz", + "integrity": "sha1-ygZ+oIQx1QdyKx3lCD9gJhbrwjQ=", + "dev": true, + "requires": { + "bl": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz" + }, + "dependencies": { + "bl": { + "version": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", + "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" + } + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + } + } + }, + "vinyl-fs": { + "version": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", + "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", + "dev": true, + "requires": { + "defaults": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "glob-stream": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", + "glob-watcher": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz" + }, + "dependencies": { + "clone": { + "version": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", + "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", + "dev": true, + "requires": { + "natives": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz" + } + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "strip-bom": { + "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", + "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", + "dev": true, + "requires": { + "first-chunk-stream": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "is-utf8": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + } + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz" + } + } + } + }, + "vinyl-source-stream": { + "version": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.0.tgz", + "integrity": "sha1-RMvlEIIFJ53rDFZTwJSiiHk4sas=", + "dev": true, + "requires": { + "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz" + }, + "dependencies": { + "clone": { + "version": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "vinyl": { + "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz" + } + } + } + }, + "vinyl-sourcemaps-apply": { + "version": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", + "dev": true, + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz" + } + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "vow": { + "version": "https://registry.npmjs.org/vow/-/vow-0.4.13.tgz", + "integrity": "sha1-58FPG9nIvg5zWaRZf+LR720afog=", + "dev": true + }, + "vow-fs": { + "version": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.6.tgz", + "integrity": "sha1-LUxZviLivyYY3fWXq0uqkjvnIA0=", + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "uuid": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "vow": "https://registry.npmjs.org/vow/-/vow-0.4.13.tgz", + "vow-queue": "https://registry.npmjs.org/vow-queue/-/vow-queue-0.4.2.tgz" + }, + "dependencies": { + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + } + } + }, + "vow-queue": { + "version": "https://registry.npmjs.org/vow-queue/-/vow-queue-0.4.2.tgz", + "integrity": "sha1-5/4XFg4Vx8QYTRtmapvGThjjAYQ=", + "dev": true, + "requires": { + "vow": "https://registry.npmjs.org/vow/-/vow-0.4.13.tgz" + } + }, + "walkdir": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", + "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=", + "dev": true + }, + "wd": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/wd/-/wd-1.4.0.tgz", + "integrity": "sha512-VHii2f+jck5fgEcTQYCR3z99B99tPz0HlLCGsNowI2qsI21xMnKwd9O3SnJQnEBq0Erx9FPFfiZno+OYtXDXyw==", + "dev": true, + "requires": { + "archiver": "1.3.0", + "async": "2.0.1", + "lodash": "4.16.2", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "request": "2.79.0", + "underscore.string": "3.3.4", + "vargs": "0.1.0" + }, + "dependencies": { + "async": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", + "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", + "dev": true, + "requires": { + "lodash": "4.16.2" + } + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz" + } + }, + "lodash": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.16.2.tgz", + "integrity": "sha1-PmJtuCcEimmSgaihJSJjJs/A5lI=", + "dev": true + }, + "qs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", + "dev": true + }, + "request": { + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", + "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", + "dev": true, + "requires": { + "aws-sign2": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "aws4": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", + "caseless": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "form-data": "2.1.4", + "har-validator": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "hawk": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "http-signature": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "is-typedarray": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", + "oauth-sign": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "qs": "6.3.2", + "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "tunnel-agent": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "uuid": "3.1.0" + } + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "dev": true + } + } + }, + "which": { + "version": "https://registry.npmjs.org/which/-/which-1.2.12.tgz", + "integrity": "sha1-3me15FAmnxlJCe8j7OTr5Bb6EZI=", + "dev": true, + "requires": { + "isexe": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz" + } + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, + "requires": { + "string-width": "1.0.2" + } + }, + "window-size": { + "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "winston": { + "version": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", + "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=", + "dev": true, + "requires": { + "async": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "colors": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "cycle": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "eyes": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "pkginfo": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", + "stack-trace": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz" + }, + "dependencies": { + "async": { + "version": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "colors": { + "version": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", + "dev": true + }, + "pkginfo": { + "version": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", + "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=", + "dev": true + } + } + }, + "wkx": { + "version": "https://registry.npmjs.org/wkx/-/wkx-0.2.0.tgz", + "integrity": "sha1-dsJPFqzQzY+TzTSqMx4PeWElboQ=", + "dev": true + }, + "wordwrap": { + "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "wrappy": { + "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "dev": true, + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", + "dev": true + }, + "xmlbuilder": { + "version": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-3.1.0.tgz", + "integrity": "sha1-LIaIjy1OrehQ+jjKf3Ij9yCVFuE=", + "dev": true, + "requires": { + "lodash": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz" + }, + "dependencies": { + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "dev": true + }, + "xtend": { + "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "https://registry.npmjs.org/yallist/-/yallist-2.0.0.tgz", + "integrity": "sha1-MGxUODXwnuGkyyO3vOmrNByRzdQ=", + "dev": true + }, + "yargs": { + "version": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "cliui": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "window-size": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz" + }, + "dependencies": { + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + } + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + }, + "zip-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", + "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", + "dev": true, + "requires": { + "archiver-utils": "1.3.0", + "compress-commons": "1.2.0", + "lodash": "4.17.4", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + } + } +} diff --git a/package.json b/package.json index cc39b88..2fd4649 100644 --- a/package.json +++ b/package.json @@ -23,38 +23,38 @@ "dependencies": { "error-stack-parser": "^2.0.1", "stack-generator": "^2.0.1", - "stacktrace-gps": "^3.0.1" + "stacktrace-gps": "^3.0.2" }, "devDependencies": { - "browserify": "^13.1.0", + "browserify": "^13.3.0", "colors": "^1.1.2", - "del": "^1.2.0", + "del": "^3.0.0", "es6-promise": "^3.1.2", "gulp": "^3.9.1", "gulp-concat": "^2.6.0", "gulp-coveralls": "^0.1.4", "gulp-jshint": "^1.12.0", "gulp-rename": "^1.2.2", - "gulp-sourcemaps": "^1.5.2", + "gulp-sourcemaps": "^1.12.0", "gulp-uglify": "^1.5.1", - "jasmine": "^2.3.2", + "jasmine": "^2.7.0", "jasmine-ajax": "^3.2.0", - "jasmine-core": "^2.3.4", + "jasmine-core": "^2.7.0", "jscs": "^2.9.0", "jsdoc-dash-template": "^1.2.0", "json3": "^3.3.2", - "karma": "^0.13.15", - "karma-chrome-launcher": "^0.2.1", - "karma-coverage": "^0.5.2", - "karma-firefox-launcher": "^0.1.7", - "karma-ie-launcher": "^0.2.0", - "karma-jasmine": "^0.3.6", + "karma": "^1.7.0", + "karma-chrome-launcher": "^2.2.0", + "karma-coverage": "^1.1.1", + "karma-firefox-launcher": "^1.0.1", + "karma-ie-launcher": "^1.0.0", + "karma-jasmine": "^1.1.0", "karma-jasmine-ajax": "^0.1.13", - "karma-opera-launcher": "^0.3.0", - "karma-phantomjs2-launcher": "^0.3.2", - "karma-safari-launcher": "^0.1.1", - "karma-sauce-launcher": "^0.2.14", - "karma-spec-reporter": "0.0.23", + "karma-opera-launcher": "^1.0.0", + "karma-phantomjs2-launcher": "^0.5.0", + "karma-safari-launcher": "^1.0.0", + "karma-sauce-launcher": "^1.1.0", + "karma-spec-reporter": "^0.0.31", "run-sequence": "^1.1.2", "vinyl-buffer": "^1.0.0", "vinyl-source-stream": "^1.1.0" From 40161c328bf8338d7b292ff9324e31f38ff41daf Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Sat, 12 Aug 2017 13:07:05 -0700 Subject: [PATCH 090/110] Update dist with updated stackframe and stacktrace-gps --- ...ktrace-with-promises-and-json-polyfills.js | 65 +++++++++++-------- ...ce-with-promises-and-json-polyfills.min.js | 4 +- dist/stacktrace.js | 61 +++++++++-------- dist/stacktrace.min.js | 2 +- 4 files changed, 75 insertions(+), 57 deletions(-) diff --git a/dist/stacktrace-with-promises-and-json-polyfills.js b/dist/stacktrace-with-promises-and-json-polyfills.js index 9e54686..c120914 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.js @@ -2427,6 +2427,10 @@ process.off = noop; process.removeListener = noop; process.removeAllListeners = noop; process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } process.binding = function (name) { throw new Error('process.binding is not supported'); @@ -4535,7 +4539,7 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate })); },{"stackframe":13}],13:[function(require,module,exports){ -(function (root, factory) { +(function(root, factory) { 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. @@ -4547,18 +4551,18 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate } else { root.StackFrame = factory(); } -}(this, function () { +}(this, function() { 'use strict'; function _isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n); } function _capitalize(str) { - return str[0].toUpperCase() + str.substring(1); + return str.charAt(0).toUpperCase() + str.substring(1); } function _getter(p) { - return function () { + return function() { return this[p]; }; } @@ -4568,9 +4572,10 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate var stringProps = ['fileName', 'functionName', 'source']; var arrayProps = ['args']; + var props = booleanProps.concat(numericProps, stringProps, arrayProps); + function StackFrame(obj) { if (obj instanceof Object) { - var props = booleanProps.concat(numericProps.concat(stringProps.concat(arrayProps))); for (var i = 0; i < props.length; i++) { if (obj.hasOwnProperty(props[i]) && obj[props[i]] !== undefined) { this['set' + _capitalize(props[i])](obj[props[i]]); @@ -4580,20 +4585,20 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate } StackFrame.prototype = { - getArgs: function () { + getArgs: function() { return this.args; }, - setArgs: function (v) { + setArgs: function(v) { if (Object.prototype.toString.call(v) !== '[object Array]') { throw new TypeError('Args must be an Array'); } this.args = v; }, - getEvalOrigin: function () { + getEvalOrigin: function() { return this.evalOrigin; }, - setEvalOrigin: function (v) { + setEvalOrigin: function(v) { if (v instanceof StackFrame) { this.evalOrigin = v; } else if (v instanceof Object) { @@ -4603,7 +4608,7 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate } }, - toString: function () { + toString: function() { var functionName = this.getFunctionName() || '{anonymous}'; var args = '(' + (this.getArgs() || []).join(',') + ')'; var fileName = this.getFileName() ? ('@' + this.getFileName()) : ''; @@ -4615,8 +4620,8 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate for (var i = 0; i < booleanProps.length; i++) { StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]); - StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function (p) { - return function (v) { + StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) { + return function(v) { this[p] = Boolean(v); }; })(booleanProps[i]); @@ -4624,8 +4629,8 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate for (var j = 0; j < numericProps.length; j++) { StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]); - StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function (p) { - return function (v) { + StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) { + return function(v) { if (!_isNumber(v)) { throw new TypeError(p + ' must be a Number'); } @@ -4636,8 +4641,8 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate for (var k = 0; k < stringProps.length; k++) { StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]); - StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function (p) { - return function (v) { + StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) { + return function(v) { this[p] = String(v); }; })(stringProps[k]); @@ -4775,9 +4780,14 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate } function _findSourceMappingURL(source) { - var m = /\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/m.exec(source); - if (m && m[1]) { - return m[1]; + var sourceMappingUrlRegExp = /\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/mg; + var lastSourceMappingUrl; + var matchSourceMappingUrl; + while (matchSourceMappingUrl = sourceMappingUrlRegExp.exec(source)) { // jshint ignore:line + lastSourceMappingUrl = matchSourceMappingUrl[1]; + } + if (lastSourceMappingUrl) { + return lastSourceMappingUrl; } else { throw new Error('sourceMappingURL not found'); } @@ -4871,8 +4881,8 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate * Creating SourceMapConsumers is expensive, so this wraps the creation of a * SourceMapConsumer in a per-instance cache. * - * @param sourceMappingURL = {String} URL to fetch source map from - * @param defaultSourceRoot = Default source root for source map if undefined + * @param {String} sourceMappingURL = URL to fetch source map from + * @param {String} defaultSourceRoot = Default source root for source map if undefined * @returns {Promise} that resolves a SourceMapConsumer */ this._getSourceMapConsumer = function _getSourceMapConsumer(sourceMappingURL, defaultSourceRoot) { @@ -4970,12 +4980,13 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate sourceMappingURL = defaultSourceRoot + sourceMappingURL; } - return this._getSourceMapConsumer(sourceMappingURL, defaultSourceRoot).then(function(sourceMapConsumer) { - return _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) - .then(resolve)['catch'](function() { - resolve(stackframe); + return this._getSourceMapConsumer(sourceMappingURL, defaultSourceRoot) + .then(function(sourceMapConsumer) { + return _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) + .then(resolve)['catch'](function() { + resolve(stackframe); + }); }); - }); }.bind(this), reject)['catch'](reject); }.bind(this)); }; @@ -5342,4 +5353,4 @@ if (!Array.prototype.forEach) { },{"error-stack-parser":1,"stack-generator":12,"stacktrace-gps":14}]},{},[2,3,15,16])(16) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9lczYtcHJvbWlzZS9kaXN0L2VzNi1wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2pzb24zL2xpYi9qc29uMy5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYXJyYXktc2V0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2Jhc2U2NC12bHEuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2JpbmFyeS1zZWFyY2guanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvcXVpY2stc29ydC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyLmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3V0aWwuanMiLCJub2RlX21vZHVsZXMvc3RhY2stZ2VuZXJhdG9yL3N0YWNrLWdlbmVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja2ZyYW1lL3N0YWNrZnJhbWUuanMiLCJub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1ncHMvc3RhY2t0cmFjZS1ncHMuanMiLCJwb2x5ZmlsbHMuanMiLCJzdGFja3RyYWNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNqb0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3Q0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2phQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnZXJyb3Itc3RhY2stcGFyc2VyJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuRXJyb3JTdGFja1BhcnNlciA9IGZhY3Rvcnkocm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIoU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFAgPSAvKF58QClcXFMrXFw6XFxkKy87XG4gICAgdmFyIENIUk9NRV9JRV9TVEFDS19SRUdFWFAgPSAvXlxccyphdCAuKihcXFMrXFw6XFxkK3xcXChuYXRpdmVcXCkpL207XG4gICAgdmFyIFNBRkFSSV9OQVRJVkVfQ09ERV9SRUdFWFAgPSAvXihldmFsQCk/KFxcW25hdGl2ZSBjb2RlXFxdKT8kLztcblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhbiBFcnJvciBvYmplY3QsIGV4dHJhY3QgdGhlIG1vc3QgaW5mb3JtYXRpb24gZnJvbSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBvZiBTdGFja0ZyYW1lc1xuICAgICAgICAgKi9cbiAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVycm9yLnN0YWNrdHJhY2UgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBlcnJvclsnb3BlcmEjc291cmNlbG9jJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YWNrICYmIGVycm9yLnN0YWNrLm1hdGNoKENIUk9NRV9JRV9TVEFDS19SRUdFWFApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VWOE9ySUUoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRkZPclNhZmFyaShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIGdpdmVuIEVycm9yIG9iamVjdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFNlcGFyYXRlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGZyb20gYSBzdHJpbmcgb2YgdGhlIGZvcm06IChVUkk6TGluZTpDb2x1bW4pXG4gICAgICAgIGV4dHJhY3RMb2NhdGlvbjogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkZXh0cmFjdExvY2F0aW9uKHVybExpa2UpIHtcbiAgICAgICAgICAgIC8vIEZhaWwtZmFzdCBidXQgcmV0dXJuIGxvY2F0aW9ucyBsaWtlIFwiKG5hdGl2ZSlcIlxuICAgICAgICAgICAgaWYgKHVybExpa2UuaW5kZXhPZignOicpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbdXJsTGlrZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByZWdFeHAgPSAvKC4rPykoPzpcXDooXFxkKykpPyg/OlxcOihcXGQrKSk/JC87XG4gICAgICAgICAgICB2YXIgcGFydHMgPSByZWdFeHAuZXhlYyh1cmxMaWtlLnJlcGxhY2UoL1tcXChcXCldL2csICcnKSk7XG4gICAgICAgICAgICByZXR1cm4gW3BhcnRzWzFdLCBwYXJ0c1syXSB8fCB1bmRlZmluZWQsIHBhcnRzWzNdIHx8IHVuZGVmaW5lZF07XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VWOE9ySUU6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlVjhPcklFKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFsaW5lLm1hdGNoKENIUk9NRV9JRV9TVEFDS19SRUdFWFApO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJyhldmFsICcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSBldmFsIGluZm9ybWF0aW9uIHVudGlsIHdlIGltcGxlbWVudCBzdGFja3RyYWNlLmpzL3N0YWNrZnJhbWUjOFxuICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC9ldmFsIGNvZGUvZywgJ2V2YWwnKS5yZXBsYWNlKC8oXFwoZXZhbCBhdCBbXlxcKCldKil8KFxcKVxcLC4qJCkvZywgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5yZXBsYWNlKC9eXFxzKy8sICcnKS5yZXBsYWNlKC9cXChldmFsIGNvZGUvZywgJygnKS5zcGxpdCgvXFxzKy8pLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gdG9rZW5zLmpvaW4oJyAnKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gWydldmFsJywgJzxhbm9ueW1vdXM+J10uaW5kZXhPZihsb2NhdGlvblBhcnRzWzBdKSA+IC0xID8gdW5kZWZpbmVkIDogbG9jYXRpb25QYXJ0c1swXTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZUZGT3JTYWZhcmk6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlRkZPclNhZmFyaShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFsaW5lLm1hdGNoKFNBRkFSSV9OQVRJVkVfQ09ERV9SRUdFWFApO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgZXZhbCBpbmZvcm1hdGlvbiB1bnRpbCB3ZSBpbXBsZW1lbnQgc3RhY2t0cmFjZS5qcy9zdGFja2ZyYW1lIzhcbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCcgPiBldmFsJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC8gbGluZSAoXFxkKykoPzogPiBldmFsIGxpbmUgXFxkKykqID4gZXZhbFxcOlxcZCtcXDpcXGQrL2csICc6JDEnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCdAJykgPT09IC0xICYmIGxpbmUuaW5kZXhPZignOicpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTYWZhcmkgZXZhbCBmcmFtZXMgb25seSBoYXZlIGZ1bmN0aW9uIG5hbWVzIGFuZCBub3RoaW5nIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbGluZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5zcGxpdCgnQCcpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0b2tlbnMuam9pbignQCcpIHx8IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbG9jYXRpb25QYXJ0c1swXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYShlKSB7XG4gICAgICAgICAgICBpZiAoIWUuc3RhY2t0cmFjZSB8fCAoZS5tZXNzYWdlLmluZGV4T2YoJ1xcbicpID4gLTEgJiZcbiAgICAgICAgICAgICAgICBlLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpLmxlbmd0aCA+IGUuc3RhY2t0cmFjZS5zcGxpdCgnXFxuJykubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmE5KGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghZS5zdGFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmExMChlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTExKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmE5OiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhOShlKSB7XG4gICAgICAgICAgICB2YXIgbGluZVJFID0gL0xpbmUgKFxcZCspLipzY3JpcHQgKD86aW4gKT8oXFxTKykvaTtcbiAgICAgICAgICAgIHZhciBsaW5lcyA9IGUubWVzc2FnZS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAyLCBsZW4gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmVSRS5leGVjKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVzW2ldXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTEwOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhMTAoZSkge1xuICAgICAgICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspKD86OiBJbiBmdW5jdGlvbiAoXFxTKykpPyQvaTtcbiAgICAgICAgICAgIHZhciBsaW5lcyA9IGUuc3RhY2t0cmFjZS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmVSRS5leGVjKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBtYXRjaFszXSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZXNbaV1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIE9wZXJhIDEwLjY1KyBFcnJvci5zdGFjayB2ZXJ5IHNpbWlsYXIgdG8gRkYvU2FmYXJpXG4gICAgICAgIHBhcnNlT3BlcmExMTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTExKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFsaW5lLm1hdGNoKEZJUkVGT1hfU0FGQVJJX1NUQUNLX1JFR0VYUCkgJiYgIWxpbmUubWF0Y2goL15FcnJvciBjcmVhdGVkIGF0Lyk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGxpbmUuc3BsaXQoJ0AnKTtcbiAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uQ2FsbCA9ICh0b2tlbnMuc2hpZnQoKSB8fCAnJyk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uQ2FsbFxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzxhbm9ueW1vdXMgZnVuY3Rpb24oOiAoXFx3KykpPz4vLCAnJDInKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteXFwpXSpcXCkvZywgJycpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB2YXIgYXJnc1JhdztcbiAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25DYWxsLm1hdGNoKC9cXCgoW15cXCldKilcXCkvKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzUmF3ID0gZnVuY3Rpb25DYWxsLnJlcGxhY2UoL15bXlxcKF0rXFwoKFteXFwpXSopXFwpJC8sICckMScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IChhcmdzUmF3ID09PSB1bmRlZmluZWQgfHwgYXJnc1JhdyA9PT0gJ1thcmd1bWVudHMgbm90IGF2YWlsYWJsZV0nKSA/XG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA6IGFyZ3NSYXcuc3BsaXQoJywnKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbG9jYXRpb25QYXJ0c1swXSxcbiAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcbiIsIi8qIVxuICogQG92ZXJ2aWV3IGVzNi1wcm9taXNlIC0gYSB0aW55IGltcGxlbWVudGF0aW9uIG9mIFByb21pc2VzL0ErLlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTQgWWVodWRhIEthdHosIFRvbSBEYWxlLCBTdGVmYW4gUGVubmVyIGFuZCBjb250cmlidXRvcnMgKENvbnZlcnNpb24gdG8gRVM2IEFQSSBieSBKYWtlIEFyY2hpYmFsZClcbiAqIEBsaWNlbnNlICAgTGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2VcbiAqICAgICAgICAgICAgU2VlIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zdGVmYW5wZW5uZXIvZXM2LXByb21pc2UvbWFzdGVyL0xJQ0VOU0VcbiAqIEB2ZXJzaW9uICAgMy4zLjFcbiAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIChnbG9iYWwuRVM2UHJvbWlzZSA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gb2JqZWN0T3JGdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeCAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxudmFyIF9pc0FycmF5ID0gdW5kZWZpbmVkO1xuaWYgKCFBcnJheS5pc0FycmF5KSB7XG4gIF9pc0FycmF5ID0gZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xufSBlbHNlIHtcbiAgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xufVxuXG52YXIgaXNBcnJheSA9IF9pc0FycmF5O1xuXG52YXIgbGVuID0gMDtcbnZhciB2ZXJ0eE5leHQgPSB1bmRlZmluZWQ7XG52YXIgY3VzdG9tU2NoZWR1bGVyRm4gPSB1bmRlZmluZWQ7XG5cbnZhciBhc2FwID0gZnVuY3Rpb24gYXNhcChjYWxsYmFjaywgYXJnKSB7XG4gIHF1ZXVlW2xlbl0gPSBjYWxsYmFjaztcbiAgcXVldWVbbGVuICsgMV0gPSBhcmc7XG4gIGxlbiArPSAyO1xuICBpZiAobGVuID09PSAyKSB7XG4gICAgLy8gSWYgbGVuIGlzIDIsIHRoYXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHNjaGVkdWxlIGFuIGFzeW5jIGZsdXNoLlxuICAgIC8vIElmIGFkZGl0aW9uYWwgY2FsbGJhY2tzIGFyZSBxdWV1ZWQgYmVmb3JlIHRoZSBxdWV1ZSBpcyBmbHVzaGVkLCB0aGV5XG4gICAgLy8gd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhpcyBmbHVzaCB0aGF0IHdlIGFyZSBzY2hlZHVsaW5nLlxuICAgIGlmIChjdXN0b21TY2hlZHVsZXJGbikge1xuICAgICAgY3VzdG9tU2NoZWR1bGVyRm4oZmx1c2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2hlZHVsZUZsdXNoKCk7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBzZXRTY2hlZHVsZXIoc2NoZWR1bGVGbikge1xuICBjdXN0b21TY2hlZHVsZXJGbiA9IHNjaGVkdWxlRm47XG59XG5cbmZ1bmN0aW9uIHNldEFzYXAoYXNhcEZuKSB7XG4gIGFzYXAgPSBhc2FwRm47XG59XG5cbnZhciBicm93c2VyV2luZG93ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB1bmRlZmluZWQ7XG52YXIgYnJvd3Nlckdsb2JhbCA9IGJyb3dzZXJXaW5kb3cgfHwge307XG52YXIgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIgPSBicm93c2VyR2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgYnJvd3Nlckdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGlzTm9kZSA9IHR5cGVvZiBzZWxmID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHt9KS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXSc7XG5cbi8vIHRlc3QgZm9yIHdlYiB3b3JrZXIgYnV0IG5vdCBpbiBJRTEwXG52YXIgaXNXb3JrZXIgPSB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBub2RlXG5mdW5jdGlvbiB1c2VOZXh0VGljaygpIHtcbiAgLy8gbm9kZSB2ZXJzaW9uIDAuMTAueCBkaXNwbGF5cyBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2hlbiBuZXh0VGljayBpcyB1c2VkIHJlY3Vyc2l2ZWx5XG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY3Vqb2pzL3doZW4vaXNzdWVzLzQxMCBmb3IgZGV0YWlsc1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgfTtcbn1cblxuLy8gdmVydHhcbmZ1bmN0aW9uIHVzZVZlcnR4VGltZXIoKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmVydHhOZXh0KGZsdXNoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcigpIHtcbiAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpO1xuICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBub2RlLmRhdGEgPSBpdGVyYXRpb25zID0gKytpdGVyYXRpb25zICUgMjtcbiAgfTtcbn1cblxuLy8gd2ViIHdvcmtlclxuZnVuY3Rpb24gdXNlTWVzc2FnZUNoYW5uZWwoKSB7XG4gIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZmx1c2g7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVNldFRpbWVvdXQoKSB7XG4gIC8vIFN0b3JlIHNldFRpbWVvdXQgcmVmZXJlbmNlIHNvIGVzNi1wcm9taXNlIHdpbGwgYmUgdW5hZmZlY3RlZCBieVxuICAvLyBvdGhlciBjb2RlIG1vZGlmeWluZyBzZXRUaW1lb3V0IChsaWtlIHNpbm9uLnVzZUZha2VUaW1lcnMoKSlcbiAgdmFyIGdsb2JhbFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnbG9iYWxTZXRUaW1lb3V0KGZsdXNoLCAxKTtcbiAgfTtcbn1cblxudmFyIHF1ZXVlID0gbmV3IEFycmF5KDEwMDApO1xuZnVuY3Rpb24gZmx1c2goKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICB2YXIgY2FsbGJhY2sgPSBxdWV1ZVtpXTtcbiAgICB2YXIgYXJnID0gcXVldWVbaSArIDFdO1xuXG4gICAgY2FsbGJhY2soYXJnKTtcblxuICAgIHF1ZXVlW2ldID0gdW5kZWZpbmVkO1xuICAgIHF1ZXVlW2kgKyAxXSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxlbiA9IDA7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRWZXJ0eCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgciA9IHJlcXVpcmU7XG4gICAgdmFyIHZlcnR4ID0gcigndmVydHgnKTtcbiAgICB2ZXJ0eE5leHQgPSB2ZXJ0eC5ydW5Pbkxvb3AgfHwgdmVydHgucnVuT25Db250ZXh0O1xuICAgIHJldHVybiB1c2VWZXJ0eFRpbWVyKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdXNlU2V0VGltZW91dCgpO1xuICB9XG59XG5cbnZhciBzY2hlZHVsZUZsdXNoID0gdW5kZWZpbmVkO1xuLy8gRGVjaWRlIHdoYXQgYXN5bmMgbWV0aG9kIHRvIHVzZSB0byB0cmlnZ2VyaW5nIHByb2Nlc3Npbmcgb2YgcXVldWVkIGNhbGxiYWNrczpcbmlmIChpc05vZGUpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZU5leHRUaWNrKCk7XG59IGVsc2UgaWYgKEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNdXRhdGlvbk9ic2VydmVyKCk7XG59IGVsc2UgaWYgKGlzV29ya2VyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNZXNzYWdlQ2hhbm5lbCgpO1xufSBlbHNlIGlmIChicm93c2VyV2luZG93ID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IGF0dGVtcHRWZXJ0eCgpO1xufSBlbHNlIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZVNldFRpbWVvdXQoKTtcbn1cblxuZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX2FyZ3VtZW50cyA9IGFyZ3VtZW50cztcblxuICB2YXIgcGFyZW50ID0gdGhpcztcblxuICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcihub29wKTtcblxuICBpZiAoY2hpbGRbUFJPTUlTRV9JRF0gPT09IHVuZGVmaW5lZCkge1xuICAgIG1ha2VQcm9taXNlKGNoaWxkKTtcbiAgfVxuXG4gIHZhciBfc3RhdGUgPSBwYXJlbnQuX3N0YXRlO1xuXG4gIGlmIChfc3RhdGUpIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNhbGxiYWNrID0gX2FyZ3VtZW50c1tfc3RhdGUgLSAxXTtcbiAgICAgIGFzYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gaW52b2tlQ2FsbGJhY2soX3N0YXRlLCBjaGlsZCwgY2FsbGJhY2ssIHBhcmVudC5fcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pKCk7XG4gIH0gZWxzZSB7XG4gICAgc3Vic2NyaWJlKHBhcmVudCwgY2hpbGQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZDtcbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlc29sdmVgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgcmVzb2x2ZWQgd2l0aCB0aGVcbiAgcGFzc2VkIGB2YWx1ZWAuIEl0IGlzIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICByZXNvbHZlKDEpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGFib3ZlLCB5b3VyIGNvZGUgbm93IHNpbXBseSBiZWNvbWVzIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgxKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIHJlc29sdmVcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gdmFsdWUgdmFsdWUgdGhhdCB0aGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGhcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCB3aWxsIGJlY29tZSBmdWxmaWxsZWQgd2l0aCB0aGUgZ2l2ZW5cbiAgYHZhbHVlYFxuKi9cbmZ1bmN0aW9uIHJlc29sdmUob2JqZWN0KSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QuY29uc3RydWN0b3IgPT09IENvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVzb2x2ZShwcm9taXNlLCBvYmplY3QpO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIFBST01JU0VfSUQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpO1xuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIFBFTkRJTkcgPSB2b2lkIDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG5cbnZhciBHRVRfVEhFTl9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiBzZWxmRnVsZmlsbG1lbnQoKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZlwiKTtcbn1cblxuZnVuY3Rpb24gY2Fubm90UmV0dXJuT3duKCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcignQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLicpO1xufVxuXG5mdW5jdGlvbiBnZXRUaGVuKHByb21pc2UpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcHJvbWlzZS50aGVuO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIEdFVF9USEVOX0VSUk9SLmVycm9yID0gZXJyb3I7XG4gICAgcmV0dXJuIEdFVF9USEVOX0VSUk9SO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVRoZW4odGhlbiwgdmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcikge1xuICB0cnkge1xuICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSwgdGhlbikge1xuICBhc2FwKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgdmFyIHNlYWxlZCA9IGZhbHNlO1xuICAgIHZhciBlcnJvciA9IHRyeVRoZW4odGhlbiwgdGhlbmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkge1xuICAgICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoc2VhbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlYWxlZCA9IHRydWU7XG5cbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9LCAnU2V0dGxlOiAnICsgKHByb21pc2UuX2xhYmVsIHx8ICcgdW5rbm93biBwcm9taXNlJykpO1xuXG4gICAgaWYgKCFzZWFsZWQgJiYgZXJyb3IpIHtcbiAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9XG4gIH0sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSkge1xuICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBGVUxGSUxMRUQpIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2UgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZSh0aGVuYWJsZSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUsIHRoZW4kJCkge1xuICBpZiAobWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3RvciA9PT0gcHJvbWlzZS5jb25zdHJ1Y3RvciAmJiB0aGVuJCQgPT09IHRoZW4gJiYgbWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3Rvci5yZXNvbHZlID09PSByZXNvbHZlKSB7XG4gICAgaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRoZW4kJCA9PT0gR0VUX1RIRU5fRVJST1IpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgR0VUX1RIRU5fRVJST1IuZXJyb3IpO1xuICAgIH0gZWxzZSBpZiAodGhlbiQkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoZW4kJCkpIHtcbiAgICAgIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuJCQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHNlbGZGdWxmaWxsbWVudCgpKTtcbiAgfSBlbHNlIGlmIChvYmplY3RPckZ1bmN0aW9uKHZhbHVlKSkge1xuICAgIGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUsIGdldFRoZW4odmFsdWUpKTtcbiAgfSBlbHNlIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdWJsaXNoUmVqZWN0aW9uKHByb21pc2UpIHtcbiAgaWYgKHByb21pc2UuX29uZXJyb3IpIHtcbiAgICBwcm9taXNlLl9vbmVycm9yKHByb21pc2UuX3Jlc3VsdCk7XG4gIH1cblxuICBwdWJsaXNoKHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHByb21pc2UsIHZhbHVlKSB7XG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHByb21pc2UuX3Jlc3VsdCA9IHZhbHVlO1xuICBwcm9taXNlLl9zdGF0ZSA9IEZVTEZJTExFRDtcblxuICBpZiAocHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgYXNhcChwdWJsaXNoLCBwcm9taXNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVqZWN0KHByb21pc2UsIHJlYXNvbikge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJvbWlzZS5fc3RhdGUgPSBSRUpFQ1RFRDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gcmVhc29uO1xuXG4gIGFzYXAocHVibGlzaFJlamVjdGlvbiwgcHJvbWlzZSk7XG59XG5cbmZ1bmN0aW9uIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX3N1YnNjcmliZXJzID0gcGFyZW50Ll9zdWJzY3JpYmVycztcbiAgdmFyIGxlbmd0aCA9IF9zdWJzY3JpYmVycy5sZW5ndGg7XG5cbiAgcGFyZW50Ll9vbmVycm9yID0gbnVsbDtcblxuICBfc3Vic2NyaWJlcnNbbGVuZ3RoXSA9IGNoaWxkO1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgRlVMRklMTEVEXSA9IG9uRnVsZmlsbG1lbnQ7XG4gIF9zdWJzY3JpYmVyc1tsZW5ndGggKyBSRUpFQ1RFRF0gPSBvblJlamVjdGlvbjtcblxuICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHtcbiAgICBhc2FwKHB1Ymxpc2gsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaChwcm9taXNlKSB7XG4gIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJzO1xuICB2YXIgc2V0dGxlZCA9IHByb21pc2UuX3N0YXRlO1xuXG4gIGlmIChzdWJzY3JpYmVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY2hpbGQgPSB1bmRlZmluZWQsXG4gICAgICBjYWxsYmFjayA9IHVuZGVmaW5lZCxcbiAgICAgIGRldGFpbCA9IHByb21pc2UuX3Jlc3VsdDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgY2hpbGQgPSBzdWJzY3JpYmVyc1tpXTtcbiAgICBjYWxsYmFjayA9IHN1YnNjcmliZXJzW2kgKyBzZXR0bGVkXTtcblxuICAgIGlmIChjaGlsZCkge1xuICAgICAgaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgY2hpbGQsIGNhbGxiYWNrLCBkZXRhaWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhkZXRhaWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG59XG5cbmZ1bmN0aW9uIEVycm9yT2JqZWN0KCkge1xuICB0aGlzLmVycm9yID0gbnVsbDtcbn1cblxudmFyIFRSWV9DQVRDSF9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGRldGFpbCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBUUllfQ0FUQ0hfRVJST1IuZXJyb3IgPSBlO1xuICAgIHJldHVybiBUUllfQ0FUQ0hfRVJST1I7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgcHJvbWlzZSwgY2FsbGJhY2ssIGRldGFpbCkge1xuICB2YXIgaGFzQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKGNhbGxiYWNrKSxcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkLFxuICAgICAgZXJyb3IgPSB1bmRlZmluZWQsXG4gICAgICBzdWNjZWVkZWQgPSB1bmRlZmluZWQsXG4gICAgICBmYWlsZWQgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKGhhc0NhbGxiYWNrKSB7XG4gICAgdmFsdWUgPSB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gVFJZX0NBVENIX0VSUk9SKSB7XG4gICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgZXJyb3IgPSB2YWx1ZS5lcnJvcjtcbiAgICAgIHZhbHVlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgY2Fubm90UmV0dXJuT3duKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGRldGFpbDtcbiAgICBzdWNjZWVkZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgLy8gbm9vcFxuICB9IGVsc2UgaWYgKGhhc0NhbGxiYWNrICYmIHN1Y2NlZWRlZCkge1xuICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoZmFpbGVkKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9IGVsc2UgaWYgKHNldHRsZWQgPT09IEZVTEZJTExFRCkge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplUHJvbWlzZShwcm9taXNlLCByZXNvbHZlcikge1xuICB0cnkge1xuICAgIHJlc29sdmVyKGZ1bmN0aW9uIHJlc29sdmVQcm9taXNlKHZhbHVlKSB7XG4gICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gcmVqZWN0UHJvbWlzZShyZWFzb24pIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIF9yZWplY3QocHJvbWlzZSwgZSk7XG4gIH1cbn1cblxudmFyIGlkID0gMDtcbmZ1bmN0aW9uIG5leHRJZCgpIHtcbiAgcmV0dXJuIGlkKys7XG59XG5cbmZ1bmN0aW9uIG1ha2VQcm9taXNlKHByb21pc2UpIHtcbiAgcHJvbWlzZVtQUk9NSVNFX0lEXSA9IGlkKys7XG4gIHByb21pc2UuX3N0YXRlID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9yZXN1bHQgPSB1bmRlZmluZWQ7XG4gIHByb21pc2UuX3N1YnNjcmliZXJzID0gW107XG59XG5cbmZ1bmN0aW9uIEVudW1lcmF0b3IoQ29uc3RydWN0b3IsIGlucHV0KSB7XG4gIHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgdGhpcy5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuXG4gIGlmICghdGhpcy5wcm9taXNlW1BST01JU0VfSURdKSB7XG4gICAgbWFrZVByb21pc2UodGhpcy5wcm9taXNlKTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5sZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgdGhpcy5fcmVtYWluaW5nID0gaW5wdXQubGVuZ3RoO1xuXG4gICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGggfHwgMDtcbiAgICAgIHRoaXMuX2VudW1lcmF0ZSgpO1xuICAgICAgaWYgKHRoaXMuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICBmdWxmaWxsKHRoaXMucHJvbWlzZSwgdGhpcy5fcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgX3JlamVjdCh0aGlzLnByb21pc2UsIHZhbGlkYXRpb25FcnJvcigpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0aW9uRXJyb3IoKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0FycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheScpO1xufTtcblxuRW51bWVyYXRvci5wcm90b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICB2YXIgX2lucHV0ID0gdGhpcy5faW5wdXQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IHRoaXMuX3N0YXRlID09PSBQRU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHRoaXMuX2VhY2hFbnRyeShfaW5wdXRbaV0sIGkpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVudHJ5ID0gZnVuY3Rpb24gKGVudHJ5LCBpKSB7XG4gIHZhciBjID0gdGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcjtcbiAgdmFyIHJlc29sdmUkJCA9IGMucmVzb2x2ZTtcblxuICBpZiAocmVzb2x2ZSQkID09PSByZXNvbHZlKSB7XG4gICAgdmFyIF90aGVuID0gZ2V0VGhlbihlbnRyeSk7XG5cbiAgICBpZiAoX3RoZW4gPT09IHRoZW4gJiYgZW50cnkuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgICB0aGlzLl9zZXR0bGVkQXQoZW50cnkuX3N0YXRlLCBpLCBlbnRyeS5fcmVzdWx0KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBfdGhlbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fcmVtYWluaW5nLS07XG4gICAgICB0aGlzLl9yZXN1bHRbaV0gPSBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGMgPT09IFByb21pc2UpIHtcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IGMobm9vcCk7XG4gICAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIGVudHJ5LCBfdGhlbik7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQocHJvbWlzZSwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgYyhmdW5jdGlvbiAocmVzb2x2ZSQkKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlJCQoZW50cnkpO1xuICAgICAgfSksIGkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl93aWxsU2V0dGxlQXQocmVzb2x2ZSQkKGVudHJ5KSwgaSk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl9zZXR0bGVkQXQgPSBmdW5jdGlvbiAoc3RhdGUsIGksIHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gUEVORElORykge1xuICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuXG4gICAgaWYgKHN0YXRlID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jlc3VsdFtpXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbiAocHJvbWlzZSwgaSkge1xuICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgc3Vic2NyaWJlKHByb21pc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVudW1lcmF0b3IuX3NldHRsZWRBdChGVUxGSUxMRUQsIGksIHZhbHVlKTtcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoUkVKRUNURUQsIGksIHJlYXNvbik7XG4gIH0pO1xufTtcblxuLyoqXG4gIGBQcm9taXNlLmFsbGAgYWNjZXB0cyBhbiBhcnJheSBvZiBwcm9taXNlcywgYW5kIHJldHVybnMgYSBuZXcgcHJvbWlzZSB3aGljaFxuICBpcyBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSBvZiBmdWxmaWxsbWVudCB2YWx1ZXMgZm9yIHRoZSBwYXNzZWQgcHJvbWlzZXMsIG9yXG4gIHJlamVjdGVkIHdpdGggdGhlIHJlYXNvbiBvZiB0aGUgZmlyc3QgcGFzc2VkIHByb21pc2UgdG8gYmUgcmVqZWN0ZWQuIEl0IGNhc3RzIGFsbFxuICBlbGVtZW50cyBvZiB0aGUgcGFzc2VkIGl0ZXJhYmxlIHRvIHByb21pc2VzIGFzIGl0IHJ1bnMgdGhpcyBhbGdvcml0aG0uXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlc29sdmUoMik7XG4gIGxldCBwcm9taXNlMyA9IHJlc29sdmUoMyk7XG4gIGxldCBwcm9taXNlcyA9IFsgcHJvbWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdO1xuXG4gIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGFycmF5KXtcbiAgICAvLyBUaGUgYXJyYXkgaGVyZSB3b3VsZCBiZSBbIDEsIDIsIDMgXTtcbiAgfSk7XG4gIGBgYFxuXG4gIElmIGFueSBvZiB0aGUgYHByb21pc2VzYCBnaXZlbiB0byBgYWxsYCBhcmUgcmVqZWN0ZWQsIHRoZSBmaXJzdCBwcm9taXNlXG4gIHRoYXQgaXMgcmVqZWN0ZWQgd2lsbCBiZSBnaXZlbiBhcyBhbiBhcmd1bWVudCB0byB0aGUgcmV0dXJuZWQgcHJvbWlzZXMnc1xuICByZWplY3Rpb24gaGFuZGxlci4gRm9yIGV4YW1wbGU6XG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlamVjdChuZXcgRXJyb3IoXCIyXCIpKTtcbiAgbGV0IHByb21pc2UzID0gcmVqZWN0KG5ldyBFcnJvcihcIjNcIikpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gQ29kZSBoZXJlIG5ldmVyIHJ1bnMgYmVjYXVzZSB0aGVyZSBhcmUgcmVqZWN0ZWQgcHJvbWlzZXMhXG4gIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgLy8gZXJyb3IubWVzc2FnZSA9PT0gXCIyXCJcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgYWxsXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBcnJheX0gZW50cmllcyBhcnJheSBvZiBwcm9taXNlc1xuICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsIGBwcm9taXNlc2AgaGF2ZSBiZWVuXG4gIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQgaWYgYW55IG9mIHRoZW0gYmVjb21lIHJlamVjdGVkLlxuICBAc3RhdGljXG4qL1xuZnVuY3Rpb24gYWxsKGVudHJpZXMpIHtcbiAgcmV0dXJuIG5ldyBFbnVtZXJhdG9yKHRoaXMsIGVudHJpZXMpLnByb21pc2U7XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yYWNlYCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2ggaXMgc2V0dGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlXG4gIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIHNldHRsZS5cblxuICBFeGFtcGxlOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMicpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIHJlc3VsdCA9PT0gJ3Byb21pc2UgMicgYmVjYXVzZSBpdCB3YXMgcmVzb2x2ZWQgYmVmb3JlIHByb21pc2UxXG4gICAgLy8gd2FzIHJlc29sdmVkLlxuICB9KTtcbiAgYGBgXG5cbiAgYFByb21pc2UucmFjZWAgaXMgZGV0ZXJtaW5pc3RpYyBpbiB0aGF0IG9ubHkgdGhlIHN0YXRlIG9mIHRoZSBmaXJzdFxuICBzZXR0bGVkIHByb21pc2UgbWF0dGVycy4gRm9yIGV4YW1wbGUsIGV2ZW4gaWYgb3RoZXIgcHJvbWlzZXMgZ2l2ZW4gdG8gdGhlXG4gIGBwcm9taXNlc2AgYXJyYXkgYXJndW1lbnQgYXJlIHJlc29sdmVkLCBidXQgdGhlIGZpcnN0IHNldHRsZWQgcHJvbWlzZSBoYXNcbiAgYmVjb21lIHJlamVjdGVkIGJlZm9yZSB0aGUgb3RoZXIgcHJvbWlzZXMgYmVjYW1lIGZ1bGZpbGxlZCwgdGhlIHJldHVybmVkXG4gIHByb21pc2Ugd2lsbCBiZWNvbWUgcmVqZWN0ZWQ6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMScpO1xuICAgIH0sIDIwMCk7XG4gIH0pO1xuXG4gIGxldCBwcm9taXNlMiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcigncHJvbWlzZSAyJykpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgcHJvbWlzZSAyIGJlY2FtZSByZWplY3RlZCBiZWZvcmVcbiAgICAvLyBwcm9taXNlIDEgYmVjYW1lIGZ1bGZpbGxlZFxuICB9KTtcbiAgYGBgXG5cbiAgQW4gZXhhbXBsZSByZWFsLXdvcmxkIHVzZSBjYXNlIGlzIGltcGxlbWVudGluZyB0aW1lb3V0czpcblxuICBgYGBqYXZhc2NyaXB0XG4gIFByb21pc2UucmFjZShbYWpheCgnZm9vLmpzb24nKSwgdGltZW91dCg1MDAwKV0pXG4gIGBgYFxuXG4gIEBtZXRob2QgcmFjZVxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IHByb21pc2VzIGFycmF5IG9mIHByb21pc2VzIHRvIG9ic2VydmVcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2Ugd2hpY2ggc2V0dGxlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGZpcnN0IHBhc3NlZFxuICBwcm9taXNlIHRvIHNldHRsZS5cbiovXG5mdW5jdGlvbiByYWNlKGVudHJpZXMpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuICBpZiAoIWlzQXJyYXkoZW50cmllcykpIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChfLCByZWplY3QpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLicpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBsZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgQ29uc3RydWN0b3IucmVzb2x2ZShlbnRyaWVzW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlamVjdGAgcmV0dXJucyBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgcGFzc2VkIGByZWFzb25gLlxuICBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgcmVqZWN0KG5ldyBFcnJvcignV0hPT1BTJykpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCByZWplY3RcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gcmVhc29uIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCB3aXRoLlxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSByZWplY3RlZCB3aXRoIHRoZSBnaXZlbiBgcmVhc29uYC5cbiovXG5mdW5jdGlvbiByZWplY3QocmVhc29uKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBuZWVkc1Jlc29sdmVyKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yJyk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzTmV3KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xufVxuXG4vKipcbiAgUHJvbWlzZSBvYmplY3RzIHJlcHJlc2VudCB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFRoZVxuICBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaFxuICByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb25cbiAgd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG5cbiAgVGVybWlub2xvZ3lcbiAgLS0tLS0tLS0tLS1cblxuICAtIGBwcm9taXNlYCBpcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24gd2l0aCBhIGB0aGVuYCBtZXRob2Qgd2hvc2UgYmVoYXZpb3IgY29uZm9ybXMgdG8gdGhpcyBzcGVjaWZpY2F0aW9uLlxuICAtIGB0aGVuYWJsZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBhIGB0aGVuYCBtZXRob2QuXG4gIC0gYHZhbHVlYCBpcyBhbnkgbGVnYWwgSmF2YVNjcmlwdCB2YWx1ZSAoaW5jbHVkaW5nIHVuZGVmaW5lZCwgYSB0aGVuYWJsZSwgb3IgYSBwcm9taXNlKS5cbiAgLSBgZXhjZXB0aW9uYCBpcyBhIHZhbHVlIHRoYXQgaXMgdGhyb3duIHVzaW5nIHRoZSB0aHJvdyBzdGF0ZW1lbnQuXG4gIC0gYHJlYXNvbmAgaXMgYSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aHkgYSBwcm9taXNlIHdhcyByZWplY3RlZC5cbiAgLSBgc2V0dGxlZGAgdGhlIGZpbmFsIHJlc3Rpbmcgc3RhdGUgb2YgYSBwcm9taXNlLCBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG5cbiAgQSBwcm9taXNlIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOiBwZW5kaW5nLCBmdWxmaWxsZWQsIG9yIHJlamVjdGVkLlxuXG4gIFByb21pc2VzIHRoYXQgYXJlIGZ1bGZpbGxlZCBoYXZlIGEgZnVsZmlsbG1lbnQgdmFsdWUgYW5kIGFyZSBpbiB0aGUgZnVsZmlsbGVkXG4gIHN0YXRlLiAgUHJvbWlzZXMgdGhhdCBhcmUgcmVqZWN0ZWQgaGF2ZSBhIHJlamVjdGlvbiByZWFzb24gYW5kIGFyZSBpbiB0aGVcbiAgcmVqZWN0ZWQgc3RhdGUuICBBIGZ1bGZpbGxtZW50IHZhbHVlIGlzIG5ldmVyIGEgdGhlbmFibGUuXG5cbiAgUHJvbWlzZXMgY2FuIGFsc28gYmUgc2FpZCB0byAqcmVzb2x2ZSogYSB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgYWxzbyBhXG4gIHByb21pc2UsIHRoZW4gdGhlIG9yaWdpbmFsIHByb21pc2UncyBzZXR0bGVkIHN0YXRlIHdpbGwgbWF0Y2ggdGhlIHZhbHVlJ3NcbiAgc2V0dGxlZCBzdGF0ZS4gIFNvIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyB3aWxsXG4gIGl0c2VsZiByZWplY3QsIGFuZCBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpbGxcbiAgaXRzZWxmIGZ1bGZpbGwuXG5cblxuICBCYXNpYyBVc2FnZTpcbiAgLS0tLS0tLS0tLS0tXG5cbiAgYGBganNcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAvLyBvbiBzdWNjZXNzXG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG5cbiAgICAvLyBvbiBmYWlsdXJlXG4gICAgcmVqZWN0KHJlYXNvbik7XG4gIH0pO1xuXG4gIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgQWR2YW5jZWQgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLS0tLVxuXG4gIFByb21pc2VzIHNoaW5lIHdoZW4gYWJzdHJhY3RpbmcgYXdheSBhc3luY2hyb25vdXMgaW50ZXJhY3Rpb25zIHN1Y2ggYXNcbiAgYFhNTEh0dHBSZXF1ZXN0YHMuXG5cbiAgYGBganNcbiAgZnVuY3Rpb24gZ2V0SlNPTih1cmwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICAgIGxldCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7XG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHhoci5zZW5kKCk7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IHRoaXMuRE9ORSkge1xuICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdnZXRKU09OOiBgJyArIHVybCArICdgIGZhaWxlZCB3aXRoIHN0YXR1czogWycgKyB0aGlzLnN0YXR1cyArICddJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEpTT04oJy9wb3N0cy5qc29uJykudGhlbihmdW5jdGlvbihqc29uKSB7XG4gICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgLy8gb24gcmVqZWN0aW9uXG4gIH0pO1xuICBgYGBcblxuICBVbmxpa2UgY2FsbGJhY2tzLCBwcm9taXNlcyBhcmUgZ3JlYXQgY29tcG9zYWJsZSBwcmltaXRpdmVzLlxuXG4gIGBgYGpzXG4gIFByb21pc2UuYWxsKFtcbiAgICBnZXRKU09OKCcvcG9zdHMnKSxcbiAgICBnZXRKU09OKCcvY29tbWVudHMnKVxuICBdKS50aGVuKGZ1bmN0aW9uKHZhbHVlcyl7XG4gICAgdmFsdWVzWzBdIC8vID0+IHBvc3RzSlNPTlxuICAgIHZhbHVlc1sxXSAvLyA9PiBjb21tZW50c0pTT05cblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH0pO1xuICBgYGBcblxuICBAY2xhc3MgUHJvbWlzZVxuICBAcGFyYW0ge2Z1bmN0aW9ufSByZXNvbHZlclxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEBjb25zdHJ1Y3RvclxuKi9cbmZ1bmN0aW9uIFByb21pc2UocmVzb2x2ZXIpIHtcbiAgdGhpc1tQUk9NSVNFX0lEXSA9IG5leHRJZCgpO1xuICB0aGlzLl9yZXN1bHQgPSB0aGlzLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fc3Vic2NyaWJlcnMgPSBbXTtcblxuICBpZiAobm9vcCAhPT0gcmVzb2x2ZXIpIHtcbiAgICB0eXBlb2YgcmVzb2x2ZXIgIT09ICdmdW5jdGlvbicgJiYgbmVlZHNSZXNvbHZlcigpO1xuICAgIHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlID8gaW5pdGlhbGl6ZVByb21pc2UodGhpcywgcmVzb2x2ZXIpIDogbmVlZHNOZXcoKTtcbiAgfVxufVxuXG5Qcm9taXNlLmFsbCA9IGFsbDtcblByb21pc2UucmFjZSA9IHJhY2U7XG5Qcm9taXNlLnJlc29sdmUgPSByZXNvbHZlO1xuUHJvbWlzZS5yZWplY3QgPSByZWplY3Q7XG5Qcm9taXNlLl9zZXRTY2hlZHVsZXIgPSBzZXRTY2hlZHVsZXI7XG5Qcm9taXNlLl9zZXRBc2FwID0gc2V0QXNhcDtcblByb21pc2UuX2FzYXAgPSBhc2FwO1xuXG5Qcm9taXNlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFByb21pc2UsXG5cbiAgLyoqXG4gICAgVGhlIHByaW1hcnkgd2F5IG9mIGludGVyYWN0aW5nIHdpdGggYSBwcm9taXNlIGlzIHRocm91Z2ggaXRzIGB0aGVuYCBtZXRob2QsXG4gICAgd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGVcbiAgICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uKHVzZXIpe1xuICAgICAgLy8gdXNlciBpcyBhdmFpbGFibGVcbiAgICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gdXNlciBpcyB1bmF2YWlsYWJsZSwgYW5kIHlvdSBhcmUgZ2l2ZW4gdGhlIHJlYXNvbiB3aHlcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQ2hhaW5pbmdcbiAgICAtLS0tLS0tLVxuICBcbiAgICBUaGUgcmV0dXJuIHZhbHVlIG9mIGB0aGVuYCBpcyBpdHNlbGYgYSBwcm9taXNlLiAgVGhpcyBzZWNvbmQsICdkb3duc3RyZWFtJ1xuICAgIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmaXJzdCBwcm9taXNlJ3MgZnVsZmlsbG1lbnRcbiAgICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiB1c2VyLm5hbWU7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuICdkZWZhdWx0IG5hbWUnO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHVzZXJOYW1lKSB7XG4gICAgICAvLyBJZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHVzZXJOYW1lYCB3aWxsIGJlIHRoZSB1c2VyJ3MgbmFtZSwgb3RoZXJ3aXNlIGl0XG4gICAgICAvLyB3aWxsIGJlIGAnZGVmYXVsdCBuYW1lJ2BcbiAgICB9KTtcbiAgXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jyk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdyZSB1bmhhcHB5Jyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAvLyBpZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHJlYXNvbmAgd2lsbCBiZSAnRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknLlxuICAgICAgLy8gSWYgYGZpbmRVc2VyYCByZWplY3RlZCwgYHJlYXNvbmAgd2lsbCBiZSAnYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScuXG4gICAgfSk7XG4gICAgYGBgXG4gICAgSWYgdGhlIGRvd25zdHJlYW0gcHJvbWlzZSBkb2VzIG5vdCBzcGVjaWZ5IGEgcmVqZWN0aW9uIGhhbmRsZXIsIHJlamVjdGlvbiByZWFzb25zIHdpbGwgYmUgcHJvcGFnYXRlZCBmdXJ0aGVyIGRvd25zdHJlYW0uXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEFzc2ltaWxhdGlvblxuICAgIC0tLS0tLS0tLS0tLVxuICBcbiAgICBTb21ldGltZXMgdGhlIHZhbHVlIHlvdSB3YW50IHRvIHByb3BhZ2F0ZSB0byBhIGRvd25zdHJlYW0gcHJvbWlzZSBjYW4gb25seSBiZVxuICAgIHJldHJpZXZlZCBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpbiB0aGVcbiAgICBmdWxmaWxsbWVudCBvciByZWplY3Rpb24gaGFuZGxlci4gVGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIHRoZW4gYmUgcGVuZGluZ1xuICAgIHVudGlsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHNldHRsZWQuIFRoaXMgaXMgY2FsbGVkICphc3NpbWlsYXRpb24qLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBUaGUgdXNlcidzIGNvbW1lbnRzIGFyZSBub3cgYXZhaWxhYmxlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIElmIHRoZSBhc3NpbWxpYXRlZCBwcm9taXNlIHJlamVjdHMsIHRoZW4gdGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIGFsc28gcmVqZWN0LlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIGZ1bGZpbGxzLCB3ZSdsbCBoYXZlIHRoZSB2YWx1ZSBoZXJlXG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCByZWplY3RzLCB3ZSdsbCBoYXZlIHRoZSByZWFzb24gaGVyZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBTaW1wbGUgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCByZXN1bHQ7XG4gIFxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBmaW5kUmVzdWx0KCk7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9XG4gICAgYGBgXG4gIFxuICAgIEVycmJhY2sgRXhhbXBsZVxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRSZXN1bHQoZnVuY3Rpb24ocmVzdWx0LCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIFByb21pc2UgRXhhbXBsZTtcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGZpbmRSZXN1bHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQWR2YW5jZWQgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCBhdXRob3IsIGJvb2tzO1xuICBcbiAgICB0cnkge1xuICAgICAgYXV0aG9yID0gZmluZEF1dGhvcigpO1xuICAgICAgYm9va3MgID0gZmluZEJvb2tzQnlBdXRob3IoYXV0aG9yKTtcbiAgICAgIC8vIHN1Y2Nlc3NcbiAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgLy8gZmFpbHVyZVxuICAgIH1cbiAgICBgYGBcbiAgXG4gICAgRXJyYmFjayBFeGFtcGxlXG4gIFxuICAgIGBgYGpzXG4gIFxuICAgIGZ1bmN0aW9uIGZvdW5kQm9va3MoYm9va3MpIHtcbiAgXG4gICAgfVxuICBcbiAgICBmdW5jdGlvbiBmYWlsdXJlKHJlYXNvbikge1xuICBcbiAgICB9XG4gIFxuICAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgIC8vIGZhaWx1cmVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvdW5kQm9va3MoYm9va3MpO1xuICAgICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICAgIGZhaWx1cmUocmVhc29uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgUHJvbWlzZSBFeGFtcGxlO1xuICBcbiAgICBgYGBqYXZhc2NyaXB0XG4gICAgZmluZEF1dGhvcigpLlxuICAgICAgdGhlbihmaW5kQm9va3NCeUF1dGhvcikuXG4gICAgICB0aGVuKGZ1bmN0aW9uKGJvb2tzKXtcbiAgICAgICAgLy8gZm91bmQgYm9va3NcbiAgICB9KS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQG1ldGhvZCB0aGVuXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25GdWxmaWxsZWRcbiAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG4gIHRoZW46IHRoZW4sXG5cbiAgLyoqXG4gICAgYGNhdGNoYCBpcyBzaW1wbHkgc3VnYXIgZm9yIGB0aGVuKHVuZGVmaW5lZCwgb25SZWplY3Rpb24pYCB3aGljaCBtYWtlcyBpdCB0aGUgc2FtZVxuICAgIGFzIHRoZSBjYXRjaCBibG9jayBvZiBhIHRyeS9jYXRjaCBzdGF0ZW1lbnQuXG4gIFxuICAgIGBgYGpzXG4gICAgZnVuY3Rpb24gZmluZEF1dGhvcigpe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZG4ndCBmaW5kIHRoYXQgYXV0aG9yJyk7XG4gICAgfVxuICBcbiAgICAvLyBzeW5jaHJvbm91c1xuICAgIHRyeSB7XG4gICAgICBmaW5kQXV0aG9yKCk7XG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfVxuICBcbiAgICAvLyBhc3luYyB3aXRoIHByb21pc2VzXG4gICAgZmluZEF1dGhvcigpLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBAbWV0aG9kIGNhdGNoXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgQHJldHVybiB7UHJvbWlzZX1cbiAgKi9cbiAgJ2NhdGNoJzogZnVuY3Rpb24gX2NhdGNoKG9uUmVqZWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGlvbik7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHBvbHlmaWxsKCkge1xuICAgIHZhciBsb2NhbCA9IHVuZGVmaW5lZDtcblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IGdsb2JhbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvY2FsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBQID0gbG9jYWwuUHJvbWlzZTtcblxuICAgIGlmIChQKSB7XG4gICAgICAgIHZhciBwcm9taXNlVG9TdHJpbmcgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvbWlzZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFAucmVzb2x2ZSgpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gc2lsZW50bHkgaWdub3JlZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb21pc2VUb1N0cmluZyA9PT0gJ1tvYmplY3QgUHJvbWlzZV0nICYmICFQLmNhc3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvY2FsLlByb21pc2UgPSBQcm9taXNlO1xufVxuXG5wb2x5ZmlsbCgpO1xuLy8gU3RyYW5nZSBjb21wYXQuLlxuUHJvbWlzZS5wb2x5ZmlsbCA9IHBvbHlmaWxsO1xuUHJvbWlzZS5Qcm9taXNlID0gUHJvbWlzZTtcblxucmV0dXJuIFByb21pc2U7XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lczYtcHJvbWlzZS5tYXAiLCIvKiEgSlNPTiB2My4zLjIgfCBodHRwOi8vYmVzdGllanMuZ2l0aHViLmlvL2pzb24zIHwgQ29weXJpZ2h0IDIwMTItMjAxNCwgS2l0IENhbWJyaWRnZSB8IGh0dHA6Ly9raXQubWl0LWxpY2Vuc2Uub3JnICovXG47KGZ1bmN0aW9uICgpIHtcbiAgLy8gRGV0ZWN0IHRoZSBgZGVmaW5lYCBmdW5jdGlvbiBleHBvc2VkIGJ5IGFzeW5jaHJvbm91cyBtb2R1bGUgbG9hZGVycy4gVGhlXG4gIC8vIHN0cmljdCBgZGVmaW5lYCBjaGVjayBpcyBuZWNlc3NhcnkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBgci5qc2AuXG4gIHZhciBpc0xvYWRlciA9IHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kO1xuXG4gIC8vIEEgc2V0IG9mIHR5cGVzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggb2JqZWN0cyBmcm9tIHByaW1pdGl2ZXMuXG4gIHZhciBvYmplY3RUeXBlcyA9IHtcbiAgICBcImZ1bmN0aW9uXCI6IHRydWUsXG4gICAgXCJvYmplY3RcIjogdHJ1ZVxuICB9O1xuXG4gIC8vIERldGVjdCB0aGUgYGV4cG9ydHNgIG9iamVjdCBleHBvc2VkIGJ5IENvbW1vbkpTIGltcGxlbWVudGF0aW9ucy5cbiAgdmFyIGZyZWVFeHBvcnRzID0gb2JqZWN0VHlwZXNbdHlwZW9mIGV4cG9ydHNdICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuICAvLyBVc2UgdGhlIGBnbG9iYWxgIG9iamVjdCBleHBvc2VkIGJ5IE5vZGUgKGluY2x1ZGluZyBCcm93c2VyaWZ5IHZpYVxuICAvLyBgaW5zZXJ0LW1vZHVsZS1nbG9iYWxzYCksIE5hcndoYWwsIGFuZCBSaW5nbyBhcyB0aGUgZGVmYXVsdCBjb250ZXh0LFxuICAvLyBhbmQgdGhlIGB3aW5kb3dgIG9iamVjdCBpbiBicm93c2Vycy4gUmhpbm8gZXhwb3J0cyBhIGBnbG9iYWxgIGZ1bmN0aW9uXG4gIC8vIGluc3RlYWQuXG4gIHZhciByb290ID0gb2JqZWN0VHlwZXNbdHlwZW9mIHdpbmRvd10gJiYgd2luZG93IHx8IHRoaXMsXG4gICAgICBmcmVlR2xvYmFsID0gZnJlZUV4cG9ydHMgJiYgb2JqZWN0VHlwZXNbdHlwZW9mIG1vZHVsZV0gJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgdHlwZW9mIGdsb2JhbCA9PSBcIm9iamVjdFwiICYmIGdsb2JhbDtcblxuICBpZiAoZnJlZUdsb2JhbCAmJiAoZnJlZUdsb2JhbFtcImdsb2JhbFwiXSA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsW1wid2luZG93XCJdID09PSBmcmVlR2xvYmFsIHx8IGZyZWVHbG9iYWxbXCJzZWxmXCJdID09PSBmcmVlR2xvYmFsKSkge1xuICAgIHJvb3QgPSBmcmVlR2xvYmFsO1xuICB9XG5cbiAgLy8gUHVibGljOiBJbml0aWFsaXplcyBKU09OIDMgdXNpbmcgdGhlIGdpdmVuIGBjb250ZXh0YCBvYmplY3QsIGF0dGFjaGluZyB0aGVcbiAgLy8gYHN0cmluZ2lmeWAgYW5kIGBwYXJzZWAgZnVuY3Rpb25zIHRvIHRoZSBzcGVjaWZpZWQgYGV4cG9ydHNgIG9iamVjdC5cbiAgZnVuY3Rpb24gcnVuSW5Db250ZXh0KGNvbnRleHQsIGV4cG9ydHMpIHtcbiAgICBjb250ZXh0IHx8IChjb250ZXh0ID0gcm9vdFtcIk9iamVjdFwiXSgpKTtcbiAgICBleHBvcnRzIHx8IChleHBvcnRzID0gcm9vdFtcIk9iamVjdFwiXSgpKTtcblxuICAgIC8vIE5hdGl2ZSBjb25zdHJ1Y3RvciBhbGlhc2VzLlxuICAgIHZhciBOdW1iZXIgPSBjb250ZXh0W1wiTnVtYmVyXCJdIHx8IHJvb3RbXCJOdW1iZXJcIl0sXG4gICAgICAgIFN0cmluZyA9IGNvbnRleHRbXCJTdHJpbmdcIl0gfHwgcm9vdFtcIlN0cmluZ1wiXSxcbiAgICAgICAgT2JqZWN0ID0gY29udGV4dFtcIk9iamVjdFwiXSB8fCByb290W1wiT2JqZWN0XCJdLFxuICAgICAgICBEYXRlID0gY29udGV4dFtcIkRhdGVcIl0gfHwgcm9vdFtcIkRhdGVcIl0sXG4gICAgICAgIFN5bnRheEVycm9yID0gY29udGV4dFtcIlN5bnRheEVycm9yXCJdIHx8IHJvb3RbXCJTeW50YXhFcnJvclwiXSxcbiAgICAgICAgVHlwZUVycm9yID0gY29udGV4dFtcIlR5cGVFcnJvclwiXSB8fCByb290W1wiVHlwZUVycm9yXCJdLFxuICAgICAgICBNYXRoID0gY29udGV4dFtcIk1hdGhcIl0gfHwgcm9vdFtcIk1hdGhcIl0sXG4gICAgICAgIG5hdGl2ZUpTT04gPSBjb250ZXh0W1wiSlNPTlwiXSB8fCByb290W1wiSlNPTlwiXTtcblxuICAgIC8vIERlbGVnYXRlIHRvIHRoZSBuYXRpdmUgYHN0cmluZ2lmeWAgYW5kIGBwYXJzZWAgaW1wbGVtZW50YXRpb25zLlxuICAgIGlmICh0eXBlb2YgbmF0aXZlSlNPTiA9PSBcIm9iamVjdFwiICYmIG5hdGl2ZUpTT04pIHtcbiAgICAgIGV4cG9ydHMuc3RyaW5naWZ5ID0gbmF0aXZlSlNPTi5zdHJpbmdpZnk7XG4gICAgICBleHBvcnRzLnBhcnNlID0gbmF0aXZlSlNPTi5wYXJzZTtcbiAgICB9XG5cbiAgICAvLyBDb252ZW5pZW5jZSBhbGlhc2VzLlxuICAgIHZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgICAgIGdldENsYXNzID0gb2JqZWN0UHJvdG8udG9TdHJpbmcsXG4gICAgICAgIGlzUHJvcGVydHksIGZvckVhY2gsIHVuZGVmO1xuXG4gICAgLy8gVGVzdCB0aGUgYERhdGUjZ2V0VVRDKmAgbWV0aG9kcy4gQmFzZWQgb24gd29yayBieSBAWWFmZmxlLlxuICAgIHZhciBpc0V4dGVuZGVkID0gbmV3IERhdGUoLTM1MDk4MjczMzQ1NzMyOTIpO1xuICAgIHRyeSB7XG4gICAgICAvLyBUaGUgYGdldFVUQ0Z1bGxZZWFyYCwgYE1vbnRoYCwgYW5kIGBEYXRlYCBtZXRob2RzIHJldHVybiBub25zZW5zaWNhbFxuICAgICAgLy8gcmVzdWx0cyBmb3IgY2VydGFpbiBkYXRlcyBpbiBPcGVyYSA+PSAxMC41My5cbiAgICAgIGlzRXh0ZW5kZWQgPSBpc0V4dGVuZGVkLmdldFVUQ0Z1bGxZZWFyKCkgPT0gLTEwOTI1MiAmJiBpc0V4dGVuZGVkLmdldFVUQ01vbnRoKCkgPT09IDAgJiYgaXNFeHRlbmRlZC5nZXRVVENEYXRlKCkgPT09IDEgJiZcbiAgICAgICAgLy8gU2FmYXJpIDwgMi4wLjIgc3RvcmVzIHRoZSBpbnRlcm5hbCBtaWxsaXNlY29uZCB0aW1lIHZhbHVlIGNvcnJlY3RseSxcbiAgICAgICAgLy8gYnV0IGNsaXBzIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGRhdGUgbWV0aG9kcyB0byB0aGUgcmFuZ2Ugb2ZcbiAgICAgICAgLy8gc2lnbmVkIDMyLWJpdCBpbnRlZ2VycyAoWy0yICoqIDMxLCAyICoqIDMxIC0gMV0pLlxuICAgICAgICBpc0V4dGVuZGVkLmdldFVUQ0hvdXJzKCkgPT0gMTAgJiYgaXNFeHRlbmRlZC5nZXRVVENNaW51dGVzKCkgPT0gMzcgJiYgaXNFeHRlbmRlZC5nZXRVVENTZWNvbmRzKCkgPT0gNiAmJiBpc0V4dGVuZGVkLmdldFVUQ01pbGxpc2Vjb25kcygpID09IDcwODtcbiAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG5cbiAgICAvLyBJbnRlcm5hbDogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBuYXRpdmUgYEpTT04uc3RyaW5naWZ5YCBhbmQgYHBhcnNlYFxuICAgIC8vIGltcGxlbWVudGF0aW9ucyBhcmUgc3BlYy1jb21wbGlhbnQuIEJhc2VkIG9uIHdvcmsgYnkgS2VuIFNueWRlci5cbiAgICBmdW5jdGlvbiBoYXMobmFtZSkge1xuICAgICAgaWYgKGhhc1tuYW1lXSAhPT0gdW5kZWYpIHtcbiAgICAgICAgLy8gUmV0dXJuIGNhY2hlZCBmZWF0dXJlIHRlc3QgcmVzdWx0LlxuICAgICAgICByZXR1cm4gaGFzW25hbWVdO1xuICAgICAgfVxuICAgICAgdmFyIGlzU3VwcG9ydGVkO1xuICAgICAgaWYgKG5hbWUgPT0gXCJidWctc3RyaW5nLWNoYXItaW5kZXhcIikge1xuICAgICAgICAvLyBJRSA8PSA3IGRvZXNuJ3Qgc3VwcG9ydCBhY2Nlc3Npbmcgc3RyaW5nIGNoYXJhY3RlcnMgdXNpbmcgc3F1YXJlXG4gICAgICAgIC8vIGJyYWNrZXQgbm90YXRpb24uIElFIDggb25seSBzdXBwb3J0cyB0aGlzIGZvciBwcmltaXRpdmVzLlxuICAgICAgICBpc1N1cHBvcnRlZCA9IFwiYVwiWzBdICE9IFwiYVwiO1xuICAgICAgfSBlbHNlIGlmIChuYW1lID09IFwianNvblwiKSB7XG4gICAgICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIGJvdGggYEpTT04uc3RyaW5naWZ5YCBhbmQgYEpTT04ucGFyc2VgIGFyZVxuICAgICAgICAvLyBzdXBwb3J0ZWQuXG4gICAgICAgIGlzU3VwcG9ydGVkID0gaGFzKFwianNvbi1zdHJpbmdpZnlcIikgJiYgaGFzKFwianNvbi1wYXJzZVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB2YWx1ZSwgc2VyaWFsaXplZCA9ICd7XCJhXCI6WzEsdHJ1ZSxmYWxzZSxudWxsLFwiXFxcXHUwMDAwXFxcXGJcXFxcblxcXFxmXFxcXHJcXFxcdFwiXX0nO1xuICAgICAgICAvLyBUZXN0IGBKU09OLnN0cmluZ2lmeWAuXG4gICAgICAgIGlmIChuYW1lID09IFwianNvbi1zdHJpbmdpZnlcIikge1xuICAgICAgICAgIHZhciBzdHJpbmdpZnkgPSBleHBvcnRzLnN0cmluZ2lmeSwgc3RyaW5naWZ5U3VwcG9ydGVkID0gdHlwZW9mIHN0cmluZ2lmeSA9PSBcImZ1bmN0aW9uXCIgJiYgaXNFeHRlbmRlZDtcbiAgICAgICAgICBpZiAoc3RyaW5naWZ5U3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAvLyBBIHRlc3QgZnVuY3Rpb24gb2JqZWN0IHdpdGggYSBjdXN0b20gYHRvSlNPTmAgbWV0aG9kLlxuICAgICAgICAgICAgKHZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH0pLnRvSlNPTiA9IHZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc3RyaW5naWZ5U3VwcG9ydGVkID1cbiAgICAgICAgICAgICAgICAvLyBGaXJlZm94IDMuMWIxIGFuZCBiMiBzZXJpYWxpemUgc3RyaW5nLCBudW1iZXIsIGFuZCBib29sZWFuXG4gICAgICAgICAgICAgICAgLy8gcHJpbWl0aXZlcyBhcyBvYmplY3QgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KDApID09PSBcIjBcIiAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCBiMiwgYW5kIEpTT04gMiBzZXJpYWxpemUgd3JhcHBlZCBwcmltaXRpdmVzIGFzIG9iamVjdFxuICAgICAgICAgICAgICAgIC8vIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgTnVtYmVyKCkpID09PSBcIjBcIiAmJlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgU3RyaW5nKCkpID09ICdcIlwiJyAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCAyIHRocm93IGFuIGVycm9yIGlmIHRoZSB2YWx1ZSBpcyBgbnVsbGAsIGB1bmRlZmluZWRgLCBvclxuICAgICAgICAgICAgICAgIC8vIGRvZXMgbm90IGRlZmluZSBhIGNhbm9uaWNhbCBKU09OIHJlcHJlc2VudGF0aW9uICh0aGlzIGFwcGxpZXMgdG9cbiAgICAgICAgICAgICAgICAvLyBvYmplY3RzIHdpdGggYHRvSlNPTmAgcHJvcGVydGllcyBhcyB3ZWxsLCAqdW5sZXNzKiB0aGV5IGFyZSBuZXN0ZWRcbiAgICAgICAgICAgICAgICAvLyB3aXRoaW4gYW4gb2JqZWN0IG9yIGFycmF5KS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoZ2V0Q2xhc3MpID09PSB1bmRlZiAmJlxuICAgICAgICAgICAgICAgIC8vIElFIDggc2VyaWFsaXplcyBgdW5kZWZpbmVkYCBhcyBgXCJ1bmRlZmluZWRcImAuIFNhZmFyaSA8PSA1LjEuNyBhbmRcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMyBwYXNzIHRoaXMgdGVzdC5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkodW5kZWYpID09PSB1bmRlZiAmJlxuICAgICAgICAgICAgICAgIC8vIFNhZmFyaSA8PSA1LjEuNyBhbmQgRkYgMy4xYjMgdGhyb3cgYEVycm9yYHMgYW5kIGBUeXBlRXJyb3JgcyxcbiAgICAgICAgICAgICAgICAvLyByZXNwZWN0aXZlbHksIGlmIHRoZSB2YWx1ZSBpcyBvbWl0dGVkIGVudGlyZWx5LlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSgpID09PSB1bmRlZiAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCAyIHRocm93IGFuIGVycm9yIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBub3QgYSBudW1iZXIsXG4gICAgICAgICAgICAgICAgLy8gc3RyaW5nLCBhcnJheSwgb2JqZWN0LCBCb29sZWFuLCBvciBgbnVsbGAgbGl0ZXJhbC4gVGhpcyBhcHBsaWVzIHRvXG4gICAgICAgICAgICAgICAgLy8gb2JqZWN0cyB3aXRoIGN1c3RvbSBgdG9KU09OYCBtZXRob2RzIGFzIHdlbGwsIHVubGVzcyB0aGV5IGFyZSBuZXN0ZWRcbiAgICAgICAgICAgICAgICAvLyBpbnNpZGUgb2JqZWN0IG9yIGFycmF5IGxpdGVyYWxzLiBZVUkgMy4wLjBiMSBpZ25vcmVzIGN1c3RvbSBgdG9KU09OYFxuICAgICAgICAgICAgICAgIC8vIG1ldGhvZHMgZW50aXJlbHkuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KHZhbHVlKSA9PT0gXCIxXCIgJiZcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoW3ZhbHVlXSkgPT0gXCJbMV1cIiAmJlxuICAgICAgICAgICAgICAgIC8vIFByb3RvdHlwZSA8PSAxLjYuMSBzZXJpYWxpemVzIGBbdW5kZWZpbmVkXWAgYXMgYFwiW11cImAgaW5zdGVhZCBvZlxuICAgICAgICAgICAgICAgIC8vIGBcIltudWxsXVwiYC5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoW3VuZGVmXSkgPT0gXCJbbnVsbF1cIiAmJlxuICAgICAgICAgICAgICAgIC8vIFlVSSAzLjAuMGIxIGZhaWxzIHRvIHNlcmlhbGl6ZSBgbnVsbGAgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG51bGwpID09IFwibnVsbFwiICYmXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjEsIDIgaGFsdHMgc2VyaWFsaXphdGlvbiBpZiBhbiBhcnJheSBjb250YWlucyBhIGZ1bmN0aW9uOlxuICAgICAgICAgICAgICAgIC8vIGBbMSwgdHJ1ZSwgZ2V0Q2xhc3MsIDFdYCBzZXJpYWxpemVzIGFzIFwiWzEsdHJ1ZSxdLFwiLiBGRiAzLjFiM1xuICAgICAgICAgICAgICAgIC8vIGVsaWRlcyBub24tSlNPTiB2YWx1ZXMgZnJvbSBvYmplY3RzIGFuZCBhcnJheXMsIHVubGVzcyB0aGV5XG4gICAgICAgICAgICAgICAgLy8gZGVmaW5lIGN1c3RvbSBgdG9KU09OYCBtZXRob2RzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShbdW5kZWYsIGdldENsYXNzLCBudWxsXSkgPT0gXCJbbnVsbCxudWxsLG51bGxdXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBTaW1wbGUgc2VyaWFsaXphdGlvbiB0ZXN0LiBGRiAzLjFiMSB1c2VzIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlc1xuICAgICAgICAgICAgICAgIC8vIHdoZXJlIGNoYXJhY3RlciBlc2NhcGUgY29kZXMgYXJlIGV4cGVjdGVkIChlLmcuLCBgXFxiYCA9PiBgXFx1MDAwOGApLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSh7IFwiYVwiOiBbdmFsdWUsIHRydWUsIGZhbHNlLCBudWxsLCBcIlxceDAwXFxiXFxuXFxmXFxyXFx0XCJdIH0pID09IHNlcmlhbGl6ZWQgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSBhbmQgYjIgaWdub3JlIHRoZSBgZmlsdGVyYCBhbmQgYHdpZHRoYCBhcmd1bWVudHMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG51bGwsIHZhbHVlKSA9PT0gXCIxXCIgJiZcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoWzEsIDJdLCBudWxsLCAxKSA9PSBcIltcXG4gMSxcXG4gMlxcbl1cIiAmJlxuICAgICAgICAgICAgICAgIC8vIEpTT04gMiwgUHJvdG90eXBlIDw9IDEuNywgYW5kIG9sZGVyIFdlYktpdCBidWlsZHMgaW5jb3JyZWN0bHlcbiAgICAgICAgICAgICAgICAvLyBzZXJpYWxpemUgZXh0ZW5kZWQgeWVhcnMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBEYXRlKC04LjY0ZTE1KSkgPT0gJ1wiLTI3MTgyMS0wNC0yMFQwMDowMDowMC4wMDBaXCInICYmXG4gICAgICAgICAgICAgICAgLy8gVGhlIG1pbGxpc2Vjb25kcyBhcmUgb3B0aW9uYWwgaW4gRVMgNSwgYnV0IHJlcXVpcmVkIGluIDUuMS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IERhdGUoOC42NGUxNSkpID09ICdcIisyNzU3NjAtMDktMTNUMDA6MDA6MDAuMDAwWlwiJyAmJlxuICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggPD0gMTEuMCBpbmNvcnJlY3RseSBzZXJpYWxpemVzIHllYXJzIHByaW9yIHRvIDAgYXMgbmVnYXRpdmVcbiAgICAgICAgICAgICAgICAvLyBmb3VyLWRpZ2l0IHllYXJzIGluc3RlYWQgb2Ygc2l4LWRpZ2l0IHllYXJzLiBDcmVkaXRzOiBAWWFmZmxlLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgRGF0ZSgtNjIxOTg3NTUyZTUpKSA9PSAnXCItMDAwMDAxLTAxLTAxVDAwOjAwOjAwLjAwMFpcIicgJiZcbiAgICAgICAgICAgICAgICAvLyBTYWZhcmkgPD0gNS4xLjUgYW5kIE9wZXJhID49IDEwLjUzIGluY29ycmVjdGx5IHNlcmlhbGl6ZSBtaWxsaXNlY29uZFxuICAgICAgICAgICAgICAgIC8vIHZhbHVlcyBsZXNzIHRoYW4gMTAwMC4gQ3JlZGl0czogQFlhZmZsZS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IERhdGUoLTEpKSA9PSAnXCIxOTY5LTEyLTMxVDIzOjU5OjU5Ljk5OVpcIic7XG4gICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgc3RyaW5naWZ5U3VwcG9ydGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlzU3VwcG9ydGVkID0gc3RyaW5naWZ5U3VwcG9ydGVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRlc3QgYEpTT04ucGFyc2VgLlxuICAgICAgICBpZiAobmFtZSA9PSBcImpzb24tcGFyc2VcIikge1xuICAgICAgICAgIHZhciBwYXJzZSA9IGV4cG9ydHMucGFyc2U7XG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJzZSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCBiMiB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhIGJhcmUgbGl0ZXJhbCBpcyBwcm92aWRlZC5cbiAgICAgICAgICAgICAgLy8gQ29uZm9ybWluZyBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGFsc28gY29lcmNlIHRoZSBpbml0aWFsIGFyZ3VtZW50IHRvXG4gICAgICAgICAgICAgIC8vIGEgc3RyaW5nIHByaW9yIHRvIHBhcnNpbmcuXG4gICAgICAgICAgICAgIGlmIChwYXJzZShcIjBcIikgPT09IDAgJiYgIXBhcnNlKGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIC8vIFNpbXBsZSBwYXJzaW5nIHRlc3QuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZShzZXJpYWxpemVkKTtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VTdXBwb3J0ZWQgPSB2YWx1ZVtcImFcIl0ubGVuZ3RoID09IDUgJiYgdmFsdWVbXCJhXCJdWzBdID09PSAxO1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDUuMS4yIGFuZCBGRiAzLjFiMSBhbGxvdyB1bmVzY2FwZWQgdGFicyBpbiBzdHJpbmdzLlxuICAgICAgICAgICAgICAgICAgICBwYXJzZVN1cHBvcnRlZCA9ICFwYXJzZSgnXCJcXHRcIicpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gRkYgNC4wIGFuZCA0LjAuMSBhbGxvdyBsZWFkaW5nIGArYCBzaWducyBhbmQgbGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGRlY2ltYWwgcG9pbnRzLiBGRiA0LjAsIDQuMC4xLCBhbmQgSUUgOS0xMCBhbHNvIGFsbG93XG4gICAgICAgICAgICAgICAgICAgICAgLy8gY2VydGFpbiBvY3RhbCBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICAgICAgICBwYXJzZVN1cHBvcnRlZCA9IHBhcnNlKFwiMDFcIikgIT09IDE7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge31cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEZGIDQuMCwgNC4wLjEsIGFuZCBSaGlubyAxLjdSMy1SNCBhbGxvdyB0cmFpbGluZyBkZWNpbWFsXG4gICAgICAgICAgICAgICAgICAgICAgLy8gcG9pbnRzLiBUaGVzZSBlbnZpcm9ubWVudHMsIGFsb25nIHdpdGggRkYgMy4xYjEgYW5kIDIsXG4gICAgICAgICAgICAgICAgICAgICAgLy8gYWxzbyBhbGxvdyB0cmFpbGluZyBjb21tYXMgaW4gSlNPTiBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgICAgICAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSBwYXJzZShcIjEuXCIpICE9PSAxO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaXNTdXBwb3J0ZWQgPSBwYXJzZVN1cHBvcnRlZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc1tuYW1lXSA9ICEhaXNTdXBwb3J0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFoYXMoXCJqc29uXCIpKSB7XG4gICAgICAvLyBDb21tb24gYFtbQ2xhc3NdXWAgbmFtZSBhbGlhc2VzLlxuICAgICAgdmFyIGZ1bmN0aW9uQ2xhc3MgPSBcIltvYmplY3QgRnVuY3Rpb25dXCIsXG4gICAgICAgICAgZGF0ZUNsYXNzID0gXCJbb2JqZWN0IERhdGVdXCIsXG4gICAgICAgICAgbnVtYmVyQ2xhc3MgPSBcIltvYmplY3QgTnVtYmVyXVwiLFxuICAgICAgICAgIHN0cmluZ0NsYXNzID0gXCJbb2JqZWN0IFN0cmluZ11cIixcbiAgICAgICAgICBhcnJheUNsYXNzID0gXCJbb2JqZWN0IEFycmF5XVwiLFxuICAgICAgICAgIGJvb2xlYW5DbGFzcyA9IFwiW29iamVjdCBCb29sZWFuXVwiO1xuXG4gICAgICAvLyBEZXRlY3QgaW5jb21wbGV0ZSBzdXBwb3J0IGZvciBhY2Nlc3Npbmcgc3RyaW5nIGNoYXJhY3RlcnMgYnkgaW5kZXguXG4gICAgICB2YXIgY2hhckluZGV4QnVnZ3kgPSBoYXMoXCJidWctc3RyaW5nLWNoYXItaW5kZXhcIik7XG5cbiAgICAgIC8vIERlZmluZSBhZGRpdGlvbmFsIHV0aWxpdHkgbWV0aG9kcyBpZiB0aGUgYERhdGVgIG1ldGhvZHMgYXJlIGJ1Z2d5LlxuICAgICAgaWYgKCFpc0V4dGVuZGVkKSB7XG4gICAgICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG4gICAgICAgIC8vIEEgbWFwcGluZyBiZXR3ZWVuIHRoZSBtb250aHMgb2YgdGhlIHllYXIgYW5kIHRoZSBudW1iZXIgb2YgZGF5cyBiZXR3ZWVuXG4gICAgICAgIC8vIEphbnVhcnkgMXN0IGFuZCB0aGUgZmlyc3Qgb2YgdGhlIHJlc3BlY3RpdmUgbW9udGguXG4gICAgICAgIHZhciBNb250aHMgPSBbMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzRdO1xuICAgICAgICAvLyBJbnRlcm5hbDogQ2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIGRheXMgYmV0d2VlbiB0aGUgVW5peCBlcG9jaCBhbmQgdGhlXG4gICAgICAgIC8vIGZpcnN0IGRheSBvZiB0aGUgZ2l2ZW4gbW9udGguXG4gICAgICAgIHZhciBnZXREYXkgPSBmdW5jdGlvbiAoeWVhciwgbW9udGgpIHtcbiAgICAgICAgICByZXR1cm4gTW9udGhzW21vbnRoXSArIDM2NSAqICh5ZWFyIC0gMTk3MCkgKyBmbG9vcigoeWVhciAtIDE5NjkgKyAobW9udGggPSArKG1vbnRoID4gMSkpKSAvIDQpIC0gZmxvb3IoKHllYXIgLSAxOTAxICsgbW9udGgpIC8gMTAwKSArIGZsb29yKCh5ZWFyIC0gMTYwMSArIG1vbnRoKSAvIDQwMCk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEludGVybmFsOiBEZXRlcm1pbmVzIGlmIGEgcHJvcGVydHkgaXMgYSBkaXJlY3QgcHJvcGVydHkgb2YgdGhlIGdpdmVuXG4gICAgICAvLyBvYmplY3QuIERlbGVnYXRlcyB0byB0aGUgbmF0aXZlIGBPYmplY3QjaGFzT3duUHJvcGVydHlgIG1ldGhvZC5cbiAgICAgIGlmICghKGlzUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eSkpIHtcbiAgICAgICAgaXNQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgIHZhciBtZW1iZXJzID0ge30sIGNvbnN0cnVjdG9yO1xuICAgICAgICAgIGlmICgobWVtYmVycy5fX3Byb3RvX18gPSBudWxsLCBtZW1iZXJzLl9fcHJvdG9fXyA9IHtcbiAgICAgICAgICAgIC8vIFRoZSAqcHJvdG8qIHByb3BlcnR5IGNhbm5vdCBiZSBzZXQgbXVsdGlwbGUgdGltZXMgaW4gcmVjZW50XG4gICAgICAgICAgICAvLyB2ZXJzaW9ucyBvZiBGaXJlZm94IGFuZCBTZWFNb25rZXkuXG4gICAgICAgICAgICBcInRvU3RyaW5nXCI6IDFcbiAgICAgICAgICB9LCBtZW1iZXJzKS50b1N0cmluZyAhPSBnZXRDbGFzcykge1xuICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDIuMC4zIGRvZXNuJ3QgaW1wbGVtZW50IGBPYmplY3QjaGFzT3duUHJvcGVydHlgLCBidXRcbiAgICAgICAgICAgIC8vIHN1cHBvcnRzIHRoZSBtdXRhYmxlICpwcm90byogcHJvcGVydHkuXG4gICAgICAgICAgICBpc1Byb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIC8vIENhcHR1cmUgYW5kIGJyZWFrIHRoZSBvYmplY3QncyBwcm90b3R5cGUgY2hhaW4gKHNlZSBzZWN0aW9uIDguNi4yXG4gICAgICAgICAgICAgIC8vIG9mIHRoZSBFUyA1LjEgc3BlYykuIFRoZSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24gcHJldmVudHMgYW5cbiAgICAgICAgICAgICAgLy8gdW5zYWZlIHRyYW5zZm9ybWF0aW9uIGJ5IHRoZSBDbG9zdXJlIENvbXBpbGVyLlxuICAgICAgICAgICAgICB2YXIgb3JpZ2luYWwgPSB0aGlzLl9fcHJvdG9fXywgcmVzdWx0ID0gcHJvcGVydHkgaW4gKHRoaXMuX19wcm90b19fID0gbnVsbCwgdGhpcyk7XG4gICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb3RvdHlwZSBjaGFpbi5cbiAgICAgICAgICAgICAgdGhpcy5fX3Byb3RvX18gPSBvcmlnaW5hbDtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENhcHR1cmUgYSByZWZlcmVuY2UgdG8gdGhlIHRvcC1sZXZlbCBgT2JqZWN0YCBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gbWVtYmVycy5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgYGNvbnN0cnVjdG9yYCBwcm9wZXJ0eSB0byBzaW11bGF0ZSBgT2JqZWN0I2hhc093blByb3BlcnR5YCBpblxuICAgICAgICAgICAgLy8gb3RoZXIgZW52aXJvbm1lbnRzLlxuICAgICAgICAgICAgaXNQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gKHRoaXMuY29uc3RydWN0b3IgfHwgY29uc3RydWN0b3IpLnByb3RvdHlwZTtcbiAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5IGluIHRoaXMgJiYgIShwcm9wZXJ0eSBpbiBwYXJlbnQgJiYgdGhpc1twcm9wZXJ0eV0gPT09IHBhcmVudFtwcm9wZXJ0eV0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWVtYmVycyA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGlzUHJvcGVydHkuY2FsbCh0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEludGVybmFsOiBOb3JtYWxpemVzIHRoZSBgZm9yLi4uaW5gIGl0ZXJhdGlvbiBhbGdvcml0aG0gYWNyb3NzXG4gICAgICAvLyBlbnZpcm9ubWVudHMuIEVhY2ggZW51bWVyYXRlZCBrZXkgaXMgeWllbGRlZCB0byBhIGBjYWxsYmFja2AgZnVuY3Rpb24uXG4gICAgICBmb3JFYWNoID0gZnVuY3Rpb24gKG9iamVjdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNpemUgPSAwLCBQcm9wZXJ0aWVzLCBtZW1iZXJzLCBwcm9wZXJ0eTtcblxuICAgICAgICAvLyBUZXN0cyBmb3IgYnVncyBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCdzIGBmb3IuLi5pbmAgYWxnb3JpdGhtLiBUaGVcbiAgICAgICAgLy8gYHZhbHVlT2ZgIHByb3BlcnR5IGluaGVyaXRzIHRoZSBub24tZW51bWVyYWJsZSBmbGFnIGZyb21cbiAgICAgICAgLy8gYE9iamVjdC5wcm90b3R5cGVgIGluIG9sZGVyIHZlcnNpb25zIG9mIElFLCBOZXRzY2FwZSwgYW5kIE1vemlsbGEuXG4gICAgICAgIChQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMudmFsdWVPZiA9IDA7XG4gICAgICAgIH0pLnByb3RvdHlwZS52YWx1ZU9mID0gMDtcblxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGBQcm9wZXJ0aWVzYCBjbGFzcy5cbiAgICAgICAgbWVtYmVycyA9IG5ldyBQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGZvciAocHJvcGVydHkgaW4gbWVtYmVycykge1xuICAgICAgICAgIC8vIElnbm9yZSBhbGwgcHJvcGVydGllcyBpbmhlcml0ZWQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuXG4gICAgICAgICAgaWYgKGlzUHJvcGVydHkuY2FsbChtZW1iZXJzLCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgIHNpemUrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgUHJvcGVydGllcyA9IG1lbWJlcnMgPSBudWxsO1xuXG4gICAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgaXRlcmF0aW9uIGFsZ29yaXRobS5cbiAgICAgICAgaWYgKCFzaXplKSB7XG4gICAgICAgICAgLy8gQSBsaXN0IG9mIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgaW5oZXJpdGVkIGZyb20gYE9iamVjdC5wcm90b3R5cGVgLlxuICAgICAgICAgIG1lbWJlcnMgPSBbXCJ2YWx1ZU9mXCIsIFwidG9TdHJpbmdcIiwgXCJ0b0xvY2FsZVN0cmluZ1wiLCBcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsIFwiaXNQcm90b3R5cGVPZlwiLCBcImhhc093blByb3BlcnR5XCIsIFwiY29uc3RydWN0b3JcIl07XG4gICAgICAgICAgLy8gSUUgPD0gOCwgTW96aWxsYSAxLjAsIGFuZCBOZXRzY2FwZSA2LjIgaWdub3JlIHNoYWRvd2VkIG5vbi1lbnVtZXJhYmxlXG4gICAgICAgICAgLy8gcHJvcGVydGllcy5cbiAgICAgICAgICBmb3JFYWNoID0gZnVuY3Rpb24gKG9iamVjdCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciBpc0Z1bmN0aW9uID0gZ2V0Q2xhc3MuY2FsbChvYmplY3QpID09IGZ1bmN0aW9uQ2xhc3MsIHByb3BlcnR5LCBsZW5ndGg7XG4gICAgICAgICAgICB2YXIgaGFzUHJvcGVydHkgPSAhaXNGdW5jdGlvbiAmJiB0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yICE9IFwiZnVuY3Rpb25cIiAmJiBvYmplY3RUeXBlc1t0eXBlb2Ygb2JqZWN0Lmhhc093blByb3BlcnR5XSAmJiBvYmplY3QuaGFzT3duUHJvcGVydHkgfHwgaXNQcm9wZXJ0eTtcbiAgICAgICAgICAgIGZvciAocHJvcGVydHkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgIC8vIEdlY2tvIDw9IDEuMCBlbnVtZXJhdGVzIHRoZSBgcHJvdG90eXBlYCBwcm9wZXJ0eSBvZiBmdW5jdGlvbnMgdW5kZXJcbiAgICAgICAgICAgICAgLy8gY2VydGFpbiBjb25kaXRpb25zOyBJRSBkb2VzIG5vdC5cbiAgICAgICAgICAgICAgaWYgKCEoaXNGdW5jdGlvbiAmJiBwcm9wZXJ0eSA9PSBcInByb3RvdHlwZVwiKSAmJiBoYXNQcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2socHJvcGVydHkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNYW51YWxseSBpbnZva2UgdGhlIGNhbGxiYWNrIGZvciBlYWNoIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5LlxuICAgICAgICAgICAgZm9yIChsZW5ndGggPSBtZW1iZXJzLmxlbmd0aDsgcHJvcGVydHkgPSBtZW1iZXJzWy0tbGVuZ3RoXTsgaGFzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSAmJiBjYWxsYmFjayhwcm9wZXJ0eSkpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoc2l6ZSA9PSAyKSB7XG4gICAgICAgICAgLy8gU2FmYXJpIDw9IDIuMC40IGVudW1lcmF0ZXMgc2hhZG93ZWQgcHJvcGVydGllcyB0d2ljZS5cbiAgICAgICAgICBmb3JFYWNoID0gZnVuY3Rpb24gKG9iamVjdCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHNldCBvZiBpdGVyYXRlZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgdmFyIG1lbWJlcnMgPSB7fSwgaXNGdW5jdGlvbiA9IGdldENsYXNzLmNhbGwob2JqZWN0KSA9PSBmdW5jdGlvbkNsYXNzLCBwcm9wZXJ0eTtcbiAgICAgICAgICAgIGZvciAocHJvcGVydHkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgIC8vIFN0b3JlIGVhY2ggcHJvcGVydHkgbmFtZSB0byBwcmV2ZW50IGRvdWJsZSBlbnVtZXJhdGlvbi4gVGhlXG4gICAgICAgICAgICAgIC8vIGBwcm90b3R5cGVgIHByb3BlcnR5IG9mIGZ1bmN0aW9ucyBpcyBub3QgZW51bWVyYXRlZCBkdWUgdG8gY3Jvc3MtXG4gICAgICAgICAgICAgIC8vIGVudmlyb25tZW50IGluY29uc2lzdGVuY2llcy5cbiAgICAgICAgICAgICAgaWYgKCEoaXNGdW5jdGlvbiAmJiBwcm9wZXJ0eSA9PSBcInByb3RvdHlwZVwiKSAmJiAhaXNQcm9wZXJ0eS5jYWxsKG1lbWJlcnMsIHByb3BlcnR5KSAmJiAobWVtYmVyc1twcm9wZXJ0eV0gPSAxKSAmJiBpc1Byb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vIGJ1Z3MgZGV0ZWN0ZWQ7IHVzZSB0aGUgc3RhbmRhcmQgYGZvci4uLmluYCBhbGdvcml0aG0uXG4gICAgICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IGdldENsYXNzLmNhbGwob2JqZWN0KSA9PSBmdW5jdGlvbkNsYXNzLCBwcm9wZXJ0eSwgaXNDb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIGZvciAocHJvcGVydHkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgIGlmICghKGlzRnVuY3Rpb24gJiYgcHJvcGVydHkgPT0gXCJwcm90b3R5cGVcIikgJiYgaXNQcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpICYmICEoaXNDb25zdHJ1Y3RvciA9IHByb3BlcnR5ID09PSBcImNvbnN0cnVjdG9yXCIpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2socHJvcGVydHkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNYW51YWxseSBpbnZva2UgdGhlIGNhbGxiYWNrIGZvciB0aGUgYGNvbnN0cnVjdG9yYCBwcm9wZXJ0eSBkdWUgdG9cbiAgICAgICAgICAgIC8vIGNyb3NzLWVudmlyb25tZW50IGluY29uc2lzdGVuY2llcy5cbiAgICAgICAgICAgIGlmIChpc0NvbnN0cnVjdG9yIHx8IGlzUHJvcGVydHkuY2FsbChvYmplY3QsIChwcm9wZXJ0eSA9IFwiY29uc3RydWN0b3JcIikpKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JFYWNoKG9iamVjdCwgY2FsbGJhY2spO1xuICAgICAgfTtcblxuICAgICAgLy8gUHVibGljOiBTZXJpYWxpemVzIGEgSmF2YVNjcmlwdCBgdmFsdWVgIGFzIGEgSlNPTiBzdHJpbmcuIFRoZSBvcHRpb25hbFxuICAgICAgLy8gYGZpbHRlcmAgYXJndW1lbnQgbWF5IHNwZWNpZnkgZWl0aGVyIGEgZnVuY3Rpb24gdGhhdCBhbHRlcnMgaG93IG9iamVjdCBhbmRcbiAgICAgIC8vIGFycmF5IG1lbWJlcnMgYXJlIHNlcmlhbGl6ZWQsIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MgYW5kIG51bWJlcnMgdGhhdFxuICAgICAgLy8gaW5kaWNhdGVzIHdoaWNoIHByb3BlcnRpZXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQuIFRoZSBvcHRpb25hbCBgd2lkdGhgXG4gICAgICAvLyBhcmd1bWVudCBtYXkgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIG51bWJlciB0aGF0IHNwZWNpZmllcyB0aGUgaW5kZW50YXRpb25cbiAgICAgIC8vIGxldmVsIG9mIHRoZSBvdXRwdXQuXG4gICAgICBpZiAoIWhhcyhcImpzb24tc3RyaW5naWZ5XCIpKSB7XG4gICAgICAgIC8vIEludGVybmFsOiBBIG1hcCBvZiBjb250cm9sIGNoYXJhY3RlcnMgYW5kIHRoZWlyIGVzY2FwZWQgZXF1aXZhbGVudHMuXG4gICAgICAgIHZhciBFc2NhcGVzID0ge1xuICAgICAgICAgIDkyOiBcIlxcXFxcXFxcXCIsXG4gICAgICAgICAgMzQ6ICdcXFxcXCInLFxuICAgICAgICAgIDg6IFwiXFxcXGJcIixcbiAgICAgICAgICAxMjogXCJcXFxcZlwiLFxuICAgICAgICAgIDEwOiBcIlxcXFxuXCIsXG4gICAgICAgICAgMTM6IFwiXFxcXHJcIixcbiAgICAgICAgICA5OiBcIlxcXFx0XCJcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogQ29udmVydHMgYHZhbHVlYCBpbnRvIGEgemVyby1wYWRkZWQgc3RyaW5nIHN1Y2ggdGhhdCBpdHNcbiAgICAgICAgLy8gbGVuZ3RoIGlzIGF0IGxlYXN0IGVxdWFsIHRvIGB3aWR0aGAuIFRoZSBgd2lkdGhgIG11c3QgYmUgPD0gNi5cbiAgICAgICAgdmFyIGxlYWRpbmdaZXJvZXMgPSBcIjAwMDAwMFwiO1xuICAgICAgICB2YXIgdG9QYWRkZWRTdHJpbmcgPSBmdW5jdGlvbiAod2lkdGgsIHZhbHVlKSB7XG4gICAgICAgICAgLy8gVGhlIGB8fCAwYCBleHByZXNzaW9uIGlzIG5lY2Vzc2FyeSB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpblxuICAgICAgICAgIC8vIE9wZXJhIDw9IDcuNTR1MiB3aGVyZSBgMCA9PSAtMGAsIGJ1dCBgU3RyaW5nKC0wKSAhPT0gXCIwXCJgLlxuICAgICAgICAgIHJldHVybiAobGVhZGluZ1plcm9lcyArICh2YWx1ZSB8fCAwKSkuc2xpY2UoLXdpZHRoKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogRG91YmxlLXF1b3RlcyBhIHN0cmluZyBgdmFsdWVgLCByZXBsYWNpbmcgYWxsIEFTQ0lJIGNvbnRyb2xcbiAgICAgICAgLy8gY2hhcmFjdGVycyAoY2hhcmFjdGVycyB3aXRoIGNvZGUgdW5pdCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAzMSkgd2l0aFxuICAgICAgICAvLyB0aGVpciBlc2NhcGVkIGVxdWl2YWxlbnRzLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZVxuICAgICAgICAvLyBgUXVvdGUodmFsdWUpYCBvcGVyYXRpb24gZGVmaW5lZCBpbiBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLlxuICAgICAgICB2YXIgdW5pY29kZVByZWZpeCA9IFwiXFxcXHUwMFwiO1xuICAgICAgICB2YXIgcXVvdGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gJ1wiJywgaW5kZXggPSAwLCBsZW5ndGggPSB2YWx1ZS5sZW5ndGgsIHVzZUNoYXJJbmRleCA9ICFjaGFySW5kZXhCdWdneSB8fCBsZW5ndGggPiAxMDtcbiAgICAgICAgICB2YXIgc3ltYm9scyA9IHVzZUNoYXJJbmRleCAmJiAoY2hhckluZGV4QnVnZ3kgPyB2YWx1ZS5zcGxpdChcIlwiKSA6IHZhbHVlKTtcbiAgICAgICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIHZhciBjaGFyQ29kZSA9IHZhbHVlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgLy8gSWYgdGhlIGNoYXJhY3RlciBpcyBhIGNvbnRyb2wgY2hhcmFjdGVyLCBhcHBlbmQgaXRzIFVuaWNvZGUgb3JcbiAgICAgICAgICAgIC8vIHNob3J0aGFuZCBlc2NhcGUgc2VxdWVuY2U7IG90aGVyd2lzZSwgYXBwZW5kIHRoZSBjaGFyYWN0ZXIgYXMtaXMuXG4gICAgICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7XG4gICAgICAgICAgICAgIGNhc2UgODogY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEyOiBjYXNlIDEzOiBjYXNlIDM0OiBjYXNlIDkyOlxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBFc2NhcGVzW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPCAzMikge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHVuaWNvZGVQcmVmaXggKyB0b1BhZGRlZFN0cmluZygyLCBjaGFyQ29kZS50b1N0cmluZygxNikpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB1c2VDaGFySW5kZXggPyBzeW1ib2xzW2luZGV4XSA6IHZhbHVlLmNoYXJBdChpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnXCInO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZWN1cnNpdmVseSBzZXJpYWxpemVzIGFuIG9iamVjdC4gSW1wbGVtZW50cyB0aGVcbiAgICAgICAgLy8gYFN0cihrZXksIGhvbGRlcilgLCBgSk8odmFsdWUpYCwgYW5kIGBKQSh2YWx1ZSlgIG9wZXJhdGlvbnMuXG4gICAgICAgIHZhciBzZXJpYWxpemUgPSBmdW5jdGlvbiAocHJvcGVydHksIG9iamVjdCwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIGluZGVudGF0aW9uLCBzdGFjaykge1xuICAgICAgICAgIHZhciB2YWx1ZSwgY2xhc3NOYW1lLCB5ZWFyLCBtb250aCwgZGF0ZSwgdGltZSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgcmVzdWx0cywgZWxlbWVudCwgaW5kZXgsIGxlbmd0aCwgcHJlZml4LCByZXN1bHQ7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIE5lY2Vzc2FyeSBmb3IgaG9zdCBvYmplY3Qgc3VwcG9ydC5cbiAgICAgICAgICAgIHZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTtcbiAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT0gZGF0ZUNsYXNzICYmICFpc1Byb3BlcnR5LmNhbGwodmFsdWUsIFwidG9KU09OXCIpKSB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZSA+IC0xIC8gMCAmJiB2YWx1ZSA8IDEgLyAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRGF0ZXMgYXJlIHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIHRoZSBgRGF0ZSN0b0pTT05gIG1ldGhvZFxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllZCBpbiBFUyA1LjEgc2VjdGlvbiAxNS45LjUuNDQuIFNlZSBzZWN0aW9uIDE1LjkuMS4xNVxuICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgSVNPIDg2MDEgZGF0ZSB0aW1lIHN0cmluZyBmb3JtYXQuXG4gICAgICAgICAgICAgICAgaWYgKGdldERheSkge1xuICAgICAgICAgICAgICAgICAgLy8gTWFudWFsbHkgY29tcHV0ZSB0aGUgeWVhciwgbW9udGgsIGRhdGUsIGhvdXJzLCBtaW51dGVzLFxuICAgICAgICAgICAgICAgICAgLy8gc2Vjb25kcywgYW5kIG1pbGxpc2Vjb25kcyBpZiB0aGUgYGdldFVUQypgIG1ldGhvZHMgYXJlXG4gICAgICAgICAgICAgICAgICAvLyBidWdneS4gQWRhcHRlZCBmcm9tIEBZYWZmbGUncyBgZGF0ZS1zaGltYCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgZGF0ZSA9IGZsb29yKHZhbHVlIC8gODY0ZTUpO1xuICAgICAgICAgICAgICAgICAgZm9yICh5ZWFyID0gZmxvb3IoZGF0ZSAvIDM2NS4yNDI1KSArIDE5NzAgLSAxOyBnZXREYXkoeWVhciArIDEsIDApIDw9IGRhdGU7IHllYXIrKyk7XG4gICAgICAgICAgICAgICAgICBmb3IgKG1vbnRoID0gZmxvb3IoKGRhdGUgLSBnZXREYXkoeWVhciwgMCkpIC8gMzAuNDIpOyBnZXREYXkoeWVhciwgbW9udGggKyAxKSA8PSBkYXRlOyBtb250aCsrKTtcbiAgICAgICAgICAgICAgICAgIGRhdGUgPSAxICsgZGF0ZSAtIGdldERheSh5ZWFyLCBtb250aCk7XG4gICAgICAgICAgICAgICAgICAvLyBUaGUgYHRpbWVgIHZhbHVlIHNwZWNpZmllcyB0aGUgdGltZSB3aXRoaW4gdGhlIGRheSAoc2VlIEVTXG4gICAgICAgICAgICAgICAgICAvLyA1LjEgc2VjdGlvbiAxNS45LjEuMikuIFRoZSBmb3JtdWxhIGAoQSAlIEIgKyBCKSAlIEJgIGlzIHVzZWRcbiAgICAgICAgICAgICAgICAgIC8vIHRvIGNvbXB1dGUgYEEgbW9kdWxvIEJgLCBhcyB0aGUgYCVgIG9wZXJhdG9yIGRvZXMgbm90XG4gICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kIHRvIHRoZSBgbW9kdWxvYCBvcGVyYXRpb24gZm9yIG5lZ2F0aXZlIG51bWJlcnMuXG4gICAgICAgICAgICAgICAgICB0aW1lID0gKHZhbHVlICUgODY0ZTUgKyA4NjRlNSkgJSA4NjRlNTtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBob3VycywgbWludXRlcywgc2Vjb25kcywgYW5kIG1pbGxpc2Vjb25kcyBhcmUgb2J0YWluZWQgYnlcbiAgICAgICAgICAgICAgICAgIC8vIGRlY29tcG9zaW5nIHRoZSB0aW1lIHdpdGhpbiB0aGUgZGF5LiBTZWUgc2VjdGlvbiAxNS45LjEuMTAuXG4gICAgICAgICAgICAgICAgICBob3VycyA9IGZsb29yKHRpbWUgLyAzNmU1KSAlIDI0O1xuICAgICAgICAgICAgICAgICAgbWludXRlcyA9IGZsb29yKHRpbWUgLyA2ZTQpICUgNjA7XG4gICAgICAgICAgICAgICAgICBzZWNvbmRzID0gZmxvb3IodGltZSAvIDFlMykgJSA2MDtcbiAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IHRpbWUgJSAxZTM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHllYXIgPSB2YWx1ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgICAgbW9udGggPSB2YWx1ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgICAgICAgZGF0ZSA9IHZhbHVlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgICAgICAgICAgIGhvdXJzID0gdmFsdWUuZ2V0VVRDSG91cnMoKTtcbiAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSB2YWx1ZS5nZXRVVENNaW51dGVzKCk7XG4gICAgICAgICAgICAgICAgICBzZWNvbmRzID0gdmFsdWUuZ2V0VVRDU2Vjb25kcygpO1xuICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdmFsdWUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSBleHRlbmRlZCB5ZWFycyBjb3JyZWN0bHkuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSAoeWVhciA8PSAwIHx8IHllYXIgPj0gMWU0ID8gKHllYXIgPCAwID8gXCItXCIgOiBcIitcIikgKyB0b1BhZGRlZFN0cmluZyg2LCB5ZWFyIDwgMCA/IC15ZWFyIDogeWVhcikgOiB0b1BhZGRlZFN0cmluZyg0LCB5ZWFyKSkgK1xuICAgICAgICAgICAgICAgICAgXCItXCIgKyB0b1BhZGRlZFN0cmluZygyLCBtb250aCArIDEpICsgXCItXCIgKyB0b1BhZGRlZFN0cmluZygyLCBkYXRlKSArXG4gICAgICAgICAgICAgICAgICAvLyBNb250aHMsIGRhdGVzLCBob3VycywgbWludXRlcywgYW5kIHNlY29uZHMgc2hvdWxkIGhhdmUgdHdvXG4gICAgICAgICAgICAgICAgICAvLyBkaWdpdHM7IG1pbGxpc2Vjb25kcyBzaG91bGQgaGF2ZSB0aHJlZS5cbiAgICAgICAgICAgICAgICAgIFwiVFwiICsgdG9QYWRkZWRTdHJpbmcoMiwgaG91cnMpICsgXCI6XCIgKyB0b1BhZGRlZFN0cmluZygyLCBtaW51dGVzKSArIFwiOlwiICsgdG9QYWRkZWRTdHJpbmcoMiwgc2Vjb25kcykgK1xuICAgICAgICAgICAgICAgICAgLy8gTWlsbGlzZWNvbmRzIGFyZSBvcHRpb25hbCBpbiBFUyA1LjAsIGJ1dCByZXF1aXJlZCBpbiA1LjEuXG4gICAgICAgICAgICAgICAgICBcIi5cIiArIHRvUGFkZGVkU3RyaW5nKDMsIG1pbGxpc2Vjb25kcykgKyBcIlpcIjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlLnRvSlNPTiA9PSBcImZ1bmN0aW9uXCIgJiYgKChjbGFzc05hbWUgIT0gbnVtYmVyQ2xhc3MgJiYgY2xhc3NOYW1lICE9IHN0cmluZ0NsYXNzICYmIGNsYXNzTmFtZSAhPSBhcnJheUNsYXNzKSB8fCBpc1Byb3BlcnR5LmNhbGwodmFsdWUsIFwidG9KU09OXCIpKSkge1xuICAgICAgICAgICAgICAvLyBQcm90b3R5cGUgPD0gMS42LjEgYWRkcyBub24tc3RhbmRhcmQgYHRvSlNPTmAgbWV0aG9kcyB0byB0aGVcbiAgICAgICAgICAgICAgLy8gYE51bWJlcmAsIGBTdHJpbmdgLCBgRGF0ZWAsIGFuZCBgQXJyYXlgIHByb3RvdHlwZXMuIEpTT04gM1xuICAgICAgICAgICAgICAvLyBpZ25vcmVzIGFsbCBgdG9KU09OYCBtZXRob2RzIG9uIHRoZXNlIG9iamVjdHMgdW5sZXNzIHRoZXkgYXJlXG4gICAgICAgICAgICAgIC8vIGRlZmluZWQgZGlyZWN0bHkgb24gYW4gaW5zdGFuY2UuXG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKHByb3BlcnR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBJZiBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHdhcyBwcm92aWRlZCwgY2FsbCBpdCB0byBvYnRhaW4gdGhlIHZhbHVlXG4gICAgICAgICAgICAvLyBmb3Igc2VyaWFsaXphdGlvbi5cbiAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2suY2FsbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKHZhbHVlKTtcbiAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IGJvb2xlYW5DbGFzcykge1xuICAgICAgICAgICAgLy8gQm9vbGVhbnMgYXJlIHJlcHJlc2VudGVkIGxpdGVyYWxseS5cbiAgICAgICAgICAgIHJldHVybiBcIlwiICsgdmFsdWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChjbGFzc05hbWUgPT0gbnVtYmVyQ2xhc3MpIHtcbiAgICAgICAgICAgIC8vIEpTT04gbnVtYmVycyBtdXN0IGJlIGZpbml0ZS4gYEluZmluaXR5YCBhbmQgYE5hTmAgYXJlIHNlcmlhbGl6ZWQgYXNcbiAgICAgICAgICAgIC8vIGBcIm51bGxcImAuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPiAtMSAvIDAgJiYgdmFsdWUgPCAxIC8gMCA/IFwiXCIgKyB2YWx1ZSA6IFwibnVsbFwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IHN0cmluZ0NsYXNzKSB7XG4gICAgICAgICAgICAvLyBTdHJpbmdzIGFyZSBkb3VibGUtcXVvdGVkIGFuZCBlc2NhcGVkLlxuICAgICAgICAgICAgcmV0dXJuIHF1b3RlKFwiXCIgKyB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNlcmlhbGl6ZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoaXMgaXMgYSBsaW5lYXIgc2VhcmNoOyBwZXJmb3JtYW5jZVxuICAgICAgICAgICAgLy8gaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBuZXN0ZWQgb2JqZWN0cy5cbiAgICAgICAgICAgIGZvciAobGVuZ3RoID0gc3RhY2subGVuZ3RoOyBsZW5ndGgtLTspIHtcbiAgICAgICAgICAgICAgaWYgKHN0YWNrW2xlbmd0aF0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgLy8gQ3ljbGljIHN0cnVjdHVyZXMgY2Fubm90IGJlIHNlcmlhbGl6ZWQgYnkgYEpTT04uc3RyaW5naWZ5YC5cbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQWRkIHRoZSBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgICAgICAgICAgc3RhY2sucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICByZXN1bHRzID0gW107XG4gICAgICAgICAgICAvLyBTYXZlIHRoZSBjdXJyZW50IGluZGVudGF0aW9uIGxldmVsIGFuZCBpbmRlbnQgb25lIGFkZGl0aW9uYWwgbGV2ZWwuXG4gICAgICAgICAgICBwcmVmaXggPSBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIGluZGVudGF0aW9uICs9IHdoaXRlc3BhY2U7XG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IGFycmF5Q2xhc3MpIHtcbiAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgc2VyaWFsaXplIGFycmF5IGVsZW1lbnRzLlxuICAgICAgICAgICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gdmFsdWUubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBzZXJpYWxpemUoaW5kZXgsIHZhbHVlLCBjYWxsYmFjaywgcHJvcGVydGllcywgd2hpdGVzcGFjZSwgaW5kZW50YXRpb24sIHN0YWNrKTtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudCA9PT0gdW5kZWYgPyBcIm51bGxcIiA6IGVsZW1lbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdHMubGVuZ3RoID8gKHdoaXRlc3BhY2UgPyBcIltcXG5cIiArIGluZGVudGF0aW9uICsgcmVzdWx0cy5qb2luKFwiLFxcblwiICsgaW5kZW50YXRpb24pICsgXCJcXG5cIiArIHByZWZpeCArIFwiXVwiIDogKFwiW1wiICsgcmVzdWx0cy5qb2luKFwiLFwiKSArIFwiXVwiKSkgOiBcIltdXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXJpYWxpemUgb2JqZWN0IG1lbWJlcnMuIE1lbWJlcnMgYXJlIHNlbGVjdGVkIGZyb21cbiAgICAgICAgICAgICAgLy8gZWl0aGVyIGEgdXNlci1zcGVjaWZpZWQgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lcywgb3IgdGhlIG9iamVjdFxuICAgICAgICAgICAgICAvLyBpdHNlbGYuXG4gICAgICAgICAgICAgIGZvckVhY2gocHJvcGVydGllcyB8fCB2YWx1ZSwgZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBzZXJpYWxpemUocHJvcGVydHksIHZhbHVlLCBjYWxsYmFjaywgcHJvcGVydGllcywgd2hpdGVzcGFjZSwgaW5kZW50YXRpb24sIHN0YWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCAhPT0gdW5kZWYpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zOiBcIklmIGBnYXBgIHt3aGl0ZXNwYWNlfVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCBgbWVtYmVyYCB7cXVvdGUocHJvcGVydHkpICsgXCI6XCJ9XG4gICAgICAgICAgICAgICAgICAvLyBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBgbWVtYmVyYCBhbmQgdGhlIGBzcGFjZWAgY2hhcmFjdGVyLlwiXG4gICAgICAgICAgICAgICAgICAvLyBUaGUgXCJgc3BhY2VgIGNoYXJhY3RlclwiIHJlZmVycyB0byB0aGUgbGl0ZXJhbCBzcGFjZVxuICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVyLCBub3QgdGhlIGBzcGFjZWAge3dpZHRofSBhcmd1bWVudCBwcm92aWRlZCB0b1xuICAgICAgICAgICAgICAgICAgLy8gYEpTT04uc3RyaW5naWZ5YC5cbiAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChxdW90ZShwcm9wZXJ0eSkgKyBcIjpcIiArICh3aGl0ZXNwYWNlID8gXCIgXCIgOiBcIlwiKSArIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdHMubGVuZ3RoID8gKHdoaXRlc3BhY2UgPyBcIntcXG5cIiArIGluZGVudGF0aW9uICsgcmVzdWx0cy5qb2luKFwiLFxcblwiICsgaW5kZW50YXRpb24pICsgXCJcXG5cIiArIHByZWZpeCArIFwifVwiIDogKFwie1wiICsgcmVzdWx0cy5qb2luKFwiLFwiKSArIFwifVwiKSkgOiBcInt9XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRoZSB0cmF2ZXJzZWQgb2JqZWN0IHN0YWNrLlxuICAgICAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQdWJsaWM6IGBKU09OLnN0cmluZ2lmeWAuIFNlZSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLlxuICAgICAgICBleHBvcnRzLnN0cmluZ2lmeSA9IGZ1bmN0aW9uIChzb3VyY2UsIGZpbHRlciwgd2lkdGgpIHtcbiAgICAgICAgICB2YXIgd2hpdGVzcGFjZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIGNsYXNzTmFtZTtcbiAgICAgICAgICBpZiAob2JqZWN0VHlwZXNbdHlwZW9mIGZpbHRlcl0gJiYgZmlsdGVyKSB7XG4gICAgICAgICAgICBpZiAoKGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwoZmlsdGVyKSkgPT0gZnVuY3Rpb25DbGFzcykge1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZpbHRlcjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IGFycmF5Q2xhc3MpIHtcbiAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgcHJvcGVydHkgbmFtZXMgYXJyYXkgaW50byBhIG1ha2VzaGlmdCBzZXQuXG4gICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBmaWx0ZXIubGVuZ3RoLCB2YWx1ZTsgaW5kZXggPCBsZW5ndGg7IHZhbHVlID0gZmlsdGVyW2luZGV4KytdLCAoKGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwodmFsdWUpKSwgY2xhc3NOYW1lID09IHN0cmluZ0NsYXNzIHx8IGNsYXNzTmFtZSA9PSBudW1iZXJDbGFzcykgJiYgKHByb3BlcnRpZXNbdmFsdWVdID0gMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAod2lkdGgpIHtcbiAgICAgICAgICAgIGlmICgoY2xhc3NOYW1lID0gZ2V0Q2xhc3MuY2FsbCh3aWR0aCkpID09IG51bWJlckNsYXNzKSB7XG4gICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGB3aWR0aGAgdG8gYW4gaW50ZWdlciBhbmQgY3JlYXRlIGEgc3RyaW5nIGNvbnRhaW5pbmdcbiAgICAgICAgICAgICAgLy8gYHdpZHRoYCBudW1iZXIgb2Ygc3BhY2UgY2hhcmFjdGVycy5cbiAgICAgICAgICAgICAgaWYgKCh3aWR0aCAtPSB3aWR0aCAlIDEpID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAod2hpdGVzcGFjZSA9IFwiXCIsIHdpZHRoID4gMTAgJiYgKHdpZHRoID0gMTApOyB3aGl0ZXNwYWNlLmxlbmd0aCA8IHdpZHRoOyB3aGl0ZXNwYWNlICs9IFwiIFwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjbGFzc05hbWUgPT0gc3RyaW5nQ2xhc3MpIHtcbiAgICAgICAgICAgICAgd2hpdGVzcGFjZSA9IHdpZHRoLmxlbmd0aCA8PSAxMCA/IHdpZHRoIDogd2lkdGguc2xpY2UoMCwgMTApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBPcGVyYSA8PSA3LjU0dTIgZGlzY2FyZHMgdGhlIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggZW1wdHkgc3RyaW5nIGtleXNcbiAgICAgICAgICAvLyAoYFwiXCJgKSBvbmx5IGlmIHRoZXkgYXJlIHVzZWQgZGlyZWN0bHkgd2l0aGluIGFuIG9iamVjdCBtZW1iZXIgbGlzdFxuICAgICAgICAgIC8vIChlLmcuLCBgIShcIlwiIGluIHsgXCJcIjogMX0pYCkuXG4gICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShcIlwiLCAodmFsdWUgPSB7fSwgdmFsdWVbXCJcIl0gPSBzb3VyY2UsIHZhbHVlKSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIFwiXCIsIFtdKTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gUHVibGljOiBQYXJzZXMgYSBKU09OIHNvdXJjZSBzdHJpbmcuXG4gICAgICBpZiAoIWhhcyhcImpzb24tcGFyc2VcIikpIHtcbiAgICAgICAgdmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IEEgbWFwIG9mIGVzY2FwZWQgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCB0aGVpciB1bmVzY2FwZWRcbiAgICAgICAgLy8gZXF1aXZhbGVudHMuXG4gICAgICAgIHZhciBVbmVzY2FwZXMgPSB7XG4gICAgICAgICAgOTI6IFwiXFxcXFwiLFxuICAgICAgICAgIDM0OiAnXCInLFxuICAgICAgICAgIDQ3OiBcIi9cIixcbiAgICAgICAgICA5ODogXCJcXGJcIixcbiAgICAgICAgICAxMTY6IFwiXFx0XCIsXG4gICAgICAgICAgMTEwOiBcIlxcblwiLFxuICAgICAgICAgIDEwMjogXCJcXGZcIixcbiAgICAgICAgICAxMTQ6IFwiXFxyXCJcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogU3RvcmVzIHRoZSBwYXJzZXIgc3RhdGUuXG4gICAgICAgIHZhciBJbmRleCwgU291cmNlO1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZXNldHMgdGhlIHBhcnNlciBzdGF0ZSBhbmQgdGhyb3dzIGEgYFN5bnRheEVycm9yYC5cbiAgICAgICAgdmFyIGFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIEluZGV4ID0gU291cmNlID0gbnVsbDtcbiAgICAgICAgICB0aHJvdyBTeW50YXhFcnJvcigpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZXR1cm5zIHRoZSBuZXh0IHRva2VuLCBvciBgXCIkXCJgIGlmIHRoZSBwYXJzZXIgaGFzIHJlYWNoZWRcbiAgICAgICAgLy8gdGhlIGVuZCBvZiB0aGUgc291cmNlIHN0cmluZy4gQSB0b2tlbiBtYXkgYmUgYSBzdHJpbmcsIG51bWJlciwgYG51bGxgXG4gICAgICAgIC8vIGxpdGVyYWwsIG9yIEJvb2xlYW4gbGl0ZXJhbC5cbiAgICAgICAgdmFyIGxleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgc291cmNlID0gU291cmNlLCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoLCB2YWx1ZSwgYmVnaW4sIHBvc2l0aW9uLCBpc1NpZ25lZCwgY2hhckNvZGU7XG4gICAgICAgICAgd2hpbGUgKEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KTtcbiAgICAgICAgICAgIHN3aXRjaCAoY2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuICAgICAgICAgICAgICAgIC8vIFNraXAgd2hpdGVzcGFjZSB0b2tlbnMsIGluY2x1ZGluZyB0YWJzLCBjYXJyaWFnZSByZXR1cm5zLCBsaW5lXG4gICAgICAgICAgICAgICAgLy8gZmVlZHMsIGFuZCBzcGFjZSBjaGFyYWN0ZXJzLlxuICAgICAgICAgICAgICAgIEluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgMTIzOiBjYXNlIDEyNTogY2FzZSA5MTogY2FzZSA5MzogY2FzZSA1ODogY2FzZSA0NDpcbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBhIHB1bmN0dWF0b3IgdG9rZW4gKGB7YCwgYH1gLCBgW2AsIGBdYCwgYDpgLCBvciBgLGApIGF0XG4gICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgcG9zaXRpb24uXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBjaGFySW5kZXhCdWdneSA/IHNvdXJjZS5jaGFyQXQoSW5kZXgpIDogc291cmNlW0luZGV4XTtcbiAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgICAgICAvLyBgXCJgIGRlbGltaXRzIGEgSlNPTiBzdHJpbmc7IGFkdmFuY2UgdG8gdGhlIG5leHQgY2hhcmFjdGVyIGFuZFxuICAgICAgICAgICAgICAgIC8vIGJlZ2luIHBhcnNpbmcgdGhlIHN0cmluZy4gU3RyaW5nIHRva2VucyBhcmUgcHJlZml4ZWQgd2l0aCB0aGVcbiAgICAgICAgICAgICAgICAvLyBzZW50aW5lbCBgQGAgY2hhcmFjdGVyIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSBwdW5jdHVhdG9ycyBhbmRcbiAgICAgICAgICAgICAgICAvLyBlbmQtb2Ytc3RyaW5nIHRva2Vucy5cbiAgICAgICAgICAgICAgICBmb3IgKHZhbHVlID0gXCJAXCIsIEluZGV4Kys7IEluZGV4IDwgbGVuZ3RoOykge1xuICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPCAzMikge1xuICAgICAgICAgICAgICAgICAgICAvLyBVbmVzY2FwZWQgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzICh0aG9zZSB3aXRoIGEgY29kZSB1bml0XG4gICAgICAgICAgICAgICAgICAgIC8vIGxlc3MgdGhhbiB0aGUgc3BhY2UgY2hhcmFjdGVyKSBhcmUgbm90IHBlcm1pdHRlZC5cbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhckNvZGUgPT0gOTIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSByZXZlcnNlIHNvbGlkdXMgKGBcXGApIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYW4gZXNjYXBlZFxuICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9sIGNoYXJhY3RlciAoaW5jbHVkaW5nIGBcImAsIGBcXGAsIGFuZCBgL2ApIG9yIFVuaWNvZGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA5MjogY2FzZSAzNDogY2FzZSA0NzogY2FzZSA5ODogY2FzZSAxMTY6IGNhc2UgMTEwOiBjYXNlIDEwMjogY2FzZSAxMTQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZpdmUgZXNjYXBlZCBjb250cm9sIGNoYXJhY3RlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBVbmVzY2FwZXNbY2hhckNvZGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTE3OlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYFxcdWAgbWFya3MgdGhlIGJlZ2lubmluZyBvZiBhIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCB2YWxpZGF0ZSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdXItZGlnaXQgY29kZSBwb2ludC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luID0gKytJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocG9zaXRpb24gPSBJbmRleCArIDQ7IEluZGV4IDwgcG9zaXRpb247IEluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgdmFsaWQgc2VxdWVuY2UgY29tcHJpc2VzIGZvdXIgaGV4ZGlnaXRzIChjYXNlLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnNlbnNpdGl2ZSkgdGhhdCBmb3JtIGEgc2luZ2xlIGhleGFkZWNpbWFsIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1NyB8fCBjaGFyQ29kZSA+PSA5NyAmJiBjaGFyQ29kZSA8PSAxMDIgfHwgY2hhckNvZGUgPj0gNjUgJiYgY2hhckNvZGUgPD0gNzApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZpdmUgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gZnJvbUNoYXJDb2RlKFwiMHhcIiArIHNvdXJjZS5zbGljZShiZWdpbiwgSW5kZXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSAzNCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEFuIHVuZXNjYXBlZCBkb3VibGUtcXVvdGUgY2hhcmFjdGVyIG1hcmtzIHRoZSBlbmQgb2YgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgLy8gc3RyaW5nLlxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBiZWdpbiA9IEluZGV4O1xuICAgICAgICAgICAgICAgICAgICAvLyBPcHRpbWl6ZSBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGEgc3RyaW5nIGlzIHZhbGlkLlxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hhckNvZGUgPj0gMzIgJiYgY2hhckNvZGUgIT0gOTIgJiYgY2hhckNvZGUgIT0gMzQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgc3RyaW5nIGFzLWlzLlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBzb3VyY2Uuc2xpY2UoYmVnaW4sIEluZGV4KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KSA9PSAzNCkge1xuICAgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgYW5kIHJldHVybiB0aGUgcmV2aXZlZCBzdHJpbmcuXG4gICAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBVbnRlcm1pbmF0ZWQgc3RyaW5nLlxuICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgbnVtYmVycyBhbmQgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgYmVnaW4gPSBJbmRleDtcbiAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHBhc3QgdGhlIG5lZ2F0aXZlIHNpZ24sIGlmIG9uZSBpcyBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDQ1KSB7XG4gICAgICAgICAgICAgICAgICBpc1NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBhbiBpbnRlZ2VyIG9yIGZsb2F0aW5nLXBvaW50IHZhbHVlLlxuICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nykge1xuICAgICAgICAgICAgICAgICAgLy8gTGVhZGluZyB6ZXJvZXMgYXJlIGludGVycHJldGVkIGFzIG9jdGFsIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDQ4ICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCArIDEpKSwgY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWwgb2N0YWwgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlzU2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAvLyBQYXJzZSB0aGUgaW50ZWdlciBjb21wb25lbnQuXG4gICAgICAgICAgICAgICAgICBmb3IgKDsgSW5kZXggPCBsZW5ndGggJiYgKChjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KTsgSW5kZXgrKyk7XG4gICAgICAgICAgICAgICAgICAvLyBGbG9hdHMgY2Fubm90IGNvbnRhaW4gYSBsZWFkaW5nIGRlY2ltYWwgcG9pbnQ7IGhvd2V2ZXIsIHRoaXNcbiAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaXMgYWxyZWFkeSBhY2NvdW50ZWQgZm9yIGJ5IHRoZSBwYXJzZXIuXG4gICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpID09IDQ2KSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gKytJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGhlIGRlY2ltYWwgY29tcG9uZW50LlxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcG9zaXRpb24gPCBsZW5ndGggJiYgKChjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KHBvc2l0aW9uKSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KTsgcG9zaXRpb24rKyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWwgdHJhaWxpbmcgZGVjaW1hbC5cbiAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEluZGV4ID0gcG9zaXRpb247XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBQYXJzZSBleHBvbmVudHMuIFRoZSBgZWAgZGVub3RpbmcgdGhlIGV4cG9uZW50IGlzXG4gICAgICAgICAgICAgICAgICAvLyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gMTAxIHx8IGNoYXJDb2RlID09IDY5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoKytJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNraXAgcGFzdCB0aGUgc2lnbiBmb2xsb3dpbmcgdGhlIGV4cG9uZW50LCBpZiBvbmUgaXNcbiAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gNDMgfHwgY2hhckNvZGUgPT0gNDUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIHRoZSBleHBvbmVudGlhbCBjb21wb25lbnQuXG4gICAgICAgICAgICAgICAgICAgIGZvciAocG9zaXRpb24gPSBJbmRleDsgcG9zaXRpb24gPCBsZW5ndGggJiYgKChjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KHBvc2l0aW9uKSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KTsgcG9zaXRpb24rKyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWwgZW1wdHkgZXhwb25lbnQuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBJbmRleCA9IHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy8gQ29lcmNlIHRoZSBwYXJzZWQgdmFsdWUgdG8gYSBKYXZhU2NyaXB0IG51bWJlci5cbiAgICAgICAgICAgICAgICAgIHJldHVybiArc291cmNlLnNsaWNlKGJlZ2luLCBJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEEgbmVnYXRpdmUgc2lnbiBtYXkgb25seSBwcmVjZWRlIG51bWJlcnMuXG4gICAgICAgICAgICAgICAgaWYgKGlzU2lnbmVkKSB7XG4gICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBgdHJ1ZWAsIGBmYWxzZWAsIGFuZCBgbnVsbGAgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5zbGljZShJbmRleCwgSW5kZXggKyA0KSA9PSBcInRydWVcIikge1xuICAgICAgICAgICAgICAgICAgSW5kZXggKz0gNDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlLnNsaWNlKEluZGV4LCBJbmRleCArIDUpID09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgICAgICAgSW5kZXggKz0gNTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZS5zbGljZShJbmRleCwgSW5kZXggKyA0KSA9PSBcIm51bGxcIikge1xuICAgICAgICAgICAgICAgICAgSW5kZXggKz0gNDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBVbnJlY29nbml6ZWQgdG9rZW4uXG4gICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmV0dXJuIHRoZSBzZW50aW5lbCBgJGAgY2hhcmFjdGVyIGlmIHRoZSBwYXJzZXIgaGFzIHJlYWNoZWQgdGhlIGVuZFxuICAgICAgICAgIC8vIG9mIHRoZSBzb3VyY2Ugc3RyaW5nLlxuICAgICAgICAgIHJldHVybiBcIiRcIjtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUGFyc2VzIGEgSlNPTiBgdmFsdWVgIHRva2VuLlxuICAgICAgICB2YXIgZ2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdHMsIGhhc01lbWJlcnM7XG4gICAgICAgICAgaWYgKHZhbHVlID09IFwiJFwiKSB7XG4gICAgICAgICAgICAvLyBVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dC5cbiAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKChjaGFySW5kZXhCdWdneSA/IHZhbHVlLmNoYXJBdCgwKSA6IHZhbHVlWzBdKSA9PSBcIkBcIikge1xuICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHNlbnRpbmVsIGBAYCBjaGFyYWN0ZXIuXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zbGljZSgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFBhcnNlIG9iamVjdCBhbmQgYXJyYXkgbGl0ZXJhbHMuXG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJbXCIpIHtcbiAgICAgICAgICAgICAgLy8gUGFyc2VzIGEgSlNPTiBhcnJheSwgcmV0dXJuaW5nIGEgbmV3IEphdmFTY3JpcHQgYXJyYXkuXG4gICAgICAgICAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICg7OyBoYXNNZW1iZXJzIHx8IChoYXNNZW1iZXJzID0gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGxleCgpO1xuICAgICAgICAgICAgICAgIC8vIEEgY2xvc2luZyBzcXVhcmUgYnJhY2tldCBtYXJrcyB0aGUgZW5kIG9mIHRoZSBhcnJheSBsaXRlcmFsLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIl1cIikge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBhcnJheSBsaXRlcmFsIGNvbnRhaW5zIGVsZW1lbnRzLCB0aGUgY3VycmVudCB0b2tlblxuICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBhIGNvbW1hIHNlcGFyYXRpbmcgdGhlIHByZXZpb3VzIGVsZW1lbnQgZnJvbSB0aGVcbiAgICAgICAgICAgICAgICAvLyBuZXh0LlxuICAgICAgICAgICAgICAgIGlmIChoYXNNZW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiXVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVW5leHBlY3RlZCB0cmFpbGluZyBgLGAgaW4gYXJyYXkgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBBIGAsYCBtdXN0IHNlcGFyYXRlIGVhY2ggYXJyYXkgZWxlbWVudC5cbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRWxpc2lvbnMgYW5kIGxlYWRpbmcgY29tbWFzIGFyZSBub3QgcGVybWl0dGVkLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIixcIikge1xuICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGdldCh2YWx1ZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBcIntcIikge1xuICAgICAgICAgICAgICAvLyBQYXJzZXMgYSBKU09OIG9iamVjdCwgcmV0dXJuaW5nIGEgbmV3IEphdmFTY3JpcHQgb2JqZWN0LlxuICAgICAgICAgICAgICByZXN1bHRzID0ge307XG4gICAgICAgICAgICAgIGZvciAoOzsgaGFzTWVtYmVycyB8fCAoaGFzTWVtYmVycyA9IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAvLyBBIGNsb3NpbmcgY3VybHkgYnJhY2UgbWFya3MgdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwifVwiKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBsaXRlcmFsIGNvbnRhaW5zIG1lbWJlcnMsIHRoZSBjdXJyZW50IHRva2VuXG4gICAgICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGEgY29tbWEgc2VwYXJhdG9yLlxuICAgICAgICAgICAgICAgIGlmIChoYXNNZW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwifVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVW5leHBlY3RlZCB0cmFpbGluZyBgLGAgaW4gb2JqZWN0IGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBgLGAgbXVzdCBzZXBhcmF0ZSBlYWNoIG9iamVjdCBtZW1iZXIuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIExlYWRpbmcgY29tbWFzIGFyZSBub3QgcGVybWl0dGVkLCBvYmplY3QgcHJvcGVydHkgbmFtZXMgbXVzdCBiZVxuICAgICAgICAgICAgICAgIC8vIGRvdWJsZS1xdW90ZWQgc3RyaW5ncywgYW5kIGEgYDpgIG11c3Qgc2VwYXJhdGUgZWFjaCBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIC8vIG5hbWUgYW5kIHZhbHVlLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIixcIiB8fCB0eXBlb2YgdmFsdWUgIT0gXCJzdHJpbmdcIiB8fCAoY2hhckluZGV4QnVnZ3kgPyB2YWx1ZS5jaGFyQXQoMCkgOiB2YWx1ZVswXSkgIT0gXCJAXCIgfHwgbGV4KCkgIT0gXCI6XCIpIHtcbiAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNbdmFsdWUuc2xpY2UoMSldID0gZ2V0KGxleCgpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdG9rZW4gZW5jb3VudGVyZWQuXG4gICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFVwZGF0ZXMgYSB0cmF2ZXJzZWQgb2JqZWN0IG1lbWJlci5cbiAgICAgICAgdmFyIHVwZGF0ZSA9IGZ1bmN0aW9uIChzb3VyY2UsIHByb3BlcnR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIHZhciBlbGVtZW50ID0gd2Fsayhzb3VyY2UsIHByb3BlcnR5LCBjYWxsYmFjayk7XG4gICAgICAgICAgaWYgKGVsZW1lbnQgPT09IHVuZGVmKSB7XG4gICAgICAgICAgICBkZWxldGUgc291cmNlW3Byb3BlcnR5XTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc291cmNlW3Byb3BlcnR5XSA9IGVsZW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZWN1cnNpdmVseSB0cmF2ZXJzZXMgYSBwYXJzZWQgSlNPTiBvYmplY3QsIGludm9raW5nIHRoZVxuICAgICAgICAvLyBgY2FsbGJhY2tgIGZ1bmN0aW9uIGZvciBlYWNoIHZhbHVlLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZVxuICAgICAgICAvLyBgV2Fsayhob2xkZXIsIG5hbWUpYCBvcGVyYXRpb24gZGVmaW5lZCBpbiBFUyA1LjEgc2VjdGlvbiAxNS4xMi4yLlxuICAgICAgICB2YXIgd2FsayA9IGZ1bmN0aW9uIChzb3VyY2UsIHByb3BlcnR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVtwcm9wZXJ0eV0sIGxlbmd0aDtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGBmb3JFYWNoYCBjYW4ndCBiZSB1c2VkIHRvIHRyYXZlcnNlIGFuIGFycmF5IGluIE9wZXJhIDw9IDguNTRcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgaXRzIGBPYmplY3QjaGFzT3duUHJvcGVydHlgIGltcGxlbWVudGF0aW9uIHJldHVybnMgYGZhbHNlYFxuICAgICAgICAgICAgLy8gZm9yIGFycmF5IGluZGljZXMgKGUuZy4sIGAhWzEsIDIsIDNdLmhhc093blByb3BlcnR5KFwiMFwiKWApLlxuICAgICAgICAgICAgaWYgKGdldENsYXNzLmNhbGwodmFsdWUpID09IGFycmF5Q2xhc3MpIHtcbiAgICAgICAgICAgICAgZm9yIChsZW5ndGggPSB2YWx1ZS5sZW5ndGg7IGxlbmd0aC0tOykge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSh2YWx1ZSwgbGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvckVhY2godmFsdWUsIGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSh2YWx1ZSwgcHJvcGVydHksIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHNvdXJjZSwgcHJvcGVydHksIHZhbHVlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQdWJsaWM6IGBKU09OLnBhcnNlYC4gU2VlIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjIuXG4gICAgICAgIGV4cG9ydHMucGFyc2UgPSBmdW5jdGlvbiAoc291cmNlLCBjYWxsYmFjaykge1xuICAgICAgICAgIHZhciByZXN1bHQsIHZhbHVlO1xuICAgICAgICAgIEluZGV4ID0gMDtcbiAgICAgICAgICBTb3VyY2UgPSBcIlwiICsgc291cmNlO1xuICAgICAgICAgIHJlc3VsdCA9IGdldChsZXgoKSk7XG4gICAgICAgICAgLy8gSWYgYSBKU09OIHN0cmluZyBjb250YWlucyBtdWx0aXBsZSB0b2tlbnMsIGl0IGlzIGludmFsaWQuXG4gICAgICAgICAgaWYgKGxleCgpICE9IFwiJFwiKSB7XG4gICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZXNldCB0aGUgcGFyc2VyIHN0YXRlLlxuICAgICAgICAgIEluZGV4ID0gU291cmNlID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sgJiYgZ2V0Q2xhc3MuY2FsbChjYWxsYmFjaykgPT0gZnVuY3Rpb25DbGFzcyA/IHdhbGsoKHZhbHVlID0ge30sIHZhbHVlW1wiXCJdID0gcmVzdWx0LCB2YWx1ZSksIFwiXCIsIGNhbGxiYWNrKSA6IHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnRzW1wicnVuSW5Db250ZXh0XCJdID0gcnVuSW5Db250ZXh0O1xuICAgIHJldHVybiBleHBvcnRzO1xuICB9XG5cbiAgaWYgKGZyZWVFeHBvcnRzICYmICFpc0xvYWRlcikge1xuICAgIC8vIEV4cG9ydCBmb3IgQ29tbW9uSlMgZW52aXJvbm1lbnRzLlxuICAgIHJ1bkluQ29udGV4dChyb290LCBmcmVlRXhwb3J0cyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRXhwb3J0IGZvciB3ZWIgYnJvd3NlcnMgYW5kIEphdmFTY3JpcHQgZW5naW5lcy5cbiAgICB2YXIgbmF0aXZlSlNPTiA9IHJvb3QuSlNPTixcbiAgICAgICAgcHJldmlvdXNKU09OID0gcm9vdFtcIkpTT04zXCJdLFxuICAgICAgICBpc1Jlc3RvcmVkID0gZmFsc2U7XG5cbiAgICB2YXIgSlNPTjMgPSBydW5JbkNvbnRleHQocm9vdCwgKHJvb3RbXCJKU09OM1wiXSA9IHtcbiAgICAgIC8vIFB1YmxpYzogUmVzdG9yZXMgdGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSBnbG9iYWwgYEpTT05gIG9iamVjdCBhbmRcbiAgICAgIC8vIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGBKU09OM2Agb2JqZWN0LlxuICAgICAgXCJub0NvbmZsaWN0XCI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFpc1Jlc3RvcmVkKSB7XG4gICAgICAgICAgaXNSZXN0b3JlZCA9IHRydWU7XG4gICAgICAgICAgcm9vdC5KU09OID0gbmF0aXZlSlNPTjtcbiAgICAgICAgICByb290W1wiSlNPTjNcIl0gPSBwcmV2aW91c0pTT047XG4gICAgICAgICAgbmF0aXZlSlNPTiA9IHByZXZpb3VzSlNPTiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04zO1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIHJvb3QuSlNPTiA9IHtcbiAgICAgIFwicGFyc2VcIjogSlNPTjMucGFyc2UsXG4gICAgICBcInN0cmluZ2lmeVwiOiBKU09OMy5zdHJpbmdpZnlcbiAgICB9O1xuICB9XG5cbiAgLy8gRXhwb3J0IGZvciBhc3luY2hyb25vdXMgbW9kdWxlIGxvYWRlcnMuXG4gIGlmIChpc0xvYWRlcikge1xuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gSlNPTjM7XG4gICAgfSk7XG4gIH1cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3XG4gKiBtZW1iZXIgaXMgTygxKSwgdGVzdGluZyBmb3IgbWVtYmVyc2hpcCBpcyBPKDEpLCBhbmQgZmluZGluZyB0aGUgaW5kZXggb2YgYW5cbiAqIGVsZW1lbnQgaXMgTygxKS4gUmVtb3ZpbmcgZWxlbWVudHMgZnJvbSB0aGUgc2V0IGlzIG5vdCBzdXBwb3J0ZWQuIE9ubHlcbiAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgbWVtYmVyc2hpcC5cbiAqL1xuZnVuY3Rpb24gQXJyYXlTZXQoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8qKlxuICogU3RhdGljIG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gKi9cbkFycmF5U2V0LmZyb21BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X2Zyb21BcnJheShhQXJyYXksIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYUFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgc2V0LmFkZChhQXJyYXlbaV0sIGFBbGxvd0R1cGxpY2F0ZXMpO1xuICB9XG4gIHJldHVybiBzZXQ7XG59O1xuXG4vKipcbiAqIFJldHVybiBob3cgbWFueSB1bmlxdWUgaXRlbXMgYXJlIGluIHRoaXMgQXJyYXlTZXQuIElmIGR1cGxpY2F0ZXMgaGF2ZSBiZWVuXG4gKiBhZGRlZCwgdGhhbiB0aG9zZSBkbyBub3QgY291bnQgdG93YXJkcyB0aGUgc2l6ZS5cbiAqXG4gKiBAcmV0dXJucyBOdW1iZXJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiBBcnJheVNldF9zaXplKCkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fc2V0KS5sZW5ndGg7XG59O1xuXG4vKipcbiAqIEFkZCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoaXMgc2V0LlxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gQXJyYXlTZXRfYWRkKGFTdHIsIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICB2YXIgaXNEdXBsaWNhdGUgPSBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB2YXIgaWR4ID0gdGhpcy5fYXJyYXkubGVuZ3RoO1xuICBpZiAoIWlzRHVwbGljYXRlIHx8IGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICB0aGlzLl9hcnJheS5wdXNoKGFTdHIpO1xuICB9XG4gIGlmICghaXNEdXBsaWNhdGUpIHtcbiAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gIH1cbn07XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIHN0cmluZyBhIG1lbWJlciBvZiB0aGlzIHNldD9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIEFycmF5U2V0X2hhcyhhU3RyKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgcmV0dXJuIGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIGlmIChoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgaW50VG9DaGFyTWFwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcblxuLyoqXG4gKiBFbmNvZGUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMCB0byA2MyB0byBhIHNpbmdsZSBiYXNlIDY0IGRpZ2l0LlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgaWYgKDAgPD0gbnVtYmVyICYmIG51bWJlciA8IGludFRvQ2hhck1hcC5sZW5ndGgpIHtcbiAgICByZXR1cm4gaW50VG9DaGFyTWFwW251bWJlcl07XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogXCIgKyBudW1iZXIpO1xufTtcblxuLyoqXG4gKiBEZWNvZGUgYSBzaW5nbGUgYmFzZSA2NCBjaGFyYWN0ZXIgY29kZSBkaWdpdCB0byBhbiBpbnRlZ2VyLiBSZXR1cm5zIC0xIG9uXG4gKiBmYWlsdXJlLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIChjaGFyQ29kZSkge1xuICB2YXIgYmlnQSA9IDY1OyAgICAgLy8gJ0EnXG4gIHZhciBiaWdaID0gOTA7ICAgICAvLyAnWidcblxuICB2YXIgbGl0dGxlQSA9IDk3OyAgLy8gJ2EnXG4gIHZhciBsaXR0bGVaID0gMTIyOyAvLyAneidcblxuICB2YXIgemVybyA9IDQ4OyAgICAgLy8gJzAnXG4gIHZhciBuaW5lID0gNTc7ICAgICAvLyAnOSdcblxuICB2YXIgcGx1cyA9IDQzOyAgICAgLy8gJysnXG4gIHZhciBzbGFzaCA9IDQ3OyAgICAvLyAnLydcblxuICB2YXIgbGl0dGxlT2Zmc2V0ID0gMjY7XG4gIHZhciBudW1iZXJPZmZzZXQgPSA1MjtcblxuICAvLyAwIC0gMjU6IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXG4gIGlmIChiaWdBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGJpZ1opIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gYmlnQSk7XG4gIH1cblxuICAvLyAyNiAtIDUxOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuICBpZiAobGl0dGxlQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBsaXR0bGVaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGxpdHRsZUEgKyBsaXR0bGVPZmZzZXQpO1xuICB9XG5cbiAgLy8gNTIgLSA2MTogMDEyMzQ1Njc4OVxuICBpZiAoemVybyA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBuaW5lKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIHplcm8gKyBudW1iZXJPZmZzZXQpO1xuICB9XG5cbiAgLy8gNjI6ICtcbiAgaWYgKGNoYXJDb2RlID09IHBsdXMpIHtcbiAgICByZXR1cm4gNjI7XG4gIH1cblxuICAvLyA2MzogL1xuICBpZiAoY2hhckNvZGUgPT0gc2xhc2gpIHtcbiAgICByZXR1cm4gNjM7XG4gIH1cblxuICAvLyBJbnZhbGlkIGJhc2U2NCBkaWdpdC5cbiAgcmV0dXJuIC0xO1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5leHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBSZWN1cnNpdmUgaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaC5cbiAqXG4gKiBAcGFyYW0gYUxvdyBJbmRpY2VzIGhlcmUgYW5kIGxvd2VyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYUhpZ2ggSW5kaWNlcyBoZXJlIGFuZCBoaWdoZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IGJlaW5nIHNlYXJjaGVkIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIG5vbi1lbXB0eSBhcnJheSBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBGdW5jdGlvbiB3aGljaCB0YWtlcyB0d28gZWxlbWVudHMgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgLy9cbiAgLy8gICAxLiBXZSBmaW5kIHRoZSBleGFjdCBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgLy9cbiAgLy8gICAyLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGJ1dCB3ZSBjYW4gcmV0dXJuIHRoZSBpbmRleCBvZlxuICAvLyAgICAgIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudC5cbiAgLy9cbiAgLy8gICAzLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGFuZCB0aGVyZSBpcyBubyBuZXh0LWNsb3Nlc3RcbiAgLy8gICAgICBlbGVtZW50IHRoYW4gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgc28gd2UgcmV0dXJuIC0xLlxuICB2YXIgbWlkID0gTWF0aC5mbG9vcigoYUhpZ2ggLSBhTG93KSAvIDIpICsgYUxvdztcbiAgdmFyIGNtcCA9IGFDb21wYXJlKGFOZWVkbGUsIGFIYXlzdGFja1ttaWRdLCB0cnVlKTtcbiAgaWYgKGNtcCA9PT0gMCkge1xuICAgIC8vIEZvdW5kIHRoZSBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgICByZXR1cm4gbWlkO1xuICB9XG4gIGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGdyZWF0ZXIgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAoYUhpZ2ggLSBtaWQgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgdXBwZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2gobWlkLCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIFRoZSBleGFjdCBuZWVkbGUgZWxlbWVudCB3YXMgbm90IGZvdW5kIGluIHRoaXMgaGF5c3RhY2suIERldGVybWluZSBpZlxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBhSGlnaCA8IGFIYXlzdGFjay5sZW5ndGggPyBhSGlnaCA6IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGxlc3MgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAobWlkIC0gYUxvdyA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSBsb3dlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBtaWQsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYUxvdyA8IDAgPyAtMSA6IGFMb3c7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoIHdoaWNoIHdpbGwgYWx3YXlzIHRyeSBhbmQgcmV0dXJuXG4gKiB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgZWxlbWVudCBpZiB0aGVyZSBpcyBubyBleGFjdCBoaXQuIFRoaXMgaXMgYmVjYXVzZVxuICogbWFwcGluZ3MgYmV0d2VlbiBvcmlnaW5hbCBhbmQgZ2VuZXJhdGVkIGxpbmUvY29sIHBhaXJzIGFyZSBzaW5nbGUgcG9pbnRzLFxuICogYW5kIHRoZXJlIGlzIGFuIGltcGxpY2l0IHJlZ2lvbiBiZXR3ZWVuIGVhY2ggb2YgdGhlbSwgc28gYSBtaXNzIGp1c3QgbWVhbnNcbiAqIHRoYXQgeW91IGFyZW4ndCBvbiB0aGUgdmVyeSBzdGFydCBvZiBhIHJlZ2lvbi5cbiAqXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCB5b3UgYXJlIGxvb2tpbmcgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgYXJyYXkgdGhhdCBpcyBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBuZWVkbGUgYW5kIGFuIGVsZW1lbnQgaW4gdGhlXG4gKiAgICAgYXJyYXkgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5lZWRsZSBpcyBsZXNzXG4gKiAgICAgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgZWxlbWVudCwgcmVzcGVjdGl2ZWx5LlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICovXG5leHBvcnRzLnNlYXJjaCA9IGZ1bmN0aW9uIHNlYXJjaChhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICBpZiAoYUhheXN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHJlY3Vyc2l2ZVNlYXJjaCgtMSwgYUhheXN0YWNrLmxlbmd0aCwgYU5lZWRsZSwgYUhheXN0YWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbXBhcmUsIGFCaWFzIHx8IGV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLy8gV2UgaGF2ZSBmb3VuZCBlaXRoZXIgdGhlIGV4YWN0IGVsZW1lbnQsIG9yIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudCB0aGFuXG4gIC8vIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIHN1Y2hcbiAgLy8gZWxlbWVudC4gTWFrZSBzdXJlIHdlIGFsd2F5cyByZXR1cm4gdGhlIHNtYWxsZXN0IG9mIHRoZXNlLlxuICB3aGlsZSAoaW5kZXggLSAxID49IDApIHtcbiAgICBpZiAoYUNvbXBhcmUoYUhheXN0YWNrW2luZGV4XSwgYUhheXN0YWNrW2luZGV4IC0gMV0sIHRydWUpICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLS1pbmRleDtcbiAgfVxuXG4gIHJldHVybiBpbmRleDtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGdldHRpbmcgdmFsdWVzIGZyb20gcGFyYW1ldGVyL29wdGlvbnNcbiAqIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGFyZ3MgVGhlIG9iamVjdCB3ZSBhcmUgZXh0cmFjdGluZyB2YWx1ZXMgZnJvbVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdlIGFyZSBnZXR0aW5nLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBBbiBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmdcbiAqIGZyb20gdGhlIG9iamVjdC4gSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkIGFuZCB0aGUgcHJvcGVydHkgaXMgbWlzc2luZywgYW5cbiAqIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICovXG5mdW5jdGlvbiBnZXRBcmcoYUFyZ3MsIGFOYW1lLCBhRGVmYXVsdFZhbHVlKSB7XG4gIGlmIChhTmFtZSBpbiBhQXJncykge1xuICAgIHJldHVybiBhQXJnc1thTmFtZV07XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBhRGVmYXVsdFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYU5hbWUgKyAnXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKTtcbiAgfVxufVxuZXhwb3J0cy5nZXRBcmcgPSBnZXRBcmc7XG5cbnZhciB1cmxSZWdleHAgPSAvXig/OihbXFx3K1xcLS5dKyk6KT9cXC9cXC8oPzooXFx3KzpcXHcrKUApPyhbXFx3Ll0qKSg/OjooXFxkKykpPyhcXFMqKSQvO1xudmFyIGRhdGFVcmxSZWdleHAgPSAvXmRhdGE6LitcXCwuKyQvO1xuXG5mdW5jdGlvbiB1cmxQYXJzZShhVXJsKSB7XG4gIHZhciBtYXRjaCA9IGFVcmwubWF0Y2godXJsUmVnZXhwKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NoZW1lOiBtYXRjaFsxXSxcbiAgICBhdXRoOiBtYXRjaFsyXSxcbiAgICBob3N0OiBtYXRjaFszXSxcbiAgICBwb3J0OiBtYXRjaFs0XSxcbiAgICBwYXRoOiBtYXRjaFs1XVxuICB9O1xufVxuZXhwb3J0cy51cmxQYXJzZSA9IHVybFBhcnNlO1xuXG5mdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFyc2VkVXJsKSB7XG4gIHZhciB1cmwgPSAnJztcbiAgaWYgKGFQYXJzZWRVcmwuc2NoZW1lKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuc2NoZW1lICsgJzonO1xuICB9XG4gIHVybCArPSAnLy8nO1xuICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuYXV0aCArICdAJztcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuaG9zdDtcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7XG4gICAgdXJsICs9IFwiOlwiICsgYVBhcnNlZFVybC5wb3J0XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucGF0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnBhdGg7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cbmV4cG9ydHMudXJsR2VuZXJhdGUgPSB1cmxHZW5lcmF0ZTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGF0aCwgb3IgdGhlIHBhdGggcG9ydGlvbiBvZiBhIFVSTDpcbiAqXG4gKiAtIFJlcGxhY2VzIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aCBvbmUgc2xhc2guXG4gKiAtIFJlbW92ZXMgdW5uZWNlc3NhcnkgJy4nIHBhcnRzLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICc8ZGlyPi8uLicgcGFydHMuXG4gKlxuICogQmFzZWQgb24gY29kZSBpbiB0aGUgTm9kZS5qcyAncGF0aCcgY29yZSBtb2R1bGUuXG4gKlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIHVybCB0byBub3JtYWxpemUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhUGF0aCkge1xuICB2YXIgcGF0aCA9IGFQYXRoO1xuICB2YXIgdXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICBpZiAodXJsKSB7XG4gICAgaWYgKCF1cmwucGF0aCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cbiAgICBwYXRoID0gdXJsLnBhdGg7XG4gIH1cbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCk7XG5cbiAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuICBmb3IgKHZhciBwYXJ0LCB1cCA9IDAsIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHBhcnQgPSBwYXJ0c1tpXTtcbiAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXAgPiAwKSB7XG4gICAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYmxhbmsgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuIFRyeWluZyB0byBnb1xuICAgICAgICAvLyBhYm92ZSB0aGUgcm9vdCBpcyBhIG5vLW9wLiBUaGVyZWZvcmUgd2UgY2FuIHJlbW92ZSBhbGwgJy4uJyBwYXJ0c1xuICAgICAgICAvLyBkaXJlY3RseSBhZnRlciB0aGUgcm9vdC5cbiAgICAgICAgcGFydHMuc3BsaWNlKGkgKyAxLCB1cCk7XG4gICAgICAgIHVwID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShpLCAyKTtcbiAgICAgICAgdXAtLTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcblxuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICBwYXRoID0gaXNBYnNvbHV0ZSA/ICcvJyA6ICcuJztcbiAgfVxuXG4gIGlmICh1cmwpIHtcbiAgICB1cmwucGF0aCA9IHBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKHVybCk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcblxuLyoqXG4gKiBKb2lucyB0d28gcGF0aHMvVVJMcy5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIGpvaW5lZCB3aXRoIHRoZSByb290LlxuICpcbiAqIC0gSWYgYVBhdGggaXMgYSBVUkwgb3IgYSBkYXRhIFVSSSwgYVBhdGggaXMgcmV0dXJuZWQsIHVubGVzcyBhUGF0aCBpcyBhXG4gKiAgIHNjaGVtZS1yZWxhdGl2ZSBVUkw6IFRoZW4gdGhlIHNjaGVtZSBvZiBhUm9vdCwgaWYgYW55LCBpcyBwcmVwZW5kZWRcbiAqICAgZmlyc3QuXG4gKiAtIE90aGVyd2lzZSBhUGF0aCBpcyBhIHBhdGguIElmIGFSb290IGlzIGEgVVJMLCB0aGVuIGl0cyBwYXRoIHBvcnRpb25cbiAqICAgaXMgdXBkYXRlZCB3aXRoIHRoZSByZXN1bHQgYW5kIGFSb290IGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhlIHJlc3VsdFxuICogICBpcyByZXR1cm5lZC5cbiAqICAgLSBJZiBhUGF0aCBpcyBhYnNvbHV0ZSwgdGhlIHJlc3VsdCBpcyBhUGF0aC5cbiAqICAgLSBPdGhlcndpc2UgdGhlIHR3byBwYXRocyBhcmUgam9pbmVkIHdpdGggYSBzbGFzaC5cbiAqIC0gSm9pbmluZyBmb3IgZXhhbXBsZSAnaHR0cDovLycgYW5kICd3d3cuZXhhbXBsZS5jb20nIGlzIGFsc28gc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBqb2luKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG4gIGlmIChhUGF0aCA9PT0gXCJcIikge1xuICAgIGFQYXRoID0gXCIuXCI7XG4gIH1cbiAgdmFyIGFQYXRoVXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICB2YXIgYVJvb3RVcmwgPSB1cmxQYXJzZShhUm9vdCk7XG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290ID0gYVJvb3RVcmwucGF0aCB8fCAnLyc7XG4gIH1cblxuICAvLyBgam9pbihmb28sICcvL3d3dy5leGFtcGxlLm9yZycpYFxuICBpZiAoYVBhdGhVcmwgJiYgIWFQYXRoVXJsLnNjaGVtZSkge1xuICAgIGlmIChhUm9vdFVybCkge1xuICAgICAgYVBhdGhVcmwuc2NoZW1lID0gYVJvb3RVcmwuc2NoZW1lO1xuICAgIH1cbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVBhdGhVcmwpO1xuICB9XG5cbiAgaWYgKGFQYXRoVXJsIHx8IGFQYXRoLm1hdGNoKGRhdGFVcmxSZWdleHApKSB7XG4gICAgcmV0dXJuIGFQYXRoO1xuICB9XG5cbiAgLy8gYGpvaW4oJ2h0dHA6Ly8nLCAnd3d3LmV4YW1wbGUuY29tJylgXG4gIGlmIChhUm9vdFVybCAmJiAhYVJvb3RVcmwuaG9zdCAmJiAhYVJvb3RVcmwucGF0aCkge1xuICAgIGFSb290VXJsLmhvc3QgPSBhUGF0aDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG5cbiAgdmFyIGpvaW5lZCA9IGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgPyBhUGF0aFxuICAgIDogbm9ybWFsaXplKGFSb290LnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgYVBhdGgpO1xuXG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290VXJsLnBhdGggPSBqb2luZWQ7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuICByZXR1cm4gam9pbmVkO1xufVxuZXhwb3J0cy5qb2luID0gam9pbjtcblxuZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24gKGFQYXRoKSB7XG4gIHJldHVybiBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJyB8fCAhIWFQYXRoLm1hdGNoKHVybFJlZ2V4cCk7XG59O1xuXG4vKipcbiAqIE1ha2UgYSBwYXRoIHJlbGF0aXZlIHRvIGEgVVJMIG9yIGFub3RoZXIgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIG1hZGUgcmVsYXRpdmUgdG8gYVJvb3QuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0aXZlKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG5cbiAgYVJvb3QgPSBhUm9vdC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgcGF0aCB0byBiZSBhYm92ZSB0aGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBzaW1wbHlcbiAgLy8gY2hlY2tpbmcgd2hldGhlciB0aGUgcm9vdCBpcyBhIHByZWZpeCBvZiB0aGUgcGF0aCB3b24ndCB3b3JrLiBJbnN0ZWFkLCB3ZVxuICAvLyBuZWVkIHRvIHJlbW92ZSBjb21wb25lbnRzIGZyb20gdGhlIHJvb3Qgb25lIGJ5IG9uZSwgdW50aWwgZWl0aGVyIHdlIGZpbmRcbiAgLy8gYSBwcmVmaXggdGhhdCBmaXRzLCBvciB3ZSBydW4gb3V0IG9mIGNvbXBvbmVudHMgdG8gcmVtb3ZlLlxuICB2YXIgbGV2ZWwgPSAwO1xuICB3aGlsZSAoYVBhdGguaW5kZXhPZihhUm9vdCArICcvJykgIT09IDApIHtcbiAgICB2YXIgaW5kZXggPSBhUm9vdC5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBvbmx5IHBhcnQgb2YgdGhlIHJvb3QgdGhhdCBpcyBsZWZ0IGlzIHRoZSBzY2hlbWUgKGkuZS4gaHR0cDovLyxcbiAgICAvLyBmaWxlOi8vLywgZXRjLiksIG9uZSBvciBtb3JlIHNsYXNoZXMgKC8pLCBvciBzaW1wbHkgbm90aGluZyBhdCBhbGwsIHdlXG4gICAgLy8gaGF2ZSBleGhhdXN0ZWQgYWxsIGNvbXBvbmVudHMsIHNvIHRoZSBwYXRoIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcm9vdC5cbiAgICBhUm9vdCA9IGFSb290LnNsaWNlKDAsIGluZGV4KTtcbiAgICBpZiAoYVJvb3QubWF0Y2goL14oW15cXC9dKzpcXC8pP1xcLyokLykpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICArK2xldmVsO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGFkZCBhIFwiLi4vXCIgZm9yIGVhY2ggY29tcG9uZW50IHdlIHJlbW92ZWQgZnJvbSB0aGUgcm9vdC5cbiAgcmV0dXJuIEFycmF5KGxldmVsICsgMSkuam9pbihcIi4uL1wiKSArIGFQYXRoLnN1YnN0cihhUm9vdC5sZW5ndGggKyAxKTtcbn1cbmV4cG9ydHMucmVsYXRpdmUgPSByZWxhdGl2ZTtcblxudmFyIHN1cHBvcnRzTnVsbFByb3RvID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAhKCdfX3Byb3RvX18nIGluIG9iaik7XG59KCkpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSAocykge1xuICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBCZWNhdXNlIGJlaGF2aW9yIGdvZXMgd2Fja3kgd2hlbiB5b3Ugc2V0IGBfX3Byb3RvX19gIG9uIG9iamVjdHMsIHdlXG4gKiBoYXZlIHRvIHByZWZpeCBhbGwgdGhlIHN0cmluZ3MgaW4gb3VyIHNldCB3aXRoIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXIuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvcHVsbC8zMSBhbmRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzMwXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbmZ1bmN0aW9uIHRvU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gJyQnICsgYVN0cjtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy50b1NldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiB0b1NldFN0cmluZztcblxuZnVuY3Rpb24gZnJvbVNldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuIGFTdHIuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMuZnJvbVNldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiBmcm9tU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBpc1Byb3RvU3RyaW5nKHMpIHtcbiAgaWYgKCFzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IHMubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPCA5IC8qIFwiX19wcm90b19fXCIubGVuZ3RoICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHMuY2hhckNvZGVBdChsZW5ndGggLSAxKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDIpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMykgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA0KSAhPT0gMTE2IC8qICd0JyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDUpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNikgIT09IDExNCAvKiAncicgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA3KSAhPT0gMTEyIC8qICdwJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDgpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOSkgIT09IDk1ICAvKiAnXycgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gbGVuZ3RoIC0gMTA7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHMuY2hhckNvZGVBdChpKSAhPT0gMzYgLyogJyQnICovKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiwgYnV0IGRpZmZlcmVudCBnZW5lcmF0ZWRcbiAqIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhIG1hcHBpbmcgd2l0aCBhXG4gKiBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyhtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGRlZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBpbmRpY2VzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICogbWFwcGluZyB3aXRoIGEgc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQ7XG5cbmZ1bmN0aW9uIHN0cmNtcChhU3RyMSwgYVN0cjIpIHtcbiAgaWYgKGFTdHIxID09PSBhU3RyMikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKGFTdHIxID4gYVN0cjIpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggaW5mbGF0ZWQgc291cmNlIGFuZCBuYW1lIHN0cmluZ3Mgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gc3RyY21wKG1hcHBpbmdBLnNvdXJjZSwgbWFwcGluZ0Iuc291cmNlKTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gc3RyY21wKG1hcHBpbmdBLm5hbWUsIG1hcHBpbmdCLm5hbWUpO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2stZ2VuZXJhdG9yJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tHZW5lcmF0b3IgPSBmYWN0b3J5KHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTdGFja0ZyYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFja3RyYWNlOiBmdW5jdGlvbiBTdGFja0dlbmVyYXRvciQkYmFja3RyYWNlKG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICAgICAgdmFyIG1heFN0YWNrU2l6ZSA9IDEwO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcHRzLm1heFN0YWNrU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBtYXhTdGFja1NpemUgPSBvcHRzLm1heFN0YWNrU2l6ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGN1cnIgPSBhcmd1bWVudHMuY2FsbGVlO1xuICAgICAgICAgICAgd2hpbGUgKGN1cnIgJiYgc3RhY2subGVuZ3RoIDwgbWF4U3RhY2tTaXplKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxsb3cgVjggb3B0aW1pemF0aW9uc1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGN1cnJbJ2FyZ3VtZW50cyddLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBjdXJyWydhcmd1bWVudHMnXVtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKC9mdW5jdGlvbig/OlxccysoW1xcdyRdKykpK1xccypcXCgvLnRlc3QoY3Vyci50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ldyBTdGFja0ZyYW1lKHtmdW5jdGlvbk5hbWU6IFJlZ0V4cC4kMSB8fCB1bmRlZmluZWQsIGFyZ3M6IGFyZ3N9KSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh7YXJnczogYXJnc30pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci5jYWxsZXI7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrZnJhbWUnLCBbXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja0ZyYW1lID0gZmFjdG9yeSgpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICBmdW5jdGlvbiBfaXNOdW1iZXIobikge1xuICAgICAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQobikpICYmIGlzRmluaXRlKG4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9jYXBpdGFsaXplKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9nZXR0ZXIocCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbcF07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGJvb2xlYW5Qcm9wcyA9IFsnaXNDb25zdHJ1Y3RvcicsICdpc0V2YWwnLCAnaXNOYXRpdmUnLCAnaXNUb3BsZXZlbCddO1xuICAgIHZhciBudW1lcmljUHJvcHMgPSBbJ2NvbHVtbk51bWJlcicsICdsaW5lTnVtYmVyJ107XG4gICAgdmFyIHN0cmluZ1Byb3BzID0gWydmaWxlTmFtZScsICdmdW5jdGlvbk5hbWUnLCAnc291cmNlJ107XG4gICAgdmFyIGFycmF5UHJvcHMgPSBbJ2FyZ3MnXTtcblxuICAgIGZ1bmN0aW9uIFN0YWNrRnJhbWUob2JqKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIHZhciBwcm9wcyA9IGJvb2xlYW5Qcm9wcy5jb25jYXQobnVtZXJpY1Byb3BzLmNvbmNhdChzdHJpbmdQcm9wcy5jb25jYXQoYXJyYXlQcm9wcykpKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3BzW2ldKSAmJiBvYmpbcHJvcHNbaV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snc2V0JyArIF9jYXBpdGFsaXplKHByb3BzW2ldKV0ob2JqW3Byb3BzW2ldXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgU3RhY2tGcmFtZS5wcm90b3R5cGUgPSB7XG4gICAgICAgIGdldEFyZ3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFyZ3M7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEFyZ3M6IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJncyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFyZ3MgPSB2O1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldEV2YWxPcmlnaW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2YWxPcmlnaW47XG4gICAgICAgIH0sXG4gICAgICAgIHNldEV2YWxPcmlnaW46IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICBpZiAodiBpbnN0YW5jZW9mIFN0YWNrRnJhbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2YWxPcmlnaW4gPSB2O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2IGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsT3JpZ2luID0gbmV3IFN0YWNrRnJhbWUodik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V2YWwgT3JpZ2luIG11c3QgYmUgYW4gT2JqZWN0IG9yIFN0YWNrRnJhbWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2V0RnVuY3Rpb25OYW1lKCkgfHwgJ3thbm9ueW1vdXN9JztcbiAgICAgICAgICAgIHZhciBhcmdzID0gJygnICsgKHRoaXMuZ2V0QXJncygpIHx8IFtdKS5qb2luKCcsJykgKyAnKSc7XG4gICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSB0aGlzLmdldEZpbGVOYW1lKCkgPyAoJ0AnICsgdGhpcy5nZXRGaWxlTmFtZSgpKSA6ICcnO1xuICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBfaXNOdW1iZXIodGhpcy5nZXRMaW5lTnVtYmVyKCkpID8gKCc6JyArIHRoaXMuZ2V0TGluZU51bWJlcigpKSA6ICcnO1xuICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IF9pc051bWJlcih0aGlzLmdldENvbHVtbk51bWJlcigpKSA/ICgnOicgKyB0aGlzLmdldENvbHVtbk51bWJlcigpKSA6ICcnO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZSArIGFyZ3MgKyBmaWxlTmFtZSArIGxpbmVOdW1iZXIgKyBjb2x1bW5OdW1iZXI7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib29sZWFuUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IF9nZXR0ZXIoYm9vbGVhblByb3BzW2ldKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IChmdW5jdGlvbiAocCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgdGhpc1twXSA9IEJvb2xlYW4odik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShib29sZWFuUHJvcHNbaV0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtZXJpY1Byb3BzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUobnVtZXJpY1Byb3BzW2pdKV0gPSBfZ2V0dGVyKG51bWVyaWNQcm9wc1tqXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUobnVtZXJpY1Byb3BzW2pdKV0gPSAoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGlmICghX2lzTnVtYmVyKHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IocCArICcgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gTnVtYmVyKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkobnVtZXJpY1Byb3BzW2pdKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IHN0cmluZ1Byb3BzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUoc3RyaW5nUHJvcHNba10pXSA9IF9nZXR0ZXIoc3RyaW5nUHJvcHNba10pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKHN0cmluZ1Byb3BzW2tdKV0gPSAoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBTdHJpbmcodik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShzdHJpbmdQcm9wc1trXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0YWNrRnJhbWU7XG59KSk7XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFja3RyYWNlLWdwcycsIFsnc291cmNlLW1hcCcsICdzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyJyksIHJlcXVpcmUoJ3N0YWNrZnJhbWUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja1RyYWNlR1BTID0gZmFjdG9yeShyb290LlNvdXJjZU1hcCB8fCByb290LnNvdXJjZU1hcCwgcm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uKFNvdXJjZU1hcCwgU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIE1ha2UgYSBYLURvbWFpbiByZXF1ZXN0IHRvIHVybCBhbmQgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IHdpdGggcmVzcG9uc2UgdGV4dCBpZiBmdWxmaWxsZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfeGRyKHVybCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICByZXEub3BlbignZ2V0JywgdXJsKTtcbiAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIG9ucmVhZHlzdGF0ZWNoYW5nZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChyZXEuc3RhdHVzID49IDIwMCAmJiByZXEuc3RhdHVzIDwgMzAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKHVybC5zdWJzdHIoMCwgNykgPT09ICdmaWxlOi8vJyAmJiByZXEucmVzcG9uc2VUZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0hUVFAgc3RhdHVzOiAnICsgcmVxLnN0YXR1cyArICcgcmV0cmlldmluZyAnICsgdXJsKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVxLnNlbmQoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgQmFzZTY0LWVuY29kZWQgc3RyaW5nIGludG8gaXRzIG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uLlxuICAgICAqIFVzZWQgZm9yIGlubGluZSBzb3VyY2VtYXBzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGI2NHN0ciBCYXNlLTY0IGVuY29kZWQgc3RyaW5nXG4gICAgICogQHJldHVybnMge1N0cmluZ30gb3JpZ2luYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NC1lbmNvZGVkIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfYXRvYihiNjRzdHIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5hdG9iKSB7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93LmF0b2IoYjY0c3RyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3VwcGx5IGEgcG9seWZpbGwgZm9yIHdpbmRvdy5hdG9iIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9wYXJzZUpzb24oc3RyaW5nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgSlNPTiAhPT0gJ3VuZGVmaW5lZCcgJiYgSlNPTi5wYXJzZSkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3VwcGx5IGEgcG9seWZpbGwgZm9yIEpTT04ucGFyc2UgaW4gdGhpcyBlbnZpcm9ubWVudCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRGdW5jdGlvbk5hbWUoc291cmNlLCBsaW5lTnVtYmVyLyosIGNvbHVtbk51bWJlciovKSB7XG4gICAgICAgIHZhciBzeW50YXhlcyA9IFtcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGZ1bmN0aW9uICh7YXJnc30pIFRPRE8gYXJncyBjYXB0dXJlXG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypmdW5jdGlvblxcYi8sXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiB7bmFtZX0oe2FyZ3N9KSBtWzFdPW5hbWUgbVsyXT1hcmdzXG4gICAgICAgICAgICAvZnVuY3Rpb25cXHMrKFteKCdcImBdKj8pXFxzKlxcKChbXildKilcXCkvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gZXZhbCgpXG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccyooPzpldmFsfG5ldyBGdW5jdGlvbilcXGIvLFxuICAgICAgICAgICAgLy8gZm5fbmFtZSgpIHtcbiAgICAgICAgICAgIC9cXGIoPyEoPzppZnxmb3J8c3dpdGNofHdoaWxlfHdpdGh8Y2F0Y2gpXFxiKSg/Oig/OnN0YXRpYylcXHMrKT8oXFxTKylcXHMqXFwoLio/XFwpXFxzKlxcey8sXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSAoKSA9PiB7XG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypcXCguKj9cXClcXHMqPT4vXG4gICAgICAgIF07XG4gICAgICAgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgnXFxuJyk7XG5cbiAgICAgICAgLy8gV2FsayBiYWNrd2FyZHMgaW4gdGhlIHNvdXJjZSBsaW5lcyB1bnRpbCB3ZSBmaW5kIHRoZSBsaW5lIHdoaWNoIG1hdGNoZXMgb25lIG9mIHRoZSBwYXR0ZXJucyBhYm92ZVxuICAgICAgICB2YXIgY29kZSA9ICcnO1xuICAgICAgICB2YXIgbWF4TGluZXMgPSBNYXRoLm1pbihsaW5lTnVtYmVyLCAyMCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4TGluZXM7ICsraSkge1xuICAgICAgICAgICAgLy8gbGluZU5vIGlzIDEtYmFzZWQsIHNvdXJjZVtdIGlzIDAtYmFzZWRcbiAgICAgICAgICAgIHZhciBsaW5lID0gbGluZXNbbGluZU51bWJlciAtIGkgLSAxXTtcbiAgICAgICAgICAgIHZhciBjb21tZW50UG9zID0gbGluZS5pbmRleE9mKCcvLycpO1xuICAgICAgICAgICAgaWYgKGNvbW1lbnRQb3MgPj0gMCkge1xuICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cigwLCBjb21tZW50UG9zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gbGluZSArIGNvZGU7XG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IHN5bnRheGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtID0gc3ludGF4ZXNbaW5kZXhdLmV4ZWMoY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG1bMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtWzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Vuc3VyZVN1cHBvcnRlZEVudmlyb25tZW50KCkge1xuICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY29uc3VtZSBzb3VyY2UgbWFwcyBpbiBvbGRlciBicm93c2VycycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGFja2ZyYW1lICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gU3RhY2tGcmFtZSBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUuZmlsZU5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBmaWxlIG5hbWUgaXMgbm90IGEgU3RyaW5nJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUubGluZU51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciAlIDEgIT09IDAgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGxpbmUgbnVtYmVyIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGNvbHVtbiBudW1iZXIgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSkge1xuICAgICAgICB2YXIgbSA9IC9cXC9cXC9bI0BdID9zb3VyY2VNYXBwaW5nVVJMPShbXlxccydcIl0rKVxccyokL20uZXhlYyhzb3VyY2UpO1xuICAgICAgICBpZiAobSAmJiBtWzFdKSB7XG4gICAgICAgICAgICByZXR1cm4gbVsxXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc291cmNlTWFwcGluZ1VSTCBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9leHRyYWN0TG9jYXRpb25JbmZvRnJvbVNvdXJjZU1hcFNvdXJjZShzdGFja2ZyYW1lLCBzb3VyY2VNYXBDb25zdW1lciwgc291cmNlQ2FjaGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIGxvYyA9IHNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgICAgICAgIGxpbmU6IHN0YWNrZnJhbWUubGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGxvYy5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWNoZSBtYXBwZWQgc291cmNlc1xuICAgICAgICAgICAgICAgIHZhciBtYXBwZWRTb3VyY2UgPSBzb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGxvYy5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIGlmIChtYXBwZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlQ2FjaGVbbG9jLnNvdXJjZV0gPSBtYXBwZWRTb3VyY2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2l2ZW4gc3RhY2tmcmFtZSBhbmQgc291cmNlIGxvY2F0aW9uLCB1cGRhdGUgc3RhY2tmcmFtZVxuICAgICAgICAgICAgICAgICAgICBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGxvYy5uYW1lIHx8IHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogc3RhY2tmcmFtZS5hcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvYy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2MubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jLmNvbHVtblxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgb3JpZ2luYWwgc291cmNlIGZvciBnaXZlbiBzdGFja2ZyYW1lIGFuZCBzb3VyY2UgbWFwJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAqICAgICAgb3B0cy5zb3VyY2VDYWNoZSA9IHt1cmw6IFwiU291cmNlIFN0cmluZ1wifSA9PiBwcmVsb2FkIHNvdXJjZSBjYWNoZVxuICAgICAqICAgICAgb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gey9wYXRoL2ZpbGUuanMubWFwOiBTb3VyY2VNYXBDb25zdW1lcn1cbiAgICAgKiAgICAgIG9wdHMub2ZmbGluZSA9IFRydWUgdG8gcHJldmVudCBuZXR3b3JrIHJlcXVlc3RzLlxuICAgICAqICAgICAgICAgICAgICBCZXN0IGVmZm9ydCB3aXRob3V0IHNvdXJjZXMgb3Igc291cmNlIG1hcHMuXG4gICAgICogICAgICBvcHRzLmFqYXggPSBQcm9taXNlIHJldHVybmluZyBmdW5jdGlvbiB0byBtYWtlIFgtRG9tYWluIHJlcXVlc3RzXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMob3B0cykge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3RhY2tUcmFjZUdQUykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlID0gb3B0cy5zb3VyY2VDYWNoZSB8fCB7fTtcbiAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuYWpheCA9IG9wdHMuYWpheCB8fCBfeGRyO1xuXG4gICAgICAgIHRoaXMuX2F0b2IgPSBvcHRzLmF0b2IgfHwgX2F0b2I7XG5cbiAgICAgICAgdGhpcy5fZ2V0ID0gZnVuY3Rpb24gX2dldChsb2NhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBsb2NhdGlvbi5zdWJzdHIoMCwgNSkgPT09ICdkYXRhOic7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0cy5vZmZsaW5lICYmICFpc0RhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ2Fubm90IG1ha2UgbmV0d29yayByZXF1ZXN0cyBpbiBvZmZsaW5lIG1vZGUnKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF0YSBVUkxzIGNhbiBoYXZlIHBhcmFtZXRlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM5N1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1cHBvcnRlZEVuY29kaW5nUmVnZXhwID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXmRhdGE6YXBwbGljYXRpb25cXC9qc29uOyhbXFx3PTpcIi1dKzspKmJhc2U2NCwvO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbG9jYXRpb24ubWF0Y2goc3VwcG9ydGVkRW5jb2RpbmdSZWdleHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcFN0YXJ0ID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGVkU291cmNlID0gbG9jYXRpb24uc3Vic3RyKHNvdXJjZU1hcFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fYXRvYihlbmNvZGVkU291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSA9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RoZSBlbmNvZGluZyBvZiB0aGUgaW5saW5lIHNvdXJjZW1hcCBpcyBub3Qgc3VwcG9ydGVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhoclByb21pc2UgPSB0aGlzLmFqYXgobG9jYXRpb24sIHttZXRob2Q6ICdnZXQnfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZSB0aGUgUHJvbWlzZSB0byBwcmV2ZW50IGR1cGxpY2F0ZSBpbi1mbGlnaHQgcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0geGhyUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclByb21pc2UudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRpbmcgU291cmNlTWFwQ29uc3VtZXJzIGlzIGV4cGVuc2l2ZSwgc28gdGhpcyB3cmFwcyB0aGUgY3JlYXRpb24gb2YgYVxuICAgICAgICAgKiBTb3VyY2VNYXBDb25zdW1lciBpbiBhIHBlci1pbnN0YW5jZSBjYWNoZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHNvdXJjZU1hcHBpbmdVUkwgPSB7U3RyaW5nfSBVUkwgdG8gZmV0Y2ggc291cmNlIG1hcCBmcm9tXG4gICAgICAgICAqIEBwYXJhbSBkZWZhdWx0U291cmNlUm9vdCA9IERlZmF1bHQgc291cmNlIHJvb3QgZm9yIHNvdXJjZSBtYXAgaWYgdW5kZWZpbmVkXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIGEgU291cmNlTWFwQ29uc3VtZXJcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyID0gZnVuY3Rpb24gX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldChzb3VyY2VNYXBwaW5nVVJMKS50aGVuKGZ1bmN0aW9uKHNvdXJjZU1hcFNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlTWFwU291cmNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBTb3VyY2UgPSBfcGFyc2VKc29uKHNvdXJjZU1hcFNvdXJjZS5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlTWFwU291cmNlLnNvdXJjZVJvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcFNvdXJjZS5zb3VyY2VSb290ID0gZGVmYXVsdFNvdXJjZVJvb3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU291cmNlTWFwLlNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcFNvdXJjZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdID0gc291cmNlTWFwQ29uc3VtZXJQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBlbmhhbmNlIGZ1bmN0aW9uIG5hbWUgYW5kIHVzZSBzb3VyY2UgbWFwcyBmb3IgYVxuICAgICAgICAgKiBiZXR0ZXIgU3RhY2tGcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lIG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHdpdGggc291cmNlLW1hcHBlZCBTdGFja0ZyYW1lXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBpbnBvaW50ID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkcGlucG9pbnQoc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkudGhlbihmdW5jdGlvbihtYXBwZWRTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVNYXBwZWRTdGFja0ZyYW1lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtYXBwZWRTdGFja0ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZEZ1bmN0aW9uTmFtZShtYXBwZWRTdGFja0ZyYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSwgcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ2NhdGNoJ10ocmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgZ3Vlc3MgZnVuY3Rpb24gbmFtZSBmcm9tIGxvY2F0aW9uIGluZm9ybWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWVcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBlbmhhbmNlZCBTdGFja0ZyYW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZmluZEZ1bmN0aW9uTmFtZShzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChzdGFja2ZyYW1lLmZpbGVOYW1lKS50aGVuKGZ1bmN0aW9uIGdldFNvdXJjZUNhbGxiYWNrKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHN0YWNrZnJhbWUubGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ3Vlc3NlZEZ1bmN0aW9uTmFtZSA9IF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZXBsYWNlIGZ1bmN0aW9uTmFtZSBpZiB3ZSBmb3VuZCBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICAgICAgaWYgKGd1ZXNzZWRGdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZ3Vlc3NlZEZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBzdGFja2ZyYW1lLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IHN0YWNrZnJhbWUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgc2VlayBzb3VyY2UtbWFwcGVkIGxvY2F0aW9uIGFuZCByZXR1cm4gbmV3IGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdldE1hcHBlZExvY2F0aW9uID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKTtcblxuICAgICAgICAgICAgICAgIHZhciBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGU7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gc3RhY2tmcmFtZS5maWxlTmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXQoZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VNYXBwaW5nVVJMID0gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBzb3VyY2VNYXBwaW5nVVJMLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRTb3VyY2VSb290ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlTWFwcGluZ1VSTFswXSAhPT0gJy8nICYmICFpc0RhdGFVcmwgJiYgISgvXmh0dHBzPzpcXC9cXC98XlxcL1xcLy9pKS50ZXN0KHNvdXJjZU1hcHBpbmdVUkwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBwaW5nVVJMID0gZGVmYXVsdFNvdXJjZVJvb3QgKyBzb3VyY2VNYXBwaW5nVVJMO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KS50aGVuKGZ1bmN0aW9uKHNvdXJjZU1hcENvbnN1bWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwU291cmNlKHN0YWNrZnJhbWUsIHNvdXJjZU1hcENvbnN1bWVyLCBzb3VyY2VDYWNoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVsnY2F0Y2gnXShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcbiAgICB9O1xufSkpO1xuIiwiLy8gUG9seWZpbGwgZm9yIG9sZCBicm93c2Vyc1xuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2lzQXJyYXlcbmlmICghQXJyYXkuaXNBcnJheSkge1xuICAgIEFycmF5LmlzQXJyYXkgPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH07XG59XG5cbmlmICh0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBFUzZQcm9taXNlLnBvbHlmaWxsKCk7XG59XG5cbi8vIEVTNSBQb2x5ZmlsbHNcbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GdW5jdGlvbi9iaW5kXG5pZiAoIUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKSB7XG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbihvVGhpcykge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kIC0gd2hhdCBpcyB0cnlpbmcgdG8gYmUgYm91bmQgaXMgbm90IGNhbGxhYmxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYUFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICB2YXIgZlRvQmluZCA9IHRoaXM7XG4gICAgICAgIHZhciBOb09wID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBmQm91bmQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBmVG9CaW5kLmFwcGx5KHRoaXMgaW5zdGFuY2VvZiBOb09wICYmIG9UaGlzID8gdGhpcyA6IG9UaGlzLFxuICAgICAgICAgICAgICAgIGFBcmdzLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgTm9PcC5wcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcbiAgICAgICAgZkJvdW5kLnByb3RvdHlwZSA9IG5ldyBOb09wKCk7XG5cbiAgICAgICAgcmV0dXJuIGZCb3VuZDtcbiAgICB9O1xufVxuXG4vLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvbWFwXG5pZiAoIUFycmF5LnByb3RvdHlwZS5tYXApIHtcbiAgICBBcnJheS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgaWYgKHRoaXMgPT09IHZvaWQgMCB8fCB0aGlzID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0aGlzIGlzIG51bGwgb3Igbm90IGRlZmluZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgTyA9IE9iamVjdCh0aGlzKTtcbiAgICAgICAgdmFyIGxlbiA9IE8ubGVuZ3RoID4+PiAwO1xuICAgICAgICB2YXIgVDtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIFQgPSB0aGlzQXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIEEgPSBuZXcgQXJyYXkobGVuKTtcbiAgICAgICAgdmFyIGsgPSAwO1xuXG4gICAgICAgIHdoaWxlIChrIDwgbGVuKSB7XG4gICAgICAgICAgICB2YXIga1ZhbHVlO1xuICAgICAgICAgICAgdmFyIG1hcHBlZFZhbHVlO1xuICAgICAgICAgICAgaWYgKGsgaW4gTykge1xuICAgICAgICAgICAgICAgIGtWYWx1ZSA9IE9ba107XG4gICAgICAgICAgICAgICAgbWFwcGVkVmFsdWUgPSBjYWxsYmFjay5jYWxsKFQsIGtWYWx1ZSwgaywgTyk7XG4gICAgICAgICAgICAgICAgQVtrXSA9IG1hcHBlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaysrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEE7XG4gICAgfTtcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2ZpbHRlclxuaWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uKGNhbGxiYWNrLyosIHRoaXNBcmcqLykge1xuICAgICAgICBpZiAodGhpcyA9PT0gdm9pZCAwIHx8IHRoaXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RoaXMgaXMgbnVsbCBvciBub3QgZGVmaW5lZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHQgPSBPYmplY3QodGhpcyk7XG4gICAgICAgIHZhciBsZW4gPSB0Lmxlbmd0aCA+Pj4gMDtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihjYWxsYmFjayArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHMubGVuZ3RoID49IDIgPyBhcmd1bWVudHNbMV0gOiB2b2lkIDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpIGluIHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gdFtpXTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB2YWwsIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xufVxuXG4vLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvZm9yRWFjaFxuaWYgKCFBcnJheS5wcm90b3R5cGUuZm9yRWFjaCkge1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgdmFyIFQ7XG4gICAgICAgIHZhciBrO1xuICAgICAgICBpZiAodGhpcyA9PT0gbnVsbCB8fCB0aGlzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyB0aGlzIGlzIG51bGwgb3Igbm90IGRlZmluZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBPID0gT2JqZWN0KHRoaXMpO1xuICAgICAgICB2YXIgbGVuID0gTy5sZW5ndGggPj4+IDA7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIFQgPSB0aGlzQXJnO1xuICAgICAgICB9XG4gICAgICAgIGsgPSAwO1xuICAgICAgICB3aGlsZSAoayA8IGxlbikge1xuICAgICAgICAgICAgdmFyIGtWYWx1ZTtcbiAgICAgICAgICAgIGlmIChrIGluIE8pIHtcbiAgICAgICAgICAgICAgICBrVmFsdWUgPSBPW2tdO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoVCwga1ZhbHVlLCBrLCBPKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgfVxuICAgIH07XG59XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFja3RyYWNlJywgWydlcnJvci1zdGFjay1wYXJzZXInLCAnc3RhY2stZ2VuZXJhdG9yJywgJ3N0YWNrdHJhY2UtZ3BzJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdlcnJvci1zdGFjay1wYXJzZXInKSwgcmVxdWlyZSgnc3RhY2stZ2VuZXJhdG9yJyksIHJlcXVpcmUoJ3N0YWNrdHJhY2UtZ3BzJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tUcmFjZSA9IGZhY3Rvcnkocm9vdC5FcnJvclN0YWNrUGFyc2VyLCByb290LlN0YWNrR2VuZXJhdG9yLCByb290LlN0YWNrVHJhY2VHUFMpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gU3RhY2tUcmFjZShFcnJvclN0YWNrUGFyc2VyLCBTdGFja0dlbmVyYXRvciwgU3RhY2tUcmFjZUdQUykge1xuICAgIHZhciBfb3B0aW9ucyA9IHtcbiAgICAgICAgZmlsdGVyOiBmdW5jdGlvbihzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHN0YWNrZnJhbWVzIGZvciB0aGlzIGxpYnJhcnkgYnkgZGVmYXVsdFxuICAgICAgICAgICAgcmV0dXJuIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignU3RhY2tUcmFjZSQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdFcnJvclN0YWNrUGFyc2VyJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2VHUFMkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignU3RhY2tHZW5lcmF0b3IkJCcpID09PSAtMTtcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlQ2FjaGU6IHt9XG4gICAgfTtcblxuICAgIHZhciBfZ2VuZXJhdGVFcnJvciA9IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJEdlbmVyYXRlRXJyb3IoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBFcnJvciBtdXN0IGJlIHRocm93biB0byBnZXQgc3RhY2sgaW4gSUVcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnI7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogTWVyZ2UgMiBnaXZlbiBPYmplY3RzLiBJZiBhIGNvbmZsaWN0IG9jY3VycyB0aGUgc2Vjb25kIG9iamVjdCB3aW5zLlxuICAgICAqIERvZXMgbm90IGRvIGRlZXAgbWVyZ2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGZpcnN0IGJhc2Ugb2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNlY29uZCBvdmVycmlkZXNcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBtZXJnZWQgZmlyc3QgYW5kIHNlY29uZFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZnVuY3Rpb24gX21lcmdlKGZpcnN0LCBzZWNvbmQpIHtcbiAgICAgICAgdmFyIHRhcmdldCA9IHt9O1xuXG4gICAgICAgIFtmaXJzdCwgc2Vjb25kXS5mb3JFYWNoKGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IG9ialtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikge1xuICAgICAgICByZXR1cm4gZXJyLnN0YWNrIHx8IGVyclsnb3BlcmEjc291cmNlbG9jJ107XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcmVkKHN0YWNrZnJhbWVzLCBmaWx0ZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGFja2ZyYW1lcy5maWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIGJhY2t0cmFjZSBmcm9tIGludm9jYXRpb24gcG9pbnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRnZXQob3B0cykge1xuICAgICAgICAgICAgdmFyIGVyciA9IF9nZW5lcmF0ZUVycm9yKCk7XG4gICAgICAgICAgICByZXR1cm4gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IHRoaXMuZnJvbUVycm9yKGVyciwgb3B0cykgOiB0aGlzLmdlbmVyYXRlQXJ0aWZpY2lhbGx5KG9wdHMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKiBJTVBPUlRBTlQ6IERvZXMgbm90IGhhbmRsZSBzb3VyY2UgbWFwcyBvciBndWVzcyBmdW5jdGlvbiBuYW1lcyFcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBvZiBTdGFja0ZyYW1lXG4gICAgICAgICAqL1xuICAgICAgICBnZXRTeW5jOiBmdW5jdGlvbiBTdGFja1RyYWNlJCRnZXRTeW5jKG9wdHMpIHtcbiAgICAgICAgICAgIG9wdHMgPSBfbWVyZ2UoX29wdGlvbnMsIG9wdHMpO1xuICAgICAgICAgICAgdmFyIGVyciA9IF9nZW5lcmF0ZUVycm9yKCk7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpID8gRXJyb3JTdGFja1BhcnNlci5wYXJzZShlcnIpIDogU3RhY2tHZW5lcmF0b3IuYmFja3RyYWNlKG9wdHMpO1xuICAgICAgICAgICAgcmV0dXJuIF9maWx0ZXJlZChzdGFjaywgb3B0cy5maWx0ZXIpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhbiBlcnJvciBvYmplY3QsIHBhcnNlIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBvYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZvciBBcnJheVtTdGFja0ZyYW1lfVxuICAgICAgICAgKi9cbiAgICAgICAgZnJvbUVycm9yOiBmdW5jdGlvbiBTdGFja1RyYWNlJCRmcm9tRXJyb3IoZXJyb3IsIG9wdHMpIHtcbiAgICAgICAgICAgIG9wdHMgPSBfbWVyZ2UoX29wdGlvbnMsIG9wdHMpO1xuICAgICAgICAgICAgdmFyIGdwcyA9IG5ldyBTdGFja1RyYWNlR1BTKG9wdHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhY2tmcmFtZXMgPSBfZmlsdGVyZWQoRXJyb3JTdGFja1BhcnNlci5wYXJzZShlcnJvciksIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKFByb21pc2UuYWxsKHN0YWNrZnJhbWVzLm1hcChmdW5jdGlvbihzZikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU9yaWdpbmFsKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc2YpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBncHMucGlucG9pbnQoc2YpLnRoZW4ocmVzb2x2ZSwgcmVzb2x2ZU9yaWdpbmFsKVsnY2F0Y2gnXShyZXNvbHZlT3JpZ2luYWwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSkpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVXNlIFN0YWNrR2VuZXJhdG9yIHRvIGdlbmVyYXRlIGEgYmFja3RyYWNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gb2YgQXJyYXlbU3RhY2tGcmFtZV1cbiAgICAgICAgICovXG4gICAgICAgIGdlbmVyYXRlQXJ0aWZpY2lhbGx5OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRnZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBzdGFja0ZyYW1lcyA9IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0cy5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBzdGFja0ZyYW1lcyA9IHN0YWNrRnJhbWVzLmZpbHRlcihvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN0YWNrRnJhbWVzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBmdW5jdGlvbiwgd3JhcCBpdCBzdWNoIHRoYXQgaW52b2NhdGlvbnMgdHJpZ2dlciBhIGNhbGxiYWNrIHRoYXRcbiAgICAgICAgICogaXMgY2FsbGVkIHdpdGggYSBzdGFjayB0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdG8gYmUgaW5zdHJ1bWVudGVkXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhIHN0YWNrIHRyYWNlIG9uIGludm9jYXRpb25cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyYmFjayBvcHRpb25hbCBmdW5jdGlvbiB0byBjYWxsIHdpdGggZXJyb3IgaWYgdW5hYmxlIHRvIGdldCBzdGFjayB0cmFjZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgb3B0aW9uYWwgY29udGV4dCBvYmplY3QgKGUuZy4gd2luZG93KVxuICAgICAgICAgKi9cbiAgICAgICAgaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkaW5zdHJ1bWVudChmbiwgY2FsbGJhY2ssIGVycmJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnN0cnVtZW50IG5vbi1mdW5jdGlvbiBvYmplY3QnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAvLyBBbHJlYWR5IGluc3RydW1lbnRlZCwgcmV0dXJuIGdpdmVuIEZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgaW5zdHJ1bWVudGVkID0gZnVuY3Rpb24gU3RhY2tUcmFjZSQkaW5zdHJ1bWVudGVkKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0KCkudGhlbihjYWxsYmFjaywgZXJyYmFjaylbJ2NhdGNoJ10oZXJyYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnIHx8IHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZnJvbUVycm9yKGUpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgaW5zdHJ1bWVudGVkLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm4gPSBmbjtcblxuICAgICAgICAgICAgcmV0dXJuIGluc3RydW1lbnRlZDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBmdW5jdGlvbiB0aGF0IGhhcyBiZWVuIGluc3RydW1lbnRlZCxcbiAgICAgICAgICogcmV2ZXJ0IHRoZSBmdW5jdGlvbiB0byBpdCdzIG9yaWdpbmFsIChub24taW5zdHJ1bWVudGVkKSBzdGF0ZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdG8gZGUtaW5zdHJ1bWVudFxuICAgICAgICAgKi9cbiAgICAgICAgZGVpbnN0cnVtZW50OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRkZWluc3RydW1lbnQoZm4pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZS1pbnN0cnVtZW50IG5vbi1mdW5jdGlvbiBvYmplY3QnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4uX19zdGFja3RyYWNlT3JpZ2luYWxGbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gbm90IGluc3RydW1lbnRlZCwgcmV0dXJuIG9yaWdpbmFsXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhbiBlcnJvciBtZXNzYWdlIGFuZCBBcnJheSBvZiBTdGFja0ZyYW1lcywgc2VyaWFsaXplIGFuZCBQT1NUIHRvIGdpdmVuIFVSTC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gc3RhY2tmcmFtZXNcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXJyb3JNc2dcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3RPcHRpb25zXG4gICAgICAgICAqL1xuICAgICAgICByZXBvcnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJHJlcG9ydChzdGFja2ZyYW1lcywgdXJsLCBlcnJvck1zZywgcmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIG9ucmVhZHlzdGF0ZWNoYW5nZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA+PSAyMDAgJiYgcmVxLnN0YXR1cyA8IDQwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVxLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1BPU1QgdG8gJyArIHVybCArICcgZmFpbGVkIHdpdGggc3RhdHVzOiAnICsgcmVxLnN0YXR1cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXEub3BlbigncG9zdCcsIHVybCk7XG5cbiAgICAgICAgICAgICAgICAvLyBTZXQgcmVxdWVzdCBoZWFkZXJzXG4gICAgICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zICYmIHR5cGVvZiByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVycyA9IHJlcXVlc3RPcHRpb25zLmhlYWRlcnM7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGhlYWRlciBpbiBoZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShoZWFkZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyLCBoZWFkZXJzW2hlYWRlcl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHJlcG9ydFBheWxvYWQgPSB7c3RhY2s6IHN0YWNrZnJhbWVzfTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JNc2cgIT09IHVuZGVmaW5lZCAmJiBlcnJvck1zZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXBvcnRQYXlsb2FkLm1lc3NhZ2UgPSBlcnJvck1zZztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXEuc2VuZChKU09OLnN0cmluZ2lmeShyZXBvcnRQYXlsb2FkKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KSk7XG4iXX0= +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9lczYtcHJvbWlzZS9kaXN0L2VzNi1wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2pzb24zL2xpYi9qc29uMy5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYXJyYXktc2V0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2Jhc2U2NC12bHEuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2JpbmFyeS1zZWFyY2guanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvcXVpY2stc29ydC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyLmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3V0aWwuanMiLCJub2RlX21vZHVsZXMvc3RhY2stZ2VuZXJhdG9yL3N0YWNrLWdlbmVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja2ZyYW1lL3N0YWNrZnJhbWUuanMiLCJub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1ncHMvc3RhY2t0cmFjZS1ncHMuanMiLCJwb2x5ZmlsbHMuanMiLCJzdGFja3RyYWNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNqb0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3Q0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDamFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ2Vycm9yLXN0YWNrLXBhcnNlcicsIFsnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc3RhY2tmcmFtZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LkVycm9yU3RhY2tQYXJzZXIgPSBmYWN0b3J5KHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyKFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgRklSRUZPWF9TQUZBUklfU1RBQ0tfUkVHRVhQID0gLyhefEApXFxTK1xcOlxcZCsvO1xuICAgIHZhciBDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQID0gL15cXHMqYXQgLiooXFxTK1xcOlxcZCt8XFwobmF0aXZlXFwpKS9tO1xuICAgIHZhciBTQUZBUklfTkFUSVZFX0NPREVfUkVHRVhQID0gL14oZXZhbEApPyhcXFtuYXRpdmUgY29kZVxcXSk/JC87XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gRXJyb3Igb2JqZWN0LCBleHRyYWN0IHRoZSBtb3N0IGluZm9ybWF0aW9uIGZyb20gaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gb2YgU3RhY2tGcmFtZXNcbiAgICAgICAgICovXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZShlcnJvcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlcnJvci5zdGFja3RyYWNlICE9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZXJyb3JbJ29wZXJhI3NvdXJjZWxvYyddICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmEoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGFjayAmJiBlcnJvci5zdGFjay5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlVjhPcklFKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUZGT3JTYWZhcmkoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXJzZSBnaXZlbiBFcnJvciBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvLyBTZXBhcmF0ZSBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycyBmcm9tIGEgc3RyaW5nIG9mIHRoZSBmb3JtOiAoVVJJOkxpbmU6Q29sdW1uKVxuICAgICAgICBleHRyYWN0TG9jYXRpb246IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJGV4dHJhY3RMb2NhdGlvbih1cmxMaWtlKSB7XG4gICAgICAgICAgICAvLyBGYWlsLWZhc3QgYnV0IHJldHVybiBsb2NhdGlvbnMgbGlrZSBcIihuYXRpdmUpXCJcbiAgICAgICAgICAgIGlmICh1cmxMaWtlLmluZGV4T2YoJzonKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3VybExpa2VdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcmVnRXhwID0gLyguKz8pKD86XFw6KFxcZCspKT8oPzpcXDooXFxkKykpPyQvO1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gcmVnRXhwLmV4ZWModXJsTGlrZS5yZXBsYWNlKC9bXFwoXFwpXS9nLCAnJykpO1xuICAgICAgICAgICAgcmV0dXJuIFtwYXJ0c1sxXSwgcGFydHNbMl0gfHwgdW5kZWZpbmVkLCBwYXJ0c1szXSB8fCB1bmRlZmluZWRdO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlVjhPcklFOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZVY4T3JJRShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCcoZXZhbCAnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgZXZhbCBpbmZvcm1hdGlvbiB1bnRpbCB3ZSBpbXBsZW1lbnQgc3RhY2t0cmFjZS5qcy9zdGFja2ZyYW1lIzhcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvZXZhbCBjb2RlL2csICdldmFsJykucmVwbGFjZSgvKFxcKGV2YWwgYXQgW15cXCgpXSopfChcXClcXCwuKiQpL2csICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGxpbmUucmVwbGFjZSgvXlxccysvLCAnJykucmVwbGFjZSgvXFwoZXZhbCBjb2RlL2csICcoJykuc3BsaXQoL1xccysvKS5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRva2Vucy5qb2luKCcgJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IFsnZXZhbCcsICc8YW5vbnltb3VzPiddLmluZGV4T2YobG9jYXRpb25QYXJ0c1swXSkgPiAtMSA/IHVuZGVmaW5lZCA6IGxvY2F0aW9uUGFydHNbMF07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VGRk9yU2FmYXJpOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZUZGT3JTYWZhcmkoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhbGluZS5tYXRjaChTQUZBUklfTkFUSVZFX0NPREVfUkVHRVhQKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IGV2YWwgaW5mb3JtYXRpb24gdW50aWwgd2UgaW1wbGVtZW50IHN0YWNrdHJhY2UuanMvc3RhY2tmcmFtZSM4XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignID4gZXZhbCcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvIGxpbmUgKFxcZCspKD86ID4gZXZhbCBsaW5lIFxcZCspKiA+IGV2YWxcXDpcXGQrXFw6XFxkKy9nLCAnOiQxJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignQCcpID09PSAtMSAmJiBsaW5lLmluZGV4T2YoJzonKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIGV2YWwgZnJhbWVzIG9ubHkgaGF2ZSBmdW5jdGlvbiBuYW1lcyBhbmQgbm90aGluZyBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGxpbmVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGxpbmUuc3BsaXQoJ0AnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbih0b2tlbnMucG9wKCkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gdG9rZW5zLmpvaW4oJ0AnKSB8fCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmEoZSkge1xuICAgICAgICAgICAgaWYgKCFlLnN0YWNrdHJhY2UgfHwgKGUubWVzc2FnZS5pbmRleE9mKCdcXG4nKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlLnNwbGl0KCdcXG4nKS5sZW5ndGggPiBlLnN0YWNrdHJhY2Uuc3BsaXQoJ1xcbicpLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhOShlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWUuc3RhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTAoZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmExMShlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhOTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTkoZSkge1xuICAgICAgICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspL2k7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBlLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMiwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lUkUuZXhlYyhsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lc1tpXVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmExMDogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTEwKGUpIHtcbiAgICAgICAgICAgIHZhciBsaW5lUkUgPSAvTGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKSg/OjogSW4gZnVuY3Rpb24gKFxcUyspKT8kL2k7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBlLnN0YWNrdHJhY2Uuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lUkUuZXhlYyhsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbWF0Y2hbM10gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVzW2ldXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBPcGVyYSAxMC42NSsgRXJyb3Iuc3RhY2sgdmVyeSBzaW1pbGFyIHRvIEZGL1NhZmFyaVxuICAgICAgICBwYXJzZU9wZXJhMTE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFApICYmICFsaW5lLm1hdGNoKC9eRXJyb3IgY3JlYXRlZCBhdC8pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBsaW5lLnNwbGl0KCdAJyk7XG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbih0b2tlbnMucG9wKCkpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbkNhbGwgPSAodG9rZW5zLnNoaWZ0KCkgfHwgJycpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbkNhbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88YW5vbnltb3VzIGZ1bmN0aW9uKDogKFxcdyspKT8+LywgJyQyJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXChbXlxcKV0qXFwpL2csICcnKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3NSYXc7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uQ2FsbC5tYXRjaCgvXFwoKFteXFwpXSopXFwpLykpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1JhdyA9IGZ1bmN0aW9uQ2FsbC5yZXBsYWNlKC9eW15cXChdK1xcKChbXlxcKV0qKVxcKSQvLCAnJDEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSAoYXJnc1JhdyA9PT0gdW5kZWZpbmVkIHx8IGFyZ3NSYXcgPT09ICdbYXJndW1lbnRzIG5vdCBhdmFpbGFibGVdJykgP1xuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgOiBhcmdzUmF3LnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG59KSk7XG4iLCIvKiFcbiAqIEBvdmVydmlldyBlczYtcHJvbWlzZSAtIGEgdGlueSBpbXBsZW1lbnRhdGlvbiBvZiBQcm9taXNlcy9BKy5cbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE0IFllaHVkYSBLYXR6LCBUb20gRGFsZSwgU3RlZmFuIFBlbm5lciBhbmQgY29udHJpYnV0b3JzIChDb252ZXJzaW9uIHRvIEVTNiBBUEkgYnkgSmFrZSBBcmNoaWJhbGQpXG4gKiBAbGljZW5zZSAgIExpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlXG4gKiAgICAgICAgICAgIFNlZSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc3RlZmFucGVubmVyL2VzNi1wcm9taXNlL21hc3Rlci9MSUNFTlNFXG4gKiBAdmVyc2lvbiAgIDMuMy4xXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsLkVTNlByb21pc2UgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG9iamVjdE9yRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG59XG5cbnZhciBfaXNBcnJheSA9IHVuZGVmaW5lZDtcbmlmICghQXJyYXkuaXNBcnJheSkge1xuICBfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcbn0gZWxzZSB7XG4gIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbn1cblxudmFyIGlzQXJyYXkgPSBfaXNBcnJheTtcblxudmFyIGxlbiA9IDA7XG52YXIgdmVydHhOZXh0ID0gdW5kZWZpbmVkO1xudmFyIGN1c3RvbVNjaGVkdWxlckZuID0gdW5kZWZpbmVkO1xuXG52YXIgYXNhcCA9IGZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGFyZykge1xuICBxdWV1ZVtsZW5dID0gY2FsbGJhY2s7XG4gIHF1ZXVlW2xlbiArIDFdID0gYXJnO1xuICBsZW4gKz0gMjtcbiAgaWYgKGxlbiA9PT0gMikge1xuICAgIC8vIElmIGxlbiBpcyAyLCB0aGF0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBhc3luYyBmbHVzaC5cbiAgICAvLyBJZiBhZGRpdGlvbmFsIGNhbGxiYWNrcyBhcmUgcXVldWVkIGJlZm9yZSB0aGUgcXVldWUgaXMgZmx1c2hlZCwgdGhleVxuICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgZmx1c2ggdGhhdCB3ZSBhcmUgc2NoZWR1bGluZy5cbiAgICBpZiAoY3VzdG9tU2NoZWR1bGVyRm4pIHtcbiAgICAgIGN1c3RvbVNjaGVkdWxlckZuKGZsdXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZWR1bGVGbHVzaCgpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gc2V0U2NoZWR1bGVyKHNjaGVkdWxlRm4pIHtcbiAgY3VzdG9tU2NoZWR1bGVyRm4gPSBzY2hlZHVsZUZuO1xufVxuXG5mdW5jdGlvbiBzZXRBc2FwKGFzYXBGbikge1xuICBhc2FwID0gYXNhcEZuO1xufVxuXG52YXIgYnJvd3NlcldpbmRvdyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdW5kZWZpbmVkO1xudmFyIGJyb3dzZXJHbG9iYWwgPSBicm93c2VyV2luZG93IHx8IHt9O1xudmFyIEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID0gYnJvd3Nlckdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGJyb3dzZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBpc05vZGUgPSB0eXBlb2Ygc2VsZiA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICh7fSkudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nO1xuXG4vLyB0ZXN0IGZvciB3ZWIgd29ya2VyIGJ1dCBub3QgaW4gSUUxMFxudmFyIGlzV29ya2VyID0gdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJztcblxuLy8gbm9kZVxuZnVuY3Rpb24gdXNlTmV4dFRpY2soKSB7XG4gIC8vIG5vZGUgdmVyc2lvbiAwLjEwLnggZGlzcGxheXMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gbmV4dFRpY2sgaXMgdXNlZCByZWN1cnNpdmVseVxuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2N1am9qcy93aGVuL2lzc3Vlcy80MTAgZm9yIGRldGFpbHNcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gIH07XG59XG5cbi8vIHZlcnR4XG5mdW5jdGlvbiB1c2VWZXJ0eFRpbWVyKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZlcnR4TmV4dChmbHVzaCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZU11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gIHZhciBpdGVyYXRpb25zID0gMDtcbiAgdmFyIG9ic2VydmVyID0gbmV3IEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKGZsdXNoKTtcbiAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gIG9ic2VydmVyLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgbm9kZS5kYXRhID0gaXRlcmF0aW9ucyA9ICsraXRlcmF0aW9ucyAlIDI7XG4gIH07XG59XG5cbi8vIHdlYiB3b3JrZXJcbmZ1bmN0aW9uIHVzZU1lc3NhZ2VDaGFubmVsKCkge1xuICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZsdXNoO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKDApO1xuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VTZXRUaW1lb3V0KCkge1xuICAvLyBTdG9yZSBzZXRUaW1lb3V0IHJlZmVyZW5jZSBzbyBlczYtcHJvbWlzZSB3aWxsIGJlIHVuYWZmZWN0ZWQgYnlcbiAgLy8gb3RoZXIgY29kZSBtb2RpZnlpbmcgc2V0VGltZW91dCAobGlrZSBzaW5vbi51c2VGYWtlVGltZXJzKCkpXG4gIHZhciBnbG9iYWxTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2xvYmFsU2V0VGltZW91dChmbHVzaCwgMSk7XG4gIH07XG59XG5cbnZhciBxdWV1ZSA9IG5ldyBBcnJheSgxMDAwKTtcbmZ1bmN0aW9uIGZsdXNoKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gcXVldWVbaV07XG4gICAgdmFyIGFyZyA9IHF1ZXVlW2kgKyAxXTtcblxuICAgIGNhbGxiYWNrKGFyZyk7XG5cbiAgICBxdWV1ZVtpXSA9IHVuZGVmaW5lZDtcbiAgICBxdWV1ZVtpICsgMV0gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBsZW4gPSAwO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0VmVydHgoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHIgPSByZXF1aXJlO1xuICAgIHZhciB2ZXJ0eCA9IHIoJ3ZlcnR4Jyk7XG4gICAgdmVydHhOZXh0ID0gdmVydHgucnVuT25Mb29wIHx8IHZlcnR4LnJ1bk9uQ29udGV4dDtcbiAgICByZXR1cm4gdXNlVmVydHhUaW1lcigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHVzZVNldFRpbWVvdXQoKTtcbiAgfVxufVxuXG52YXIgc2NoZWR1bGVGbHVzaCA9IHVuZGVmaW5lZDtcbi8vIERlY2lkZSB3aGF0IGFzeW5jIG1ldGhvZCB0byB1c2UgdG8gdHJpZ2dlcmluZyBwcm9jZXNzaW5nIG9mIHF1ZXVlZCBjYWxsYmFja3M6XG5pZiAoaXNOb2RlKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VOZXh0VGljaygpO1xufSBlbHNlIGlmIChCcm93c2VyTXV0YXRpb25PYnNlcnZlcikge1xuICBzY2hlZHVsZUZsdXNoID0gdXNlTXV0YXRpb25PYnNlcnZlcigpO1xufSBlbHNlIGlmIChpc1dvcmtlcikge1xuICBzY2hlZHVsZUZsdXNoID0gdXNlTWVzc2FnZUNoYW5uZWwoKTtcbn0gZWxzZSBpZiAoYnJvd3NlcldpbmRvdyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSBhdHRlbXB0VmVydHgoKTtcbn0gZWxzZSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VTZXRUaW1lb3V0KCk7XG59XG5cbmZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgdmFyIF9hcmd1bWVudHMgPSBhcmd1bWVudHM7XG5cbiAgdmFyIHBhcmVudCA9IHRoaXM7XG5cbiAgdmFyIGNoaWxkID0gbmV3IHRoaXMuY29uc3RydWN0b3Iobm9vcCk7XG5cbiAgaWYgKGNoaWxkW1BST01JU0VfSURdID09PSB1bmRlZmluZWQpIHtcbiAgICBtYWtlUHJvbWlzZShjaGlsZCk7XG4gIH1cblxuICB2YXIgX3N0YXRlID0gcGFyZW50Ll9zdGF0ZTtcblxuICBpZiAoX3N0YXRlKSB7XG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjYWxsYmFjayA9IF9hcmd1bWVudHNbX3N0YXRlIC0gMV07XG4gICAgICBhc2FwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrKF9zdGF0ZSwgY2hpbGQsIGNhbGxiYWNrLCBwYXJlbnQuX3Jlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbik7XG4gIH1cblxuICByZXR1cm4gY2hpbGQ7XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yZXNvbHZlYCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdpbGwgYmVjb21lIHJlc29sdmVkIHdpdGggdGhlXG4gIHBhc3NlZCBgdmFsdWVgLiBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgcmVzb2x2ZSgxKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyB2YWx1ZSA9PT0gMVxuICB9KTtcbiAgYGBgXG5cbiAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoMSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyB2YWx1ZSA9PT0gMVxuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCByZXNvbHZlXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBbnl9IHZhbHVlIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCB3aXRoXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgZnVsZmlsbGVkIHdpdGggdGhlIGdpdmVuXG4gIGB2YWx1ZWBcbiovXG5mdW5jdGlvbiByZXNvbHZlKG9iamVjdCkge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuXG4gIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0LmNvbnN0cnVjdG9yID09PSBDb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcbiAgX3Jlc29sdmUocHJvbWlzZSwgb2JqZWN0KTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbnZhciBQUk9NSVNFX0lEID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDE2KTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnZhciBQRU5ESU5HID0gdm9pZCAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xuXG52YXIgR0VUX1RIRU5fRVJST1IgPSBuZXcgRXJyb3JPYmplY3QoKTtcblxuZnVuY3Rpb24gc2VsZkZ1bGZpbGxtZW50KCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIik7XG59XG5cbmZ1bmN0aW9uIGNhbm5vdFJldHVybk93bigpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGhlbihwcm9taXNlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHByb21pc2UudGhlbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBHRVRfVEhFTl9FUlJPUi5lcnJvciA9IGVycm9yO1xuICAgIHJldHVybiBHRVRfVEhFTl9FUlJPUjtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlUaGVuKHRoZW4sIHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpIHtcbiAgdHJ5IHtcbiAgICB0aGVuLmNhbGwodmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUsIHRoZW4pIHtcbiAgYXNhcChmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgIHZhciBzZWFsZWQgPSBmYWxzZTtcbiAgICB2YXIgZXJyb3IgPSB0cnlUaGVuKHRoZW4sIHRoZW5hYmxlLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChzZWFsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2VhbGVkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGVuYWJsZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuXG4gICAgICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSwgJ1NldHRsZTogJyArIChwcm9taXNlLl9sYWJlbCB8fCAnIHVua25vd24gcHJvbWlzZScpKTtcblxuICAgIGlmICghc2VhbGVkICYmIGVycm9yKSB7XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgX3JlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgfVxuICB9LCBwcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUpIHtcbiAgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gRlVMRklMTEVEKSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgfSBlbHNlIGlmICh0aGVuYWJsZS5fc3RhdGUgPT09IFJFSkVDVEVEKSB7XG4gICAgX3JlamVjdChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgfSBlbHNlIHtcbiAgICBzdWJzY3JpYmUodGhlbmFibGUsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuJCQpIHtcbiAgaWYgKG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IgPT09IHByb21pc2UuY29uc3RydWN0b3IgJiYgdGhlbiQkID09PSB0aGVuICYmIG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IucmVzb2x2ZSA9PT0gcmVzb2x2ZSkge1xuICAgIGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICB9IGVsc2Uge1xuICAgIGlmICh0aGVuJCQgPT09IEdFVF9USEVOX0VSUk9SKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIEdFVF9USEVOX0VSUk9SLmVycm9yKTtcbiAgICB9IGVsc2UgaWYgKHRoZW4kJCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbih0aGVuJCQpKSB7XG4gICAgICBoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSwgdGhlbiQkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCBtYXliZVRoZW5hYmxlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpIHtcbiAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgX3JlamVjdChwcm9taXNlLCBzZWxmRnVsZmlsbG1lbnQoKSk7XG4gIH0gZWxzZSBpZiAob2JqZWN0T3JGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIHZhbHVlLCBnZXRUaGVuKHZhbHVlKSk7XG4gIH0gZWxzZSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaFJlamVjdGlvbihwcm9taXNlKSB7XG4gIGlmIChwcm9taXNlLl9vbmVycm9yKSB7XG4gICAgcHJvbWlzZS5fb25lcnJvcihwcm9taXNlLl9yZXN1bHQpO1xuICB9XG5cbiAgcHVibGlzaChwcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gZnVsZmlsbChwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwcm9taXNlLl9yZXN1bHQgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fc3RhdGUgPSBGVUxGSUxMRUQ7XG5cbiAgaWYgKHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIGFzYXAocHVibGlzaCwgcHJvbWlzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3JlamVjdChwcm9taXNlLCByZWFzb24pIHtcbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByb21pc2UuX3N0YXRlID0gUkVKRUNURUQ7XG4gIHByb21pc2UuX3Jlc3VsdCA9IHJlYXNvbjtcblxuICBhc2FwKHB1Ymxpc2hSZWplY3Rpb24sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBzdWJzY3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgdmFyIF9zdWJzY3JpYmVycyA9IHBhcmVudC5fc3Vic2NyaWJlcnM7XG4gIHZhciBsZW5ndGggPSBfc3Vic2NyaWJlcnMubGVuZ3RoO1xuXG4gIHBhcmVudC5fb25lcnJvciA9IG51bGw7XG5cbiAgX3N1YnNjcmliZXJzW2xlbmd0aF0gPSBjaGlsZDtcbiAgX3N1YnNjcmliZXJzW2xlbmd0aCArIEZVTEZJTExFRF0gPSBvbkZ1bGZpbGxtZW50O1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgUkVKRUNURURdID0gb25SZWplY3Rpb247XG5cbiAgaWYgKGxlbmd0aCA9PT0gMCAmJiBwYXJlbnQuX3N0YXRlKSB7XG4gICAgYXNhcChwdWJsaXNoLCBwYXJlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1Ymxpc2gocHJvbWlzZSkge1xuICB2YXIgc3Vic2NyaWJlcnMgPSBwcm9taXNlLl9zdWJzY3JpYmVycztcbiAgdmFyIHNldHRsZWQgPSBwcm9taXNlLl9zdGF0ZTtcblxuICBpZiAoc3Vic2NyaWJlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGNoaWxkID0gdW5kZWZpbmVkLFxuICAgICAgY2FsbGJhY2sgPSB1bmRlZmluZWQsXG4gICAgICBkZXRhaWwgPSBwcm9taXNlLl9yZXN1bHQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJzY3JpYmVycy5sZW5ndGg7IGkgKz0gMykge1xuICAgIGNoaWxkID0gc3Vic2NyaWJlcnNbaV07XG4gICAgY2FsbGJhY2sgPSBzdWJzY3JpYmVyc1tpICsgc2V0dGxlZF07XG5cbiAgICBpZiAoY2hpbGQpIHtcbiAgICAgIGludm9rZUNhbGxiYWNrKHNldHRsZWQsIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soZGV0YWlsKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlLl9zdWJzY3JpYmVycy5sZW5ndGggPSAwO1xufVxuXG5mdW5jdGlvbiBFcnJvck9iamVjdCgpIHtcbiAgdGhpcy5lcnJvciA9IG51bGw7XG59XG5cbnZhciBUUllfQ0FUQ0hfRVJST1IgPSBuZXcgRXJyb3JPYmplY3QoKTtcblxuZnVuY3Rpb24gdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCkge1xuICB0cnkge1xuICAgIHJldHVybiBjYWxsYmFjayhkZXRhaWwpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgVFJZX0NBVENIX0VSUk9SLmVycm9yID0gZTtcbiAgICByZXR1cm4gVFJZX0NBVENIX0VSUk9SO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZUNhbGxiYWNrKHNldHRsZWQsIHByb21pc2UsIGNhbGxiYWNrLCBkZXRhaWwpIHtcbiAgdmFyIGhhc0NhbGxiYWNrID0gaXNGdW5jdGlvbihjYWxsYmFjayksXG4gICAgICB2YWx1ZSA9IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yID0gdW5kZWZpbmVkLFxuICAgICAgc3VjY2VlZGVkID0gdW5kZWZpbmVkLFxuICAgICAgZmFpbGVkID0gdW5kZWZpbmVkO1xuXG4gIGlmIChoYXNDYWxsYmFjaykge1xuICAgIHZhbHVlID0gdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCk7XG5cbiAgICBpZiAodmFsdWUgPT09IFRSWV9DQVRDSF9FUlJPUikge1xuICAgICAgZmFpbGVkID0gdHJ1ZTtcbiAgICAgIGVycm9yID0gdmFsdWUuZXJyb3I7XG4gICAgICB2YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1Y2NlZWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGNhbm5vdFJldHVybk93bigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBkZXRhaWw7XG4gICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIC8vIG5vb3BcbiAgfSBlbHNlIGlmIChoYXNDYWxsYmFjayAmJiBzdWNjZWVkZWQpIHtcbiAgICAgIF9yZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGZhaWxlZCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBGVUxGSUxMRUQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gUkVKRUNURUQpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVByb21pc2UocHJvbWlzZSwgcmVzb2x2ZXIpIHtcbiAgdHJ5IHtcbiAgICByZXNvbHZlcihmdW5jdGlvbiByZXNvbHZlUHJvbWlzZSh2YWx1ZSkge1xuICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIHJlamVjdFByb21pc2UocmVhc29uKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIGUpO1xuICB9XG59XG5cbnZhciBpZCA9IDA7XG5mdW5jdGlvbiBuZXh0SWQoKSB7XG4gIHJldHVybiBpZCsrO1xufVxuXG5mdW5jdGlvbiBtYWtlUHJvbWlzZShwcm9taXNlKSB7XG4gIHByb21pc2VbUFJPTUlTRV9JRF0gPSBpZCsrO1xuICBwcm9taXNlLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9zdWJzY3JpYmVycyA9IFtdO1xufVxuXG5mdW5jdGlvbiBFbnVtZXJhdG9yKENvbnN0cnVjdG9yLCBpbnB1dCkge1xuICB0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcblxuICBpZiAoIXRoaXMucHJvbWlzZVtQUk9NSVNFX0lEXSkge1xuICAgIG1ha2VQcm9taXNlKHRoaXMucHJvbWlzZSk7XG4gIH1cblxuICBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMubGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgIHRoaXMuX3JlbWFpbmluZyA9IGlucHV0Lmxlbmd0aDtcblxuICAgIHRoaXMuX3Jlc3VsdCA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGZ1bGZpbGwodGhpcy5wcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoIHx8IDA7XG4gICAgICB0aGlzLl9lbnVtZXJhdGUoKTtcbiAgICAgIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIF9yZWplY3QodGhpcy5wcm9taXNlLCB2YWxpZGF0aW9uRXJyb3IoKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGlvbkVycm9yKCkge1xuICByZXR1cm4gbmV3IEVycm9yKCdBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXknKTtcbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl9lbnVtZXJhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgdmFyIF9pbnB1dCA9IHRoaXMuX2lucHV0O1xuXG4gIGZvciAodmFyIGkgPSAwOyB0aGlzLl9zdGF0ZSA9PT0gUEVORElORyAmJiBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLl9lYWNoRW50cnkoX2lucHV0W2ldLCBpKTtcbiAgfVxufTtcblxuRW51bWVyYXRvci5wcm90b3R5cGUuX2VhY2hFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSwgaSkge1xuICB2YXIgYyA9IHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I7XG4gIHZhciByZXNvbHZlJCQgPSBjLnJlc29sdmU7XG5cbiAgaWYgKHJlc29sdmUkJCA9PT0gcmVzb2x2ZSkge1xuICAgIHZhciBfdGhlbiA9IGdldFRoZW4oZW50cnkpO1xuXG4gICAgaWYgKF90aGVuID09PSB0aGVuICYmIGVudHJ5Ll9zdGF0ZSAhPT0gUEVORElORykge1xuICAgICAgdGhpcy5fc2V0dGxlZEF0KGVudHJ5Ll9zdGF0ZSwgaSwgZW50cnkuX3Jlc3VsdCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgX3RoZW4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuICAgICAgdGhpcy5fcmVzdWx0W2ldID0gZW50cnk7XG4gICAgfSBlbHNlIGlmIChjID09PSBQcm9taXNlKSB7XG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBjKG5vb3ApO1xuICAgICAgaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBlbnRyeSwgX3RoZW4pO1xuICAgICAgdGhpcy5fd2lsbFNldHRsZUF0KHByb21pc2UsIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQobmV3IGMoZnVuY3Rpb24gKHJlc29sdmUkJCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSQkKGVudHJ5KTtcbiAgICAgIH0pLCBpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fd2lsbFNldHRsZUF0KHJlc29sdmUkJChlbnRyeSksIGkpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fc2V0dGxlZEF0ID0gZnVuY3Rpb24gKHN0YXRlLCBpLCB2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTtcblxuICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IFBFTkRJTkcpIHtcbiAgICB0aGlzLl9yZW1haW5pbmctLTtcblxuICAgIGlmIChzdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXN1bHRbaV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5fcmVtYWluaW5nID09PSAwKSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0ID0gZnVuY3Rpb24gKHByb21pc2UsIGkpIHtcbiAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuXG4gIHN1YnNjcmliZShwcm9taXNlLCB1bmRlZmluZWQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoRlVMRklMTEVELCBpLCB2YWx1ZSk7XG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICByZXR1cm4gZW51bWVyYXRvci5fc2V0dGxlZEF0KFJFSkVDVEVELCBpLCByZWFzb24pO1xuICB9KTtcbn07XG5cbi8qKlxuICBgUHJvbWlzZS5hbGxgIGFjY2VwdHMgYW4gYXJyYXkgb2YgcHJvbWlzZXMsIGFuZCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2hcbiAgaXMgZnVsZmlsbGVkIHdpdGggYW4gYXJyYXkgb2YgZnVsZmlsbG1lbnQgdmFsdWVzIGZvciB0aGUgcGFzc2VkIHByb21pc2VzLCBvclxuICByZWplY3RlZCB3aXRoIHRoZSByZWFzb24gb2YgdGhlIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIGJlIHJlamVjdGVkLiBJdCBjYXN0cyBhbGxcbiAgZWxlbWVudHMgb2YgdGhlIHBhc3NlZCBpdGVyYWJsZSB0byBwcm9taXNlcyBhcyBpdCBydW5zIHRoaXMgYWxnb3JpdGhtLlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSByZXNvbHZlKDEpO1xuICBsZXQgcHJvbWlzZTIgPSByZXNvbHZlKDIpO1xuICBsZXQgcHJvbWlzZTMgPSByZXNvbHZlKDMpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gVGhlIGFycmF5IGhlcmUgd291bGQgYmUgWyAxLCAyLCAzIF07XG4gIH0pO1xuICBgYGBcblxuICBJZiBhbnkgb2YgdGhlIGBwcm9taXNlc2AgZ2l2ZW4gdG8gYGFsbGAgYXJlIHJlamVjdGVkLCB0aGUgZmlyc3QgcHJvbWlzZVxuICB0aGF0IGlzIHJlamVjdGVkIHdpbGwgYmUgZ2l2ZW4gYXMgYW4gYXJndW1lbnQgdG8gdGhlIHJldHVybmVkIHByb21pc2VzJ3NcbiAgcmVqZWN0aW9uIGhhbmRsZXIuIEZvciBleGFtcGxlOlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSByZXNvbHZlKDEpO1xuICBsZXQgcHJvbWlzZTIgPSByZWplY3QobmV3IEVycm9yKFwiMlwiKSk7XG4gIGxldCBwcm9taXNlMyA9IHJlamVjdChuZXcgRXJyb3IoXCIzXCIpKTtcbiAgbGV0IHByb21pc2VzID0gWyBwcm9taXNlMSwgcHJvbWlzZTIsIHByb21pc2UzIF07XG5cbiAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oYXJyYXkpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zIGJlY2F1c2UgdGhlcmUgYXJlIHJlamVjdGVkIHByb21pc2VzIVxuICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgIC8vIGVycm9yLm1lc3NhZ2UgPT09IFwiMlwiXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIGFsbFxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IGVudHJpZXMgYXJyYXkgb2YgcHJvbWlzZXNcbiAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgbGFiZWxpbmcgdGhlIHByb21pc2UuXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIGFsbCBgcHJvbWlzZXNgIGhhdmUgYmVlblxuICBmdWxmaWxsZWQsIG9yIHJlamVjdGVkIGlmIGFueSBvZiB0aGVtIGJlY29tZSByZWplY3RlZC5cbiAgQHN0YXRpY1xuKi9cbmZ1bmN0aW9uIGFsbChlbnRyaWVzKSB7XG4gIHJldHVybiBuZXcgRW51bWVyYXRvcih0aGlzLCBlbnRyaWVzKS5wcm9taXNlO1xufVxuXG4vKipcbiAgYFByb21pc2UucmFjZWAgcmV0dXJucyBhIG5ldyBwcm9taXNlIHdoaWNoIGlzIHNldHRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZVxuICBmaXJzdCBwYXNzZWQgcHJvbWlzZSB0byBzZXR0bGUuXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVzb2x2ZSgncHJvbWlzZSAxJyk7XG4gICAgfSwgMjAwKTtcbiAgfSk7XG5cbiAgbGV0IHByb21pc2UyID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDInKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyByZXN1bHQgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgaXQgd2FzIHJlc29sdmVkIGJlZm9yZSBwcm9taXNlMVxuICAgIC8vIHdhcyByZXNvbHZlZC5cbiAgfSk7XG4gIGBgYFxuXG4gIGBQcm9taXNlLnJhY2VgIGlzIGRldGVybWluaXN0aWMgaW4gdGhhdCBvbmx5IHRoZSBzdGF0ZSBvZiB0aGUgZmlyc3RcbiAgc2V0dGxlZCBwcm9taXNlIG1hdHRlcnMuIEZvciBleGFtcGxlLCBldmVuIGlmIG90aGVyIHByb21pc2VzIGdpdmVuIHRvIHRoZVxuICBgcHJvbWlzZXNgIGFycmF5IGFyZ3VtZW50IGFyZSByZXNvbHZlZCwgYnV0IHRoZSBmaXJzdCBzZXR0bGVkIHByb21pc2UgaGFzXG4gIGJlY29tZSByZWplY3RlZCBiZWZvcmUgdGhlIG90aGVyIHByb21pc2VzIGJlY2FtZSBmdWxmaWxsZWQsIHRoZSByZXR1cm5lZFxuICBwcm9taXNlIHdpbGwgYmVjb21lIHJlamVjdGVkOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoJ3Byb21pc2UgMicpKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyBDb2RlIGhlcmUgbmV2ZXIgcnVuc1xuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAncHJvbWlzZSAyJyBiZWNhdXNlIHByb21pc2UgMiBiZWNhbWUgcmVqZWN0ZWQgYmVmb3JlXG4gICAgLy8gcHJvbWlzZSAxIGJlY2FtZSBmdWxmaWxsZWRcbiAgfSk7XG4gIGBgYFxuXG4gIEFuIGV4YW1wbGUgcmVhbC13b3JsZCB1c2UgY2FzZSBpcyBpbXBsZW1lbnRpbmcgdGltZW91dHM6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBQcm9taXNlLnJhY2UoW2FqYXgoJ2Zvby5qc29uJyksIHRpbWVvdXQoNTAwMCldKVxuICBgYGBcblxuICBAbWV0aG9kIHJhY2VcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FycmF5fSBwcm9taXNlcyBhcnJheSBvZiBwcm9taXNlcyB0byBvYnNlcnZlXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHdoaWNoIHNldHRsZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBmaXJzdCBwYXNzZWRcbiAgcHJvbWlzZSB0byBzZXR0bGUuXG4qL1xuZnVuY3Rpb24gcmFjZShlbnRyaWVzKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKCFpc0FycmF5KGVudHJpZXMpKSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAoXywgcmVqZWN0KSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1lvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4nKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gZW50cmllcy5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLnJlc29sdmUoZW50cmllc1tpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yZWplY3RgIHJldHVybnMgYSBwcm9taXNlIHJlamVjdGVkIHdpdGggdGhlIHBhc3NlZCBgcmVhc29uYC5cbiAgSXQgaXMgc2hvcnRoYW5kIGZvciB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCFcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUydcbiAgfSk7XG4gIGBgYFxuXG4gIEluc3RlYWQgb2Ygd3JpdGluZyB0aGUgYWJvdmUsIHlvdXIgY29kZSBub3cgc2ltcGx5IGJlY29tZXMgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdXSE9PUFMnKSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCFcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUydcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgcmVqZWN0XG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBbnl9IHJlYXNvbiB2YWx1ZSB0aGF0IHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aC5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgZ2l2ZW4gYHJlYXNvbmAuXG4qL1xuZnVuY3Rpb24gcmVqZWN0KHJlYXNvbikge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcbiAgX3JlamVjdChwcm9taXNlLCByZWFzb24pO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gbmVlZHNSZXNvbHZlcigpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xufVxuXG5mdW5jdGlvbiBuZWVkc05ldygpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbn1cblxuLyoqXG4gIFByb21pc2Ugb2JqZWN0cyByZXByZXNlbnQgdGhlIGV2ZW50dWFsIHJlc3VsdCBvZiBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uLiBUaGVcbiAgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCwgd2hpY2hcbiAgcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGUgcmVhc29uXG4gIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuXG4gIFRlcm1pbm9sb2d5XG4gIC0tLS0tLS0tLS0tXG5cbiAgLSBgcHJvbWlzZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHdpdGggYSBgdGhlbmAgbWV0aG9kIHdob3NlIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoaXMgc3BlY2lmaWNhdGlvbi5cbiAgLSBgdGhlbmFibGVgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB0aGF0IGRlZmluZXMgYSBgdGhlbmAgbWV0aG9kLlxuICAtIGB2YWx1ZWAgaXMgYW55IGxlZ2FsIEphdmFTY3JpcHQgdmFsdWUgKGluY2x1ZGluZyB1bmRlZmluZWQsIGEgdGhlbmFibGUsIG9yIGEgcHJvbWlzZSkuXG4gIC0gYGV4Y2VwdGlvbmAgaXMgYSB2YWx1ZSB0aGF0IGlzIHRocm93biB1c2luZyB0aGUgdGhyb3cgc3RhdGVtZW50LlxuICAtIGByZWFzb25gIGlzIGEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2h5IGEgcHJvbWlzZSB3YXMgcmVqZWN0ZWQuXG4gIC0gYHNldHRsZWRgIHRoZSBmaW5hbCByZXN0aW5nIHN0YXRlIG9mIGEgcHJvbWlzZSwgZnVsZmlsbGVkIG9yIHJlamVjdGVkLlxuXG4gIEEgcHJvbWlzZSBjYW4gYmUgaW4gb25lIG9mIHRocmVlIHN0YXRlczogcGVuZGluZywgZnVsZmlsbGVkLCBvciByZWplY3RlZC5cblxuICBQcm9taXNlcyB0aGF0IGFyZSBmdWxmaWxsZWQgaGF2ZSBhIGZ1bGZpbGxtZW50IHZhbHVlIGFuZCBhcmUgaW4gdGhlIGZ1bGZpbGxlZFxuICBzdGF0ZS4gIFByb21pc2VzIHRoYXQgYXJlIHJlamVjdGVkIGhhdmUgYSByZWplY3Rpb24gcmVhc29uIGFuZCBhcmUgaW4gdGhlXG4gIHJlamVjdGVkIHN0YXRlLiAgQSBmdWxmaWxsbWVudCB2YWx1ZSBpcyBuZXZlciBhIHRoZW5hYmxlLlxuXG4gIFByb21pc2VzIGNhbiBhbHNvIGJlIHNhaWQgdG8gKnJlc29sdmUqIGEgdmFsdWUuICBJZiB0aGlzIHZhbHVlIGlzIGFsc28gYVxuICBwcm9taXNlLCB0aGVuIHRoZSBvcmlnaW5hbCBwcm9taXNlJ3Mgc2V0dGxlZCBzdGF0ZSB3aWxsIG1hdGNoIHRoZSB2YWx1ZSdzXG4gIHNldHRsZWQgc3RhdGUuICBTbyBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgd2lsbFxuICBpdHNlbGYgcmVqZWN0LCBhbmQgYSBwcm9taXNlIHRoYXQgKnJlc29sdmVzKiBhIHByb21pc2UgdGhhdCBmdWxmaWxscyB3aWxsXG4gIGl0c2VsZiBmdWxmaWxsLlxuXG5cbiAgQmFzaWMgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLVxuXG4gIGBgYGpzXG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgLy8gb24gc3VjY2Vzc1xuICAgIHJlc29sdmUodmFsdWUpO1xuXG4gICAgLy8gb24gZmFpbHVyZVxuICAgIHJlamVjdChyZWFzb24pO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAvLyBvbiBmdWxmaWxsbWVudFxuICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAvLyBvbiByZWplY3Rpb25cbiAgfSk7XG4gIGBgYFxuXG4gIEFkdmFuY2VkIFVzYWdlOlxuICAtLS0tLS0tLS0tLS0tLS1cblxuICBQcm9taXNlcyBzaGluZSB3aGVuIGFic3RyYWN0aW5nIGF3YXkgYXN5bmNocm9ub3VzIGludGVyYWN0aW9ucyBzdWNoIGFzXG4gIGBYTUxIdHRwUmVxdWVzdGBzLlxuXG4gIGBgYGpzXG4gIGZ1bmN0aW9uIGdldEpTT04odXJsKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwpO1xuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2pzb24nO1xuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICB4aHIuc2VuZCgpO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSB0aGlzLkRPTkUpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignZ2V0SlNPTjogYCcgKyB1cmwgKyAnYCBmYWlsZWQgd2l0aCBzdGF0dXM6IFsnICsgdGhpcy5zdGF0dXMgKyAnXScpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRKU09OKCcvcG9zdHMuanNvbicpLnRoZW4oZnVuY3Rpb24oanNvbikge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgVW5saWtlIGNhbGxiYWNrcywgcHJvbWlzZXMgYXJlIGdyZWF0IGNvbXBvc2FibGUgcHJpbWl0aXZlcy5cblxuICBgYGBqc1xuICBQcm9taXNlLmFsbChbXG4gICAgZ2V0SlNPTignL3Bvc3RzJyksXG4gICAgZ2V0SlNPTignL2NvbW1lbnRzJylcbiAgXSkudGhlbihmdW5jdGlvbih2YWx1ZXMpe1xuICAgIHZhbHVlc1swXSAvLyA9PiBwb3N0c0pTT05cbiAgICB2YWx1ZXNbMV0gLy8gPT4gY29tbWVudHNKU09OXG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9KTtcbiAgYGBgXG5cbiAgQGNsYXNzIFByb21pc2VcbiAgQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZXJcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAY29uc3RydWN0b3JcbiovXG5mdW5jdGlvbiBQcm9taXNlKHJlc29sdmVyKSB7XG4gIHRoaXNbUFJPTUlTRV9JRF0gPSBuZXh0SWQoKTtcbiAgdGhpcy5fcmVzdWx0ID0gdGhpcy5fc3RhdGUgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG5cbiAgaWYgKG5vb3AgIT09IHJlc29sdmVyKSB7XG4gICAgdHlwZW9mIHJlc29sdmVyICE9PSAnZnVuY3Rpb24nICYmIG5lZWRzUmVzb2x2ZXIoKTtcbiAgICB0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSA/IGluaXRpYWxpemVQcm9taXNlKHRoaXMsIHJlc29sdmVyKSA6IG5lZWRzTmV3KCk7XG4gIH1cbn1cblxuUHJvbWlzZS5hbGwgPSBhbGw7XG5Qcm9taXNlLnJhY2UgPSByYWNlO1xuUHJvbWlzZS5yZXNvbHZlID0gcmVzb2x2ZTtcblByb21pc2UucmVqZWN0ID0gcmVqZWN0O1xuUHJvbWlzZS5fc2V0U2NoZWR1bGVyID0gc2V0U2NoZWR1bGVyO1xuUHJvbWlzZS5fc2V0QXNhcCA9IHNldEFzYXA7XG5Qcm9taXNlLl9hc2FwID0gYXNhcDtcblxuUHJvbWlzZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBQcm9taXNlLFxuXG4gIC8qKlxuICAgIFRoZSBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLFxuICAgIHdoaWNoIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlJ3MgZXZlbnR1YWwgdmFsdWUgb3IgdGhlXG4gICAgcmVhc29uIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbih1c2VyKXtcbiAgICAgIC8vIHVzZXIgaXMgYXZhaWxhYmxlXG4gICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIHVzZXIgaXMgdW5hdmFpbGFibGUsIGFuZCB5b3UgYXJlIGdpdmVuIHRoZSByZWFzb24gd2h5XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIENoYWluaW5nXG4gICAgLS0tLS0tLS1cbiAgXG4gICAgVGhlIHJldHVybiB2YWx1ZSBvZiBgdGhlbmAgaXMgaXRzZWxmIGEgcHJvbWlzZS4gIFRoaXMgc2Vjb25kLCAnZG93bnN0cmVhbSdcbiAgICBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZmlyc3QgcHJvbWlzZSdzIGZ1bGZpbGxtZW50XG4gICAgb3IgcmVqZWN0aW9uIGhhbmRsZXIsIG9yIHJlamVjdGVkIGlmIHRoZSBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24uXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICByZXR1cm4gdXNlci5uYW1lO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiAnZGVmYXVsdCBuYW1lJztcbiAgICB9KS50aGVuKGZ1bmN0aW9uICh1c2VyTmFtZSkge1xuICAgICAgLy8gSWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGB1c2VyTmFtZWAgd2lsbCBiZSB0aGUgdXNlcidzIG5hbWUsIG90aGVyd2lzZSBpdFxuICAgICAgLy8gd2lsbCBiZSBgJ2RlZmF1bHQgbmFtZSdgXG4gICAgfSk7XG4gIFxuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCB1c2VyLCBidXQgc3RpbGwgdW5oYXBweScpO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgLy8gaWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGByZWFzb25gIHdpbGwgYmUgJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jy5cbiAgICAgIC8vIElmIGBmaW5kVXNlcmAgcmVqZWN0ZWQsIGByZWFzb25gIHdpbGwgYmUgJ2BmaW5kVXNlcmAgcmVqZWN0ZWQgYW5kIHdlJ3JlIHVuaGFwcHknLlxuICAgIH0pO1xuICAgIGBgYFxuICAgIElmIHRoZSBkb3duc3RyZWFtIHByb21pc2UgZG9lcyBub3Qgc3BlY2lmeSBhIHJlamVjdGlvbiBoYW5kbGVyLCByZWplY3Rpb24gcmVhc29ucyB3aWxsIGJlIHByb3BhZ2F0ZWQgZnVydGhlciBkb3duc3RyZWFtLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgdGhyb3cgbmV3IFBlZGFnb2dpY2FsRXhjZXB0aW9uKCdVcHN0cmVhbSBlcnJvcicpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAvLyBUaGUgYFBlZGdhZ29jaWFsRXhjZXB0aW9uYCBpcyBwcm9wYWdhdGVkIGFsbCB0aGUgd2F5IGRvd24gdG8gaGVyZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBBc3NpbWlsYXRpb25cbiAgICAtLS0tLS0tLS0tLS1cbiAgXG4gICAgU29tZXRpbWVzIHRoZSB2YWx1ZSB5b3Ugd2FudCB0byBwcm9wYWdhdGUgdG8gYSBkb3duc3RyZWFtIHByb21pc2UgY2FuIG9ubHkgYmVcbiAgICByZXRyaWV2ZWQgYXN5bmNocm9ub3VzbHkuIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHJldHVybmluZyBhIHByb21pc2UgaW4gdGhlXG4gICAgZnVsZmlsbG1lbnQgb3IgcmVqZWN0aW9uIGhhbmRsZXIuIFRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCB0aGVuIGJlIHBlbmRpbmdcbiAgICB1bnRpbCB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBzZXR0bGVkLiBUaGlzIGlzIGNhbGxlZCAqYXNzaW1pbGF0aW9uKi5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgICAgLy8gVGhlIHVzZXIncyBjb21tZW50cyBhcmUgbm93IGF2YWlsYWJsZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBJZiB0aGUgYXNzaW1saWF0ZWQgcHJvbWlzZSByZWplY3RzLCB0aGVuIHRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCBhbHNvIHJlamVjdC5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCBmdWxmaWxscywgd2UnbGwgaGF2ZSB0aGUgdmFsdWUgaGVyZVxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIElmIGBmaW5kQ29tbWVudHNCeUF1dGhvcmAgcmVqZWN0cywgd2UnbGwgaGF2ZSB0aGUgcmVhc29uIGhlcmVcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgU2ltcGxlIEV4YW1wbGVcbiAgICAtLS0tLS0tLS0tLS0tLVxuICBcbiAgICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBsZXQgcmVzdWx0O1xuICBcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gZmluZFJlc3VsdCgpO1xuICAgICAgLy8gc3VjY2Vzc1xuICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAvLyBmYWlsdXJlXG4gICAgfVxuICAgIGBgYFxuICBcbiAgICBFcnJiYWNrIEV4YW1wbGVcbiAgXG4gICAgYGBganNcbiAgICBmaW5kUmVzdWx0KGZ1bmN0aW9uKHJlc3VsdCwgZXJyKXtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgLy8gZmFpbHVyZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgfVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBQcm9taXNlIEV4YW1wbGU7XG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBmaW5kUmVzdWx0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgICAgLy8gc3VjY2Vzc1xuICAgIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAvLyBmYWlsdXJlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEFkdmFuY2VkIEV4YW1wbGVcbiAgICAtLS0tLS0tLS0tLS0tLVxuICBcbiAgICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBsZXQgYXV0aG9yLCBib29rcztcbiAgXG4gICAgdHJ5IHtcbiAgICAgIGF1dGhvciA9IGZpbmRBdXRob3IoKTtcbiAgICAgIGJvb2tzICA9IGZpbmRCb29rc0J5QXV0aG9yKGF1dGhvcik7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9XG4gICAgYGBgXG4gIFxuICAgIEVycmJhY2sgRXhhbXBsZVxuICBcbiAgICBgYGBqc1xuICBcbiAgICBmdW5jdGlvbiBmb3VuZEJvb2tzKGJvb2tzKSB7XG4gIFxuICAgIH1cbiAgXG4gICAgZnVuY3Rpb24gZmFpbHVyZShyZWFzb24pIHtcbiAgXG4gICAgfVxuICBcbiAgICBmaW5kQXV0aG9yKGZ1bmN0aW9uKGF1dGhvciwgZXJyKXtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZpbmRCb29va3NCeUF1dGhvcihhdXRob3IsIGZ1bmN0aW9uKGJvb2tzLCBlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3VuZEJvb2tzKGJvb2tzKTtcbiAgICAgICAgICAgICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICBmYWlsdXJlKHJlYXNvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIFByb21pc2UgRXhhbXBsZTtcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGZpbmRBdXRob3IoKS5cbiAgICAgIHRoZW4oZmluZEJvb2tzQnlBdXRob3IpLlxuICAgICAgdGhlbihmdW5jdGlvbihib29rcyl7XG4gICAgICAgIC8vIGZvdW5kIGJvb2tzXG4gICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEBtZXRob2QgdGhlblxuICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uRnVsZmlsbGVkXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3RlZFxuICAgIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgICBAcmV0dXJuIHtQcm9taXNlfVxuICAqL1xuICB0aGVuOiB0aGVuLFxuXG4gIC8qKlxuICAgIGBjYXRjaGAgaXMgc2ltcGx5IHN1Z2FyIGZvciBgdGhlbih1bmRlZmluZWQsIG9uUmVqZWN0aW9uKWAgd2hpY2ggbWFrZXMgaXQgdGhlIHNhbWVcbiAgICBhcyB0aGUgY2F0Y2ggYmxvY2sgb2YgYSB0cnkvY2F0Y2ggc3RhdGVtZW50LlxuICBcbiAgICBgYGBqc1xuICAgIGZ1bmN0aW9uIGZpbmRBdXRob3IoKXtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGRuJ3QgZmluZCB0aGF0IGF1dGhvcicpO1xuICAgIH1cbiAgXG4gICAgLy8gc3luY2hyb25vdXNcbiAgICB0cnkge1xuICAgICAgZmluZEF1dGhvcigpO1xuICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIH1cbiAgXG4gICAgLy8gYXN5bmMgd2l0aCBwcm9taXNlc1xuICAgIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQG1ldGhvZCBjYXRjaFxuICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVqZWN0aW9uXG4gICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG4gICdjYXRjaCc6IGZ1bmN0aW9uIF9jYXRjaChvblJlamVjdGlvbikge1xuICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3Rpb24pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBwb2x5ZmlsbCgpIHtcbiAgICB2YXIgbG9jYWwgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbG9jYWwgPSBnbG9iYWw7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbG9jYWwgPSBzZWxmO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2NhbCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgUCA9IGxvY2FsLlByb21pc2U7XG5cbiAgICBpZiAoUCkge1xuICAgICAgICB2YXIgcHJvbWlzZVRvU3RyaW5nID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb21pc2VUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChQLnJlc29sdmUoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIHNpbGVudGx5IGlnbm9yZWRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9taXNlVG9TdHJpbmcgPT09ICdbb2JqZWN0IFByb21pc2VdJyAmJiAhUC5jYXN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2NhbC5Qcm9taXNlID0gUHJvbWlzZTtcbn1cblxucG9seWZpbGwoKTtcbi8vIFN0cmFuZ2UgY29tcGF0Li5cblByb21pc2UucG9seWZpbGwgPSBwb2x5ZmlsbDtcblByb21pc2UuUHJvbWlzZSA9IFByb21pc2U7XG5cbnJldHVybiBQcm9taXNlO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXM2LXByb21pc2UubWFwIiwiLyohIEpTT04gdjMuMy4yIHwgaHR0cDovL2Jlc3RpZWpzLmdpdGh1Yi5pby9qc29uMyB8IENvcHlyaWdodCAyMDEyLTIwMTQsIEtpdCBDYW1icmlkZ2UgfCBodHRwOi8va2l0Lm1pdC1saWNlbnNlLm9yZyAqL1xuOyhmdW5jdGlvbiAoKSB7XG4gIC8vIERldGVjdCB0aGUgYGRlZmluZWAgZnVuY3Rpb24gZXhwb3NlZCBieSBhc3luY2hyb25vdXMgbW9kdWxlIGxvYWRlcnMuIFRoZVxuICAvLyBzdHJpY3QgYGRlZmluZWAgY2hlY2sgaXMgbmVjZXNzYXJ5IGZvciBjb21wYXRpYmlsaXR5IHdpdGggYHIuanNgLlxuICB2YXIgaXNMb2FkZXIgPSB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZDtcblxuICAvLyBBIHNldCBvZiB0eXBlcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIG9iamVjdHMgZnJvbSBwcmltaXRpdmVzLlxuICB2YXIgb2JqZWN0VHlwZXMgPSB7XG4gICAgXCJmdW5jdGlvblwiOiB0cnVlLFxuICAgIFwib2JqZWN0XCI6IHRydWVcbiAgfTtcblxuICAvLyBEZXRlY3QgdGhlIGBleHBvcnRzYCBvYmplY3QgZXhwb3NlZCBieSBDb21tb25KUyBpbXBsZW1lbnRhdGlvbnMuXG4gIHZhciBmcmVlRXhwb3J0cyA9IG9iamVjdFR5cGVzW3R5cGVvZiBleHBvcnRzXSAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbiAgLy8gVXNlIHRoZSBgZ2xvYmFsYCBvYmplY3QgZXhwb3NlZCBieSBOb2RlIChpbmNsdWRpbmcgQnJvd3NlcmlmeSB2aWFcbiAgLy8gYGluc2VydC1tb2R1bGUtZ2xvYmFsc2ApLCBOYXJ3aGFsLCBhbmQgUmluZ28gYXMgdGhlIGRlZmF1bHQgY29udGV4dCxcbiAgLy8gYW5kIHRoZSBgd2luZG93YCBvYmplY3QgaW4gYnJvd3NlcnMuIFJoaW5vIGV4cG9ydHMgYSBgZ2xvYmFsYCBmdW5jdGlvblxuICAvLyBpbnN0ZWFkLlxuICB2YXIgcm9vdCA9IG9iamVjdFR5cGVzW3R5cGVvZiB3aW5kb3ddICYmIHdpbmRvdyB8fCB0aGlzLFxuICAgICAgZnJlZUdsb2JhbCA9IGZyZWVFeHBvcnRzICYmIG9iamVjdFR5cGVzW3R5cGVvZiBtb2R1bGVdICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIHR5cGVvZiBnbG9iYWwgPT0gXCJvYmplY3RcIiAmJiBnbG9iYWw7XG5cbiAgaWYgKGZyZWVHbG9iYWwgJiYgKGZyZWVHbG9iYWxbXCJnbG9iYWxcIl0gPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbFtcIndpbmRvd1wiXSA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsW1wic2VsZlwiXSA9PT0gZnJlZUdsb2JhbCkpIHtcbiAgICByb290ID0gZnJlZUdsb2JhbDtcbiAgfVxuXG4gIC8vIFB1YmxpYzogSW5pdGlhbGl6ZXMgSlNPTiAzIHVzaW5nIHRoZSBnaXZlbiBgY29udGV4dGAgb2JqZWN0LCBhdHRhY2hpbmcgdGhlXG4gIC8vIGBzdHJpbmdpZnlgIGFuZCBgcGFyc2VgIGZ1bmN0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGBleHBvcnRzYCBvYmplY3QuXG4gIGZ1bmN0aW9uIHJ1bkluQ29udGV4dChjb250ZXh0LCBleHBvcnRzKSB7XG4gICAgY29udGV4dCB8fCAoY29udGV4dCA9IHJvb3RbXCJPYmplY3RcIl0oKSk7XG4gICAgZXhwb3J0cyB8fCAoZXhwb3J0cyA9IHJvb3RbXCJPYmplY3RcIl0oKSk7XG5cbiAgICAvLyBOYXRpdmUgY29uc3RydWN0b3IgYWxpYXNlcy5cbiAgICB2YXIgTnVtYmVyID0gY29udGV4dFtcIk51bWJlclwiXSB8fCByb290W1wiTnVtYmVyXCJdLFxuICAgICAgICBTdHJpbmcgPSBjb250ZXh0W1wiU3RyaW5nXCJdIHx8IHJvb3RbXCJTdHJpbmdcIl0sXG4gICAgICAgIE9iamVjdCA9IGNvbnRleHRbXCJPYmplY3RcIl0gfHwgcm9vdFtcIk9iamVjdFwiXSxcbiAgICAgICAgRGF0ZSA9IGNvbnRleHRbXCJEYXRlXCJdIHx8IHJvb3RbXCJEYXRlXCJdLFxuICAgICAgICBTeW50YXhFcnJvciA9IGNvbnRleHRbXCJTeW50YXhFcnJvclwiXSB8fCByb290W1wiU3ludGF4RXJyb3JcIl0sXG4gICAgICAgIFR5cGVFcnJvciA9IGNvbnRleHRbXCJUeXBlRXJyb3JcIl0gfHwgcm9vdFtcIlR5cGVFcnJvclwiXSxcbiAgICAgICAgTWF0aCA9IGNvbnRleHRbXCJNYXRoXCJdIHx8IHJvb3RbXCJNYXRoXCJdLFxuICAgICAgICBuYXRpdmVKU09OID0gY29udGV4dFtcIkpTT05cIl0gfHwgcm9vdFtcIkpTT05cIl07XG5cbiAgICAvLyBEZWxlZ2F0ZSB0byB0aGUgbmF0aXZlIGBzdHJpbmdpZnlgIGFuZCBgcGFyc2VgIGltcGxlbWVudGF0aW9ucy5cbiAgICBpZiAodHlwZW9mIG5hdGl2ZUpTT04gPT0gXCJvYmplY3RcIiAmJiBuYXRpdmVKU09OKSB7XG4gICAgICBleHBvcnRzLnN0cmluZ2lmeSA9IG5hdGl2ZUpTT04uc3RyaW5naWZ5O1xuICAgICAgZXhwb3J0cy5wYXJzZSA9IG5hdGl2ZUpTT04ucGFyc2U7XG4gICAgfVxuXG4gICAgLy8gQ29udmVuaWVuY2UgYWxpYXNlcy5cbiAgICB2YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlLFxuICAgICAgICBnZXRDbGFzcyA9IG9iamVjdFByb3RvLnRvU3RyaW5nLFxuICAgICAgICBpc1Byb3BlcnR5LCBmb3JFYWNoLCB1bmRlZjtcblxuICAgIC8vIFRlc3QgdGhlIGBEYXRlI2dldFVUQypgIG1ldGhvZHMuIEJhc2VkIG9uIHdvcmsgYnkgQFlhZmZsZS5cbiAgICB2YXIgaXNFeHRlbmRlZCA9IG5ldyBEYXRlKC0zNTA5ODI3MzM0NTczMjkyKTtcbiAgICB0cnkge1xuICAgICAgLy8gVGhlIGBnZXRVVENGdWxsWWVhcmAsIGBNb250aGAsIGFuZCBgRGF0ZWAgbWV0aG9kcyByZXR1cm4gbm9uc2Vuc2ljYWxcbiAgICAgIC8vIHJlc3VsdHMgZm9yIGNlcnRhaW4gZGF0ZXMgaW4gT3BlcmEgPj0gMTAuNTMuXG4gICAgICBpc0V4dGVuZGVkID0gaXNFeHRlbmRlZC5nZXRVVENGdWxsWWVhcigpID09IC0xMDkyNTIgJiYgaXNFeHRlbmRlZC5nZXRVVENNb250aCgpID09PSAwICYmIGlzRXh0ZW5kZWQuZ2V0VVRDRGF0ZSgpID09PSAxICYmXG4gICAgICAgIC8vIFNhZmFyaSA8IDIuMC4yIHN0b3JlcyB0aGUgaW50ZXJuYWwgbWlsbGlzZWNvbmQgdGltZSB2YWx1ZSBjb3JyZWN0bHksXG4gICAgICAgIC8vIGJ1dCBjbGlwcyB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBkYXRlIG1ldGhvZHMgdG8gdGhlIHJhbmdlIG9mXG4gICAgICAgIC8vIHNpZ25lZCAzMi1iaXQgaW50ZWdlcnMgKFstMiAqKiAzMSwgMiAqKiAzMSAtIDFdKS5cbiAgICAgICAgaXNFeHRlbmRlZC5nZXRVVENIb3VycygpID09IDEwICYmIGlzRXh0ZW5kZWQuZ2V0VVRDTWludXRlcygpID09IDM3ICYmIGlzRXh0ZW5kZWQuZ2V0VVRDU2Vjb25kcygpID09IDYgJiYgaXNFeHRlbmRlZC5nZXRVVENNaWxsaXNlY29uZHMoKSA9PSA3MDg7XG4gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuXG4gICAgLy8gSW50ZXJuYWw6IERldGVybWluZXMgd2hldGhlciB0aGUgbmF0aXZlIGBKU09OLnN0cmluZ2lmeWAgYW5kIGBwYXJzZWBcbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgYXJlIHNwZWMtY29tcGxpYW50LiBCYXNlZCBvbiB3b3JrIGJ5IEtlbiBTbnlkZXIuXG4gICAgZnVuY3Rpb24gaGFzKG5hbWUpIHtcbiAgICAgIGlmIChoYXNbbmFtZV0gIT09IHVuZGVmKSB7XG4gICAgICAgIC8vIFJldHVybiBjYWNoZWQgZmVhdHVyZSB0ZXN0IHJlc3VsdC5cbiAgICAgICAgcmV0dXJuIGhhc1tuYW1lXTtcbiAgICAgIH1cbiAgICAgIHZhciBpc1N1cHBvcnRlZDtcbiAgICAgIGlmIChuYW1lID09IFwiYnVnLXN0cmluZy1jaGFyLWluZGV4XCIpIHtcbiAgICAgICAgLy8gSUUgPD0gNyBkb2Vzbid0IHN1cHBvcnQgYWNjZXNzaW5nIHN0cmluZyBjaGFyYWN0ZXJzIHVzaW5nIHNxdWFyZVxuICAgICAgICAvLyBicmFja2V0IG5vdGF0aW9uLiBJRSA4IG9ubHkgc3VwcG9ydHMgdGhpcyBmb3IgcHJpbWl0aXZlcy5cbiAgICAgICAgaXNTdXBwb3J0ZWQgPSBcImFcIlswXSAhPSBcImFcIjtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBcImpzb25cIikge1xuICAgICAgICAvLyBJbmRpY2F0ZXMgd2hldGhlciBib3RoIGBKU09OLnN0cmluZ2lmeWAgYW5kIGBKU09OLnBhcnNlYCBhcmVcbiAgICAgICAgLy8gc3VwcG9ydGVkLlxuICAgICAgICBpc1N1cHBvcnRlZCA9IGhhcyhcImpzb24tc3RyaW5naWZ5XCIpICYmIGhhcyhcImpzb24tcGFyc2VcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdmFsdWUsIHNlcmlhbGl6ZWQgPSAne1wiYVwiOlsxLHRydWUsZmFsc2UsbnVsbCxcIlxcXFx1MDAwMFxcXFxiXFxcXG5cXFxcZlxcXFxyXFxcXHRcIl19JztcbiAgICAgICAgLy8gVGVzdCBgSlNPTi5zdHJpbmdpZnlgLlxuICAgICAgICBpZiAobmFtZSA9PSBcImpzb24tc3RyaW5naWZ5XCIpIHtcbiAgICAgICAgICB2YXIgc3RyaW5naWZ5ID0gZXhwb3J0cy5zdHJpbmdpZnksIHN0cmluZ2lmeVN1cHBvcnRlZCA9IHR5cGVvZiBzdHJpbmdpZnkgPT0gXCJmdW5jdGlvblwiICYmIGlzRXh0ZW5kZWQ7XG4gICAgICAgICAgaWYgKHN0cmluZ2lmeVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgLy8gQSB0ZXN0IGZ1bmN0aW9uIG9iamVjdCB3aXRoIGEgY3VzdG9tIGB0b0pTT05gIG1ldGhvZC5cbiAgICAgICAgICAgICh2YWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9KS50b0pTT04gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHN0cmluZ2lmeVN1cHBvcnRlZCA9XG4gICAgICAgICAgICAgICAgLy8gRmlyZWZveCAzLjFiMSBhbmQgYjIgc2VyaWFsaXplIHN0cmluZywgbnVtYmVyLCBhbmQgYm9vbGVhblxuICAgICAgICAgICAgICAgIC8vIHByaW1pdGl2ZXMgYXMgb2JqZWN0IGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSgwKSA9PT0gXCIwXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgYjIsIGFuZCBKU09OIDIgc2VyaWFsaXplIHdyYXBwZWQgcHJpbWl0aXZlcyBhcyBvYmplY3RcbiAgICAgICAgICAgICAgICAvLyBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IE51bWJlcigpKSA9PT0gXCIwXCIgJiZcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IFN0cmluZygpKSA9PSAnXCJcIicgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgMiB0aHJvdyBhbiBlcnJvciBpZiB0aGUgdmFsdWUgaXMgYG51bGxgLCBgdW5kZWZpbmVkYCwgb3JcbiAgICAgICAgICAgICAgICAvLyBkb2VzIG5vdCBkZWZpbmUgYSBjYW5vbmljYWwgSlNPTiByZXByZXNlbnRhdGlvbiAodGhpcyBhcHBsaWVzIHRvXG4gICAgICAgICAgICAgICAgLy8gb2JqZWN0cyB3aXRoIGB0b0pTT05gIHByb3BlcnRpZXMgYXMgd2VsbCwgKnVubGVzcyogdGhleSBhcmUgbmVzdGVkXG4gICAgICAgICAgICAgICAgLy8gd2l0aGluIGFuIG9iamVjdCBvciBhcnJheSkuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KGdldENsYXNzKSA9PT0gdW5kZWYgJiZcbiAgICAgICAgICAgICAgICAvLyBJRSA4IHNlcmlhbGl6ZXMgYHVuZGVmaW5lZGAgYXMgYFwidW5kZWZpbmVkXCJgLiBTYWZhcmkgPD0gNS4xLjcgYW5kXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjMgcGFzcyB0aGlzIHRlc3QuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KHVuZGVmKSA9PT0gdW5kZWYgJiZcbiAgICAgICAgICAgICAgICAvLyBTYWZhcmkgPD0gNS4xLjcgYW5kIEZGIDMuMWIzIHRocm93IGBFcnJvcmBzIGFuZCBgVHlwZUVycm9yYHMsXG4gICAgICAgICAgICAgICAgLy8gcmVzcGVjdGl2ZWx5LCBpZiB0aGUgdmFsdWUgaXMgb21pdHRlZCBlbnRpcmVseS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoKSA9PT0gdW5kZWYgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgMiB0aHJvdyBhbiBlcnJvciBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgbm90IGEgbnVtYmVyLFxuICAgICAgICAgICAgICAgIC8vIHN0cmluZywgYXJyYXksIG9iamVjdCwgQm9vbGVhbiwgb3IgYG51bGxgIGxpdGVyYWwuIFRoaXMgYXBwbGllcyB0b1xuICAgICAgICAgICAgICAgIC8vIG9iamVjdHMgd2l0aCBjdXN0b20gYHRvSlNPTmAgbWV0aG9kcyBhcyB3ZWxsLCB1bmxlc3MgdGhleSBhcmUgbmVzdGVkXG4gICAgICAgICAgICAgICAgLy8gaW5zaWRlIG9iamVjdCBvciBhcnJheSBsaXRlcmFscy4gWVVJIDMuMC4wYjEgaWdub3JlcyBjdXN0b20gYHRvSlNPTmBcbiAgICAgICAgICAgICAgICAvLyBtZXRob2RzIGVudGlyZWx5LlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSh2YWx1ZSkgPT09IFwiMVwiICYmXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KFt2YWx1ZV0pID09IFwiWzFdXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBQcm90b3R5cGUgPD0gMS42LjEgc2VyaWFsaXplcyBgW3VuZGVmaW5lZF1gIGFzIGBcIltdXCJgIGluc3RlYWQgb2ZcbiAgICAgICAgICAgICAgICAvLyBgXCJbbnVsbF1cImAuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KFt1bmRlZl0pID09IFwiW251bGxdXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBZVUkgMy4wLjBiMSBmYWlscyB0byBzZXJpYWxpemUgYG51bGxgIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShudWxsKSA9PSBcIm51bGxcIiAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCAyIGhhbHRzIHNlcmlhbGl6YXRpb24gaWYgYW4gYXJyYXkgY29udGFpbnMgYSBmdW5jdGlvbjpcbiAgICAgICAgICAgICAgICAvLyBgWzEsIHRydWUsIGdldENsYXNzLCAxXWAgc2VyaWFsaXplcyBhcyBcIlsxLHRydWUsXSxcIi4gRkYgMy4xYjNcbiAgICAgICAgICAgICAgICAvLyBlbGlkZXMgbm9uLUpTT04gdmFsdWVzIGZyb20gb2JqZWN0cyBhbmQgYXJyYXlzLCB1bmxlc3MgdGhleVxuICAgICAgICAgICAgICAgIC8vIGRlZmluZSBjdXN0b20gYHRvSlNPTmAgbWV0aG9kcy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoW3VuZGVmLCBnZXRDbGFzcywgbnVsbF0pID09IFwiW251bGwsbnVsbCxudWxsXVwiICYmXG4gICAgICAgICAgICAgICAgLy8gU2ltcGxlIHNlcmlhbGl6YXRpb24gdGVzdC4gRkYgMy4xYjEgdXNlcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZXNcbiAgICAgICAgICAgICAgICAvLyB3aGVyZSBjaGFyYWN0ZXIgZXNjYXBlIGNvZGVzIGFyZSBleHBlY3RlZCAoZS5nLiwgYFxcYmAgPT4gYFxcdTAwMDhgKS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoeyBcImFcIjogW3ZhbHVlLCB0cnVlLCBmYWxzZSwgbnVsbCwgXCJcXHgwMFxcYlxcblxcZlxcclxcdFwiXSB9KSA9PSBzZXJpYWxpemVkICYmXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjEgYW5kIGIyIGlnbm9yZSB0aGUgYGZpbHRlcmAgYW5kIGB3aWR0aGAgYXJndW1lbnRzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShudWxsLCB2YWx1ZSkgPT09IFwiMVwiICYmXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KFsxLCAyXSwgbnVsbCwgMSkgPT0gXCJbXFxuIDEsXFxuIDJcXG5dXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBKU09OIDIsIFByb3RvdHlwZSA8PSAxLjcsIGFuZCBvbGRlciBXZWJLaXQgYnVpbGRzIGluY29ycmVjdGx5XG4gICAgICAgICAgICAgICAgLy8gc2VyaWFsaXplIGV4dGVuZGVkIHllYXJzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgRGF0ZSgtOC42NGUxNSkpID09ICdcIi0yNzE4MjEtMDQtMjBUMDA6MDA6MDAuMDAwWlwiJyAmJlxuICAgICAgICAgICAgICAgIC8vIFRoZSBtaWxsaXNlY29uZHMgYXJlIG9wdGlvbmFsIGluIEVTIDUsIGJ1dCByZXF1aXJlZCBpbiA1LjEuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBEYXRlKDguNjRlMTUpKSA9PSAnXCIrMjc1NzYwLTA5LTEzVDAwOjAwOjAwLjAwMFpcIicgJiZcbiAgICAgICAgICAgICAgICAvLyBGaXJlZm94IDw9IDExLjAgaW5jb3JyZWN0bHkgc2VyaWFsaXplcyB5ZWFycyBwcmlvciB0byAwIGFzIG5lZ2F0aXZlXG4gICAgICAgICAgICAgICAgLy8gZm91ci1kaWdpdCB5ZWFycyBpbnN0ZWFkIG9mIHNpeC1kaWdpdCB5ZWFycy4gQ3JlZGl0czogQFlhZmZsZS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IERhdGUoLTYyMTk4NzU1MmU1KSkgPT0gJ1wiLTAwMDAwMS0wMS0wMVQwMDowMDowMC4wMDBaXCInICYmXG4gICAgICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDUuMS41IGFuZCBPcGVyYSA+PSAxMC41MyBpbmNvcnJlY3RseSBzZXJpYWxpemUgbWlsbGlzZWNvbmRcbiAgICAgICAgICAgICAgICAvLyB2YWx1ZXMgbGVzcyB0aGFuIDEwMDAuIENyZWRpdHM6IEBZYWZmbGUuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBEYXRlKC0xKSkgPT0gJ1wiMTk2OS0xMi0zMVQyMzo1OTo1OS45OTlaXCInO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgIHN0cmluZ2lmeVN1cHBvcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpc1N1cHBvcnRlZCA9IHN0cmluZ2lmeVN1cHBvcnRlZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUZXN0IGBKU09OLnBhcnNlYC5cbiAgICAgICAgaWYgKG5hbWUgPT0gXCJqc29uLXBhcnNlXCIpIHtcbiAgICAgICAgICB2YXIgcGFyc2UgPSBleHBvcnRzLnBhcnNlO1xuICAgICAgICAgIGlmICh0eXBlb2YgcGFyc2UgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgYjIgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYSBiYXJlIGxpdGVyYWwgaXMgcHJvdmlkZWQuXG4gICAgICAgICAgICAgIC8vIENvbmZvcm1pbmcgaW1wbGVtZW50YXRpb25zIHNob3VsZCBhbHNvIGNvZXJjZSB0aGUgaW5pdGlhbCBhcmd1bWVudCB0b1xuICAgICAgICAgICAgICAvLyBhIHN0cmluZyBwcmlvciB0byBwYXJzaW5nLlxuICAgICAgICAgICAgICBpZiAocGFyc2UoXCIwXCIpID09PSAwICYmICFwYXJzZShmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBTaW1wbGUgcGFyc2luZyB0ZXN0LlxuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2Uoc2VyaWFsaXplZCk7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlU3VwcG9ydGVkID0gdmFsdWVbXCJhXCJdLmxlbmd0aCA9PSA1ICYmIHZhbHVlW1wiYVwiXVswXSA9PT0gMTtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyaSA8PSA1LjEuMiBhbmQgRkYgMy4xYjEgYWxsb3cgdW5lc2NhcGVkIHRhYnMgaW4gc3RyaW5ncy5cbiAgICAgICAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSAhcGFyc2UoJ1wiXFx0XCInKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge31cbiAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEZGIDQuMCBhbmQgNC4wLjEgYWxsb3cgbGVhZGluZyBgK2Agc2lnbnMgYW5kIGxlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAvLyBkZWNpbWFsIHBvaW50cy4gRkYgNC4wLCA0LjAuMSwgYW5kIElFIDktMTAgYWxzbyBhbGxvd1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGNlcnRhaW4gb2N0YWwgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSBwYXJzZShcIjAxXCIpICE9PSAxO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAocGFyc2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBGRiA0LjAsIDQuMC4xLCBhbmQgUmhpbm8gMS43UjMtUjQgYWxsb3cgdHJhaWxpbmcgZGVjaW1hbFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHBvaW50cy4gVGhlc2UgZW52aXJvbm1lbnRzLCBhbG9uZyB3aXRoIEZGIDMuMWIxIGFuZCAyLFxuICAgICAgICAgICAgICAgICAgICAgIC8vIGFsc28gYWxsb3cgdHJhaWxpbmcgY29tbWFzIGluIEpTT04gb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3VwcG9ydGVkID0gcGFyc2UoXCIxLlwiKSAhPT0gMTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgIHBhcnNlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlzU3VwcG9ydGVkID0gcGFyc2VTdXBwb3J0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNbbmFtZV0gPSAhIWlzU3VwcG9ydGVkO1xuICAgIH1cblxuICAgIGlmICghaGFzKFwianNvblwiKSkge1xuICAgICAgLy8gQ29tbW9uIGBbW0NsYXNzXV1gIG5hbWUgYWxpYXNlcy5cbiAgICAgIHZhciBmdW5jdGlvbkNsYXNzID0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiLFxuICAgICAgICAgIGRhdGVDbGFzcyA9IFwiW29iamVjdCBEYXRlXVwiLFxuICAgICAgICAgIG51bWJlckNsYXNzID0gXCJbb2JqZWN0IE51bWJlcl1cIixcbiAgICAgICAgICBzdHJpbmdDbGFzcyA9IFwiW29iamVjdCBTdHJpbmddXCIsXG4gICAgICAgICAgYXJyYXlDbGFzcyA9IFwiW29iamVjdCBBcnJheV1cIixcbiAgICAgICAgICBib29sZWFuQ2xhc3MgPSBcIltvYmplY3QgQm9vbGVhbl1cIjtcblxuICAgICAgLy8gRGV0ZWN0IGluY29tcGxldGUgc3VwcG9ydCBmb3IgYWNjZXNzaW5nIHN0cmluZyBjaGFyYWN0ZXJzIGJ5IGluZGV4LlxuICAgICAgdmFyIGNoYXJJbmRleEJ1Z2d5ID0gaGFzKFwiYnVnLXN0cmluZy1jaGFyLWluZGV4XCIpO1xuXG4gICAgICAvLyBEZWZpbmUgYWRkaXRpb25hbCB1dGlsaXR5IG1ldGhvZHMgaWYgdGhlIGBEYXRlYCBtZXRob2RzIGFyZSBidWdneS5cbiAgICAgIGlmICghaXNFeHRlbmRlZCkge1xuICAgICAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICAgICAgICAvLyBBIG1hcHBpbmcgYmV0d2VlbiB0aGUgbW9udGhzIG9mIHRoZSB5ZWFyIGFuZCB0aGUgbnVtYmVyIG9mIGRheXMgYmV0d2VlblxuICAgICAgICAvLyBKYW51YXJ5IDFzdCBhbmQgdGhlIGZpcnN0IG9mIHRoZSByZXNwZWN0aXZlIG1vbnRoLlxuICAgICAgICB2YXIgTW9udGhzID0gWzAsIDMxLCA1OSwgOTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0XTtcbiAgICAgICAgLy8gSW50ZXJuYWw6IENhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiBkYXlzIGJldHdlZW4gdGhlIFVuaXggZXBvY2ggYW5kIHRoZVxuICAgICAgICAvLyBmaXJzdCBkYXkgb2YgdGhlIGdpdmVuIG1vbnRoLlxuICAgICAgICB2YXIgZ2V0RGF5ID0gZnVuY3Rpb24gKHllYXIsIG1vbnRoKSB7XG4gICAgICAgICAgcmV0dXJuIE1vbnRoc1ttb250aF0gKyAzNjUgKiAoeWVhciAtIDE5NzApICsgZmxvb3IoKHllYXIgLSAxOTY5ICsgKG1vbnRoID0gKyhtb250aCA+IDEpKSkgLyA0KSAtIGZsb29yKCh5ZWFyIC0gMTkwMSArIG1vbnRoKSAvIDEwMCkgKyBmbG9vcigoeWVhciAtIDE2MDEgKyBtb250aCkgLyA0MDApO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBJbnRlcm5hbDogRGV0ZXJtaW5lcyBpZiBhIHByb3BlcnR5IGlzIGEgZGlyZWN0IHByb3BlcnR5IG9mIHRoZSBnaXZlblxuICAgICAgLy8gb2JqZWN0LiBEZWxlZ2F0ZXMgdG8gdGhlIG5hdGl2ZSBgT2JqZWN0I2hhc093blByb3BlcnR5YCBtZXRob2QuXG4gICAgICBpZiAoIShpc1Byb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHkpKSB7XG4gICAgICAgIGlzUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICB2YXIgbWVtYmVycyA9IHt9LCBjb25zdHJ1Y3RvcjtcbiAgICAgICAgICBpZiAoKG1lbWJlcnMuX19wcm90b19fID0gbnVsbCwgbWVtYmVycy5fX3Byb3RvX18gPSB7XG4gICAgICAgICAgICAvLyBUaGUgKnByb3RvKiBwcm9wZXJ0eSBjYW5ub3QgYmUgc2V0IG11bHRpcGxlIHRpbWVzIGluIHJlY2VudFxuICAgICAgICAgICAgLy8gdmVyc2lvbnMgb2YgRmlyZWZveCBhbmQgU2VhTW9ua2V5LlxuICAgICAgICAgICAgXCJ0b1N0cmluZ1wiOiAxXG4gICAgICAgICAgfSwgbWVtYmVycykudG9TdHJpbmcgIT0gZ2V0Q2xhc3MpIHtcbiAgICAgICAgICAgIC8vIFNhZmFyaSA8PSAyLjAuMyBkb2Vzbid0IGltcGxlbWVudCBgT2JqZWN0I2hhc093blByb3BlcnR5YCwgYnV0XG4gICAgICAgICAgICAvLyBzdXBwb3J0cyB0aGUgbXV0YWJsZSAqcHJvdG8qIHByb3BlcnR5LlxuICAgICAgICAgICAgaXNQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAvLyBDYXB0dXJlIGFuZCBicmVhayB0aGUgb2JqZWN0J3MgcHJvdG90eXBlIGNoYWluIChzZWUgc2VjdGlvbiA4LjYuMlxuICAgICAgICAgICAgICAvLyBvZiB0aGUgRVMgNS4xIHNwZWMpLiBUaGUgcGFyZW50aGVzaXplZCBleHByZXNzaW9uIHByZXZlbnRzIGFuXG4gICAgICAgICAgICAgIC8vIHVuc2FmZSB0cmFuc2Zvcm1hdGlvbiBieSB0aGUgQ2xvc3VyZSBDb21waWxlci5cbiAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsID0gdGhpcy5fX3Byb3RvX18sIHJlc3VsdCA9IHByb3BlcnR5IGluICh0aGlzLl9fcHJvdG9fXyA9IG51bGwsIHRoaXMpO1xuICAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBwcm90b3R5cGUgY2hhaW4uXG4gICAgICAgICAgICAgIHRoaXMuX19wcm90b19fID0gb3JpZ2luYWw7XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDYXB0dXJlIGEgcmVmZXJlbmNlIHRvIHRoZSB0b3AtbGV2ZWwgYE9iamVjdGAgY29uc3RydWN0b3IuXG4gICAgICAgICAgICBjb25zdHJ1Y3RvciA9IG1lbWJlcnMuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIGBjb25zdHJ1Y3RvcmAgcHJvcGVydHkgdG8gc2ltdWxhdGUgYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAgaW5cbiAgICAgICAgICAgIC8vIG90aGVyIGVudmlyb25tZW50cy5cbiAgICAgICAgICAgIGlzUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudCA9ICh0aGlzLmNvbnN0cnVjdG9yIHx8IGNvbnN0cnVjdG9yKS5wcm90b3R5cGU7XG4gICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eSBpbiB0aGlzICYmICEocHJvcGVydHkgaW4gcGFyZW50ICYmIHRoaXNbcHJvcGVydHldID09PSBwYXJlbnRbcHJvcGVydHldKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIG1lbWJlcnMgPSBudWxsO1xuICAgICAgICAgIHJldHVybiBpc1Byb3BlcnR5LmNhbGwodGhpcywgcHJvcGVydHkpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBJbnRlcm5hbDogTm9ybWFsaXplcyB0aGUgYGZvci4uLmluYCBpdGVyYXRpb24gYWxnb3JpdGhtIGFjcm9zc1xuICAgICAgLy8gZW52aXJvbm1lbnRzLiBFYWNoIGVudW1lcmF0ZWQga2V5IGlzIHlpZWxkZWQgdG8gYSBgY2FsbGJhY2tgIGZ1bmN0aW9uLlxuICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBzaXplID0gMCwgUHJvcGVydGllcywgbWVtYmVycywgcHJvcGVydHk7XG5cbiAgICAgICAgLy8gVGVzdHMgZm9yIGJ1Z3MgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQncyBgZm9yLi4uaW5gIGFsZ29yaXRobS4gVGhlXG4gICAgICAgIC8vIGB2YWx1ZU9mYCBwcm9wZXJ0eSBpbmhlcml0cyB0aGUgbm9uLWVudW1lcmFibGUgZmxhZyBmcm9tXG4gICAgICAgIC8vIGBPYmplY3QucHJvdG90eXBlYCBpbiBvbGRlciB2ZXJzaW9ucyBvZiBJRSwgTmV0c2NhcGUsIGFuZCBNb3ppbGxhLlxuICAgICAgICAoUHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlT2YgPSAwO1xuICAgICAgICB9KS5wcm90b3R5cGUudmFsdWVPZiA9IDA7XG5cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBgUHJvcGVydGllc2AgY2xhc3MuXG4gICAgICAgIG1lbWJlcnMgPSBuZXcgUHJvcGVydGllcygpO1xuICAgICAgICBmb3IgKHByb3BlcnR5IGluIG1lbWJlcnMpIHtcbiAgICAgICAgICAvLyBJZ25vcmUgYWxsIHByb3BlcnRpZXMgaW5oZXJpdGVkIGZyb20gYE9iamVjdC5wcm90b3R5cGVgLlxuICAgICAgICAgIGlmIChpc1Byb3BlcnR5LmNhbGwobWVtYmVycywgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICBzaXplKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFByb3BlcnRpZXMgPSBtZW1iZXJzID0gbnVsbDtcblxuICAgICAgICAvLyBOb3JtYWxpemUgdGhlIGl0ZXJhdGlvbiBhbGdvcml0aG0uXG4gICAgICAgIGlmICghc2l6ZSkge1xuICAgICAgICAgIC8vIEEgbGlzdCBvZiBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGluaGVyaXRlZCBmcm9tIGBPYmplY3QucHJvdG90eXBlYC5cbiAgICAgICAgICBtZW1iZXJzID0gW1widmFsdWVPZlwiLCBcInRvU3RyaW5nXCIsIFwidG9Mb2NhbGVTdHJpbmdcIiwgXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLCBcImlzUHJvdG90eXBlT2ZcIiwgXCJoYXNPd25Qcm9wZXJ0eVwiLCBcImNvbnN0cnVjdG9yXCJdO1xuICAgICAgICAgIC8vIElFIDw9IDgsIE1vemlsbGEgMS4wLCBhbmQgTmV0c2NhcGUgNi4yIGlnbm9yZSBzaGFkb3dlZCBub24tZW51bWVyYWJsZVxuICAgICAgICAgIC8vIHByb3BlcnRpZXMuXG4gICAgICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IGdldENsYXNzLmNhbGwob2JqZWN0KSA9PSBmdW5jdGlvbkNsYXNzLCBwcm9wZXJ0eSwgbGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGhhc1Byb3BlcnR5ID0gIWlzRnVuY3Rpb24gJiYgdHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciAhPSBcImZ1bmN0aW9uXCIgJiYgb2JqZWN0VHlwZXNbdHlwZW9mIG9iamVjdC5oYXNPd25Qcm9wZXJ0eV0gJiYgb2JqZWN0Lmhhc093blByb3BlcnR5IHx8IGlzUHJvcGVydHk7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAvLyBHZWNrbyA8PSAxLjAgZW51bWVyYXRlcyB0aGUgYHByb3RvdHlwZWAgcHJvcGVydHkgb2YgZnVuY3Rpb25zIHVuZGVyXG4gICAgICAgICAgICAgIC8vIGNlcnRhaW4gY29uZGl0aW9uczsgSUUgZG9lcyBub3QuXG4gICAgICAgICAgICAgIGlmICghKGlzRnVuY3Rpb24gJiYgcHJvcGVydHkgPT0gXCJwcm90b3R5cGVcIikgJiYgaGFzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTWFudWFsbHkgaW52b2tlIHRoZSBjYWxsYmFjayBmb3IgZWFjaCBub24tZW51bWVyYWJsZSBwcm9wZXJ0eS5cbiAgICAgICAgICAgIGZvciAobGVuZ3RoID0gbWVtYmVycy5sZW5ndGg7IHByb3BlcnR5ID0gbWVtYmVyc1stLWxlbmd0aF07IGhhc1Byb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkgJiYgY2FsbGJhY2socHJvcGVydHkpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHNpemUgPT0gMikge1xuICAgICAgICAgIC8vIFNhZmFyaSA8PSAyLjAuNCBlbnVtZXJhdGVzIHNoYWRvd2VkIHByb3BlcnRpZXMgdHdpY2UuXG4gICAgICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBzZXQgb2YgaXRlcmF0ZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgIHZhciBtZW1iZXJzID0ge30sIGlzRnVuY3Rpb24gPSBnZXRDbGFzcy5jYWxsKG9iamVjdCkgPT0gZnVuY3Rpb25DbGFzcywgcHJvcGVydHk7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAvLyBTdG9yZSBlYWNoIHByb3BlcnR5IG5hbWUgdG8gcHJldmVudCBkb3VibGUgZW51bWVyYXRpb24uIFRoZVxuICAgICAgICAgICAgICAvLyBgcHJvdG90eXBlYCBwcm9wZXJ0eSBvZiBmdW5jdGlvbnMgaXMgbm90IGVudW1lcmF0ZWQgZHVlIHRvIGNyb3NzLVxuICAgICAgICAgICAgICAvLyBlbnZpcm9ubWVudCBpbmNvbnNpc3RlbmNpZXMuXG4gICAgICAgICAgICAgIGlmICghKGlzRnVuY3Rpb24gJiYgcHJvcGVydHkgPT0gXCJwcm90b3R5cGVcIikgJiYgIWlzUHJvcGVydHkuY2FsbChtZW1iZXJzLCBwcm9wZXJ0eSkgJiYgKG1lbWJlcnNbcHJvcGVydHldID0gMSkgJiYgaXNQcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2socHJvcGVydHkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBObyBidWdzIGRldGVjdGVkOyB1c2UgdGhlIHN0YW5kYXJkIGBmb3IuLi5pbmAgYWxnb3JpdGhtLlxuICAgICAgICAgIGZvckVhY2ggPSBmdW5jdGlvbiAob2JqZWN0LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIGlzRnVuY3Rpb24gPSBnZXRDbGFzcy5jYWxsKG9iamVjdCkgPT0gZnVuY3Rpb25DbGFzcywgcHJvcGVydHksIGlzQ29uc3RydWN0b3I7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICBpZiAoIShpc0Z1bmN0aW9uICYmIHByb3BlcnR5ID09IFwicHJvdG90eXBlXCIpICYmIGlzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSAmJiAhKGlzQ29uc3RydWN0b3IgPSBwcm9wZXJ0eSA9PT0gXCJjb25zdHJ1Y3RvclwiKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTWFudWFsbHkgaW52b2tlIHRoZSBjYWxsYmFjayBmb3IgdGhlIGBjb25zdHJ1Y3RvcmAgcHJvcGVydHkgZHVlIHRvXG4gICAgICAgICAgICAvLyBjcm9zcy1lbnZpcm9ubWVudCBpbmNvbnNpc3RlbmNpZXMuXG4gICAgICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvciB8fCBpc1Byb3BlcnR5LmNhbGwob2JqZWN0LCAocHJvcGVydHkgPSBcImNvbnN0cnVjdG9yXCIpKSkge1xuICAgICAgICAgICAgICBjYWxsYmFjayhwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9yRWFjaChvYmplY3QsIGNhbGxiYWNrKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFB1YmxpYzogU2VyaWFsaXplcyBhIEphdmFTY3JpcHQgYHZhbHVlYCBhcyBhIEpTT04gc3RyaW5nLiBUaGUgb3B0aW9uYWxcbiAgICAgIC8vIGBmaWx0ZXJgIGFyZ3VtZW50IG1heSBzcGVjaWZ5IGVpdGhlciBhIGZ1bmN0aW9uIHRoYXQgYWx0ZXJzIGhvdyBvYmplY3QgYW5kXG4gICAgICAvLyBhcnJheSBtZW1iZXJzIGFyZSBzZXJpYWxpemVkLCBvciBhbiBhcnJheSBvZiBzdHJpbmdzIGFuZCBudW1iZXJzIHRoYXRcbiAgICAgIC8vIGluZGljYXRlcyB3aGljaCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBzZXJpYWxpemVkLiBUaGUgb3B0aW9uYWwgYHdpZHRoYFxuICAgICAgLy8gYXJndW1lbnQgbWF5IGJlIGVpdGhlciBhIHN0cmluZyBvciBudW1iZXIgdGhhdCBzcGVjaWZpZXMgdGhlIGluZGVudGF0aW9uXG4gICAgICAvLyBsZXZlbCBvZiB0aGUgb3V0cHV0LlxuICAgICAgaWYgKCFoYXMoXCJqc29uLXN0cmluZ2lmeVwiKSkge1xuICAgICAgICAvLyBJbnRlcm5hbDogQSBtYXAgb2YgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCB0aGVpciBlc2NhcGVkIGVxdWl2YWxlbnRzLlxuICAgICAgICB2YXIgRXNjYXBlcyA9IHtcbiAgICAgICAgICA5MjogXCJcXFxcXFxcXFwiLFxuICAgICAgICAgIDM0OiAnXFxcXFwiJyxcbiAgICAgICAgICA4OiBcIlxcXFxiXCIsXG4gICAgICAgICAgMTI6IFwiXFxcXGZcIixcbiAgICAgICAgICAxMDogXCJcXFxcblwiLFxuICAgICAgICAgIDEzOiBcIlxcXFxyXCIsXG4gICAgICAgICAgOTogXCJcXFxcdFwiXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IENvbnZlcnRzIGB2YWx1ZWAgaW50byBhIHplcm8tcGFkZGVkIHN0cmluZyBzdWNoIHRoYXQgaXRzXG4gICAgICAgIC8vIGxlbmd0aCBpcyBhdCBsZWFzdCBlcXVhbCB0byBgd2lkdGhgLiBUaGUgYHdpZHRoYCBtdXN0IGJlIDw9IDYuXG4gICAgICAgIHZhciBsZWFkaW5nWmVyb2VzID0gXCIwMDAwMDBcIjtcbiAgICAgICAgdmFyIHRvUGFkZGVkU3RyaW5nID0gZnVuY3Rpb24gKHdpZHRoLCB2YWx1ZSkge1xuICAgICAgICAgIC8vIFRoZSBgfHwgMGAgZXhwcmVzc2lvbiBpcyBuZWNlc3NhcnkgdG8gd29yayBhcm91bmQgYSBidWcgaW5cbiAgICAgICAgICAvLyBPcGVyYSA8PSA3LjU0dTIgd2hlcmUgYDAgPT0gLTBgLCBidXQgYFN0cmluZygtMCkgIT09IFwiMFwiYC5cbiAgICAgICAgICByZXR1cm4gKGxlYWRpbmdaZXJvZXMgKyAodmFsdWUgfHwgMCkpLnNsaWNlKC13aWR0aCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IERvdWJsZS1xdW90ZXMgYSBzdHJpbmcgYHZhbHVlYCwgcmVwbGFjaW5nIGFsbCBBU0NJSSBjb250cm9sXG4gICAgICAgIC8vIGNoYXJhY3RlcnMgKGNoYXJhY3RlcnMgd2l0aCBjb2RlIHVuaXQgdmFsdWVzIGJldHdlZW4gMCBhbmQgMzEpIHdpdGhcbiAgICAgICAgLy8gdGhlaXIgZXNjYXBlZCBlcXVpdmFsZW50cy4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGVcbiAgICAgICAgLy8gYFF1b3RlKHZhbHVlKWAgb3BlcmF0aW9uIGRlZmluZWQgaW4gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMy5cbiAgICAgICAgdmFyIHVuaWNvZGVQcmVmaXggPSBcIlxcXFx1MDBcIjtcbiAgICAgICAgdmFyIHF1b3RlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9ICdcIicsIGluZGV4ID0gMCwgbGVuZ3RoID0gdmFsdWUubGVuZ3RoLCB1c2VDaGFySW5kZXggPSAhY2hhckluZGV4QnVnZ3kgfHwgbGVuZ3RoID4gMTA7XG4gICAgICAgICAgdmFyIHN5bWJvbHMgPSB1c2VDaGFySW5kZXggJiYgKGNoYXJJbmRleEJ1Z2d5ID8gdmFsdWUuc3BsaXQoXCJcIikgOiB2YWx1ZSk7XG4gICAgICAgICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICB2YXIgY2hhckNvZGUgPSB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgaXMgYSBjb250cm9sIGNoYXJhY3RlciwgYXBwZW5kIGl0cyBVbmljb2RlIG9yXG4gICAgICAgICAgICAvLyBzaG9ydGhhbmQgZXNjYXBlIHNlcXVlbmNlOyBvdGhlcndpc2UsIGFwcGVuZCB0aGUgY2hhcmFjdGVyIGFzLWlzLlxuICAgICAgICAgICAgc3dpdGNoIChjaGFyQ29kZSkge1xuICAgICAgICAgICAgICBjYXNlIDg6IGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMjogY2FzZSAxMzogY2FzZSAzNDogY2FzZSA5MjpcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gRXNjYXBlc1tjaGFyQ29kZV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB1bmljb2RlUHJlZml4ICsgdG9QYWRkZWRTdHJpbmcoMiwgY2hhckNvZGUudG9TdHJpbmcoMTYpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gdXNlQ2hhckluZGV4ID8gc3ltYm9sc1tpbmRleF0gOiB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ1wiJztcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmVjdXJzaXZlbHkgc2VyaWFsaXplcyBhbiBvYmplY3QuIEltcGxlbWVudHMgdGhlXG4gICAgICAgIC8vIGBTdHIoa2V5LCBob2xkZXIpYCwgYEpPKHZhbHVlKWAsIGFuZCBgSkEodmFsdWUpYCBvcGVyYXRpb25zLlxuICAgICAgICB2YXIgc2VyaWFsaXplID0gZnVuY3Rpb24gKHByb3BlcnR5LCBvYmplY3QsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCB3aGl0ZXNwYWNlLCBpbmRlbnRhdGlvbiwgc3RhY2spIHtcbiAgICAgICAgICB2YXIgdmFsdWUsIGNsYXNzTmFtZSwgeWVhciwgbW9udGgsIGRhdGUsIHRpbWUsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIHJlc3VsdHMsIGVsZW1lbnQsIGluZGV4LCBsZW5ndGgsIHByZWZpeCwgcmVzdWx0O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBOZWNlc3NhcnkgZm9yIGhvc3Qgb2JqZWN0IHN1cHBvcnQuXG4gICAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lID0gZ2V0Q2xhc3MuY2FsbCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IGRhdGVDbGFzcyAmJiAhaXNQcm9wZXJ0eS5jYWxsKHZhbHVlLCBcInRvSlNPTlwiKSkge1xuICAgICAgICAgICAgICBpZiAodmFsdWUgPiAtMSAvIDAgJiYgdmFsdWUgPCAxIC8gMCkge1xuICAgICAgICAgICAgICAgIC8vIERhdGVzIGFyZSBzZXJpYWxpemVkIGFjY29yZGluZyB0byB0aGUgYERhdGUjdG9KU09OYCBtZXRob2RcbiAgICAgICAgICAgICAgICAvLyBzcGVjaWZpZWQgaW4gRVMgNS4xIHNlY3Rpb24gMTUuOS41LjQ0LiBTZWUgc2VjdGlvbiAxNS45LjEuMTVcbiAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIElTTyA4NjAxIGRhdGUgdGltZSBzdHJpbmcgZm9ybWF0LlxuICAgICAgICAgICAgICAgIGlmIChnZXREYXkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIE1hbnVhbGx5IGNvbXB1dGUgdGhlIHllYXIsIG1vbnRoLCBkYXRlLCBob3VycywgbWludXRlcyxcbiAgICAgICAgICAgICAgICAgIC8vIHNlY29uZHMsIGFuZCBtaWxsaXNlY29uZHMgaWYgdGhlIGBnZXRVVEMqYCBtZXRob2RzIGFyZVxuICAgICAgICAgICAgICAgICAgLy8gYnVnZ3kuIEFkYXB0ZWQgZnJvbSBAWWFmZmxlJ3MgYGRhdGUtc2hpbWAgcHJvamVjdC5cbiAgICAgICAgICAgICAgICAgIGRhdGUgPSBmbG9vcih2YWx1ZSAvIDg2NGU1KTtcbiAgICAgICAgICAgICAgICAgIGZvciAoeWVhciA9IGZsb29yKGRhdGUgLyAzNjUuMjQyNSkgKyAxOTcwIC0gMTsgZ2V0RGF5KHllYXIgKyAxLCAwKSA8PSBkYXRlOyB5ZWFyKyspO1xuICAgICAgICAgICAgICAgICAgZm9yIChtb250aCA9IGZsb29yKChkYXRlIC0gZ2V0RGF5KHllYXIsIDApKSAvIDMwLjQyKTsgZ2V0RGF5KHllYXIsIG1vbnRoICsgMSkgPD0gZGF0ZTsgbW9udGgrKyk7XG4gICAgICAgICAgICAgICAgICBkYXRlID0gMSArIGRhdGUgLSBnZXREYXkoeWVhciwgbW9udGgpO1xuICAgICAgICAgICAgICAgICAgLy8gVGhlIGB0aW1lYCB2YWx1ZSBzcGVjaWZpZXMgdGhlIHRpbWUgd2l0aGluIHRoZSBkYXkgKHNlZSBFU1xuICAgICAgICAgICAgICAgICAgLy8gNS4xIHNlY3Rpb24gMTUuOS4xLjIpLiBUaGUgZm9ybXVsYSBgKEEgJSBCICsgQikgJSBCYCBpcyB1c2VkXG4gICAgICAgICAgICAgICAgICAvLyB0byBjb21wdXRlIGBBIG1vZHVsbyBCYCwgYXMgdGhlIGAlYCBvcGVyYXRvciBkb2VzIG5vdFxuICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZCB0byB0aGUgYG1vZHVsb2Agb3BlcmF0aW9uIGZvciBuZWdhdGl2ZSBudW1iZXJzLlxuICAgICAgICAgICAgICAgICAgdGltZSA9ICh2YWx1ZSAlIDg2NGU1ICsgODY0ZTUpICUgODY0ZTU7XG4gICAgICAgICAgICAgICAgICAvLyBUaGUgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBtaWxsaXNlY29uZHMgYXJlIG9idGFpbmVkIGJ5XG4gICAgICAgICAgICAgICAgICAvLyBkZWNvbXBvc2luZyB0aGUgdGltZSB3aXRoaW4gdGhlIGRheS4gU2VlIHNlY3Rpb24gMTUuOS4xLjEwLlxuICAgICAgICAgICAgICAgICAgaG91cnMgPSBmbG9vcih0aW1lIC8gMzZlNSkgJSAyNDtcbiAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBmbG9vcih0aW1lIC8gNmU0KSAlIDYwO1xuICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IGZsb29yKHRpbWUgLyAxZTMpICUgNjA7XG4gICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aW1lICUgMWUzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB5ZWFyID0gdmFsdWUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICAgIG1vbnRoID0gdmFsdWUuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICAgICAgICAgIGRhdGUgPSB2YWx1ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgICAgICAgICAgICBob3VycyA9IHZhbHVlLmdldFVUQ0hvdXJzKCk7XG4gICAgICAgICAgICAgICAgICBtaW51dGVzID0gdmFsdWUuZ2V0VVRDTWludXRlcygpO1xuICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IHZhbHVlLmdldFVUQ1NlY29uZHMoKTtcbiAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IHZhbHVlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTZXJpYWxpemUgZXh0ZW5kZWQgeWVhcnMgY29ycmVjdGx5LlxuICAgICAgICAgICAgICAgIHZhbHVlID0gKHllYXIgPD0gMCB8fCB5ZWFyID49IDFlNCA/ICh5ZWFyIDwgMCA/IFwiLVwiIDogXCIrXCIpICsgdG9QYWRkZWRTdHJpbmcoNiwgeWVhciA8IDAgPyAteWVhciA6IHllYXIpIDogdG9QYWRkZWRTdHJpbmcoNCwgeWVhcikpICtcbiAgICAgICAgICAgICAgICAgIFwiLVwiICsgdG9QYWRkZWRTdHJpbmcoMiwgbW9udGggKyAxKSArIFwiLVwiICsgdG9QYWRkZWRTdHJpbmcoMiwgZGF0ZSkgK1xuICAgICAgICAgICAgICAgICAgLy8gTW9udGhzLCBkYXRlcywgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzIHNob3VsZCBoYXZlIHR3b1xuICAgICAgICAgICAgICAgICAgLy8gZGlnaXRzOyBtaWxsaXNlY29uZHMgc2hvdWxkIGhhdmUgdGhyZWUuXG4gICAgICAgICAgICAgICAgICBcIlRcIiArIHRvUGFkZGVkU3RyaW5nKDIsIGhvdXJzKSArIFwiOlwiICsgdG9QYWRkZWRTdHJpbmcoMiwgbWludXRlcykgKyBcIjpcIiArIHRvUGFkZGVkU3RyaW5nKDIsIHNlY29uZHMpICtcbiAgICAgICAgICAgICAgICAgIC8vIE1pbGxpc2Vjb25kcyBhcmUgb3B0aW9uYWwgaW4gRVMgNS4wLCBidXQgcmVxdWlyZWQgaW4gNS4xLlxuICAgICAgICAgICAgICAgICAgXCIuXCIgKyB0b1BhZGRlZFN0cmluZygzLCBtaWxsaXNlY29uZHMpICsgXCJaXCI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZS50b0pTT04gPT0gXCJmdW5jdGlvblwiICYmICgoY2xhc3NOYW1lICE9IG51bWJlckNsYXNzICYmIGNsYXNzTmFtZSAhPSBzdHJpbmdDbGFzcyAmJiBjbGFzc05hbWUgIT0gYXJyYXlDbGFzcykgfHwgaXNQcm9wZXJ0eS5jYWxsKHZhbHVlLCBcInRvSlNPTlwiKSkpIHtcbiAgICAgICAgICAgICAgLy8gUHJvdG90eXBlIDw9IDEuNi4xIGFkZHMgbm9uLXN0YW5kYXJkIGB0b0pTT05gIG1ldGhvZHMgdG8gdGhlXG4gICAgICAgICAgICAgIC8vIGBOdW1iZXJgLCBgU3RyaW5nYCwgYERhdGVgLCBhbmQgYEFycmF5YCBwcm90b3R5cGVzLiBKU09OIDNcbiAgICAgICAgICAgICAgLy8gaWdub3JlcyBhbGwgYHRvSlNPTmAgbWV0aG9kcyBvbiB0aGVzZSBvYmplY3RzIHVubGVzcyB0aGV5IGFyZVxuICAgICAgICAgICAgICAvLyBkZWZpbmVkIGRpcmVjdGx5IG9uIGFuIGluc3RhbmNlLlxuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gSWYgYSByZXBsYWNlbWVudCBmdW5jdGlvbiB3YXMgcHJvdmlkZWQsIGNhbGwgaXQgdG8gb2J0YWluIHRoZSB2YWx1ZVxuICAgICAgICAgICAgLy8gZm9yIHNlcmlhbGl6YXRpb24uXG4gICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrLmNhbGwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2xhc3NOYW1lID0gZ2V0Q2xhc3MuY2FsbCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBib29sZWFuQ2xhc3MpIHtcbiAgICAgICAgICAgIC8vIEJvb2xlYW5zIGFyZSByZXByZXNlbnRlZCBsaXRlcmFsbHkuXG4gICAgICAgICAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IG51bWJlckNsYXNzKSB7XG4gICAgICAgICAgICAvLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5pdGUuIGBJbmZpbml0eWAgYW5kIGBOYU5gIGFyZSBzZXJpYWxpemVkIGFzXG4gICAgICAgICAgICAvLyBgXCJudWxsXCJgLlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID4gLTEgLyAwICYmIHZhbHVlIDwgMSAvIDAgPyBcIlwiICsgdmFsdWUgOiBcIm51bGxcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSA9PSBzdHJpbmdDbGFzcykge1xuICAgICAgICAgICAgLy8gU3RyaW5ncyBhcmUgZG91YmxlLXF1b3RlZCBhbmQgZXNjYXBlZC5cbiAgICAgICAgICAgIHJldHVybiBxdW90ZShcIlwiICsgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXJpYWxpemUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGlzIGlzIGEgbGluZWFyIHNlYXJjaDsgcGVyZm9ybWFuY2VcbiAgICAgICAgICAgIC8vIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiB1bmlxdWUgbmVzdGVkIG9iamVjdHMuXG4gICAgICAgICAgICBmb3IgKGxlbmd0aCA9IHN0YWNrLmxlbmd0aDsgbGVuZ3RoLS07KSB7XG4gICAgICAgICAgICAgIGlmIChzdGFja1tsZW5ndGhdID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIEN5Y2xpYyBzdHJ1Y3R1cmVzIGNhbm5vdCBiZSBzZXJpYWxpemVkIGJ5IGBKU09OLnN0cmluZ2lmeWAuXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAgICAgICAgIHN0YWNrLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgY3VycmVudCBpbmRlbnRhdGlvbiBsZXZlbCBhbmQgaW5kZW50IG9uZSBhZGRpdGlvbmFsIGxldmVsLlxuICAgICAgICAgICAgcHJlZml4ID0gaW5kZW50YXRpb247XG4gICAgICAgICAgICBpbmRlbnRhdGlvbiArPSB3aGl0ZXNwYWNlO1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBhcnJheUNsYXNzKSB7XG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNlcmlhbGl6ZSBhcnJheSBlbGVtZW50cy5cbiAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gc2VyaWFsaXplKGluZGV4LCB2YWx1ZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIGluZGVudGF0aW9uLCBzdGFjayk7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVsZW1lbnQgPT09IHVuZGVmID8gXCJudWxsXCIgOiBlbGVtZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRzLmxlbmd0aCA/ICh3aGl0ZXNwYWNlID8gXCJbXFxuXCIgKyBpbmRlbnRhdGlvbiArIHJlc3VsdHMuam9pbihcIixcXG5cIiArIGluZGVudGF0aW9uKSArIFwiXFxuXCIgKyBwcmVmaXggKyBcIl1cIiA6IChcIltcIiArIHJlc3VsdHMuam9pbihcIixcIikgKyBcIl1cIikpIDogXCJbXVwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgc2VyaWFsaXplIG9iamVjdCBtZW1iZXJzLiBNZW1iZXJzIGFyZSBzZWxlY3RlZCBmcm9tXG4gICAgICAgICAgICAgIC8vIGVpdGhlciBhIHVzZXItc3BlY2lmaWVkIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMsIG9yIHRoZSBvYmplY3RcbiAgICAgICAgICAgICAgLy8gaXRzZWxmLlxuICAgICAgICAgICAgICBmb3JFYWNoKHByb3BlcnRpZXMgfHwgdmFsdWUsIGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gc2VyaWFsaXplKHByb3BlcnR5LCB2YWx1ZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIGluZGVudGF0aW9uLCBzdGFjayk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT09IHVuZGVmKSB7XG4gICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMzogXCJJZiBgZ2FwYCB7d2hpdGVzcGFjZX1cbiAgICAgICAgICAgICAgICAgIC8vIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgYG1lbWJlcmAge3F1b3RlKHByb3BlcnR5KSArIFwiOlwifVxuICAgICAgICAgICAgICAgICAgLy8gYmUgdGhlIGNvbmNhdGVuYXRpb24gb2YgYG1lbWJlcmAgYW5kIHRoZSBgc3BhY2VgIGNoYXJhY3Rlci5cIlxuICAgICAgICAgICAgICAgICAgLy8gVGhlIFwiYHNwYWNlYCBjaGFyYWN0ZXJcIiByZWZlcnMgdG8gdGhlIGxpdGVyYWwgc3BhY2VcbiAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3Rlciwgbm90IHRoZSBgc3BhY2VgIHt3aWR0aH0gYXJndW1lbnQgcHJvdmlkZWQgdG9cbiAgICAgICAgICAgICAgICAgIC8vIGBKU09OLnN0cmluZ2lmeWAuXG4gICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocXVvdGUocHJvcGVydHkpICsgXCI6XCIgKyAod2hpdGVzcGFjZSA/IFwiIFwiIDogXCJcIikgKyBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRzLmxlbmd0aCA/ICh3aGl0ZXNwYWNlID8gXCJ7XFxuXCIgKyBpbmRlbnRhdGlvbiArIHJlc3VsdHMuam9pbihcIixcXG5cIiArIGluZGVudGF0aW9uKSArIFwiXFxuXCIgKyBwcmVmaXggKyBcIn1cIiA6IChcIntcIiArIHJlc3VsdHMuam9pbihcIixcIikgKyBcIn1cIikpIDogXCJ7fVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGUgdHJhdmVyc2VkIG9iamVjdCBzdGFjay5cbiAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUHVibGljOiBgSlNPTi5zdHJpbmdpZnlgLiBTZWUgRVMgNS4xIHNlY3Rpb24gMTUuMTIuMy5cbiAgICAgICAgZXhwb3J0cy5zdHJpbmdpZnkgPSBmdW5jdGlvbiAoc291cmNlLCBmaWx0ZXIsIHdpZHRoKSB7XG4gICAgICAgICAgdmFyIHdoaXRlc3BhY2UsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCBjbGFzc05hbWU7XG4gICAgICAgICAgaWYgKG9iamVjdFR5cGVzW3R5cGVvZiBmaWx0ZXJdICYmIGZpbHRlcikge1xuICAgICAgICAgICAgaWYgKChjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKGZpbHRlcikpID09IGZ1bmN0aW9uQ2xhc3MpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmaWx0ZXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSA9PSBhcnJheUNsYXNzKSB7XG4gICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVzIGFycmF5IGludG8gYSBtYWtlc2hpZnQgc2V0LlxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0gZmlsdGVyLmxlbmd0aCwgdmFsdWU7IGluZGV4IDwgbGVuZ3RoOyB2YWx1ZSA9IGZpbHRlcltpbmRleCsrXSwgKChjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKHZhbHVlKSksIGNsYXNzTmFtZSA9PSBzdHJpbmdDbGFzcyB8fCBjbGFzc05hbWUgPT0gbnVtYmVyQ2xhc3MpICYmIChwcm9wZXJ0aWVzW3ZhbHVlXSA9IDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHdpZHRoKSB7XG4gICAgICAgICAgICBpZiAoKGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwod2lkdGgpKSA9PSBudW1iZXJDbGFzcykge1xuICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBgd2lkdGhgIHRvIGFuIGludGVnZXIgYW5kIGNyZWF0ZSBhIHN0cmluZyBjb250YWluaW5nXG4gICAgICAgICAgICAgIC8vIGB3aWR0aGAgbnVtYmVyIG9mIHNwYWNlIGNoYXJhY3RlcnMuXG4gICAgICAgICAgICAgIGlmICgod2lkdGggLT0gd2lkdGggJSAxKSA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKHdoaXRlc3BhY2UgPSBcIlwiLCB3aWR0aCA+IDEwICYmICh3aWR0aCA9IDEwKTsgd2hpdGVzcGFjZS5sZW5ndGggPCB3aWR0aDsgd2hpdGVzcGFjZSArPSBcIiBcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IHN0cmluZ0NsYXNzKSB7XG4gICAgICAgICAgICAgIHdoaXRlc3BhY2UgPSB3aWR0aC5sZW5ndGggPD0gMTAgPyB3aWR0aCA6IHdpZHRoLnNsaWNlKDAsIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gT3BlcmEgPD0gNy41NHUyIGRpc2NhcmRzIHRoZSB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGVtcHR5IHN0cmluZyBrZXlzXG4gICAgICAgICAgLy8gKGBcIlwiYCkgb25seSBpZiB0aGV5IGFyZSB1c2VkIGRpcmVjdGx5IHdpdGhpbiBhbiBvYmplY3QgbWVtYmVyIGxpc3RcbiAgICAgICAgICAvLyAoZS5nLiwgYCEoXCJcIiBpbiB7IFwiXCI6IDF9KWApLlxuICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoXCJcIiwgKHZhbHVlID0ge30sIHZhbHVlW1wiXCJdID0gc291cmNlLCB2YWx1ZSksIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCB3aGl0ZXNwYWNlLCBcIlwiLCBbXSk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFB1YmxpYzogUGFyc2VzIGEgSlNPTiBzb3VyY2Ugc3RyaW5nLlxuICAgICAgaWYgKCFoYXMoXCJqc29uLXBhcnNlXCIpKSB7XG4gICAgICAgIHZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXG4gICAgICAgIC8vIEludGVybmFsOiBBIG1hcCBvZiBlc2NhcGVkIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgdGhlaXIgdW5lc2NhcGVkXG4gICAgICAgIC8vIGVxdWl2YWxlbnRzLlxuICAgICAgICB2YXIgVW5lc2NhcGVzID0ge1xuICAgICAgICAgIDkyOiBcIlxcXFxcIixcbiAgICAgICAgICAzNDogJ1wiJyxcbiAgICAgICAgICA0NzogXCIvXCIsXG4gICAgICAgICAgOTg6IFwiXFxiXCIsXG4gICAgICAgICAgMTE2OiBcIlxcdFwiLFxuICAgICAgICAgIDExMDogXCJcXG5cIixcbiAgICAgICAgICAxMDI6IFwiXFxmXCIsXG4gICAgICAgICAgMTE0OiBcIlxcclwiXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFN0b3JlcyB0aGUgcGFyc2VyIHN0YXRlLlxuICAgICAgICB2YXIgSW5kZXgsIFNvdXJjZTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmVzZXRzIHRoZSBwYXJzZXIgc3RhdGUgYW5kIHRocm93cyBhIGBTeW50YXhFcnJvcmAuXG4gICAgICAgIHZhciBhYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBJbmRleCA9IFNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgdGhyb3cgU3ludGF4RXJyb3IoKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmV0dXJucyB0aGUgbmV4dCB0b2tlbiwgb3IgYFwiJFwiYCBpZiB0aGUgcGFyc2VyIGhhcyByZWFjaGVkXG4gICAgICAgIC8vIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBzdHJpbmcuIEEgdG9rZW4gbWF5IGJlIGEgc3RyaW5nLCBudW1iZXIsIGBudWxsYFxuICAgICAgICAvLyBsaXRlcmFsLCBvciBCb29sZWFuIGxpdGVyYWwuXG4gICAgICAgIHZhciBsZXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIHNvdXJjZSA9IFNvdXJjZSwgbGVuZ3RoID0gc291cmNlLmxlbmd0aCwgdmFsdWUsIGJlZ2luLCBwb3NpdGlvbiwgaXNTaWduZWQsIGNoYXJDb2RlO1xuICAgICAgICAgIHdoaWxlIChJbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7XG4gICAgICAgICAgICAgIGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHdoaXRlc3BhY2UgdG9rZW5zLCBpbmNsdWRpbmcgdGFicywgY2FycmlhZ2UgcmV0dXJucywgbGluZVxuICAgICAgICAgICAgICAgIC8vIGZlZWRzLCBhbmQgc3BhY2UgY2hhcmFjdGVycy5cbiAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDEyMzogY2FzZSAxMjU6IGNhc2UgOTE6IGNhc2UgOTM6IGNhc2UgNTg6IGNhc2UgNDQ6XG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgYSBwdW5jdHVhdG9yIHRva2VuIChge2AsIGB9YCwgYFtgLCBgXWAsIGA6YCwgb3IgYCxgKSBhdFxuICAgICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuICAgICAgICAgICAgICAgIHZhbHVlID0gY2hhckluZGV4QnVnZ3kgPyBzb3VyY2UuY2hhckF0KEluZGV4KSA6IHNvdXJjZVtJbmRleF07XG4gICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICAgICAgLy8gYFwiYCBkZWxpbWl0cyBhIEpTT04gc3RyaW5nOyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNoYXJhY3RlciBhbmRcbiAgICAgICAgICAgICAgICAvLyBiZWdpbiBwYXJzaW5nIHRoZSBzdHJpbmcuIFN0cmluZyB0b2tlbnMgYXJlIHByZWZpeGVkIHdpdGggdGhlXG4gICAgICAgICAgICAgICAgLy8gc2VudGluZWwgYEBgIGNoYXJhY3RlciB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20gcHVuY3R1YXRvcnMgYW5kXG4gICAgICAgICAgICAgICAgLy8gZW5kLW9mLXN0cmluZyB0b2tlbnMuXG4gICAgICAgICAgICAgICAgZm9yICh2YWx1ZSA9IFwiQFwiLCBJbmRleCsrOyBJbmRleCA8IGxlbmd0aDspIHtcbiAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVW5lc2NhcGVkIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycyAodGhvc2Ugd2l0aCBhIGNvZGUgdW5pdFxuICAgICAgICAgICAgICAgICAgICAvLyBsZXNzIHRoYW4gdGhlIHNwYWNlIGNoYXJhY3RlcikgYXJlIG5vdCBwZXJtaXR0ZWQuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYXJDb2RlID09IDkyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgcmV2ZXJzZSBzb2xpZHVzIChgXFxgKSBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIGFuIGVzY2FwZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbCBjaGFyYWN0ZXIgKGluY2x1ZGluZyBgXCJgLCBgXFxgLCBhbmQgYC9gKSBvciBVbmljb2RlXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaGFyQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTI6IGNhc2UgMzQ6IGNhc2UgNDc6IGNhc2UgOTg6IGNhc2UgMTE2OiBjYXNlIDExMDogY2FzZSAxMDI6IGNhc2UgMTE0OlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2aXZlIGVzY2FwZWQgY29udHJvbCBjaGFyYWN0ZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gVW5lc2NhcGVzW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDExNzpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGBcXHVgIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYSBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgdmFsaWRhdGUgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VyLWRpZ2l0IGNvZGUgcG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiA9ICsrSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHBvc2l0aW9uID0gSW5kZXggKyA0OyBJbmRleCA8IHBvc2l0aW9uOyBJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHZhbGlkIHNlcXVlbmNlIGNvbXByaXNlcyBmb3VyIGhleGRpZ2l0cyAoY2FzZS1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5zZW5zaXRpdmUpIHRoYXQgZm9ybSBhIHNpbmdsZSBoZXhhZGVjaW1hbCB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcgfHwgY2hhckNvZGUgPj0gOTcgJiYgY2hhckNvZGUgPD0gMTAyIHx8IGNoYXJDb2RlID49IDY1ICYmIGNoYXJDb2RlIDw9IDcwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludmFsaWQgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2aXZlIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGZyb21DaGFyQ29kZShcIjB4XCIgKyBzb3VyY2Uuc2xpY2UoYmVnaW4sIEluZGV4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UuXG4gICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gMzQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBBbiB1bmVzY2FwZWQgZG91YmxlLXF1b3RlIGNoYXJhY3RlciBtYXJrcyB0aGUgZW5kIG9mIHRoZVxuICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cmluZy5cbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW4gPSBJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgLy8gT3B0aW1pemUgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBhIHN0cmluZyBpcyB2YWxpZC5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJDb2RlID49IDMyICYmIGNoYXJDb2RlICE9IDkyICYmIGNoYXJDb2RlICE9IDM0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIHN0cmluZyBhcy1pcy5cbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gc291cmNlLnNsaWNlKGJlZ2luLCBJbmRleCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChJbmRleCkgPT0gMzQpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgY2hhcmFjdGVyIGFuZCByZXR1cm4gdGhlIHJldml2ZWQgc3RyaW5nLlxuICAgICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVW50ZXJtaW5hdGVkIHN0cmluZy5cbiAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIC8vIFBhcnNlIG51bWJlcnMgYW5kIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIGJlZ2luID0gSW5kZXg7XG4gICAgICAgICAgICAgICAgLy8gQWR2YW5jZSBwYXN0IHRoZSBuZWdhdGl2ZSBzaWduLCBpZiBvbmUgaXMgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSA0NSkge1xuICAgICAgICAgICAgICAgICAgaXNTaWduZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgYW4gaW50ZWdlciBvciBmbG9hdGluZy1wb2ludCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpIHtcbiAgICAgICAgICAgICAgICAgIC8vIExlYWRpbmcgemVyb2VzIGFyZSBpbnRlcnByZXRlZCBhcyBvY3RhbCBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSA0OCAmJiAoKGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXggKyAxKSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsIG9jdGFsIGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpc1NpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGhlIGludGVnZXIgY29tcG9uZW50LlxuICAgICAgICAgICAgICAgICAgZm9yICg7IEluZGV4IDwgbGVuZ3RoICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCkpLCBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nyk7IEluZGV4KyspO1xuICAgICAgICAgICAgICAgICAgLy8gRmxvYXRzIGNhbm5vdCBjb250YWluIGEgbGVhZGluZyBkZWNpbWFsIHBvaW50OyBob3dldmVyLCB0aGlzXG4gICAgICAgICAgICAgICAgICAvLyBjYXNlIGlzIGFscmVhZHkgYWNjb3VudGVkIGZvciBieSB0aGUgcGFyc2VyLlxuICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KSA9PSA0Nikge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9ICsrSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIHRoZSBkZWNpbWFsIGNvbXBvbmVudC5cbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IHBvc2l0aW9uIDwgbGVuZ3RoICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChwb3NpdGlvbikpLCBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nyk7IHBvc2l0aW9uKyspO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsIHRyYWlsaW5nIGRlY2ltYWwuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBJbmRleCA9IHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgZXhwb25lbnRzLiBUaGUgYGVgIGRlbm90aW5nIHRoZSBleHBvbmVudCBpc1xuICAgICAgICAgICAgICAgICAgLy8gY2FzZS1pbnNlbnNpdGl2ZS5cbiAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDEwMSB8fCBjaGFyQ29kZSA9PSA2OSkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIHBhc3QgdGhlIHNpZ24gZm9sbG93aW5nIHRoZSBleHBvbmVudCwgaWYgb25lIGlzXG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDQzIHx8IGNoYXJDb2RlID09IDQ1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBQYXJzZSB0aGUgZXhwb25lbnRpYWwgY29tcG9uZW50LlxuICAgICAgICAgICAgICAgICAgICBmb3IgKHBvc2l0aW9uID0gSW5kZXg7IHBvc2l0aW9uIDwgbGVuZ3RoICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChwb3NpdGlvbikpLCBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nyk7IHBvc2l0aW9uKyspO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsIGVtcHR5IGV4cG9uZW50LlxuICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgSW5kZXggPSBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIENvZXJjZSB0aGUgcGFyc2VkIHZhbHVlIHRvIGEgSmF2YVNjcmlwdCBudW1iZXIuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gK3NvdXJjZS5zbGljZShiZWdpbiwgSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBIG5lZ2F0aXZlIHNpZ24gbWF5IG9ubHkgcHJlY2VkZSBudW1iZXJzLlxuICAgICAgICAgICAgICAgIGlmIChpc1NpZ25lZCkge1xuICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYHRydWVgLCBgZmFsc2VgLCBhbmQgYG51bGxgIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uuc2xpY2UoSW5kZXgsIEluZGV4ICsgNCkgPT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgIEluZGV4ICs9IDQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZS5zbGljZShJbmRleCwgSW5kZXggKyA1KSA9PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgICAgICAgIEluZGV4ICs9IDU7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2Uuc2xpY2UoSW5kZXgsIEluZGV4ICsgNCkgPT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgICAgIEluZGV4ICs9IDQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVW5yZWNvZ25pemVkIHRva2VuLlxuICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJldHVybiB0aGUgc2VudGluZWwgYCRgIGNoYXJhY3RlciBpZiB0aGUgcGFyc2VyIGhhcyByZWFjaGVkIHRoZSBlbmRcbiAgICAgICAgICAvLyBvZiB0aGUgc291cmNlIHN0cmluZy5cbiAgICAgICAgICByZXR1cm4gXCIkXCI7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFBhcnNlcyBhIEpTT04gYHZhbHVlYCB0b2tlbi5cbiAgICAgICAgdmFyIGdldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHZhciByZXN1bHRzLCBoYXNNZW1iZXJzO1xuICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIiRcIikge1xuICAgICAgICAgICAgLy8gVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQuXG4gICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGlmICgoY2hhckluZGV4QnVnZ3kgPyB2YWx1ZS5jaGFyQXQoMCkgOiB2YWx1ZVswXSkgPT0gXCJAXCIpIHtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzZW50aW5lbCBgQGAgY2hhcmFjdGVyLlxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuc2xpY2UoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBQYXJzZSBvYmplY3QgYW5kIGFycmF5IGxpdGVyYWxzLlxuICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiW1wiKSB7XG4gICAgICAgICAgICAgIC8vIFBhcnNlcyBhIEpTT04gYXJyYXksIHJldHVybmluZyBhIG5ldyBKYXZhU2NyaXB0IGFycmF5LlxuICAgICAgICAgICAgICByZXN1bHRzID0gW107XG4gICAgICAgICAgICAgIGZvciAoOzsgaGFzTWVtYmVycyB8fCAoaGFzTWVtYmVycyA9IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAvLyBBIGNsb3Npbmcgc3F1YXJlIGJyYWNrZXQgbWFya3MgdGhlIGVuZCBvZiB0aGUgYXJyYXkgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJdXCIpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYXJyYXkgbGl0ZXJhbCBjb250YWlucyBlbGVtZW50cywgdGhlIGN1cnJlbnQgdG9rZW5cbiAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUgYSBjb21tYSBzZXBhcmF0aW5nIHRoZSBwcmV2aW91cyBlbGVtZW50IGZyb20gdGhlXG4gICAgICAgICAgICAgICAgLy8gbmV4dC5cbiAgICAgICAgICAgICAgICBpZiAoaGFzTWVtYmVycykge1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiLFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIl1cIikge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdHJhaWxpbmcgYCxgIGluIGFycmF5IGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBgLGAgbXVzdCBzZXBhcmF0ZSBlYWNoIGFycmF5IGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEVsaXNpb25zIGFuZCBsZWFkaW5nIGNvbW1hcyBhcmUgbm90IHBlcm1pdHRlZC5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChnZXQodmFsdWUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gXCJ7XCIpIHtcbiAgICAgICAgICAgICAgLy8gUGFyc2VzIGEgSlNPTiBvYmplY3QsIHJldHVybmluZyBhIG5ldyBKYXZhU2NyaXB0IG9iamVjdC5cbiAgICAgICAgICAgICAgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICBmb3IgKDs7IGhhc01lbWJlcnMgfHwgKGhhc01lbWJlcnMgPSB0cnVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgLy8gQSBjbG9zaW5nIGN1cmx5IGJyYWNlIG1hcmtzIHRoZSBlbmQgb2YgdGhlIG9iamVjdCBsaXRlcmFsLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIn1cIikge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgbGl0ZXJhbCBjb250YWlucyBtZW1iZXJzLCB0aGUgY3VycmVudCB0b2tlblxuICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBhIGNvbW1hIHNlcGFyYXRvci5cbiAgICAgICAgICAgICAgICBpZiAoaGFzTWVtYmVycykge1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiLFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIn1cIikge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdHJhaWxpbmcgYCxgIGluIG9iamVjdCBsaXRlcmFsLlxuICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgYCxgIG11c3Qgc2VwYXJhdGUgZWFjaCBvYmplY3QgbWVtYmVyLlxuICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBMZWFkaW5nIGNvbW1hcyBhcmUgbm90IHBlcm1pdHRlZCwgb2JqZWN0IHByb3BlcnR5IG5hbWVzIG11c3QgYmVcbiAgICAgICAgICAgICAgICAvLyBkb3VibGUtcXVvdGVkIHN0cmluZ3MsIGFuZCBhIGA6YCBtdXN0IHNlcGFyYXRlIGVhY2ggcHJvcGVydHlcbiAgICAgICAgICAgICAgICAvLyBuYW1lIGFuZCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIgfHwgdHlwZW9mIHZhbHVlICE9IFwic3RyaW5nXCIgfHwgKGNoYXJJbmRleEJ1Z2d5ID8gdmFsdWUuY2hhckF0KDApIDogdmFsdWVbMF0pICE9IFwiQFwiIHx8IGxleCgpICE9IFwiOlwiKSB7XG4gICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW3ZhbHVlLnNsaWNlKDEpXSA9IGdldChsZXgoKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBVbmV4cGVjdGVkIHRva2VuIGVuY291bnRlcmVkLlxuICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBVcGRhdGVzIGEgdHJhdmVyc2VkIG9iamVjdCBtZW1iZXIuXG4gICAgICAgIHZhciB1cGRhdGUgPSBmdW5jdGlvbiAoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgZWxlbWVudCA9IHdhbGsoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spO1xuICAgICAgICAgIGlmIChlbGVtZW50ID09PSB1bmRlZikge1xuICAgICAgICAgICAgZGVsZXRlIHNvdXJjZVtwcm9wZXJ0eV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNvdXJjZVtwcm9wZXJ0eV0gPSBlbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmVjdXJzaXZlbHkgdHJhdmVyc2VzIGEgcGFyc2VkIEpTT04gb2JqZWN0LCBpbnZva2luZyB0aGVcbiAgICAgICAgLy8gYGNhbGxiYWNrYCBmdW5jdGlvbiBmb3IgZWFjaCB2YWx1ZS4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGVcbiAgICAgICAgLy8gYFdhbGsoaG9sZGVyLCBuYW1lKWAgb3BlcmF0aW9uIGRlZmluZWQgaW4gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMi5cbiAgICAgICAgdmFyIHdhbGsgPSBmdW5jdGlvbiAoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBzb3VyY2VbcHJvcGVydHldLCBsZW5ndGg7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAvLyBgZm9yRWFjaGAgY2FuJ3QgYmUgdXNlZCB0byB0cmF2ZXJzZSBhbiBhcnJheSBpbiBPcGVyYSA8PSA4LjU0XG4gICAgICAgICAgICAvLyBiZWNhdXNlIGl0cyBgT2JqZWN0I2hhc093blByb3BlcnR5YCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGBmYWxzZWBcbiAgICAgICAgICAgIC8vIGZvciBhcnJheSBpbmRpY2VzIChlLmcuLCBgIVsxLCAyLCAzXS5oYXNPd25Qcm9wZXJ0eShcIjBcIilgKS5cbiAgICAgICAgICAgIGlmIChnZXRDbGFzcy5jYWxsKHZhbHVlKSA9PSBhcnJheUNsYXNzKSB7XG4gICAgICAgICAgICAgIGZvciAobGVuZ3RoID0gdmFsdWUubGVuZ3RoOyBsZW5ndGgtLTspIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUodmFsdWUsIGxlbmd0aCwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUodmFsdWUsIHByb3BlcnR5LCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChzb3VyY2UsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUHVibGljOiBgSlNPTi5wYXJzZWAuIFNlZSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4yLlxuICAgICAgICBleHBvcnRzLnBhcnNlID0gZnVuY3Rpb24gKHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgcmVzdWx0LCB2YWx1ZTtcbiAgICAgICAgICBJbmRleCA9IDA7XG4gICAgICAgICAgU291cmNlID0gXCJcIiArIHNvdXJjZTtcbiAgICAgICAgICByZXN1bHQgPSBnZXQobGV4KCkpO1xuICAgICAgICAgIC8vIElmIGEgSlNPTiBzdHJpbmcgY29udGFpbnMgbXVsdGlwbGUgdG9rZW5zLCBpdCBpcyBpbnZhbGlkLlxuICAgICAgICAgIGlmIChsZXgoKSAhPSBcIiRcIikge1xuICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmVzZXQgdGhlIHBhcnNlciBzdGF0ZS5cbiAgICAgICAgICBJbmRleCA9IFNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrICYmIGdldENsYXNzLmNhbGwoY2FsbGJhY2spID09IGZ1bmN0aW9uQ2xhc3MgPyB3YWxrKCh2YWx1ZSA9IHt9LCB2YWx1ZVtcIlwiXSA9IHJlc3VsdCwgdmFsdWUpLCBcIlwiLCBjYWxsYmFjaykgOiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0c1tcInJ1bkluQ29udGV4dFwiXSA9IHJ1bkluQ29udGV4dDtcbiAgICByZXR1cm4gZXhwb3J0cztcbiAgfVxuXG4gIGlmIChmcmVlRXhwb3J0cyAmJiAhaXNMb2FkZXIpIHtcbiAgICAvLyBFeHBvcnQgZm9yIENvbW1vbkpTIGVudmlyb25tZW50cy5cbiAgICBydW5JbkNvbnRleHQocm9vdCwgZnJlZUV4cG9ydHMpO1xuICB9IGVsc2Uge1xuICAgIC8vIEV4cG9ydCBmb3Igd2ViIGJyb3dzZXJzIGFuZCBKYXZhU2NyaXB0IGVuZ2luZXMuXG4gICAgdmFyIG5hdGl2ZUpTT04gPSByb290LkpTT04sXG4gICAgICAgIHByZXZpb3VzSlNPTiA9IHJvb3RbXCJKU09OM1wiXSxcbiAgICAgICAgaXNSZXN0b3JlZCA9IGZhbHNlO1xuXG4gICAgdmFyIEpTT04zID0gcnVuSW5Db250ZXh0KHJvb3QsIChyb290W1wiSlNPTjNcIl0gPSB7XG4gICAgICAvLyBQdWJsaWM6IFJlc3RvcmVzIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgZ2xvYmFsIGBKU09OYCBvYmplY3QgYW5kXG4gICAgICAvLyByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBgSlNPTjNgIG9iamVjdC5cbiAgICAgIFwibm9Db25mbGljdFwiOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghaXNSZXN0b3JlZCkge1xuICAgICAgICAgIGlzUmVzdG9yZWQgPSB0cnVlO1xuICAgICAgICAgIHJvb3QuSlNPTiA9IG5hdGl2ZUpTT047XG4gICAgICAgICAgcm9vdFtcIkpTT04zXCJdID0gcHJldmlvdXNKU09OO1xuICAgICAgICAgIG5hdGl2ZUpTT04gPSBwcmV2aW91c0pTT04gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OMztcbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgICByb290LkpTT04gPSB7XG4gICAgICBcInBhcnNlXCI6IEpTT04zLnBhcnNlLFxuICAgICAgXCJzdHJpbmdpZnlcIjogSlNPTjMuc3RyaW5naWZ5XG4gICAgfTtcbiAgfVxuXG4gIC8vIEV4cG9ydCBmb3IgYXN5bmNocm9ub3VzIG1vZHVsZSBsb2FkZXJzLlxuICBpZiAoaXNMb2FkZXIpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEpTT04zO1xuICAgIH0pO1xuICB9XG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggaXMgYSBjb21iaW5hdGlvbiBvZiBhbiBhcnJheSBhbmQgYSBzZXQuIEFkZGluZyBhIG5ld1xuICogbWVtYmVyIGlzIE8oMSksIHRlc3RpbmcgZm9yIG1lbWJlcnNoaXAgaXMgTygxKSwgYW5kIGZpbmRpbmcgdGhlIGluZGV4IG9mIGFuXG4gKiBlbGVtZW50IGlzIE8oMSkuIFJlbW92aW5nIGVsZW1lbnRzIGZyb20gdGhlIHNldCBpcyBub3Qgc3VwcG9ydGVkLiBPbmx5XG4gKiBzdHJpbmdzIGFyZSBzdXBwb3J0ZWQgZm9yIG1lbWJlcnNoaXAuXG4gKi9cbmZ1bmN0aW9uIEFycmF5U2V0KCkge1xuICB0aGlzLl9hcnJheSA9IFtdO1xuICB0aGlzLl9zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xufVxuXG4vKipcbiAqIFN0YXRpYyBtZXRob2QgZm9yIGNyZWF0aW5nIEFycmF5U2V0IGluc3RhbmNlcyBmcm9tIGFuIGV4aXN0aW5nIGFycmF5LlxuICovXG5BcnJheVNldC5mcm9tQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF9mcm9tQXJyYXkoYUFycmF5LCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzZXQgPSBuZXcgQXJyYXlTZXQoKTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFBcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHNldC5hZGQoYUFycmF5W2ldLCBhQWxsb3dEdXBsaWNhdGVzKTtcbiAgfVxuICByZXR1cm4gc2V0O1xufTtcblxuLyoqXG4gKiBSZXR1cm4gaG93IG1hbnkgdW5pcXVlIGl0ZW1zIGFyZSBpbiB0aGlzIEFycmF5U2V0LiBJZiBkdXBsaWNhdGVzIGhhdmUgYmVlblxuICogYWRkZWQsIHRoYW4gdGhvc2UgZG8gbm90IGNvdW50IHRvd2FyZHMgdGhlIHNpemUuXG4gKlxuICogQHJldHVybnMgTnVtYmVyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gQXJyYXlTZXRfc2l6ZSgpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3NldCkubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGlzIHNldC5cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgdmFyIGlzRHVwbGljYXRlID0gaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgdmFyIGlkeCA9IHRoaXMuX2FycmF5Lmxlbmd0aDtcbiAgaWYgKCFpc0R1cGxpY2F0ZSB8fCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgfVxuICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgdGhpcy5fc2V0W3NTdHJdID0gaWR4O1xuICB9XG59O1xuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBzdHJpbmcgYSBtZW1iZXIgb2YgdGhpcyBzZXQ/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBBcnJheVNldF9oYXMoYVN0cikge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHJldHVybiBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xufTtcblxuLyoqXG4gKiBXaGF0IGlzIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gc3RyaW5nIGluIHRoZSBhcnJheT9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBBcnJheVNldF9pbmRleE9mKGFTdHIpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICBpZiAoaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKSkge1xuICAgIHJldHVybiB0aGlzLl9zZXRbc1N0cl07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU3RyICsgJ1wiIGlzIG5vdCBpbiB0aGUgc2V0LicpO1xufTtcblxuLyoqXG4gKiBXaGF0IGlzIHRoZSBlbGVtZW50IGF0IHRoZSBnaXZlbiBpbmRleD9cbiAqXG4gKiBAcGFyYW0gTnVtYmVyIGFJZHhcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gQXJyYXlTZXRfYXQoYUlkeCkge1xuICBpZiAoYUlkeCA+PSAwICYmIGFJZHggPCB0aGlzLl9hcnJheS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJyYXlbYUlkeF07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBlbGVtZW50IGluZGV4ZWQgYnkgJyArIGFJZHgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhcnJheSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNldCAod2hpY2ggaGFzIHRoZSBwcm9wZXIgaW5kaWNlc1xuICogaW5kaWNhdGVkIGJ5IGluZGV4T2YpLiBOb3RlIHRoYXQgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIGludGVybmFsIGFycmF5IHVzZWRcbiAqIGZvciBzdG9yaW5nIHRoZSBtZW1iZXJzIHNvIHRoYXQgbm8gb25lIGNhbiBtZXNzIHdpdGggaW50ZXJuYWwgc3RhdGUuXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfdG9BcnJheSgpIHtcbiAgcmV0dXJuIHRoaXMuX2FycmF5LnNsaWNlKCk7XG59O1xuXG5leHBvcnRzLkFycmF5U2V0ID0gQXJyYXlTZXQ7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICpcbiAqIEJhc2VkIG9uIHRoZSBCYXNlIDY0IFZMUSBpbXBsZW1lbnRhdGlvbiBpbiBDbG9zdXJlIENvbXBpbGVyOlxuICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jbG9zdXJlLWNvbXBpbGVyL3NvdXJjZS9icm93c2UvdHJ1bmsvc3JjL2NvbS9nb29nbGUvZGVidWdnaW5nL3NvdXJjZW1hcC9CYXNlNjRWTFEuamF2YVxuICpcbiAqIENvcHlyaWdodCAyMDExIFRoZSBDbG9zdXJlIENvbXBpbGVyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbiAqIG1ldDpcbiAqXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxuICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcbiAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZFxuICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICogICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkXG4gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuICogXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCcuL2Jhc2U2NCcpO1xuXG4vLyBBIHNpbmdsZSBiYXNlIDY0IGRpZ2l0IGNhbiBjb250YWluIDYgYml0cyBvZiBkYXRhLiBGb3IgdGhlIGJhc2UgNjQgdmFyaWFibGVcbi8vIGxlbmd0aCBxdWFudGl0aWVzIHdlIHVzZSBpbiB0aGUgc291cmNlIG1hcCBzcGVjLCB0aGUgZmlyc3QgYml0IGlzIHRoZSBzaWduLFxuLy8gdGhlIG5leHQgZm91ciBiaXRzIGFyZSB0aGUgYWN0dWFsIHZhbHVlLCBhbmQgdGhlIDZ0aCBiaXQgaXMgdGhlXG4vLyBjb250aW51YXRpb24gYml0LiBUaGUgY29udGludWF0aW9uIGJpdCB0ZWxscyB1cyB3aGV0aGVyIHRoZXJlIGFyZSBtb3JlXG4vLyBkaWdpdHMgaW4gdGhpcyB2YWx1ZSBmb2xsb3dpbmcgdGhpcyBkaWdpdC5cbi8vXG4vLyAgIENvbnRpbnVhdGlvblxuLy8gICB8ICAgIFNpZ25cbi8vICAgfCAgICB8XG4vLyAgIFYgICAgVlxuLy8gICAxMDEwMTFcblxudmFyIFZMUV9CQVNFX1NISUZUID0gNTtcblxuLy8gYmluYXJ5OiAxMDAwMDBcbnZhciBWTFFfQkFTRSA9IDEgPDwgVkxRX0JBU0VfU0hJRlQ7XG5cbi8vIGJpbmFyeTogMDExMTExXG52YXIgVkxRX0JBU0VfTUFTSyA9IFZMUV9CQVNFIC0gMTtcblxuLy8gYmluYXJ5OiAxMDAwMDBcbnZhciBWTFFfQ09OVElOVUFUSU9OX0JJVCA9IFZMUV9CQVNFO1xuXG4vKipcbiAqIENvbnZlcnRzIGZyb20gYSB0d28tY29tcGxlbWVudCB2YWx1ZSB0byBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gKiAgIDEgYmVjb21lcyAyICgxMCBiaW5hcnkpLCAtMSBiZWNvbWVzIDMgKDExIGJpbmFyeSlcbiAqICAgMiBiZWNvbWVzIDQgKDEwMCBiaW5hcnkpLCAtMiBiZWNvbWVzIDUgKDEwMSBiaW5hcnkpXG4gKi9cbmZ1bmN0aW9uIHRvVkxRU2lnbmVkKGFWYWx1ZSkge1xuICByZXR1cm4gYVZhbHVlIDwgMFxuICAgID8gKCgtYVZhbHVlKSA8PCAxKSArIDFcbiAgICA6IChhVmFsdWUgPDwgMSkgKyAwO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRvIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgZnJvbSBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gKiAgIDIgKDEwIGJpbmFyeSkgYmVjb21lcyAxLCAzICgxMSBiaW5hcnkpIGJlY29tZXMgLTFcbiAqICAgNCAoMTAwIGJpbmFyeSkgYmVjb21lcyAyLCA1ICgxMDEgYmluYXJ5KSBiZWNvbWVzIC0yXG4gKi9cbmZ1bmN0aW9uIGZyb21WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHZhciBpc05lZ2F0aXZlID0gKGFWYWx1ZSAmIDEpID09PSAxO1xuICB2YXIgc2hpZnRlZCA9IGFWYWx1ZSA+PiAxO1xuICByZXR1cm4gaXNOZWdhdGl2ZVxuICAgID8gLXNoaWZ0ZWRcbiAgICA6IHNoaWZ0ZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmFzZSA2NCBWTFEgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZW5jb2RlKGFWYWx1ZSkge1xuICB2YXIgZW5jb2RlZCA9IFwiXCI7XG4gIHZhciBkaWdpdDtcblxuICB2YXIgdmxxID0gdG9WTFFTaWduZWQoYVZhbHVlKTtcblxuICBkbyB7XG4gICAgZGlnaXQgPSB2bHEgJiBWTFFfQkFTRV9NQVNLO1xuICAgIHZscSA+Pj49IFZMUV9CQVNFX1NISUZUO1xuICAgIGlmICh2bHEgPiAwKSB7XG4gICAgICAvLyBUaGVyZSBhcmUgc3RpbGwgbW9yZSBkaWdpdHMgaW4gdGhpcyB2YWx1ZSwgc28gd2UgbXVzdCBtYWtlIHN1cmUgdGhlXG4gICAgICAvLyBjb250aW51YXRpb24gYml0IGlzIG1hcmtlZC5cbiAgICAgIGRpZ2l0IHw9IFZMUV9DT05USU5VQVRJT05fQklUO1xuICAgIH1cbiAgICBlbmNvZGVkICs9IGJhc2U2NC5lbmNvZGUoZGlnaXQpO1xuICB9IHdoaWxlICh2bHEgPiAwKTtcblxuICByZXR1cm4gZW5jb2RlZDtcbn07XG5cbi8qKlxuICogRGVjb2RlcyB0aGUgbmV4dCBiYXNlIDY0IFZMUSB2YWx1ZSBmcm9tIHRoZSBnaXZlbiBzdHJpbmcgYW5kIHJldHVybnMgdGhlXG4gKiB2YWx1ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyB2aWEgdGhlIG91dCBwYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gYmFzZTY0VkxRX2RlY29kZShhU3RyLCBhSW5kZXgsIGFPdXRQYXJhbSkge1xuICB2YXIgc3RyTGVuID0gYVN0ci5sZW5ndGg7XG4gIHZhciByZXN1bHQgPSAwO1xuICB2YXIgc2hpZnQgPSAwO1xuICB2YXIgY29udGludWF0aW9uLCBkaWdpdDtcblxuICBkbyB7XG4gICAgaWYgKGFJbmRleCA+PSBzdHJMZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG1vcmUgZGlnaXRzIGluIGJhc2UgNjQgVkxRIHZhbHVlLlwiKTtcbiAgICB9XG5cbiAgICBkaWdpdCA9IGJhc2U2NC5kZWNvZGUoYVN0ci5jaGFyQ29kZUF0KGFJbmRleCsrKSk7XG4gICAgaWYgKGRpZ2l0ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiYXNlNjQgZGlnaXQ6IFwiICsgYVN0ci5jaGFyQXQoYUluZGV4IC0gMSkpO1xuICAgIH1cblxuICAgIGNvbnRpbnVhdGlvbiA9ICEhKGRpZ2l0ICYgVkxRX0NPTlRJTlVBVElPTl9CSVQpO1xuICAgIGRpZ2l0ICY9IFZMUV9CQVNFX01BU0s7XG4gICAgcmVzdWx0ID0gcmVzdWx0ICsgKGRpZ2l0IDw8IHNoaWZ0KTtcbiAgICBzaGlmdCArPSBWTFFfQkFTRV9TSElGVDtcbiAgfSB3aGlsZSAoY29udGludWF0aW9uKTtcblxuICBhT3V0UGFyYW0udmFsdWUgPSBmcm9tVkxRU2lnbmVkKHJlc3VsdCk7XG4gIGFPdXRQYXJhbS5yZXN0ID0gYUluZGV4O1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIGludFRvQ2hhck1hcCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJy5zcGxpdCgnJyk7XG5cbi8qKlxuICogRW5jb2RlIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIG9mIDAgdG8gNjMgdG8gYSBzaW5nbGUgYmFzZSA2NCBkaWdpdC5cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiAobnVtYmVyKSB7XG4gIGlmICgwIDw9IG51bWJlciAmJiBudW1iZXIgPCBpbnRUb0NoYXJNYXAubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGludFRvQ2hhck1hcFtudW1iZXJdO1xuICB9XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGJldHdlZW4gMCBhbmQgNjM6IFwiICsgbnVtYmVyKTtcbn07XG5cbi8qKlxuICogRGVjb2RlIGEgc2luZ2xlIGJhc2UgNjQgY2hhcmFjdGVyIGNvZGUgZGlnaXQgdG8gYW4gaW50ZWdlci4gUmV0dXJucyAtMSBvblxuICogZmFpbHVyZS5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiAoY2hhckNvZGUpIHtcbiAgdmFyIGJpZ0EgPSA2NTsgICAgIC8vICdBJ1xuICB2YXIgYmlnWiA9IDkwOyAgICAgLy8gJ1onXG5cbiAgdmFyIGxpdHRsZUEgPSA5NzsgIC8vICdhJ1xuICB2YXIgbGl0dGxlWiA9IDEyMjsgLy8gJ3onXG5cbiAgdmFyIHplcm8gPSA0ODsgICAgIC8vICcwJ1xuICB2YXIgbmluZSA9IDU3OyAgICAgLy8gJzknXG5cbiAgdmFyIHBsdXMgPSA0MzsgICAgIC8vICcrJ1xuICB2YXIgc2xhc2ggPSA0NzsgICAgLy8gJy8nXG5cbiAgdmFyIGxpdHRsZU9mZnNldCA9IDI2O1xuICB2YXIgbnVtYmVyT2Zmc2V0ID0gNTI7XG5cbiAgLy8gMCAtIDI1OiBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlxuICBpZiAoYmlnQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBiaWdaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGJpZ0EpO1xuICB9XG5cbiAgLy8gMjYgLSA1MTogYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcbiAgaWYgKGxpdHRsZUEgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gbGl0dGxlWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBsaXR0bGVBICsgbGl0dGxlT2Zmc2V0KTtcbiAgfVxuXG4gIC8vIDUyIC0gNjE6IDAxMjM0NTY3ODlcbiAgaWYgKHplcm8gPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gbmluZSkge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSB6ZXJvICsgbnVtYmVyT2Zmc2V0KTtcbiAgfVxuXG4gIC8vIDYyOiArXG4gIGlmIChjaGFyQ29kZSA9PSBwbHVzKSB7XG4gICAgcmV0dXJuIDYyO1xuICB9XG5cbiAgLy8gNjM6IC9cbiAgaWYgKGNoYXJDb2RlID09IHNsYXNoKSB7XG4gICAgcmV0dXJuIDYzO1xuICB9XG5cbiAgLy8gSW52YWxpZCBiYXNlNjQgZGlnaXQuXG4gIHJldHVybiAtMTtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbmV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogUmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2guXG4gKlxuICogQHBhcmFtIGFMb3cgSW5kaWNlcyBoZXJlIGFuZCBsb3dlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFIaWdoIEluZGljZXMgaGVyZSBhbmQgaGlnaGVyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBub24tZW1wdHkgYXJyYXkgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgRnVuY3Rpb24gd2hpY2ggdGFrZXMgdHdvIGVsZW1lbnRzIGFuZCByZXR1cm5zIC0xLCAwLCBvciAxLlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiByZWN1cnNpdmVTZWFyY2goYUxvdywgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gIC8vXG4gIC8vICAgMS4gV2UgZmluZCB0aGUgZXhhY3QgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gIC8vXG4gIC8vICAgMi4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBidXQgd2UgY2FuIHJldHVybiB0aGUgaW5kZXggb2ZcbiAgLy8gICAgICB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQuXG4gIC8vXG4gIC8vICAgMy4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBhbmQgdGhlcmUgaXMgbm8gbmV4dC1jbG9zZXN0XG4gIC8vICAgICAgZWxlbWVudCB0aGFuIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IsIHNvIHdlIHJldHVybiAtMS5cbiAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gIHZhciBjbXAgPSBhQ29tcGFyZShhTmVlZGxlLCBhSGF5c3RhY2tbbWlkXSwgdHJ1ZSk7XG4gIGlmIChjbXAgPT09IDApIHtcbiAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgcmV0dXJuIG1pZDtcbiAgfVxuICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBncmVhdGVyIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKGFIaWdoIC0gbWlkID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKG1pZCwgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gYUhpZ2ggPCBhSGF5c3RhY2subGVuZ3RoID8gYUhpZ2ggOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBsZXNzIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKG1pZCAtIGFMb3cgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgbG93ZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFMb3cgPCAwID8gLTEgOiBhTG93O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCB3aGljaCB3aWxsIGFsd2F5cyB0cnkgYW5kIHJldHVyblxuICogdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGVsZW1lbnQgaWYgdGhlcmUgaXMgbm8gZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2VcbiAqIG1hcHBpbmdzIGJldHdlZW4gb3JpZ2luYWwgYW5kIGdlbmVyYXRlZCBsaW5lL2NvbCBwYWlycyBhcmUgc2luZ2xlIHBvaW50cyxcbiAqIGFuZCB0aGVyZSBpcyBhbiBpbXBsaWNpdCByZWdpb24gYmV0d2VlbiBlYWNoIG9mIHRoZW0sIHNvIGEgbWlzcyBqdXN0IG1lYW5zXG4gKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQgb2YgYSByZWdpb24uXG4gKlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgeW91IGFyZSBsb29raW5nIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgbmVlZGxlIGFuZCBhbiBlbGVtZW50IGluIHRoZVxuICogICAgIGFycmF5IGFuZCByZXR1cm5zIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuZWVkbGUgaXMgbGVzc1xuICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqL1xuZXhwb3J0cy5zZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgaWYgKGFIYXlzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaW5kZXggPSByZWN1cnNpdmVTZWFyY2goLTEsIGFIYXlzdGFjay5sZW5ndGgsIGFOZWVkbGUsIGFIYXlzdGFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21wYXJlLCBhQmlhcyB8fCBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIFdlIGhhdmUgZm91bmQgZWl0aGVyIHRoZSBleGFjdCBlbGVtZW50LCBvciB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQgdGhhblxuICAvLyB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLiBIb3dldmVyLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBzdWNoXG4gIC8vIGVsZW1lbnQuIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGVzZS5cbiAgd2hpbGUgKGluZGV4IC0gMSA+PSAwKSB7XG4gICAgaWYgKGFDb21wYXJlKGFIYXlzdGFja1tpbmRleF0sIGFIYXlzdGFja1tpbmRleCAtIDFdLCB0cnVlKSAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC0taW5kZXg7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG4vLyBJdCB0dXJucyBvdXQgdGhhdCBzb21lIChtb3N0PykgSmF2YVNjcmlwdCBlbmdpbmVzIGRvbid0IHNlbGYtaG9zdFxuLy8gYEFycmF5LnByb3RvdHlwZS5zb3J0YC4gVGhpcyBtYWtlcyBzZW5zZSBiZWNhdXNlIEMrKyB3aWxsIGxpa2VseSByZW1haW5cbi8vIGZhc3RlciB0aGFuIEpTIHdoZW4gZG9pbmcgcmF3IENQVS1pbnRlbnNpdmUgc29ydGluZy4gSG93ZXZlciwgd2hlbiB1c2luZyBhXG4vLyBjdXN0b20gY29tcGFyYXRvciBmdW5jdGlvbiwgY2FsbGluZyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZSBWTSdzIEMrKyBhbmRcbi8vIEpJVCdkIEpTIGlzIHJhdGhlciBzbG93ICphbmQqIGxvc2VzIEpJVCB0eXBlIGluZm9ybWF0aW9uLCByZXN1bHRpbmcgaW5cbi8vIHdvcnNlIGdlbmVyYXRlZCBjb2RlIGZvciB0aGUgY29tcGFyYXRvciBmdW5jdGlvbiB0aGFuIHdvdWxkIGJlIG9wdGltYWwuIEluXG4vLyBmYWN0LCB3aGVuIHNvcnRpbmcgd2l0aCBhIGNvbXBhcmF0b3IsIHRoZXNlIGNvc3RzIG91dHdlaWdoIHRoZSBiZW5lZml0cyBvZlxuLy8gc29ydGluZyBpbiBDKysuIEJ5IHVzaW5nIG91ciBvd24gSlMtaW1wbGVtZW50ZWQgUXVpY2sgU29ydCAoYmVsb3cpLCB3ZSBnZXRcbi8vIGEgfjM1MDBtcyBtZWFuIHNwZWVkLXVwIGluIGBiZW5jaC9iZW5jaC5odG1sYC5cblxuLyoqXG4gKiBTd2FwIHRoZSBlbGVtZW50cyBpbmRleGVkIGJ5IGB4YCBhbmQgYHlgIGluIHRoZSBhcnJheSBgYXJ5YC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBUaGUgYXJyYXkuXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogICAgICAgIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgaXRlbS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgaXRlbS5cbiAqL1xuZnVuY3Rpb24gc3dhcChhcnksIHgsIHkpIHtcbiAgdmFyIHRlbXAgPSBhcnlbeF07XG4gIGFyeVt4XSA9IGFyeVt5XTtcbiAgYXJ5W3ldID0gdGVtcDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgd2l0aGluIHRoZSByYW5nZSBgbG93IC4uIGhpZ2hgIGluY2x1c2l2ZS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbG93XG4gKiAgICAgICAgVGhlIGxvd2VyIGJvdW5kIG9uIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7TnVtYmVyfSBoaWdoXG4gKiAgICAgICAgVGhlIHVwcGVyIGJvdW5kIG9uIHRoZSByYW5nZS5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tSW50SW5SYW5nZShsb3csIGhpZ2gpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQobG93ICsgKE1hdGgucmFuZG9tKCkgKiAoaGlnaCAtIGxvdykpKTtcbn1cblxuLyoqXG4gKiBUaGUgUXVpY2sgU29ydCBhbGdvcml0aG0uXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gKiAgICAgICAgQW4gYXJyYXkgdG8gc29ydC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXBhcmF0b3JcbiAqICAgICAgICBGdW5jdGlvbiB0byB1c2UgdG8gY29tcGFyZSB0d28gaXRlbXMuXG4gKiBAcGFyYW0ge051bWJlcn0gcFxuICogICAgICAgIFN0YXJ0IGluZGV4IG9mIHRoZSBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9IHJcbiAqICAgICAgICBFbmQgaW5kZXggb2YgdGhlIGFycmF5XG4gKi9cbmZ1bmN0aW9uIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcCwgcikge1xuICAvLyBJZiBvdXIgbG93ZXIgYm91bmQgaXMgbGVzcyB0aGFuIG91ciB1cHBlciBib3VuZCwgd2UgKDEpIHBhcnRpdGlvbiB0aGVcbiAgLy8gYXJyYXkgaW50byB0d28gcGllY2VzIGFuZCAoMikgcmVjdXJzZSBvbiBlYWNoIGhhbGYuIElmIGl0IGlzIG5vdCwgdGhpcyBpc1xuICAvLyB0aGUgZW1wdHkgYXJyYXkgYW5kIG91ciBiYXNlIGNhc2UuXG5cbiAgaWYgKHAgPCByKSB7XG4gICAgLy8gKDEpIFBhcnRpdGlvbmluZy5cbiAgICAvL1xuICAgIC8vIFRoZSBwYXJ0aXRpb25pbmcgY2hvb3NlcyBhIHBpdm90IGJldHdlZW4gYHBgIGFuZCBgcmAgYW5kIG1vdmVzIGFsbFxuICAgIC8vIGVsZW1lbnRzIHRoYXQgYXJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcGl2b3QgdG8gdGhlIGJlZm9yZSBpdCwgYW5kXG4gICAgLy8gYWxsIHRoZSBlbGVtZW50cyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gaXQgYWZ0ZXIgaXQuIFRoZSBlZmZlY3QgaXMgdGhhdFxuICAgIC8vIG9uY2UgcGFydGl0aW9uIGlzIGRvbmUsIHRoZSBwaXZvdCBpcyBpbiB0aGUgZXhhY3QgcGxhY2UgaXQgd2lsbCBiZSB3aGVuXG4gICAgLy8gdGhlIGFycmF5IGlzIHB1dCBpbiBzb3J0ZWQgb3JkZXIsIGFuZCBpdCB3aWxsIG5vdCBuZWVkIHRvIGJlIG1vdmVkXG4gICAgLy8gYWdhaW4uIFRoaXMgcnVucyBpbiBPKG4pIHRpbWUuXG5cbiAgICAvLyBBbHdheXMgY2hvb3NlIGEgcmFuZG9tIHBpdm90IHNvIHRoYXQgYW4gaW5wdXQgYXJyYXkgd2hpY2ggaXMgcmV2ZXJzZVxuICAgIC8vIHNvcnRlZCBkb2VzIG5vdCBjYXVzZSBPKG5eMikgcnVubmluZyB0aW1lLlxuICAgIHZhciBwaXZvdEluZGV4ID0gcmFuZG9tSW50SW5SYW5nZShwLCByKTtcbiAgICB2YXIgaSA9IHAgLSAxO1xuXG4gICAgc3dhcChhcnksIHBpdm90SW5kZXgsIHIpO1xuICAgIHZhciBwaXZvdCA9IGFyeVtyXTtcblxuICAgIC8vIEltbWVkaWF0ZWx5IGFmdGVyIGBqYCBpcyBpbmNyZW1lbnRlZCBpbiB0aGlzIGxvb3AsIHRoZSBmb2xsb3dpbmcgaG9sZFxuICAgIC8vIHRydWU6XG4gICAgLy9cbiAgICAvLyAgICogRXZlcnkgZWxlbWVudCBpbiBgYXJ5W3AgLi4gaV1gIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcGl2b3QuXG4gICAgLy9cbiAgICAvLyAgICogRXZlcnkgZWxlbWVudCBpbiBgYXJ5W2krMSAuLiBqLTFdYCBpcyBncmVhdGVyIHRoYW4gdGhlIHBpdm90LlxuICAgIGZvciAodmFyIGogPSBwOyBqIDwgcjsgaisrKSB7XG4gICAgICBpZiAoY29tcGFyYXRvcihhcnlbal0sIHBpdm90KSA8PSAwKSB7XG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgc3dhcChhcnksIGksIGopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3YXAoYXJ5LCBpICsgMSwgaik7XG4gICAgdmFyIHEgPSBpICsgMTtcblxuICAgIC8vICgyKSBSZWN1cnNlIG9uIGVhY2ggaGFsZi5cblxuICAgIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcCwgcSAtIDEpO1xuICAgIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcSArIDEsIHIpO1xuICB9XG59XG5cbi8qKlxuICogU29ydCB0aGUgZ2l2ZW4gYXJyYXkgaW4tcGxhY2Ugd2l0aCB0aGUgZ2l2ZW4gY29tcGFyYXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqL1xuZXhwb3J0cy5xdWlja1NvcnQgPSBmdW5jdGlvbiAoYXJ5LCBjb21wYXJhdG9yKSB7XG4gIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgMCwgYXJ5Lmxlbmd0aCAtIDEpO1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBiaW5hcnlTZWFyY2ggPSByZXF1aXJlKCcuL2JpbmFyeS1zZWFyY2gnKTtcbnZhciBBcnJheVNldCA9IHJlcXVpcmUoJy4vYXJyYXktc2V0JykuQXJyYXlTZXQ7XG52YXIgYmFzZTY0VkxRID0gcmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7XG52YXIgcXVpY2tTb3J0ID0gcmVxdWlyZSgnLi9xdWljay1zb3J0JykucXVpY2tTb3J0O1xuXG5mdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgfVxuXG4gIHJldHVybiBzb3VyY2VNYXAuc2VjdGlvbnMgIT0gbnVsbFxuICAgID8gbmV3IEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXApXG4gICAgOiBuZXcgQmFzaWNTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXApO1xufVxuXG5Tb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID0gZnVuY3Rpb24oYVNvdXJjZU1hcCkge1xuICByZXR1cm4gQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwKGFTb3VyY2VNYXApO1xufVxuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLy8gYF9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZCBgX19vcmlnaW5hbE1hcHBpbmdzYCBhcmUgYXJyYXlzIHRoYXQgaG9sZCB0aGVcbi8vIHBhcnNlZCBtYXBwaW5nIGNvb3JkaW5hdGVzIGZyb20gdGhlIHNvdXJjZSBtYXAncyBcIm1hcHBpbmdzXCIgYXR0cmlidXRlLiBUaGV5XG4vLyBhcmUgbGF6aWx5IGluc3RhbnRpYXRlZCwgYWNjZXNzZWQgdmlhIHRoZSBgX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbi8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgZ2V0dGVycyByZXNwZWN0aXZlbHksIGFuZCB3ZSBvbmx5IHBhcnNlIHRoZSBtYXBwaW5nc1xuLy8gYW5kIGNyZWF0ZSB0aGVzZSBhcnJheXMgb25jZSBxdWVyaWVkIGZvciBhIHNvdXJjZSBsb2NhdGlvbi4gV2UganVtcCB0aHJvdWdoXG4vLyB0aGVzZSBob29wcyBiZWNhdXNlIHRoZXJlIGNhbiBiZSBtYW55IHRob3VzYW5kcyBvZiBtYXBwaW5ncywgYW5kIHBhcnNpbmdcbi8vIHRoZW0gaXMgZXhwZW5zaXZlLCBzbyB3ZSBvbmx5IHdhbnQgdG8gZG8gaXQgaWYgd2UgbXVzdC5cbi8vXG4vLyBFYWNoIG9iamVjdCBpbiB0aGUgYXJyYXlzIGlzIG9mIHRoZSBmb3JtOlxuLy9cbi8vICAgICB7XG4vLyAgICAgICBnZW5lcmF0ZWRMaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBzb3VyY2U6IFRoZSBwYXRoIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSB0aGF0IGdlbmVyYXRlZCB0aGlzXG4vLyAgICAgICAgICAgICAgIGNodW5rIG9mIGNvZGUsXG4vLyAgICAgICBvcmlnaW5hbExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRoYXRcbi8vICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsQ29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRoYXRcbi8vICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgbmFtZTogVGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIHN5bWJvbCB3aGljaCBnZW5lcmF0ZWQgdGhpcyBjaHVuayBvZlxuLy8gICAgICAgICAgICAgY29kZS5cbi8vICAgICB9XG4vL1xuLy8gQWxsIHByb3BlcnRpZXMgZXhjZXB0IGZvciBgZ2VuZXJhdGVkTGluZWAgYW5kIGBnZW5lcmF0ZWRDb2x1bW5gIGNhbiBiZVxuLy8gYG51bGxgLlxuLy9cbi8vIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMuXG4vL1xuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMuXG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX2dlbmVyYXRlZE1hcHBpbmdzID0gbnVsbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfZ2VuZXJhdGVkTWFwcGluZ3MnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gIH1cbn0pO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19vcmlnaW5hbE1hcHBpbmdzID0gbnVsbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfb3JpZ2luYWxNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncykge1xuICAgICAgdGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncywgdGhpcy5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fX29yaWdpbmFsTWFwcGluZ3M7XG4gIH1cbn0pO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGluZGV4KSB7XG4gICAgdmFyIGMgPSBhU3RyLmNoYXJBdChpbmRleCk7XG4gICAgcmV0dXJuIGMgPT09IFwiO1wiIHx8IGMgPT09IFwiLFwiO1xuICB9O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgX3BhcnNlTWFwcGluZ3NcIik7XG4gIH07XG5cblNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUiA9IDE7XG5Tb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUiA9IDI7XG5cblNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgZWFjaCBtYXBwaW5nIGJldHdlZW4gYW4gb3JpZ2luYWwgc291cmNlL2xpbmUvY29sdW1uIGFuZCBhXG4gKiBnZW5lcmF0ZWQgbGluZS9jb2x1bW4gaW4gdGhpcyBzb3VyY2UgbWFwLlxuICpcbiAqIEBwYXJhbSBGdW5jdGlvbiBhQ2FsbGJhY2tcbiAqICAgICAgICBUaGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBlYWNoIG1hcHBpbmcuXG4gKiBAcGFyYW0gT2JqZWN0IGFDb250ZXh0XG4gKiAgICAgICAgT3B0aW9uYWwuIElmIHNwZWNpZmllZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSB0aGUgdmFsdWUgb2YgYHRoaXNgIGV2ZXJ5XG4gKiAgICAgICAgdGltZSB0aGF0IGBhQ2FsbGJhY2tgIGlzIGNhbGxlZC5cbiAqIEBwYXJhbSBhT3JkZXJcbiAqICAgICAgICBFaXRoZXIgYFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUmAgb3JcbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVJgLiBTcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCB0b1xuICogICAgICAgIGl0ZXJhdGUgb3ZlciB0aGUgbWFwcGluZ3Mgc29ydGVkIGJ5IHRoZSBnZW5lcmF0ZWQgZmlsZSdzIGxpbmUvY29sdW1uXG4gKiAgICAgICAgb3JkZXIgb3IgdGhlIG9yaWdpbmFsJ3Mgc291cmNlL2xpbmUvY29sdW1uIG9yZGVyLCByZXNwZWN0aXZlbHkuIERlZmF1bHRzIHRvXG4gKiAgICAgICAgYFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUmAuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5lYWNoTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2VhY2hNYXBwaW5nKGFDYWxsYmFjaywgYUNvbnRleHQsIGFPcmRlcikge1xuICAgIHZhciBjb250ZXh0ID0gYUNvbnRleHQgfHwgbnVsbDtcbiAgICB2YXIgb3JkZXIgPSBhT3JkZXIgfHwgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSO1xuXG4gICAgdmFyIG1hcHBpbmdzO1xuICAgIHN3aXRjaCAob3JkZXIpIHtcbiAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUjpcbiAgICAgIG1hcHBpbmdzID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gb3JkZXIgb2YgaXRlcmF0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlUm9vdCA9IHRoaXMuc291cmNlUm9vdDtcbiAgICBtYXBwaW5ncy5tYXAoZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBtYXBwaW5nLnNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCAmJiBzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uLFxuICAgICAgICBvcmlnaW5hbExpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgbmFtZTogbWFwcGluZy5uYW1lID09PSBudWxsID8gbnVsbCA6IHRoaXMuX25hbWVzLmF0KG1hcHBpbmcubmFtZSlcbiAgICAgIH07XG4gICAgfSwgdGhpcykuZm9yRWFjaChhQ2FsbGJhY2ssIGNvbnRleHQpO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgYWxsIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHByb3ZpZGVkLiBJZiBubyBjb2x1bW4gaXMgcHJvdmlkZWQsIHJldHVybnMgYWxsIG1hcHBpbmdzXG4gKiBjb3JyZXNwb25kaW5nIHRvIGEgZWl0aGVyIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yIG9yIHRoZSBuZXh0XG4gKiBjbG9zZXN0IGxpbmUgdGhhdCBoYXMgYW55IG1hcHBpbmdzLiBPdGhlcndpc2UsIHJldHVybnMgYWxsIG1hcHBpbmdzXG4gKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBsaW5lIGFuZCBlaXRoZXIgdGhlIGNvbHVtbiB3ZSBhcmUgc2VhcmNoaW5nIGZvclxuICogb3IgdGhlIG5leHQgY2xvc2VzdCBjb2x1bW4gdGhhdCBoYXMgYW55IG9mZnNldHMuXG4gKlxuICogVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGNvbHVtbjogT3B0aW9uYWwuIHRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKlxuICogYW5kIGFuIGFycmF5IG9mIG9iamVjdHMgaXMgcmV0dXJuZWQsIGVhY2ggd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yKGFBcmdzKSB7XG4gICAgdmFyIGxpbmUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKTtcblxuICAgIC8vIFdoZW4gdGhlcmUgaXMgbm8gZXhhY3QgbWF0Y2gsIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kTWFwcGluZ1xuICAgIC8vIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IG1hcHBpbmcgbGVzcyB0aGFuIHRoZSBuZWVkbGUuIEJ5XG4gICAgLy8gc2V0dGluZyBuZWVkbGUub3JpZ2luYWxDb2x1bW4gdG8gMCwgd2UgdGh1cyBmaW5kIHRoZSBsYXN0IG1hcHBpbmcgZm9yXG4gICAgLy8gdGhlIGdpdmVuIGxpbmUsIHByb3ZpZGVkIHN1Y2ggYSBtYXBwaW5nIGV4aXN0cy5cbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgc291cmNlOiB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpLFxuICAgICAgb3JpZ2luYWxMaW5lOiBsaW5lLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJywgMClcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBuZWVkbGUuc291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIG5lZWRsZS5zb3VyY2UpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3NvdXJjZXMuaGFzKG5lZWRsZS5zb3VyY2UpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIG5lZWRsZS5zb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2YobmVlZGxlLnNvdXJjZSk7XG5cbiAgICB2YXIgbWFwcGluZ3MgPSBbXTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKG5lZWRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKGFBcmdzLmNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZTtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIGZvdW5kLiBTaW5jZVxuICAgICAgICAvLyBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGZvdW5kLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gb3JpZ2luYWxMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIHdlcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgLy8gU2luY2UgbWFwcGluZ3MgYXJlIHNvcnRlZCwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG1hcHBpbmdzIGZvclxuICAgICAgICAvLyB0aGUgbGluZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgd2hpbGUgKG1hcHBpbmcgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBsaW5lICYmXG4gICAgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID09IG9yaWdpbmFsQ29sdW1uKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5ncztcbiAgfTtcblxuZXhwb3J0cy5Tb3VyY2VNYXBDb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2ggd2UgY2FuXG4gKiBxdWVyeSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGZpbGUgcG9zaXRpb25zIGJ5IGdpdmluZyBpdCBhIGZpbGVcbiAqIHBvc2l0aW9uIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyB0aGUgcmF3IHNvdXJjZSBtYXAgKGVpdGhlciBhcyBhIEpTT04gc3RyaW5nLCBvclxuICogYWxyZWFkeSBwYXJzZWQgdG8gYW4gb2JqZWN0KS4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzb3VyY2UgbWFwcyBoYXZlIHRoZVxuICogZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gc291cmNlczogQW4gYXJyYXkgb2YgVVJMcyB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG5hbWVzOiBBbiBhcnJheSBvZiBpZGVudGlmaWVycyB3aGljaCBjYW4gYmUgcmVmZXJyZW5jZWQgYnkgaW5kaXZpZHVhbCBtYXBwaW5ncy5cbiAqICAgLSBzb3VyY2VSb290OiBPcHRpb25hbC4gVGhlIFVSTCByb290IGZyb20gd2hpY2ggYWxsIHNvdXJjZXMgYXJlIHJlbGF0aXZlLlxuICogICAtIHNvdXJjZXNDb250ZW50OiBPcHRpb25hbC4gQW4gYXJyYXkgb2YgY29udGVudHMgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAqICAgLSBtYXBwaW5nczogQSBzdHJpbmcgb2YgYmFzZTY0IFZMUXMgd2hpY2ggY29udGFpbiB0aGUgYWN0dWFsIG1hcHBpbmdzLlxuICogICAtIGZpbGU6IE9wdGlvbmFsLiBUaGUgZ2VuZXJhdGVkIGZpbGUgdGhpcyBzb3VyY2UgbWFwIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAqXG4gKiBIZXJlIGlzIGFuIGV4YW1wbGUgc291cmNlIG1hcCwgdGFrZW4gZnJvbSB0aGUgc291cmNlIG1hcCBzcGVjWzBdOlxuICpcbiAqICAgICB7XG4gKiAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgIGZpbGU6IFwib3V0LmpzXCIsXG4gKiAgICAgICBzb3VyY2VSb290IDogXCJcIixcbiAqICAgICAgIHNvdXJjZXM6IFtcImZvby5qc1wiLCBcImJhci5qc1wiXSxcbiAqICAgICAgIG5hbWVzOiBbXCJzcmNcIiwgXCJtYXBzXCIsIFwiYXJlXCIsIFwiZnVuXCJdLFxuICogICAgICAgbWFwcGluZ3M6IFwiQUEsQUI7O0FCQ0RFO1wiXG4gKiAgICAgfVxuICpcbiAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0P3BsaT0xI1xuICovXG5mdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgdmFyIHZlcnNpb24gPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICd2ZXJzaW9uJyk7XG4gIHZhciBzb3VyY2VzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlcycpO1xuICAvLyBTYXNzIDMuMyBsZWF2ZXMgb3V0IHRoZSAnbmFtZXMnIGFycmF5LCBzbyB3ZSBkZXZpYXRlIGZyb20gdGhlIHNwZWMgKHdoaWNoXG4gIC8vIHJlcXVpcmVzIHRoZSBhcnJheSkgdG8gcGxheSBuaWNlIGhlcmUuXG4gIHZhciBuYW1lcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ25hbWVzJywgW10pO1xuICB2YXIgc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZVJvb3QnLCBudWxsKTtcbiAgdmFyIHNvdXJjZXNDb250ZW50ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlc0NvbnRlbnQnLCBudWxsKTtcbiAgdmFyIG1hcHBpbmdzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbWFwcGluZ3MnKTtcbiAgdmFyIGZpbGUgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdmaWxlJywgbnVsbCk7XG5cbiAgLy8gT25jZSBhZ2FpbiwgU2FzcyBkZXZpYXRlcyBmcm9tIHRoZSBzcGVjIGFuZCBzdXBwbGllcyB0aGUgdmVyc2lvbiBhcyBhXG4gIC8vIHN0cmluZyByYXRoZXIgdGhhbiBhIG51bWJlciwgc28gd2UgdXNlIGxvb3NlIGVxdWFsaXR5IGNoZWNraW5nIGhlcmUuXG4gIGlmICh2ZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgfVxuXG4gIHNvdXJjZXMgPSBzb3VyY2VzXG4gICAgLm1hcChTdHJpbmcpXG4gICAgLy8gU29tZSBzb3VyY2UgbWFwcyBwcm9kdWNlIHJlbGF0aXZlIHNvdXJjZSBwYXRocyBsaWtlIFwiLi9mb28uanNcIiBpbnN0ZWFkIG9mXG4gICAgLy8gXCJmb28uanNcIi4gIE5vcm1hbGl6ZSB0aGVzZSBmaXJzdCBzbyB0aGF0IGZ1dHVyZSBjb21wYXJpc29ucyB3aWxsIHN1Y2NlZWQuXG4gICAgLy8gU2VlIGJ1Z3ppbC5sYS8xMDkwNzY4LlxuICAgIC5tYXAodXRpbC5ub3JtYWxpemUpXG4gICAgLy8gQWx3YXlzIGVuc3VyZSB0aGF0IGFic29sdXRlIHNvdXJjZXMgYXJlIGludGVybmFsbHkgc3RvcmVkIHJlbGF0aXZlIHRvXG4gICAgLy8gdGhlIHNvdXJjZSByb290LCBpZiB0aGUgc291cmNlIHJvb3QgaXMgYWJzb2x1dGUuIE5vdCBkb2luZyB0aGlzIHdvdWxkXG4gICAgLy8gYmUgcGFydGljdWxhcmx5IHByb2JsZW1hdGljIHdoZW4gdGhlIHNvdXJjZSByb290IGlzIGEgcHJlZml4IG9mIHRoZVxuICAgIC8vIHNvdXJjZSAodmFsaWQsIGJ1dCB3aHk/PykuIFNlZSBnaXRodWIgaXNzdWUgIzE5OSBhbmQgYnVnemlsLmxhLzExODg5ODIuXG4gICAgLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gc291cmNlUm9vdCAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlUm9vdCkgJiYgdXRpbC5pc0Fic29sdXRlKHNvdXJjZSlcbiAgICAgICAgPyB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZSlcbiAgICAgICAgOiBzb3VyY2U7XG4gICAgfSk7XG5cbiAgLy8gUGFzcyBgdHJ1ZWAgYmVsb3cgdG8gYWxsb3cgZHVwbGljYXRlIG5hbWVzIGFuZCBzb3VyY2VzLiBXaGlsZSBzb3VyY2UgbWFwc1xuICAvLyBhcmUgaW50ZW5kZWQgdG8gYmUgY29tcHJlc3NlZCBhbmQgZGVkdXBsaWNhdGVkLCB0aGUgVHlwZVNjcmlwdCBjb21waWxlclxuICAvLyBzb21ldGltZXMgZ2VuZXJhdGVzIHNvdXJjZSBtYXBzIHdpdGggZHVwbGljYXRlcyBpbiB0aGVtLiBTZWUgR2l0aHViIGlzc3VlXG4gIC8vICM3MiBhbmQgYnVnemlsLmxhLzg4OTQ5Mi5cbiAgdGhpcy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkobmFtZXMubWFwKFN0cmluZyksIHRydWUpO1xuICB0aGlzLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KHNvdXJjZXMsIHRydWUpO1xuXG4gIHRoaXMuc291cmNlUm9vdCA9IHNvdXJjZVJvb3Q7XG4gIHRoaXMuc291cmNlc0NvbnRlbnQgPSBzb3VyY2VzQ29udGVudDtcbiAgdGhpcy5fbWFwcGluZ3MgPSBtYXBwaW5ncztcbiAgdGhpcy5maWxlID0gZmlsZTtcbn1cblxuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIENyZWF0ZSBhIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgZnJvbSBhIFNvdXJjZU1hcEdlbmVyYXRvci5cbiAqXG4gKiBAcGFyYW0gU291cmNlTWFwR2VuZXJhdG9yIGFTb3VyY2VNYXBcbiAqICAgICAgICBUaGUgc291cmNlIG1hcCB0aGF0IHdpbGwgYmUgY29uc3VtZWQuXG4gKiBAcmV0dXJucyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2Zyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCkge1xuICAgIHZhciBzbWMgPSBPYmplY3QuY3JlYXRlKEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcblxuICAgIHZhciBuYW1lcyA9IHNtYy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fbmFtZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICB2YXIgc291cmNlcyA9IHNtYy5fc291cmNlcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9zb3VyY2VzLnRvQXJyYXkoKSwgdHJ1ZSk7XG4gICAgc21jLnNvdXJjZVJvb3QgPSBhU291cmNlTWFwLl9zb3VyY2VSb290O1xuICAgIHNtYy5zb3VyY2VzQ29udGVudCA9IGFTb3VyY2VNYXAuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQoc21jLl9zb3VyY2VzLnRvQXJyYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYy5zb3VyY2VSb290KTtcbiAgICBzbWMuZmlsZSA9IGFTb3VyY2VNYXAuX2ZpbGU7XG5cbiAgICAvLyBCZWNhdXNlIHdlIGFyZSBtb2RpZnlpbmcgdGhlIGVudHJpZXMgKGJ5IGNvbnZlcnRpbmcgc3RyaW5nIHNvdXJjZXMgYW5kXG4gICAgLy8gbmFtZXMgdG8gaW5kaWNlcyBpbnRvIHRoZSBzb3VyY2VzIGFuZCBuYW1lcyBBcnJheVNldHMpLCB3ZSBoYXZlIHRvIG1ha2VcbiAgICAvLyBhIGNvcHkgb2YgdGhlIGVudHJ5IG9yIGVsc2UgYmFkIHRoaW5ncyBoYXBwZW4uIFNoYXJlZCBtdXRhYmxlIHN0YXRlXG4gICAgLy8gc3RyaWtlcyBhZ2FpbiEgU2VlIGdpdGh1YiBpc3N1ZSAjMTkxLlxuXG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gYVNvdXJjZU1hcC5fbWFwcGluZ3MudG9BcnJheSgpLnNsaWNlKCk7XG4gICAgdmFyIGRlc3RHZW5lcmF0ZWRNYXBwaW5ncyA9IHNtYy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIGRlc3RPcmlnaW5hbE1hcHBpbmdzID0gc21jLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc3JjTWFwcGluZyA9IGdlbmVyYXRlZE1hcHBpbmdzW2ldO1xuICAgICAgdmFyIGRlc3RNYXBwaW5nID0gbmV3IE1hcHBpbmc7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gc3JjTWFwcGluZy5nZW5lcmF0ZWRMaW5lO1xuICAgICAgZGVzdE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uID0gc3JjTWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG5cbiAgICAgIGlmIChzcmNNYXBwaW5nLnNvdXJjZSkge1xuICAgICAgICBkZXN0TWFwcGluZy5zb3VyY2UgPSBzb3VyY2VzLmluZGV4T2Yoc3JjTWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbExpbmUgPSBzcmNNYXBwaW5nLm9yaWdpbmFsTGluZTtcbiAgICAgICAgZGVzdE1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBzcmNNYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIGlmIChzcmNNYXBwaW5nLm5hbWUpIHtcbiAgICAgICAgICBkZXN0TWFwcGluZy5uYW1lID0gbmFtZXMuaW5kZXhPZihzcmNNYXBwaW5nLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVzdE9yaWdpbmFsTWFwcGluZ3MucHVzaChkZXN0TWFwcGluZyk7XG4gICAgICB9XG5cbiAgICAgIGRlc3RHZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICB9XG5cbiAgICBxdWlja1NvcnQoc21jLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG5cbiAgICByZXR1cm4gc21jO1xuICB9O1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vKipcbiAqIFRoZSBsaXN0IG9mIG9yaWdpbmFsIHNvdXJjZXMuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ3NvdXJjZXMnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCA/IHV0aWwuam9pbih0aGlzLnNvdXJjZVJvb3QsIHMpIDogcztcbiAgICB9LCB0aGlzKTtcbiAgfVxufSk7XG5cbi8qKlxuICogUHJvdmlkZSB0aGUgSklUIHdpdGggYSBuaWNlIHNoYXBlIC8gaGlkZGVuIGNsYXNzLlxuICovXG5mdW5jdGlvbiBNYXBwaW5nKCkge1xuICB0aGlzLmdlbmVyYXRlZExpbmUgPSAwO1xuICB0aGlzLmdlbmVyYXRlZENvbHVtbiA9IDA7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5vcmlnaW5hbExpbmUgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsQ29sdW1uID0gbnVsbDtcbiAgdGhpcy5uYW1lID0gbnVsbDtcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHZhciBnZW5lcmF0ZWRMaW5lID0gMTtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsTGluZSA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgdmFyIHByZXZpb3VzTmFtZSA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFTdHIubGVuZ3RoO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNhY2hlZFNlZ21lbnRzID0ge307XG4gICAgdmFyIHRlbXAgPSB7fTtcbiAgICB2YXIgb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBnZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBtYXBwaW5nLCBzdHIsIHNlZ21lbnQsIGVuZCwgdmFsdWU7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChhU3RyLmNoYXJBdChpbmRleCkgPT09ICc7Jykge1xuICAgICAgICBnZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJywnKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbWFwcGluZyA9IG5ldyBNYXBwaW5nKCk7XG4gICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9IGdlbmVyYXRlZExpbmU7XG5cbiAgICAgICAgLy8gQmVjYXVzZSBlYWNoIG9mZnNldCBpcyBlbmNvZGVkIHJlbGF0aXZlIHRvIHRoZSBwcmV2aW91cyBvbmUsXG4gICAgICAgIC8vIG1hbnkgc2VnbWVudHMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBlbmNvZGluZy4gV2UgY2FuIGV4cGxvaXQgdGhpc1xuICAgICAgICAvLyBmYWN0IGJ5IGNhY2hpbmcgdGhlIHBhcnNlZCB2YXJpYWJsZSBsZW5ndGggZmllbGRzIG9mIGVhY2ggc2VnbWVudCxcbiAgICAgICAgLy8gYWxsb3dpbmcgdXMgdG8gYXZvaWQgYSBzZWNvbmQgcGFyc2UgaWYgd2UgZW5jb3VudGVyIHRoZSBzYW1lXG4gICAgICAgIC8vIHNlZ21lbnQgYWdhaW4uXG4gICAgICAgIGZvciAoZW5kID0gaW5kZXg7IGVuZCA8IGxlbmd0aDsgZW5kKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhcklzTWFwcGluZ1NlcGFyYXRvcihhU3RyLCBlbmQpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RyID0gYVN0ci5zbGljZShpbmRleCwgZW5kKTtcblxuICAgICAgICBzZWdtZW50ID0gY2FjaGVkU2VnbWVudHNbc3RyXTtcbiAgICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgICBpbmRleCArPSBzdHIubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlZ21lbnQgPSBbXTtcbiAgICAgICAgICB3aGlsZSAoaW5kZXggPCBlbmQpIHtcbiAgICAgICAgICAgIGJhc2U2NFZMUS5kZWNvZGUoYVN0ciwgaW5kZXgsIHRlbXApO1xuICAgICAgICAgICAgdmFsdWUgPSB0ZW1wLnZhbHVlO1xuICAgICAgICAgICAgaW5kZXggPSB0ZW1wLnJlc3Q7XG4gICAgICAgICAgICBzZWdtZW50LnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCBhIHNvdXJjZSwgYnV0IG5vIGxpbmUgYW5kIGNvbHVtbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCBhIHNvdXJjZSBhbmQgbGluZSwgYnV0IG5vIGNvbHVtbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhY2hlZFNlZ21lbnRzW3N0cl0gPSBzZWdtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2VuZXJhdGVkIGNvbHVtbi5cbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiArIHNlZ21lbnRbMF07XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG5cbiAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gMSkge1xuICAgICAgICAgIC8vIE9yaWdpbmFsIHNvdXJjZS5cbiAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHByZXZpb3VzU291cmNlICsgc2VnbWVudFsxXTtcbiAgICAgICAgICBwcmV2aW91c1NvdXJjZSArPSBzZWdtZW50WzFdO1xuXG4gICAgICAgICAgLy8gT3JpZ2luYWwgbGluZS5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IHByZXZpb3VzT3JpZ2luYWxMaW5lICsgc2VnbWVudFsyXTtcbiAgICAgICAgICBwcmV2aW91c09yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICAgIC8vIExpbmVzIGFyZSBzdG9yZWQgMC1iYXNlZFxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lICs9IDE7XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBjb2x1bW4uXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gKyBzZWdtZW50WzNdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gNCkge1xuICAgICAgICAgICAgLy8gT3JpZ2luYWwgbmFtZS5cbiAgICAgICAgICAgIG1hcHBpbmcubmFtZSA9IHByZXZpb3VzTmFtZSArIHNlZ21lbnRbNF07XG4gICAgICAgICAgICBwcmV2aW91c05hbWUgKz0gc2VnbWVudFs0XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICBpZiAodHlwZW9mIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG9yaWdpbmFsTWFwcGluZ3MucHVzaChtYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydChnZW5lcmF0ZWRNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCk7XG4gICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gZ2VuZXJhdGVkTWFwcGluZ3M7XG5cbiAgICBxdWlja1NvcnQob3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBvcmlnaW5hbE1hcHBpbmdzO1xuICB9O1xuXG4vKipcbiAqIEZpbmQgdGhlIG1hcHBpbmcgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGh5cG90aGV0aWNhbCBcIm5lZWRsZVwiIG1hcHBpbmcgdGhhdFxuICogd2UgYXJlIHNlYXJjaGluZyBmb3IgaW4gdGhlIGdpdmVuIFwiaGF5c3RhY2tcIiBvZiBtYXBwaW5ncy5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZmluZE1hcHBpbmcoYU5lZWRsZSwgYU1hcHBpbmdzLCBhTGluZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb2x1bW5OYW1lLCBhQ29tcGFyYXRvciwgYUJpYXMpIHtcbiAgICAvLyBUbyByZXR1cm4gdGhlIHBvc2l0aW9uIHdlIGFyZSBzZWFyY2hpbmcgZm9yLCB3ZSBtdXN0IGZpcnN0IGZpbmQgdGhlXG4gICAgLy8gbWFwcGluZyBmb3IgdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCB0aGVuIHJldHVybiB0aGUgb3Bwb3NpdGUgcG9zaXRpb24gaXRcbiAgICAvLyBwb2ludHMgdG8uIEJlY2F1c2UgdGhlIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHdlIGNhbiB1c2UgYmluYXJ5IHNlYXJjaCB0b1xuICAgIC8vIGZpbmQgdGhlIGJlc3QgbWFwcGluZy5cblxuICAgIGlmIChhTmVlZGxlW2FMaW5lTmFtZV0gPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTGluZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLCBnb3QgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICArIGFOZWVkbGVbYUxpbmVOYW1lXSk7XG4gICAgfVxuICAgIGlmIChhTmVlZGxlW2FDb2x1bW5OYW1lXSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbHVtbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLCBnb3QgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICArIGFOZWVkbGVbYUNvbHVtbk5hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmluYXJ5U2VhcmNoLnNlYXJjaChhTmVlZGxlLCBhTWFwcGluZ3MsIGFDb21wYXJhdG9yLCBhQmlhcyk7XG4gIH07XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgbGFzdCBjb2x1bW4gZm9yIGVhY2ggZ2VuZXJhdGVkIG1hcHBpbmcuIFRoZSBsYXN0IGNvbHVtbiBpc1xuICogaW5jbHVzaXZlLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb21wdXRlQ29sdW1uU3BhbnMgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9jb21wdXRlQ29sdW1uU3BhbnMoKSB7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aDsgKytpbmRleCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIC8vIE1hcHBpbmdzIGRvIG5vdCBjb250YWluIGEgZmllbGQgZm9yIHRoZSBsYXN0IGdlbmVyYXRlZCBjb2x1bW50LiBXZVxuICAgICAgLy8gY2FuIGNvbWUgdXAgd2l0aCBhbiBvcHRpbWlzdGljIGVzdGltYXRlLCBob3dldmVyLCBieSBhc3N1bWluZyB0aGF0XG4gICAgICAvLyBtYXBwaW5ncyBhcmUgY29udGlndW91cyAoaS5lLiBnaXZlbiB0d28gY29uc2VjdXRpdmUgbWFwcGluZ3MsIHRoZVxuICAgICAgLy8gZmlyc3QgbWFwcGluZyBlbmRzIHdoZXJlIHRoZSBzZWNvbmQgb25lIHN0YXJ0cykuXG4gICAgICBpZiAoaW5kZXggKyAxIDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoKSB7XG4gICAgICAgIHZhciBuZXh0TWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4ICsgMV07XG5cbiAgICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9PT0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIG1hcHBpbmcubGFzdEdlbmVyYXRlZENvbHVtbiA9IG5leHRNYXBwaW5nLmdlbmVyYXRlZENvbHVtbiAtIDE7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGxhc3QgbWFwcGluZyBmb3IgZWFjaCBsaW5lIHNwYW5zIHRoZSBlbnRpcmUgbGluZS5cbiAgICAgIG1hcHBpbmcubGFzdEdlbmVyYXRlZENvbHVtbiA9IEluZmluaXR5O1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICBuZWVkbGUsXG4gICAgICB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncyxcbiAgICAgIFwiZ2VuZXJhdGVkTGluZVwiLFxuICAgICAgXCJnZW5lcmF0ZWRDb2x1bW5cIixcbiAgICAgIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQsXG4gICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZWVkbGUuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcobWFwcGluZywgJ3NvdXJjZScsIG51bGwpO1xuICAgICAgICBpZiAoc291cmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5hdChzb3VyY2UpO1xuICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbmFtZScsIG51bGwpO1xuICAgICAgICBpZiAobmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5hdChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbExpbmUnLCBudWxsKSxcbiAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc291cmNlOiBudWxsLFxuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIG5hbWU6IG51bGxcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgdGhlIHNvdXJjZSBjb250ZW50IGZvciBldmVyeSBzb3VyY2UgaW4gdGhlIHNvdXJjZVxuICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnQubGVuZ3RoID49IHRoaXMuX3NvdXJjZXMuc2l6ZSgpICYmXG4gICAgICAhdGhpcy5zb3VyY2VzQ29udGVudC5zb21lKGZ1bmN0aW9uIChzYykgeyByZXR1cm4gc2MgPT0gbnVsbDsgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgYVNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBhU291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc291cmNlcy5oYXMoYVNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihhU291cmNlKV07XG4gICAgfVxuXG4gICAgdmFyIHVybDtcbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGxcbiAgICAgICAgJiYgKHVybCA9IHV0aWwudXJsUGFyc2UodGhpcy5zb3VyY2VSb290KSkpIHtcbiAgICAgIC8vIFhYWDogZmlsZTovLyBVUklzIGFuZCBhYnNvbHV0ZSBwYXRocyBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZm9yXG4gICAgICAvLyBtYW55IHVzZXJzLiBXZSBjYW4gaGVscCB0aGVtIG91dCB3aGVuIHRoZXkgZXhwZWN0IGZpbGU6Ly8gVVJJcyB0b1xuICAgICAgLy8gYmVoYXZlIGxpa2UgaXQgd291bGQgaWYgdGhleSB3ZXJlIHJ1bm5pbmcgYSBsb2NhbCBIVFRQIHNlcnZlci4gU2VlXG4gICAgICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD04ODU1OTcuXG4gICAgICB2YXIgZmlsZVVyaUFic1BhdGggPSBhU291cmNlLnJlcGxhY2UoL15maWxlOlxcL1xcLy8sIFwiXCIpO1xuICAgICAgaWYgKHVybC5zY2hlbWUgPT0gXCJmaWxlXCJcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhmaWxlVXJpQWJzUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGZpbGVVcmlBYnNQYXRoKV1cbiAgICAgIH1cblxuICAgICAgaWYgKCghdXJsLnBhdGggfHwgdXJsLnBhdGggPT0gXCIvXCIpXG4gICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoXCIvXCIgKyBhU291cmNlKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoXCIvXCIgKyBhU291cmNlKV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHJlY3Vyc2l2ZWx5IGZyb21cbiAgICAvLyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IuIEluIHRoYXQgY2FzZSwgd2VcbiAgICAvLyBkb24ndCB3YW50IHRvIHRocm93IGlmIHdlIGNhbid0IGZpbmQgdGhlIHNvdXJjZSAtIHdlIGp1c3Qgd2FudCB0b1xuICAgIC8vIHJldHVybiBudWxsLCBzbyB3ZSBwcm92aWRlIGEgZmxhZyB0byBleGl0IGdyYWNlZnVsbHkuXG4gICAgaWYgKG51bGxPbk1pc3NpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aFxuICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBiaWFzOiBFaXRoZXIgJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdTb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgc291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBsYXN0Q29sdW1uOiBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICBcIm9yaWdpbmFsTGluZVwiLFxuICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKG1hcHBpbmcuc291cmNlID09PSBuZWVkbGUuc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGwsXG4gICAgICBsYXN0Q29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuZXhwb3J0cy5CYXNpY1NvdXJjZU1hcENvbnN1bWVyID0gQmFzaWNTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBBbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBhcnNlZCBzb3VyY2UgbWFwIHdoaWNoXG4gKiB3ZSBjYW4gcXVlcnkgZm9yIGluZm9ybWF0aW9uLiBJdCBkaWZmZXJzIGZyb20gQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpblxuICogdGhhdCBpdCB0YWtlcyBcImluZGV4ZWRcIiBzb3VyY2UgbWFwcyAoaS5lLiBvbmVzIHdpdGggYSBcInNlY3Rpb25zXCIgZmllbGQpIGFzXG4gKiBpbnB1dC5cbiAqXG4gKiBUaGUgb25seSBwYXJhbWV0ZXIgaXMgYSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yIGFscmVhZHlcbiAqIHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgZm9yIGluZGV4ZWQgc291cmNlIG1hcHMsIHRoZXlcbiAqIGhhdmUgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICpcbiAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICogICAtIGZpbGU6IE9wdGlvbmFsLiBUaGUgZ2VuZXJhdGVkIGZpbGUgdGhpcyBzb3VyY2UgbWFwIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAqICAgLSBzZWN0aW9uczogQSBsaXN0IG9mIHNlY3Rpb24gZGVmaW5pdGlvbnMuXG4gKlxuICogRWFjaCB2YWx1ZSB1bmRlciB0aGUgXCJzZWN0aW9uc1wiIGZpZWxkIGhhcyB0d28gZmllbGRzOlxuICogICAtIG9mZnNldDogVGhlIG9mZnNldCBpbnRvIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgYXQgd2hpY2ggdGhpcyBzZWN0aW9uXG4gKiAgICAgICBiZWdpbnMgdG8gYXBwbHksIGRlZmluZWQgYXMgYW4gb2JqZWN0IHdpdGggYSBcImxpbmVcIiBhbmQgXCJjb2x1bW5cIlxuICogICAgICAgZmllbGQuXG4gKiAgIC0gbWFwOiBBIHNvdXJjZSBtYXAgZGVmaW5pdGlvbi4gVGhpcyBzb3VyY2UgbWFwIGNvdWxkIGFsc28gYmUgaW5kZXhlZCxcbiAqICAgICAgIGJ1dCBkb2Vzbid0IGhhdmUgdG8gYmUuXG4gKlxuICogSW5zdGVhZCBvZiB0aGUgXCJtYXBcIiBmaWVsZCwgaXQncyBhbHNvIHBvc3NpYmxlIHRvIGhhdmUgYSBcInVybFwiIGZpZWxkXG4gKiBzcGVjaWZ5aW5nIGEgVVJMIHRvIHJldHJpZXZlIGEgc291cmNlIG1hcCBmcm9tLCBidXQgdGhhdCdzIGN1cnJlbnRseVxuICogdW5zdXBwb3J0ZWQuXG4gKlxuICogSGVyZSdzIGFuIGV4YW1wbGUgc291cmNlIG1hcCwgdGFrZW4gZnJvbSB0aGUgc291cmNlIG1hcCBzcGVjWzBdLCBidXRcbiAqIG1vZGlmaWVkIHRvIG9taXQgYSBzZWN0aW9uIHdoaWNoIHVzZXMgdGhlIFwidXJsXCIgZmllbGQuXG4gKlxuICogIHtcbiAqICAgIHZlcnNpb24gOiAzLFxuICogICAgZmlsZTogXCJhcHAuanNcIixcbiAqICAgIHNlY3Rpb25zOiBbe1xuICogICAgICBvZmZzZXQ6IHtsaW5lOjEwMCwgY29sdW1uOjEwfSxcbiAqICAgICAgbWFwOiB7XG4gKiAgICAgICAgdmVyc2lvbiA6IDMsXG4gKiAgICAgICAgZmlsZTogXCJzZWN0aW9uLmpzXCIsXG4gKiAgICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgIG5hbWVzOiBbXCJzcmNcIiwgXCJtYXBzXCIsIFwiYXJlXCIsIFwiZnVuXCJdLFxuICogICAgICAgIG1hcHBpbmdzOiBcIkFBQUEsRTs7QUJDREU7XCJcbiAqICAgICAgfVxuICogICAgfV0sXG4gKiAgfVxuICpcbiAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0I2hlYWRpbmc9aC41MzVlczN4ZXByZ3RcbiAqL1xuZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgdmFyIHZlcnNpb24gPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICd2ZXJzaW9uJyk7XG4gIHZhciBzZWN0aW9ucyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NlY3Rpb25zJyk7XG5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgdGhpcy5fc291cmNlcyA9IG5ldyBBcnJheVNldCgpO1xuICB0aGlzLl9uYW1lcyA9IG5ldyBBcnJheVNldCgpO1xuXG4gIHZhciBsYXN0T2Zmc2V0ID0ge1xuICAgIGxpbmU6IC0xLFxuICAgIGNvbHVtbjogMFxuICB9O1xuICB0aGlzLl9zZWN0aW9ucyA9IHNlY3Rpb25zLm1hcChmdW5jdGlvbiAocykge1xuICAgIGlmIChzLnVybCkge1xuICAgICAgLy8gVGhlIHVybCBmaWVsZCB3aWxsIHJlcXVpcmUgc3VwcG9ydCBmb3IgYXN5bmNocm9uaWNpdHkuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9pc3N1ZXMvMTZcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VwcG9ydCBmb3IgdXJsIGZpZWxkIGluIHNlY3Rpb25zIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgICB9XG4gICAgdmFyIG9mZnNldCA9IHV0aWwuZ2V0QXJnKHMsICdvZmZzZXQnKTtcbiAgICB2YXIgb2Zmc2V0TGluZSA9IHV0aWwuZ2V0QXJnKG9mZnNldCwgJ2xpbmUnKTtcbiAgICB2YXIgb2Zmc2V0Q29sdW1uID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnY29sdW1uJyk7XG5cbiAgICBpZiAob2Zmc2V0TGluZSA8IGxhc3RPZmZzZXQubGluZSB8fFxuICAgICAgICAob2Zmc2V0TGluZSA9PT0gbGFzdE9mZnNldC5saW5lICYmIG9mZnNldENvbHVtbiA8IGxhc3RPZmZzZXQuY29sdW1uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWN0aW9uIG9mZnNldHMgbXVzdCBiZSBvcmRlcmVkIGFuZCBub24tb3ZlcmxhcHBpbmcuJyk7XG4gICAgfVxuICAgIGxhc3RPZmZzZXQgPSBvZmZzZXQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2VuZXJhdGVkT2Zmc2V0OiB7XG4gICAgICAgIC8vIFRoZSBvZmZzZXQgZmllbGRzIGFyZSAwLWJhc2VkLCBidXQgd2UgdXNlIDEtYmFzZWQgaW5kaWNlcyB3aGVuXG4gICAgICAgIC8vIGVuY29kaW5nL2RlY29kaW5nIGZyb20gVkxRLlxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBvZmZzZXRMaW5lICsgMSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBvZmZzZXRDb2x1bW4gKyAxXG4gICAgICB9LFxuICAgICAgY29uc3VtZXI6IG5ldyBTb3VyY2VNYXBDb25zdW1lcih1dGlsLmdldEFyZyhzLCAnbWFwJykpXG4gICAgfVxuICB9KTtcbn1cblxuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vKipcbiAqIFRoZSBsaXN0IG9mIG9yaWdpbmFsIHNvdXJjZXMuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3NlY3Rpb25zW2ldLmNvbnN1bWVyLnNvdXJjZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgc291cmNlcy5wdXNoKHRoaXMuX3NlY3Rpb25zW2ldLmNvbnN1bWVyLnNvdXJjZXNbal0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc291cmNlcztcbiAgfVxufSk7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkXG4gKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgb3IgbnVsbC5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9vcmlnaW5hbFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIGdlbmVyYXRlZExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgZ2VuZXJhdGVkQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIC8vIEZpbmQgdGhlIHNlY3Rpb24gY29udGFpbmluZyB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9uIHdlJ3JlIHRyeWluZyB0byBtYXBcbiAgICAvLyB0byBhbiBvcmlnaW5hbCBwb3NpdGlvbi5cbiAgICB2YXIgc2VjdGlvbkluZGV4ID0gYmluYXJ5U2VhcmNoLnNlYXJjaChuZWVkbGUsIHRoaXMuX3NlY3Rpb25zLFxuICAgICAgZnVuY3Rpb24obmVlZGxlLCBzZWN0aW9uKSB7XG4gICAgICAgIHZhciBjbXAgPSBuZWVkbGUuZ2VuZXJhdGVkTGluZSAtIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU7XG4gICAgICAgIGlmIChjbXApIHtcbiAgICAgICAgICByZXR1cm4gY21wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgfSk7XG4gICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xuXG4gICAgaWYgKCFzZWN0aW9uKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbmFtZTogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VjdGlvbi5jb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHtcbiAgICAgIGxpbmU6IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgIGNvbHVtbjogbmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBuZWVkbGUuZ2VuZXJhdGVkTGluZVxuICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICA6IDApLFxuICAgICAgYmlhczogYUFyZ3MuYmlhc1xuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgdGhlIHNvdXJjZSBjb250ZW50IGZvciBldmVyeSBzb3VyY2UgaW4gdGhlIHNvdXJjZVxuICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlY3Rpb25zLmV2ZXJ5KGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gcy5jb25zdW1lci5oYXNDb250ZW50c09mQWxsU291cmNlcygpO1xuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICogb3JpZ2luYWwgc291cmNlIGZpbGUuIFJldHVybnMgbnVsbCBpZiBubyBvcmlnaW5hbCBzb3VyY2UgY29udGVudCBpc1xuICogYXZhaWxhYmxlLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfc291cmNlQ29udGVudEZvcihhU291cmNlLCBudWxsT25NaXNzaW5nKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgdmFyIGNvbnRlbnQgPSBzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgdHJ1ZSk7XG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG51bGxPbk1pc3NpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aFxuICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG5cbiAgICAgIC8vIE9ubHkgY29uc2lkZXIgdGhpcyBzZWN0aW9uIGlmIHRoZSByZXF1ZXN0ZWQgc291cmNlIGlzIGluIHRoZSBsaXN0IG9mXG4gICAgICAvLyBzb3VyY2VzIG9mIHRoZSBjb25zdW1lci5cbiAgICAgIGlmIChzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZXMuaW5kZXhPZih1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpKSA9PT0gLTEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgZ2VuZXJhdGVkUG9zaXRpb24gPSBzZWN0aW9uLmNvbnN1bWVyLmdlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKTtcbiAgICAgIGlmIChnZW5lcmF0ZWRQb3NpdGlvbikge1xuICAgICAgICB2YXIgcmV0ID0ge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZFBvc2l0aW9uLmxpbmUgK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZFBvc2l0aW9uLmNvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gZ2VuZXJhdGVkUG9zaXRpb24ubGluZVxuICAgICAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgICAgIDogMClcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG4gICAgICB2YXIgc2VjdGlvbk1hcHBpbmdzID0gc2VjdGlvbi5jb25zdW1lci5fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlY3Rpb25NYXBwaW5ncy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgbWFwcGluZyA9IHNlY3Rpb25NYXBwaW5nc1tqXTtcblxuICAgICAgICB2YXIgc291cmNlID0gc2VjdGlvbi5jb25zdW1lci5fc291cmNlcy5hdChtYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGlmIChzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc2VjdGlvbi5jb25zdW1lci5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgICAgIHZhciBuYW1lID0gc2VjdGlvbi5jb25zdW1lci5fbmFtZXMuYXQobWFwcGluZy5uYW1lKTtcbiAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgICBuYW1lID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcblxuICAgICAgICAvLyBUaGUgbWFwcGluZ3MgY29taW5nIGZyb20gdGhlIGNvbnN1bWVyIGZvciB0aGUgc2VjdGlvbiBoYXZlXG4gICAgICAgIC8vIGdlbmVyYXRlZCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzZWN0aW9uLCBzbyB3ZVxuICAgICAgICAvLyBuZWVkIHRvIG9mZnNldCB0aGVtIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY29uY2F0ZW5hdGVkXG4gICAgICAgIC8vIGdlbmVyYXRlZCBmaWxlLlxuICAgICAgICB2YXIgYWRqdXN0ZWRNYXBwaW5nID0ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG1hcHBpbmcuZ2VuZXJhdGVkTGluZVxuICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICA6IDApLFxuICAgICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgb3JpZ2luYWxDb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKGFkanVzdGVkTWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgYWRqdXN0ZWRNYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncy5wdXNoKGFkanVzdGVkTWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBxdWlja1NvcnQodGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICBxdWlja1NvcnQodGhpcy5fX29yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuICB9O1xuXG5leHBvcnRzLkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciA9IEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcjtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIHBhcmFtZXRlci9vcHRpb25zXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBhcmdzIFRoZSBvYmplY3Qgd2UgYXJlIGV4dHJhY3RpbmcgdmFsdWVzIGZyb21cbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgQW4gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nXG4gKiBmcm9tIHRoZSBvYmplY3QuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmcsIGFuXG4gKiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gZ2V0QXJnKGFBcmdzLCBhTmFtZSwgYURlZmF1bHRWYWx1ZSkge1xuICBpZiAoYU5hbWUgaW4gYUFyZ3MpIHtcbiAgICByZXR1cm4gYUFyZ3NbYU5hbWVdO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYURlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFOYW1lICsgJ1wiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuJyk7XG4gIH1cbn1cbmV4cG9ydHMuZ2V0QXJnID0gZ2V0QXJnO1xuXG52YXIgdXJsUmVnZXhwID0gL14oPzooW1xcdytcXC0uXSspOik/XFwvXFwvKD86KFxcdys6XFx3KylAKT8oW1xcdy5dKikoPzo6KFxcZCspKT8oXFxTKikkLztcbnZhciBkYXRhVXJsUmVnZXhwID0gL15kYXRhOi4rXFwsLiskLztcblxuZnVuY3Rpb24gdXJsUGFyc2UoYVVybCkge1xuICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjaGVtZTogbWF0Y2hbMV0sXG4gICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgaG9zdDogbWF0Y2hbM10sXG4gICAgcG9ydDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV1cbiAgfTtcbn1cbmV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuZnVuY3Rpb24gdXJsR2VuZXJhdGUoYVBhcnNlZFVybCkge1xuICB2YXIgdXJsID0gJyc7XG4gIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnNjaGVtZSArICc6JztcbiAgfVxuICB1cmwgKz0gJy8vJztcbiAgaWYgKGFQYXJzZWRVcmwuYXV0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmF1dGggKyAnQCc7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwuaG9zdCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucG9ydCkge1xuICAgIHVybCArPSBcIjpcIiArIGFQYXJzZWRVcmwucG9ydFxuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBhdGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5wYXRoO1xuICB9XG4gIHJldHVybiB1cmw7XG59XG5leHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gKlxuICogLSBSZXBsYWNlcyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggb25lIHNsYXNoLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICpcbiAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciB1cmwgdG8gbm9ybWFsaXplLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgdmFyIHBhdGggPSBhUGF0aDtcbiAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgaWYgKHVybCkge1xuICAgIGlmICghdXJsLnBhdGgpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG4gICAgcGF0aCA9IHVybC5wYXRoO1xuICB9XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoL1xcLysvKTtcbiAgZm9yICh2YXIgcGFydCwgdXAgPSAwLCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwID4gMCkge1xuICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJ0IGlzIGJsYW5rIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLiBUcnlpbmcgdG8gZ29cbiAgICAgICAgLy8gYWJvdmUgdGhlIHJvb3QgaXMgYSBuby1vcC4gVGhlcmVmb3JlIHdlIGNhbiByZW1vdmUgYWxsICcuLicgcGFydHNcbiAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgIHBhcnRzLnNwbGljZShpICsgMSwgdXApO1xuICAgICAgICB1cCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMik7XG4gICAgICAgIHVwLS07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKHBhdGggPT09ICcnKSB7XG4gICAgcGF0aCA9IGlzQWJzb2x1dGUgPyAnLycgOiAnLic7XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgdXJsLnBhdGggPSBwYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5cbi8qKlxuICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAqXG4gKiAtIElmIGFQYXRoIGlzIGEgVVJMIG9yIGEgZGF0YSBVUkksIGFQYXRoIGlzIHJldHVybmVkLCB1bmxlc3MgYVBhdGggaXMgYVxuICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gKiAgIGZpcnN0LlxuICogLSBPdGhlcndpc2UgYVBhdGggaXMgYSBwYXRoLiBJZiBhUm9vdCBpcyBhIFVSTCwgdGhlbiBpdHMgcGF0aCBwb3J0aW9uXG4gKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAqICAgaXMgcmV0dXJuZWQuXG4gKiAgIC0gSWYgYVBhdGggaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaXMgYVBhdGguXG4gKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gKiAtIEpvaW5pbmcgZm9yIGV4YW1wbGUgJ2h0dHA6Ly8nIGFuZCAnd3d3LmV4YW1wbGUuY29tJyBpcyBhbHNvIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuICBpZiAoYVBhdGggPT09IFwiXCIpIHtcbiAgICBhUGF0aCA9IFwiLlwiO1xuICB9XG4gIHZhciBhUGF0aFVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgdmFyIGFSb290VXJsID0gdXJsUGFyc2UoYVJvb3QpO1xuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdCA9IGFSb290VXJsLnBhdGggfHwgJy8nO1xuICB9XG5cbiAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgaWYgKGFQYXRoVXJsICYmICFhUGF0aFVybC5zY2hlbWUpIHtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFQYXRoVXJsKTtcbiAgfVxuXG4gIGlmIChhUGF0aFVybCB8fCBhUGF0aC5tYXRjaChkYXRhVXJsUmVnZXhwKSkge1xuICAgIHJldHVybiBhUGF0aDtcbiAgfVxuXG4gIC8vIGBqb2luKCdodHRwOi8vJywgJ3d3dy5leGFtcGxlLmNvbScpYFxuICBpZiAoYVJvb3RVcmwgJiYgIWFSb290VXJsLmhvc3QgJiYgIWFSb290VXJsLnBhdGgpIHtcbiAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuXG4gIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgID8gYVBhdGhcbiAgICA6IG5vcm1hbGl6ZShhUm9vdC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIGFQYXRoKTtcblxuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdFVybC5wYXRoID0gam9pbmVkO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cbiAgcmV0dXJuIGpvaW5lZDtcbn1cbmV4cG9ydHMuam9pbiA9IGpvaW47XG5cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uIChhUGF0aCkge1xuICByZXR1cm4gYVBhdGguY2hhckF0KDApID09PSAnLycgfHwgISFhUGF0aC5tYXRjaCh1cmxSZWdleHApO1xufTtcblxuLyoqXG4gKiBNYWtlIGEgcGF0aCByZWxhdGl2ZSB0byBhIFVSTCBvciBhbm90aGVyIHBhdGguXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBtYWRlIHJlbGF0aXZlIHRvIGFSb290LlxuICovXG5mdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuXG4gIGFSb290ID0gYVJvb3QucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gIC8vIGNoZWNraW5nIHdoZXRoZXIgdGhlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlIHBhdGggd29uJ3Qgd29yay4gSW5zdGVhZCwgd2VcbiAgLy8gbmVlZCB0byByZW1vdmUgY29tcG9uZW50cyBmcm9tIHRoZSByb290IG9uZSBieSBvbmUsIHVudGlsIGVpdGhlciB3ZSBmaW5kXG4gIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgdmFyIGxldmVsID0gMDtcbiAgd2hpbGUgKGFQYXRoLmluZGV4T2YoYVJvb3QgKyAnLycpICE9PSAwKSB7XG4gICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb25seSBwYXJ0IG9mIHRoZSByb290IHRoYXQgaXMgbGVmdCBpcyB0aGUgc2NoZW1lIChpLmUuIGh0dHA6Ly8sXG4gICAgLy8gZmlsZTovLy8sIGV0Yy4pLCBvbmUgb3IgbW9yZSBzbGFzaGVzICgvKSwgb3Igc2ltcGx5IG5vdGhpbmcgYXQgYWxsLCB3ZVxuICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgYVJvb3QgPSBhUm9vdC5zbGljZSgwLCBpbmRleCk7XG4gICAgaWYgKGFSb290Lm1hdGNoKC9eKFteXFwvXSs6XFwvKT9cXC8qJC8pKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgKytsZXZlbDtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhZGQgYSBcIi4uL1wiIGZvciBlYWNoIGNvbXBvbmVudCB3ZSByZW1vdmVkIGZyb20gdGhlIHJvb3QuXG4gIHJldHVybiBBcnJheShsZXZlbCArIDEpLmpvaW4oXCIuLi9cIikgKyBhUGF0aC5zdWJzdHIoYVJvb3QubGVuZ3RoICsgMSk7XG59XG5leHBvcnRzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG5cbnZhciBzdXBwb3J0c051bGxQcm90byA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gISgnX19wcm90b19fJyBpbiBvYmopO1xufSgpKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkgKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICogaGF2ZSB0byBwcmVmaXggYWxsIHRoZSBzdHJpbmdzIGluIG91ciBzZXQgd2l0aCBhbiBhcmJpdHJhcnkgY2hhcmFjdGVyLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8zMFxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5mdW5jdGlvbiB0b1NldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuICckJyArIGFTdHI7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMudG9TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogdG9TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGZyb21TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiBhU3RyLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLmZyb21TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogZnJvbVNldFN0cmluZztcblxuZnVuY3Rpb24gaXNQcm90b1N0cmluZyhzKSB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBzLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOSAvKiBcIl9fcHJvdG9fX1wiLmxlbmd0aCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMSkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAyKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDMpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNCkgIT09IDExNiAvKiAndCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA1KSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDYpICE9PSAxMTQgLyogJ3InICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNykgIT09IDExMiAvKiAncCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA4KSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDkpICE9PSA5NSAgLyogJ18nICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IGxlbmd0aCAtIDEwOyBpID49IDA7IGktLSkge1xuICAgIGlmIChzLmNoYXJDb2RlQXQoaSkgIT09IDM2IC8qICckJyAqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2hlcmUgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4sIGJ1dCBkaWZmZXJlbnQgZ2VuZXJhdGVkXG4gKiBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXBwaW5nIHdpdGggYVxuICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyA9IGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zO1xuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBkZWZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgaW5kaWNlcyB3aGVyZVxuICogdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiwgYnV0IGRpZmZlcmVudFxuICogc291cmNlL25hbWUvb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGFcbiAqIG1hcHBpbmcgd2l0aCBhIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkO1xuXG5mdW5jdGlvbiBzdHJjbXAoYVN0cjEsIGFTdHIyKSB7XG4gIGlmIChhU3RyMSA9PT0gYVN0cjIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZDtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrLWdlbmVyYXRvcicsIFsnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc3RhY2tmcmFtZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrR2VuZXJhdG9yID0gZmFjdG9yeShyb290LlN0YWNrRnJhbWUpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24oU3RhY2tGcmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGJhY2t0cmFjZTogZnVuY3Rpb24gU3RhY2tHZW5lcmF0b3IkJGJhY2t0cmFjZShvcHRzKSB7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICAgICAgICAgIHZhciBtYXhTdGFja1NpemUgPSAxMDtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3B0cy5tYXhTdGFja1NpemUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgbWF4U3RhY2tTaXplID0gb3B0cy5tYXhTdGFja1NpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjdXJyID0gYXJndW1lbnRzLmNhbGxlZTtcbiAgICAgICAgICAgIHdoaWxlIChjdXJyICYmIHN0YWNrLmxlbmd0aCA8IG1heFN0YWNrU2l6ZSkge1xuICAgICAgICAgICAgICAgIC8vIEFsbG93IFY4IG9wdGltaXphdGlvbnNcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShjdXJyWydhcmd1bWVudHMnXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gY3VyclsnYXJndW1lbnRzJ11baV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgvZnVuY3Rpb24oPzpcXHMrKFtcXHckXSspKStcXHMqXFwoLy50ZXN0KGN1cnIudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh7ZnVuY3Rpb25OYW1lOiBSZWdFeHAuJDEgfHwgdW5kZWZpbmVkLCBhcmdzOiBhcmdzfSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3IFN0YWNrRnJhbWUoe2FyZ3M6IGFyZ3N9KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIuY2FsbGVyO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0YWNrO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrZnJhbWUnLCBbXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja0ZyYW1lID0gZmFjdG9yeSgpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24oKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIGZ1bmN0aW9uIF9pc051bWJlcihuKSB7XG4gICAgICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2NhcGl0YWxpemUoc3RyKSB7XG4gICAgICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9nZXR0ZXIocCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1twXTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgYm9vbGVhblByb3BzID0gWydpc0NvbnN0cnVjdG9yJywgJ2lzRXZhbCcsICdpc05hdGl2ZScsICdpc1RvcGxldmVsJ107XG4gICAgdmFyIG51bWVyaWNQcm9wcyA9IFsnY29sdW1uTnVtYmVyJywgJ2xpbmVOdW1iZXInXTtcbiAgICB2YXIgc3RyaW5nUHJvcHMgPSBbJ2ZpbGVOYW1lJywgJ2Z1bmN0aW9uTmFtZScsICdzb3VyY2UnXTtcbiAgICB2YXIgYXJyYXlQcm9wcyA9IFsnYXJncyddO1xuXG4gICAgdmFyIHByb3BzID0gYm9vbGVhblByb3BzLmNvbmNhdChudW1lcmljUHJvcHMsIHN0cmluZ1Byb3BzLCBhcnJheVByb3BzKTtcblxuICAgIGZ1bmN0aW9uIFN0YWNrRnJhbWUob2JqKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3BzW2ldKSAmJiBvYmpbcHJvcHNbaV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snc2V0JyArIF9jYXBpdGFsaXplKHByb3BzW2ldKV0ob2JqW3Byb3BzW2ldXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgU3RhY2tGcmFtZS5wcm90b3R5cGUgPSB7XG4gICAgICAgIGdldEFyZ3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJncztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0QXJnczogZnVuY3Rpb24odikge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSAhPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3MgbXVzdCBiZSBhbiBBcnJheScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcmdzID0gdjtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRFdmFsT3JpZ2luOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2YWxPcmlnaW47XG4gICAgICAgIH0sXG4gICAgICAgIHNldEV2YWxPcmlnaW46IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgU3RhY2tGcmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZhbE9yaWdpbiA9IHY7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2YWxPcmlnaW4gPSBuZXcgU3RhY2tGcmFtZSh2KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXZhbCBPcmlnaW4gbXVzdCBiZSBhbiBPYmplY3Qgb3IgU3RhY2tGcmFtZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0aGlzLmdldEZ1bmN0aW9uTmFtZSgpIHx8ICd7YW5vbnltb3VzfSc7XG4gICAgICAgICAgICB2YXIgYXJncyA9ICcoJyArICh0aGlzLmdldEFyZ3MoKSB8fCBbXSkuam9pbignLCcpICsgJyknO1xuICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gdGhpcy5nZXRGaWxlTmFtZSgpID8gKCdAJyArIHRoaXMuZ2V0RmlsZU5hbWUoKSkgOiAnJztcbiAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gX2lzTnVtYmVyKHRoaXMuZ2V0TGluZU51bWJlcigpKSA/ICgnOicgKyB0aGlzLmdldExpbmVOdW1iZXIoKSkgOiAnJztcbiAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSBfaXNOdW1iZXIodGhpcy5nZXRDb2x1bW5OdW1iZXIoKSkgPyAoJzonICsgdGhpcy5nZXRDb2x1bW5OdW1iZXIoKSkgOiAnJztcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbk5hbWUgKyBhcmdzICsgZmlsZU5hbWUgKyBsaW5lTnVtYmVyICsgY29sdW1uTnVtYmVyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9vbGVhblByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUoYm9vbGVhblByb3BzW2ldKV0gPSBfZ2V0dGVyKGJvb2xlYW5Qcm9wc1tpXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUoYm9vbGVhblByb3BzW2ldKV0gPSAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gQm9vbGVhbih2KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKGJvb2xlYW5Qcm9wc1tpXSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1lcmljUHJvcHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShudW1lcmljUHJvcHNbal0pXSA9IF9nZXR0ZXIobnVtZXJpY1Byb3BzW2pdKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShudW1lcmljUHJvcHNbal0pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIGlmICghX2lzTnVtYmVyKHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IocCArICcgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gTnVtYmVyKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkobnVtZXJpY1Byb3BzW2pdKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IHN0cmluZ1Byb3BzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUoc3RyaW5nUHJvcHNba10pXSA9IF9nZXR0ZXIoc3RyaW5nUHJvcHNba10pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKHN0cmluZ1Byb3BzW2tdKV0gPSAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gU3RyaW5nKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoc3RyaW5nUHJvcHNba10pO1xuICAgIH1cblxuICAgIHJldHVybiBTdGFja0ZyYW1lO1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZS1ncHMnLCBbJ3NvdXJjZS1tYXAnLCAnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc291cmNlLW1hcC9saWIvc291cmNlLW1hcC1jb25zdW1lcicpLCByZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tUcmFjZUdQUyA9IGZhY3Rvcnkocm9vdC5Tb3VyY2VNYXAgfHwgcm9vdC5zb3VyY2VNYXAsIHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTb3VyY2VNYXAsIFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBNYWtlIGEgWC1Eb21haW4gcmVxdWVzdCB0byB1cmwgYW5kIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB3aXRoIHJlc3BvbnNlIHRleHQgaWYgZnVsZmlsbGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gX3hkcih1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgcmVxLm9wZW4oJ2dldCcsIHVybCk7XG4gICAgICAgICAgICByZXEub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocmVxLnN0YXR1cyA+PSAyMDAgJiYgcmVxLnN0YXR1cyA8IDMwMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICh1cmwuc3Vic3RyKDAsIDcpID09PSAnZmlsZTovLycgJiYgcmVxLnJlc3BvbnNlVGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVxLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdIVFRQIHN0YXR1czogJyArIHJlcS5zdGF0dXMgKyAnIHJldHJpZXZpbmcgJyArIHVybCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcS5zZW5kKCk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIEJhc2U2NC1lbmNvZGVkIHN0cmluZyBpbnRvIGl0cyBvcmlnaW5hbCByZXByZXNlbnRhdGlvbi5cbiAgICAgKiBVc2VkIGZvciBpbmxpbmUgc291cmNlbWFwcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiNjRzdHIgQmFzZS02NCBlbmNvZGVkIHN0cmluZ1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gX2F0b2IoYjY0c3RyKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuYXRvYikge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5hdG9iKGI2NHN0cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciB3aW5kb3cuYXRvYiBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcGFyc2VKc29uKHN0cmluZykge1xuICAgICAgICBpZiAodHlwZW9mIEpTT04gIT09ICd1bmRlZmluZWQnICYmIEpTT04ucGFyc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciBKU09OLnBhcnNlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlci8qLCBjb2x1bW5OdW1iZXIqLykge1xuICAgICAgICB2YXIgc3ludGF4ZXMgPSBbXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSBmdW5jdGlvbiAoe2FyZ3N9KSBUT0RPIGFyZ3MgY2FwdHVyZVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqZnVuY3Rpb25cXGIvLFxuICAgICAgICAgICAgLy8gZnVuY3Rpb24ge25hbWV9KHthcmdzfSkgbVsxXT1uYW1lIG1bMl09YXJnc1xuICAgICAgICAgICAgL2Z1bmN0aW9uXFxzKyhbXignXCJgXSo/KVxccypcXCgoW14pXSopXFwpLyxcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGV2YWwoKVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqKD86ZXZhbHxuZXcgRnVuY3Rpb24pXFxiLyxcbiAgICAgICAgICAgIC8vIGZuX25hbWUoKSB7XG4gICAgICAgICAgICAvXFxiKD8hKD86aWZ8Zm9yfHN3aXRjaHx3aGlsZXx3aXRofGNhdGNoKVxcYikoPzooPzpzdGF0aWMpXFxzKyk/KFxcUyspXFxzKlxcKC4qP1xcKVxccypcXHsvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gKCkgPT4ge1xuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqXFwoLio/XFwpXFxzKj0+L1xuICAgICAgICBdO1xuICAgICAgICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoJ1xcbicpO1xuXG4gICAgICAgIC8vIFdhbGsgYmFja3dhcmRzIGluIHRoZSBzb3VyY2UgbGluZXMgdW50aWwgd2UgZmluZCB0aGUgbGluZSB3aGljaCBtYXRjaGVzIG9uZSBvZiB0aGUgcGF0dGVybnMgYWJvdmVcbiAgICAgICAgdmFyIGNvZGUgPSAnJztcbiAgICAgICAgdmFyIG1heExpbmVzID0gTWF0aC5taW4obGluZU51bWJlciwgMjApO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heExpbmVzOyArK2kpIHtcbiAgICAgICAgICAgIC8vIGxpbmVObyBpcyAxLWJhc2VkLCBzb3VyY2VbXSBpcyAwLWJhc2VkXG4gICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVzW2xpbmVOdW1iZXIgLSBpIC0gMV07XG4gICAgICAgICAgICB2YXIgY29tbWVudFBvcyA9IGxpbmUuaW5kZXhPZignLy8nKTtcbiAgICAgICAgICAgIGlmIChjb21tZW50UG9zID49IDApIHtcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHIoMCwgY29tbWVudFBvcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgY29kZSA9IGxpbmUgKyBjb2RlO1xuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBzeW50YXhlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHN5bnRheGVzW2luZGV4XS5leGVjKGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5jcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNvbnN1bWUgc291cmNlIG1hcHMgaW4gb2xkZXIgYnJvd3NlcnMnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhY2tmcmFtZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIFN0YWNrRnJhbWUgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmZpbGVOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gZmlsZSBuYW1lIGlzIG5vdCBhIFN0cmluZycpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBsaW5lIG51bWJlciBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICUgMSAhPT0gMCB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBjb2x1bW4gbnVtYmVyIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kU291cmNlTWFwcGluZ1VSTChzb3VyY2UpIHtcbiAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmdVcmxSZWdFeHAgPSAvXFwvXFwvWyNAXSA/c291cmNlTWFwcGluZ1VSTD0oW15cXHMnXCJdKylcXHMqJC9tZztcbiAgICAgICAgdmFyIGxhc3RTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB2YXIgbWF0Y2hTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB3aGlsZSAobWF0Y2hTb3VyY2VNYXBwaW5nVXJsID0gc291cmNlTWFwcGluZ1VybFJlZ0V4cC5leGVjKHNvdXJjZSkpIHsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgICAgICBsYXN0U291cmNlTWFwcGluZ1VybCA9IG1hdGNoU291cmNlTWFwcGluZ1VybFsxXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGFzdFNvdXJjZU1hcHBpbmdVcmwpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0U291cmNlTWFwcGluZ1VybDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc291cmNlTWFwcGluZ1VSTCBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9leHRyYWN0TG9jYXRpb25JbmZvRnJvbVNvdXJjZU1hcFNvdXJjZShzdGFja2ZyYW1lLCBzb3VyY2VNYXBDb25zdW1lciwgc291cmNlQ2FjaGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIGxvYyA9IHNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgICAgICAgIGxpbmU6IHN0YWNrZnJhbWUubGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGxvYy5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWNoZSBtYXBwZWQgc291cmNlc1xuICAgICAgICAgICAgICAgIHZhciBtYXBwZWRTb3VyY2UgPSBzb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGxvYy5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIGlmIChtYXBwZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlQ2FjaGVbbG9jLnNvdXJjZV0gPSBtYXBwZWRTb3VyY2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2l2ZW4gc3RhY2tmcmFtZSBhbmQgc291cmNlIGxvY2F0aW9uLCB1cGRhdGUgc3RhY2tmcmFtZVxuICAgICAgICAgICAgICAgICAgICBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGxvYy5uYW1lIHx8IHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogc3RhY2tmcmFtZS5hcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvYy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2MubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jLmNvbHVtblxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgb3JpZ2luYWwgc291cmNlIGZvciBnaXZlbiBzdGFja2ZyYW1lIGFuZCBzb3VyY2UgbWFwJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAqICAgICAgb3B0cy5zb3VyY2VDYWNoZSA9IHt1cmw6IFwiU291cmNlIFN0cmluZ1wifSA9PiBwcmVsb2FkIHNvdXJjZSBjYWNoZVxuICAgICAqICAgICAgb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gey9wYXRoL2ZpbGUuanMubWFwOiBTb3VyY2VNYXBDb25zdW1lcn1cbiAgICAgKiAgICAgIG9wdHMub2ZmbGluZSA9IFRydWUgdG8gcHJldmVudCBuZXR3b3JrIHJlcXVlc3RzLlxuICAgICAqICAgICAgICAgICAgICBCZXN0IGVmZm9ydCB3aXRob3V0IHNvdXJjZXMgb3Igc291cmNlIG1hcHMuXG4gICAgICogICAgICBvcHRzLmFqYXggPSBQcm9taXNlIHJldHVybmluZyBmdW5jdGlvbiB0byBtYWtlIFgtRG9tYWluIHJlcXVlc3RzXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMob3B0cykge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3RhY2tUcmFjZUdQUykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlID0gb3B0cy5zb3VyY2VDYWNoZSB8fCB7fTtcbiAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuYWpheCA9IG9wdHMuYWpheCB8fCBfeGRyO1xuXG4gICAgICAgIHRoaXMuX2F0b2IgPSBvcHRzLmF0b2IgfHwgX2F0b2I7XG5cbiAgICAgICAgdGhpcy5fZ2V0ID0gZnVuY3Rpb24gX2dldChsb2NhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBsb2NhdGlvbi5zdWJzdHIoMCwgNSkgPT09ICdkYXRhOic7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0cy5vZmZsaW5lICYmICFpc0RhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ2Fubm90IG1ha2UgbmV0d29yayByZXF1ZXN0cyBpbiBvZmZsaW5lIG1vZGUnKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF0YSBVUkxzIGNhbiBoYXZlIHBhcmFtZXRlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM5N1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1cHBvcnRlZEVuY29kaW5nUmVnZXhwID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXmRhdGE6YXBwbGljYXRpb25cXC9qc29uOyhbXFx3PTpcIi1dKzspKmJhc2U2NCwvO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbG9jYXRpb24ubWF0Y2goc3VwcG9ydGVkRW5jb2RpbmdSZWdleHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcFN0YXJ0ID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGVkU291cmNlID0gbG9jYXRpb24uc3Vic3RyKHNvdXJjZU1hcFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fYXRvYihlbmNvZGVkU291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSA9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RoZSBlbmNvZGluZyBvZiB0aGUgaW5saW5lIHNvdXJjZW1hcCBpcyBub3Qgc3VwcG9ydGVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhoclByb21pc2UgPSB0aGlzLmFqYXgobG9jYXRpb24sIHttZXRob2Q6ICdnZXQnfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZSB0aGUgUHJvbWlzZSB0byBwcmV2ZW50IGR1cGxpY2F0ZSBpbi1mbGlnaHQgcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0geGhyUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclByb21pc2UudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRpbmcgU291cmNlTWFwQ29uc3VtZXJzIGlzIGV4cGVuc2l2ZSwgc28gdGhpcyB3cmFwcyB0aGUgY3JlYXRpb24gb2YgYVxuICAgICAgICAgKiBTb3VyY2VNYXBDb25zdW1lciBpbiBhIHBlci1pbnN0YW5jZSBjYWNoZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZU1hcHBpbmdVUkwgPSBVUkwgdG8gZmV0Y2ggc291cmNlIG1hcCBmcm9tXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBkZWZhdWx0U291cmNlUm9vdCA9IERlZmF1bHQgc291cmNlIHJvb3QgZm9yIHNvdXJjZSBtYXAgaWYgdW5kZWZpbmVkXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIGEgU291cmNlTWFwQ29uc3VtZXJcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyID0gZnVuY3Rpb24gX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldChzb3VyY2VNYXBwaW5nVVJMKS50aGVuKGZ1bmN0aW9uKHNvdXJjZU1hcFNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlTWFwU291cmNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBTb3VyY2UgPSBfcGFyc2VKc29uKHNvdXJjZU1hcFNvdXJjZS5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlTWFwU291cmNlLnNvdXJjZVJvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcFNvdXJjZS5zb3VyY2VSb290ID0gZGVmYXVsdFNvdXJjZVJvb3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU291cmNlTWFwLlNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcFNvdXJjZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdID0gc291cmNlTWFwQ29uc3VtZXJQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBlbmhhbmNlIGZ1bmN0aW9uIG5hbWUgYW5kIHVzZSBzb3VyY2UgbWFwcyBmb3IgYVxuICAgICAgICAgKiBiZXR0ZXIgU3RhY2tGcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lIG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHdpdGggc291cmNlLW1hcHBlZCBTdGFja0ZyYW1lXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBpbnBvaW50ID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkcGlucG9pbnQoc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkudGhlbihmdW5jdGlvbihtYXBwZWRTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVNYXBwZWRTdGFja0ZyYW1lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtYXBwZWRTdGFja0ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZEZ1bmN0aW9uTmFtZShtYXBwZWRTdGFja0ZyYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSwgcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ2NhdGNoJ10ocmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgZ3Vlc3MgZnVuY3Rpb24gbmFtZSBmcm9tIGxvY2F0aW9uIGluZm9ybWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWVcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBlbmhhbmNlZCBTdGFja0ZyYW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZmluZEZ1bmN0aW9uTmFtZShzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChzdGFja2ZyYW1lLmZpbGVOYW1lKS50aGVuKGZ1bmN0aW9uIGdldFNvdXJjZUNhbGxiYWNrKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHN0YWNrZnJhbWUubGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ3Vlc3NlZEZ1bmN0aW9uTmFtZSA9IF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZXBsYWNlIGZ1bmN0aW9uTmFtZSBpZiB3ZSBmb3VuZCBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICAgICAgaWYgKGd1ZXNzZWRGdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZ3Vlc3NlZEZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBzdGFja2ZyYW1lLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IHN0YWNrZnJhbWUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgc2VlayBzb3VyY2UtbWFwcGVkIGxvY2F0aW9uIGFuZCByZXR1cm4gbmV3IGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdldE1hcHBlZExvY2F0aW9uID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKTtcblxuICAgICAgICAgICAgICAgIHZhciBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGU7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gc3RhY2tmcmFtZS5maWxlTmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXQoZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VNYXBwaW5nVVJMID0gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBzb3VyY2VNYXBwaW5nVVJMLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRTb3VyY2VSb290ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlTWFwcGluZ1VSTFswXSAhPT0gJy8nICYmICFpc0RhdGFVcmwgJiYgISgvXmh0dHBzPzpcXC9cXC98XlxcL1xcLy9pKS50ZXN0KHNvdXJjZU1hcHBpbmdVUkwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBwaW5nVVJMID0gZGVmYXVsdFNvdXJjZVJvb3QgKyBzb3VyY2VNYXBwaW5nVVJMO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oc291cmNlTWFwQ29uc3VtZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwU291cmNlKHN0YWNrZnJhbWUsIHNvdXJjZU1hcENvbnN1bWVyLCBzb3VyY2VDYWNoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSlbJ2NhdGNoJ10oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbn0pKTtcbiIsIi8vIFBvbHlmaWxsIGZvciBvbGQgYnJvd3NlcnNcbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5XG5pZiAoIUFycmF5LmlzQXJyYXkpIHtcbiAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xufVxuXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgRVM2UHJvbWlzZS5wb2x5ZmlsbCgpO1xufVxuXG4vLyBFUzUgUG9seWZpbGxzXG4vLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRnVuY3Rpb24vYmluZFxuaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkge1xuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24ob1RoaXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCAtIHdoYXQgaXMgdHJ5aW5nIHRvIGJlIGJvdW5kIGlzIG5vdCBjYWxsYWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgdmFyIGZUb0JpbmQgPSB0aGlzO1xuICAgICAgICB2YXIgTm9PcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZkJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gZlRvQmluZC5hcHBseSh0aGlzIGluc3RhbmNlb2YgTm9PcCAmJiBvVGhpcyA/IHRoaXMgOiBvVGhpcyxcbiAgICAgICAgICAgICAgICBhQXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIE5vT3AucHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG4gICAgICAgIGZCb3VuZC5wcm90b3R5cGUgPSBuZXcgTm9PcCgpO1xuXG4gICAgICAgIHJldHVybiBmQm91bmQ7XG4gICAgfTtcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L21hcFxuaWYgKCFBcnJheS5wcm90b3R5cGUubWFwKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgIGlmICh0aGlzID09PSB2b2lkIDAgfHwgdGhpcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIE8gPSBPYmplY3QodGhpcyk7XG4gICAgICAgIHZhciBsZW4gPSBPLmxlbmd0aCA+Pj4gMDtcbiAgICAgICAgdmFyIFQ7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBUID0gdGhpc0FyZztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBBID0gbmV3IEFycmF5KGxlbik7XG4gICAgICAgIHZhciBrID0gMDtcblxuICAgICAgICB3aGlsZSAoayA8IGxlbikge1xuICAgICAgICAgICAgdmFyIGtWYWx1ZTtcbiAgICAgICAgICAgIHZhciBtYXBwZWRWYWx1ZTtcbiAgICAgICAgICAgIGlmIChrIGluIE8pIHtcbiAgICAgICAgICAgICAgICBrVmFsdWUgPSBPW2tdO1xuICAgICAgICAgICAgICAgIG1hcHBlZFZhbHVlID0gY2FsbGJhY2suY2FsbChULCBrVmFsdWUsIGssIE8pO1xuICAgICAgICAgICAgICAgIEFba10gPSBtYXBwZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBBO1xuICAgIH07XG59XG5cbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9maWx0ZXJcbmlmICghQXJyYXkucHJvdG90eXBlLmZpbHRlcikge1xuICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbihjYWxsYmFjay8qLCB0aGlzQXJnKi8pIHtcbiAgICAgICAgaWYgKHRoaXMgPT09IHZvaWQgMCB8fCB0aGlzID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0aGlzIGlzIG51bGwgb3Igbm90IGRlZmluZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpO1xuICAgICAgICB2YXIgbGVuID0gdC5sZW5ndGggPj4+IDA7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyID8gYXJndW1lbnRzWzFdIDogdm9pZCAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSBpbiB0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRbaV07XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2ZvckVhY2hcbmlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgIHZhciBUO1xuICAgICAgICB2YXIgaztcbiAgICAgICAgaWYgKHRoaXMgPT09IG51bGwgfHwgdGhpcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcgdGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgTyA9IE9iamVjdCh0aGlzKTtcbiAgICAgICAgdmFyIGxlbiA9IE8ubGVuZ3RoID4+PiAwO1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBUID0gdGhpc0FyZztcbiAgICAgICAgfVxuICAgICAgICBrID0gMDtcbiAgICAgICAgd2hpbGUgKGsgPCBsZW4pIHtcbiAgICAgICAgICAgIHZhciBrVmFsdWU7XG4gICAgICAgICAgICBpZiAoayBpbiBPKSB7XG4gICAgICAgICAgICAgICAga1ZhbHVlID0gT1trXTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKFQsIGtWYWx1ZSwgaywgTyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrKys7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZScsIFsnZXJyb3Itc3RhY2stcGFyc2VyJywgJ3N0YWNrLWdlbmVyYXRvcicsICdzdGFja3RyYWNlLWdwcyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnZXJyb3Itc3RhY2stcGFyc2VyJyksIHJlcXVpcmUoJ3N0YWNrLWdlbmVyYXRvcicpLCByZXF1aXJlKCdzdGFja3RyYWNlLWdwcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2UgPSBmYWN0b3J5KHJvb3QuRXJyb3JTdGFja1BhcnNlciwgcm9vdC5TdGFja0dlbmVyYXRvciwgcm9vdC5TdGFja1RyYWNlR1BTKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIFN0YWNrVHJhY2UoRXJyb3JTdGFja1BhcnNlciwgU3RhY2tHZW5lcmF0b3IsIFN0YWNrVHJhY2VHUFMpIHtcbiAgICB2YXIgX29wdGlvbnMgPSB7XG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBzdGFja2ZyYW1lcyBmb3IgdGhpcyBsaWJyYXJ5IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2UkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignRXJyb3JTdGFja1BhcnNlciQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlR1BTJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrR2VuZXJhdG9yJCQnKSA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZUNhY2hlOiB7fVxuICAgIH07XG5cbiAgICB2YXIgX2dlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRHZW5lcmF0ZUVycm9yKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRXJyb3IgbXVzdCBiZSB0aHJvd24gdG8gZ2V0IHN0YWNrIGluIElFXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdlIDIgZ2l2ZW4gT2JqZWN0cy4gSWYgYSBjb25mbGljdCBvY2N1cnMgdGhlIHNlY29uZCBvYmplY3Qgd2lucy5cbiAgICAgKiBEb2VzIG5vdCBkbyBkZWVwIG1lcmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaXJzdCBiYXNlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWNvbmQgb3ZlcnJpZGVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gbWVyZ2VkIGZpcnN0IGFuZCBzZWNvbmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tZXJnZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcblxuICAgICAgICBbZmlyc3QsIHNlY29uZF0uZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVyci5zdGFjayB8fCBlcnJbJ29wZXJhI3NvdXJjZWxvYyddO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXJlZChzdGFja2ZyYW1lcywgZmlsdGVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXMuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrZnJhbWVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0KG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikgPyB0aGlzLmZyb21FcnJvcihlcnIsIG9wdHMpIDogdGhpcy5nZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgYmFja3RyYWNlIGZyb20gaW52b2NhdGlvbiBwb2ludC5cbiAgICAgICAgICogSU1QT1JUQU5UOiBEb2VzIG5vdCBoYW5kbGUgc291cmNlIG1hcHMgb3IgZ3Vlc3MgZnVuY3Rpb24gbmFtZXMhXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0U3luYzogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0U3luYyhvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyKSA6IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyZWQoc3RhY2ssIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3Igb2JqZWN0LCBwYXJzZSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmb3IgQXJyYXlbU3RhY2tGcmFtZX1cbiAgICAgICAgICovXG4gICAgICAgIGZyb21FcnJvcjogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZnJvbUVycm9yKGVycm9yLCBvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBncHMgPSBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrZnJhbWVzID0gX2ZpbHRlcmVkKEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyb3IpLCBvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShQcm9taXNlLmFsbChzdGFja2ZyYW1lcy5tYXAoZnVuY3Rpb24oc2YpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVPcmlnaW5hbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ3BzLnBpbnBvaW50KHNmKS50aGVuKHJlc29sdmUsIHJlc29sdmVPcmlnaW5hbClbJ2NhdGNoJ10ocmVzb2x2ZU9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBTdGFja0dlbmVyYXRvciB0byBnZW5lcmF0ZSBhIGJhY2t0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IG9mIEFycmF5W1N0YWNrRnJhbWVdXG4gICAgICAgICAqL1xuICAgICAgICBnZW5lcmF0ZUFydGlmaWNpYWxseTogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2VuZXJhdGVBcnRpZmljaWFsbHkob3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgc3RhY2tGcmFtZXMgPSBTdGFja0dlbmVyYXRvci5iYWNrdHJhY2Uob3B0cyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgc3RhY2tGcmFtZXMgPSBzdGFja0ZyYW1lcy5maWx0ZXIob3B0cy5maWx0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGFja0ZyYW1lcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24sIHdyYXAgaXQgc3VjaCB0aGF0IGludm9jYXRpb25zIHRyaWdnZXIgYSBjYWxsYmFjayB0aGF0XG4gICAgICAgICAqIGlzIGNhbGxlZCB3aXRoIGEgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGluc3RydW1lbnRlZFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdpdGggYSBzdGFjayB0cmFjZSBvbiBpbnZvY2F0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVycmJhY2sgb3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGVycm9yIGlmIHVuYWJsZSB0byBnZXQgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIG9wdGlvbmFsIGNvbnRleHQgb2JqZWN0IChlLmcuIHdpbmRvdylcbiAgICAgICAgICovXG4gICAgICAgIGluc3RydW1lbnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnQoZm4sIGNhbGxiYWNrLCBlcnJiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBpbnN0cnVtZW50ZWQsIHJldHVybiBnaXZlbiBGdW5jdGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGluc3RydW1lbnRlZCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnRlZCgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCgpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZyB8fCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb21FcnJvcihlKS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrKVsnY2F0Y2gnXShlcnJiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGluc3RydW1lbnRlZC5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID0gZm47XG5cbiAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50ZWQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBpbnN0cnVtZW50ZWQsXG4gICAgICAgICAqIHJldmVydCB0aGUgZnVuY3Rpb24gdG8gaXQncyBvcmlnaW5hbCAobm9uLWluc3RydW1lbnRlZCkgc3RhdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGRlLWluc3RydW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGRlaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZGVpbnN0cnVtZW50KGZuKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGUtaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIG5vdCBpbnN0cnVtZW50ZWQsIHJldHVybiBvcmlnaW5hbFxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3IgbWVzc2FnZSBhbmQgQXJyYXkgb2YgU3RhY2tGcmFtZXMsIHNlcmlhbGl6ZSBhbmQgUE9TVCB0byBnaXZlbiBVUkwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrZnJhbWVzXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVycm9yTXNnXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0T3B0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgcmVwb3J0OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRyZXBvcnQoc3RhY2tmcmFtZXMsIHVybCwgZXJyb3JNc2csIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPj0gMjAwICYmIHJlcS5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdQT1NUIHRvICcgKyB1cmwgKyAnIGZhaWxlZCB3aXRoIHN0YXR1czogJyArIHJlcS5zdGF0dXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVxLm9wZW4oJ3Bvc3QnLCB1cmwpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHJlcXVlc3QgaGVhZGVyc1xuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucyAmJiB0eXBlb2YgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgaGVhZGVyc1toZWFkZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZXBvcnRQYXlsb2FkID0ge3N0YWNrOiBzdGFja2ZyYW1lc307XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQgJiYgZXJyb3JNc2cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0UGF5bG9hZC5tZXNzYWdlID0gZXJyb3JNc2c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVwb3J0UGF5bG9hZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIl19 diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index 30b82c3..c584bd7 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i=["eval",""].indexOf(r[0])>-1?void 0:r[0];return new e({functionName:o,fileName:i,lineNumber:r[1],columnNumber:r[2],source:t})},this)},parseFFOrSafari:function(t){var n=t.stack.split("\n").filter(function(e){return!e.match(r)},this);return n.map(function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),t.indexOf("@")===-1&&t.indexOf(":")===-1)return new e({functionName:t});var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e({functionName:o,fileName:r[0],lineNumber:r[1],columnNumber:r[2],source:t})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:t})},this)}}})},{stackframe:13}],2:[function(t,n,r){(function(o,i){!function(t,o){"object"==typeof r&&"undefined"!=typeof n?n.exports=o():"function"==typeof e&&e.amd?e(o):t.ES6Promise=o()}(this,function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function n(e){return"function"==typeof e}function r(e){W=e}function a(e){V=e}function s(){return function(){return o.nextTick(p)}}function u(){return function(){Y(p)}}function c(){var e=0,t=new Q(p),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function l(){var e=new MessageChannel;return e.port1.onmessage=p,function(){return e.port2.postMessage(0)}}function f(){var e=setTimeout;return function(){return e(p,1)}}function p(){for(var e=0;e1)))/4)-T((e-1901+t)/100)+T((e-1601+t)/400)};if((g=v.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=y?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?m=2==i?function(e,t){var n,r={},o=y.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=y.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var n,o,i=y.call(e)==b,s=!i&&"function"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&"prototype"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),m(e,t)},!n("json-stringify")){var j={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},k="000000",P=function(e,t){return(k+(t||0)).slice(-e)},x="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);n-1/0&&s<1/0){if(M){for(p=T(s/864e5),c=T(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=T((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,v=T(h/36e5)%24,_=T(h/6e4)%60,w=T(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),v=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(c<=0||c>=1e4?(c<0?"-":"+")+P(6,c<0?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,v)+":"+P(2,_)+":"+P(2,w)+"."+P(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=y.call(s),u==E)return""+s;if(u==A)return s>-1/0&&s<1/0?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),N=[],x=i,i+=o,u==S){for(j=0,k=s.length;j0)for(r="",n>10&&(n=10);r.length=48&&o<=57||o>=97&&o<=102||o>=65&&o<=70||B();e+=G("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&o<=57){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&o<=57)&&B(),r=!1;U=48&&o<=57);U++);if(46==i.charCodeAt(U)){for(n=++U;n=48&&o<=57);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),43!=o&&45!=o||U++,n=U;n=48&&o<=57);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),","!=e&&"string"==typeof e&&"@"==(N?e.charAt(0):e[0])&&":"==J()||B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(y.call(o)==S)for(r=o.length;r--;)I(o,r,n);else m(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,$=""+e,n=q(J()),"$"!=J()&&B(),U=$=null,t&&y.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return t.runInContext=o,t}var i="function"==typeof e&&e.amd,a={"function":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&"object"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,t,n){function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function a(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function s(){d&&g&&(d=!1,g.length?m=g.concat(m):v=-1,m.length&&u())}function u(){if(!d){var e=i(s);d=!0;for(var t=m.length;t;){for(g=m,m=[];++v1)for(var n=1;n=0&&e>1;return t?-n:n}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],9:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;p1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),C.push(n),"number"==typeof n.originalLine&&b.push(n)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=o(t),r=o(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(y))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,i(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function m(e,t){return e===t?0:e>t?1:-1}function d(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=m(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:m(e.name,t.name)))))}n.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},n.relative=u;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=d},{}],12:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof r?n.exports=i(t("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300||"file://"===e.substr(0,7)&&r.responseText?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],r=e.split("\n"),o="",i=Math.min(t,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=n.length,l=0;l>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;a>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;i>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;r=200&&a.status<400?o(a.responseText):i(new Error("POST to "+t+" failed with status: "+a.status)))},a.open("post",t),a.setRequestHeader("Content-Type","application/json"),r&&"object"==typeof r.headers){var s=r.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==n&&null!==n&&(c.message=n),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":12,"stacktrace-gps":14}]},{},[2,3,15,16])(16)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i=["eval",""].indexOf(r[0])>-1?void 0:r[0];return new e({functionName:o,fileName:i,lineNumber:r[1],columnNumber:r[2],source:t})},this)},parseFFOrSafari:function(t){var n=t.stack.split("\n").filter(function(e){return!e.match(r)},this);return n.map(function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),t.indexOf("@")===-1&&t.indexOf(":")===-1)return new e({functionName:t});var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e({functionName:o,fileName:r[0],lineNumber:r[1],columnNumber:r[2],source:t})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:t})},this)}}})},{stackframe:13}],2:[function(t,n,r){(function(o,i){!function(t,o){"object"==typeof r&&"undefined"!=typeof n?n.exports=o():"function"==typeof e&&e.amd?e(o):t.ES6Promise=o()}(this,function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function n(e){return"function"==typeof e}function r(e){W=e}function a(e){V=e}function s(){return function(){return o.nextTick(p)}}function u(){return function(){Y(p)}}function c(){var e=0,t=new Q(p),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function l(){var e=new MessageChannel;return e.port1.onmessage=p,function(){return e.port2.postMessage(0)}}function f(){var e=setTimeout;return function(){return e(p,1)}}function p(){for(var e=0;e1)))/4)-T((e-1901+t)/100)+T((e-1601+t)/400)};if((g=v.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=y?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?d=2==i?function(e,t){var n,r={},o=y.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=y.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var n,o,i=y.call(e)==b,s=!i&&"function"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&"prototype"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),d(e,t)},!n("json-stringify")){var j={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},k="000000",P=function(e,t){return(k+(t||0)).slice(-e)},x="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);n-1/0&&s<1/0){if(M){for(p=T(s/864e5),c=T(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=T((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,v=T(h/36e5)%24,_=T(h/6e4)%60,w=T(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),v=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(c<=0||c>=1e4?(c<0?"-":"+")+P(6,c<0?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,v)+":"+P(2,_)+":"+P(2,w)+"."+P(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=y.call(s),u==E)return""+s;if(u==A)return s>-1/0&&s<1/0?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),N=[],x=i,i+=o,u==S){for(j=0,k=s.length;j0)for(r="",n>10&&(n=10);r.length=48&&o<=57||o>=97&&o<=102||o>=65&&o<=70||B();e+=G("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&o<=57){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&o<=57)&&B(),r=!1;U=48&&o<=57);U++);if(46==i.charCodeAt(U)){for(n=++U;n=48&&o<=57);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),43!=o&&45!=o||U++,n=U;n=48&&o<=57);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),","!=e&&"string"==typeof e&&"@"==(N?e.charAt(0):e[0])&&":"==J()||B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(y.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,$=""+e,n=q(J()),"$"!=J()&&B(),U=$=null,t&&y.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return t.runInContext=o,t}var i="function"==typeof e&&e.amd,a={"function":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&"object"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,t,n){function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function a(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function s(){m&&g&&(m=!1,g.length?d=g.concat(d):v=-1,d.length&&u())}function u(){if(!m){var e=i(s);m=!0;for(var t=d.length;t;){for(g=d,d=[];++v1)for(var n=1;n=0&&e>1;return t?-n:n}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],9:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;p1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),C.push(n),"number"==typeof n.originalLine&&b.push(n)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=o(t),r=o(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(y))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,i(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function d(e,t){return e===t?0:e>t?1:-1}function m(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=d(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:d(e.name,t.name)))))}n.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},n.relative=u;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},{}],12:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof r?n.exports=i(t("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300||"file://"===e.substr(0,7)&&r.responseText?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],r=e.split("\n"),o="",i=Math.min(t,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=n.length,l=0;l>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;a>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;i>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;r=200&&a.status<400?o(a.responseText):i(new Error("POST to "+t+" failed with status: "+a.status)))},a.open("post",t),a.setRequestHeader("Content-Type","application/json"),r&&"object"==typeof r.headers){var s=r.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==n&&null!==n&&(c.message=n),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":12,"stacktrace-gps":14}]},{},[2,3,15,16])(16)}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace.js b/dist/stacktrace.js index b2e7e30..3375a70 100644 --- a/dist/stacktrace.js +++ b/dist/stacktrace.js @@ -2288,7 +2288,7 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate })); },{"stackframe":10}],10:[function(require,module,exports){ -(function (root, factory) { +(function(root, factory) { 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. @@ -2300,18 +2300,18 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate } else { root.StackFrame = factory(); } -}(this, function () { +}(this, function() { 'use strict'; function _isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n); } function _capitalize(str) { - return str[0].toUpperCase() + str.substring(1); + return str.charAt(0).toUpperCase() + str.substring(1); } function _getter(p) { - return function () { + return function() { return this[p]; }; } @@ -2321,9 +2321,10 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate var stringProps = ['fileName', 'functionName', 'source']; var arrayProps = ['args']; + var props = booleanProps.concat(numericProps, stringProps, arrayProps); + function StackFrame(obj) { if (obj instanceof Object) { - var props = booleanProps.concat(numericProps.concat(stringProps.concat(arrayProps))); for (var i = 0; i < props.length; i++) { if (obj.hasOwnProperty(props[i]) && obj[props[i]] !== undefined) { this['set' + _capitalize(props[i])](obj[props[i]]); @@ -2333,20 +2334,20 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate } StackFrame.prototype = { - getArgs: function () { + getArgs: function() { return this.args; }, - setArgs: function (v) { + setArgs: function(v) { if (Object.prototype.toString.call(v) !== '[object Array]') { throw new TypeError('Args must be an Array'); } this.args = v; }, - getEvalOrigin: function () { + getEvalOrigin: function() { return this.evalOrigin; }, - setEvalOrigin: function (v) { + setEvalOrigin: function(v) { if (v instanceof StackFrame) { this.evalOrigin = v; } else if (v instanceof Object) { @@ -2356,7 +2357,7 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate } }, - toString: function () { + toString: function() { var functionName = this.getFunctionName() || '{anonymous}'; var args = '(' + (this.getArgs() || []).join(',') + ')'; var fileName = this.getFileName() ? ('@' + this.getFileName()) : ''; @@ -2368,8 +2369,8 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate for (var i = 0; i < booleanProps.length; i++) { StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]); - StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function (p) { - return function (v) { + StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) { + return function(v) { this[p] = Boolean(v); }; })(booleanProps[i]); @@ -2377,8 +2378,8 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate for (var j = 0; j < numericProps.length; j++) { StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]); - StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function (p) { - return function (v) { + StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) { + return function(v) { if (!_isNumber(v)) { throw new TypeError(p + ' must be a Number'); } @@ -2389,8 +2390,8 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate for (var k = 0; k < stringProps.length; k++) { StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]); - StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function (p) { - return function (v) { + StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) { + return function(v) { this[p] = String(v); }; })(stringProps[k]); @@ -2528,9 +2529,14 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate } function _findSourceMappingURL(source) { - var m = /\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/m.exec(source); - if (m && m[1]) { - return m[1]; + var sourceMappingUrlRegExp = /\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/mg; + var lastSourceMappingUrl; + var matchSourceMappingUrl; + while (matchSourceMappingUrl = sourceMappingUrlRegExp.exec(source)) { // jshint ignore:line + lastSourceMappingUrl = matchSourceMappingUrl[1]; + } + if (lastSourceMappingUrl) { + return lastSourceMappingUrl; } else { throw new Error('sourceMappingURL not found'); } @@ -2624,8 +2630,8 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate * Creating SourceMapConsumers is expensive, so this wraps the creation of a * SourceMapConsumer in a per-instance cache. * - * @param sourceMappingURL = {String} URL to fetch source map from - * @param defaultSourceRoot = Default source root for source map if undefined + * @param {String} sourceMappingURL = URL to fetch source map from + * @param {String} defaultSourceRoot = Default source root for source map if undefined * @returns {Promise} that resolves a SourceMapConsumer */ this._getSourceMapConsumer = function _getSourceMapConsumer(sourceMappingURL, defaultSourceRoot) { @@ -2723,12 +2729,13 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate sourceMappingURL = defaultSourceRoot + sourceMappingURL; } - return this._getSourceMapConsumer(sourceMappingURL, defaultSourceRoot).then(function(sourceMapConsumer) { - return _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) - .then(resolve)['catch'](function() { - resolve(stackframe); + return this._getSourceMapConsumer(sourceMappingURL, defaultSourceRoot) + .then(function(sourceMapConsumer) { + return _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) + .then(resolve)['catch'](function() { + resolve(stackframe); + }); }); - }); }.bind(this), reject)['catch'](reject); }.bind(this)); }; @@ -2966,4 +2973,4 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate },{"error-stack-parser":1,"stack-generator":9,"stacktrace-gps":11}]},{},[12])(12) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9hcnJheS1zZXQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LXZscS5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iYXNlNjQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9xdWljay1zb3J0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAtY29uc3VtZXIuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9zdGFjay1nZW5lcmF0b3Ivc3RhY2stZ2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrZnJhbWUvc3RhY2tmcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja3RyYWNlLWdwcy9zdGFja3RyYWNlLWdwcy5qcyIsInN0YWNrdHJhY2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2phQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnZXJyb3Itc3RhY2stcGFyc2VyJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuRXJyb3JTdGFja1BhcnNlciA9IGZhY3Rvcnkocm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIoU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFAgPSAvKF58QClcXFMrXFw6XFxkKy87XG4gICAgdmFyIENIUk9NRV9JRV9TVEFDS19SRUdFWFAgPSAvXlxccyphdCAuKihcXFMrXFw6XFxkK3xcXChuYXRpdmVcXCkpL207XG4gICAgdmFyIFNBRkFSSV9OQVRJVkVfQ09ERV9SRUdFWFAgPSAvXihldmFsQCk/KFxcW25hdGl2ZSBjb2RlXFxdKT8kLztcblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhbiBFcnJvciBvYmplY3QsIGV4dHJhY3QgdGhlIG1vc3QgaW5mb3JtYXRpb24gZnJvbSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBvZiBTdGFja0ZyYW1lc1xuICAgICAgICAgKi9cbiAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVycm9yLnN0YWNrdHJhY2UgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBlcnJvclsnb3BlcmEjc291cmNlbG9jJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YWNrICYmIGVycm9yLnN0YWNrLm1hdGNoKENIUk9NRV9JRV9TVEFDS19SRUdFWFApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VWOE9ySUUoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRkZPclNhZmFyaShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIGdpdmVuIEVycm9yIG9iamVjdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFNlcGFyYXRlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGZyb20gYSBzdHJpbmcgb2YgdGhlIGZvcm06IChVUkk6TGluZTpDb2x1bW4pXG4gICAgICAgIGV4dHJhY3RMb2NhdGlvbjogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkZXh0cmFjdExvY2F0aW9uKHVybExpa2UpIHtcbiAgICAgICAgICAgIC8vIEZhaWwtZmFzdCBidXQgcmV0dXJuIGxvY2F0aW9ucyBsaWtlIFwiKG5hdGl2ZSlcIlxuICAgICAgICAgICAgaWYgKHVybExpa2UuaW5kZXhPZignOicpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbdXJsTGlrZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByZWdFeHAgPSAvKC4rPykoPzpcXDooXFxkKykpPyg/OlxcOihcXGQrKSk/JC87XG4gICAgICAgICAgICB2YXIgcGFydHMgPSByZWdFeHAuZXhlYyh1cmxMaWtlLnJlcGxhY2UoL1tcXChcXCldL2csICcnKSk7XG4gICAgICAgICAgICByZXR1cm4gW3BhcnRzWzFdLCBwYXJ0c1syXSB8fCB1bmRlZmluZWQsIHBhcnRzWzNdIHx8IHVuZGVmaW5lZF07XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VWOE9ySUU6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlVjhPcklFKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFsaW5lLm1hdGNoKENIUk9NRV9JRV9TVEFDS19SRUdFWFApO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJyhldmFsICcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSBldmFsIGluZm9ybWF0aW9uIHVudGlsIHdlIGltcGxlbWVudCBzdGFja3RyYWNlLmpzL3N0YWNrZnJhbWUjOFxuICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC9ldmFsIGNvZGUvZywgJ2V2YWwnKS5yZXBsYWNlKC8oXFwoZXZhbCBhdCBbXlxcKCldKil8KFxcKVxcLC4qJCkvZywgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5yZXBsYWNlKC9eXFxzKy8sICcnKS5yZXBsYWNlKC9cXChldmFsIGNvZGUvZywgJygnKS5zcGxpdCgvXFxzKy8pLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gdG9rZW5zLmpvaW4oJyAnKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gWydldmFsJywgJzxhbm9ueW1vdXM+J10uaW5kZXhPZihsb2NhdGlvblBhcnRzWzBdKSA+IC0xID8gdW5kZWZpbmVkIDogbG9jYXRpb25QYXJ0c1swXTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZUZGT3JTYWZhcmk6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlRkZPclNhZmFyaShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFsaW5lLm1hdGNoKFNBRkFSSV9OQVRJVkVfQ09ERV9SRUdFWFApO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgZXZhbCBpbmZvcm1hdGlvbiB1bnRpbCB3ZSBpbXBsZW1lbnQgc3RhY2t0cmFjZS5qcy9zdGFja2ZyYW1lIzhcbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCcgPiBldmFsJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC8gbGluZSAoXFxkKykoPzogPiBldmFsIGxpbmUgXFxkKykqID4gZXZhbFxcOlxcZCtcXDpcXGQrL2csICc6JDEnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCdAJykgPT09IC0xICYmIGxpbmUuaW5kZXhPZignOicpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTYWZhcmkgZXZhbCBmcmFtZXMgb25seSBoYXZlIGZ1bmN0aW9uIG5hbWVzIGFuZCBub3RoaW5nIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbGluZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5zcGxpdCgnQCcpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0b2tlbnMuam9pbignQCcpIHx8IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbG9jYXRpb25QYXJ0c1swXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYShlKSB7XG4gICAgICAgICAgICBpZiAoIWUuc3RhY2t0cmFjZSB8fCAoZS5tZXNzYWdlLmluZGV4T2YoJ1xcbicpID4gLTEgJiZcbiAgICAgICAgICAgICAgICBlLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpLmxlbmd0aCA+IGUuc3RhY2t0cmFjZS5zcGxpdCgnXFxuJykubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmE5KGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghZS5zdGFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmExMChlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTExKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmE5OiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhOShlKSB7XG4gICAgICAgICAgICB2YXIgbGluZVJFID0gL0xpbmUgKFxcZCspLipzY3JpcHQgKD86aW4gKT8oXFxTKykvaTtcbiAgICAgICAgICAgIHZhciBsaW5lcyA9IGUubWVzc2FnZS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAyLCBsZW4gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmVSRS5leGVjKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVzW2ldXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTEwOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhMTAoZSkge1xuICAgICAgICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspKD86OiBJbiBmdW5jdGlvbiAoXFxTKykpPyQvaTtcbiAgICAgICAgICAgIHZhciBsaW5lcyA9IGUuc3RhY2t0cmFjZS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmVSRS5leGVjKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBtYXRjaFszXSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZXNbaV1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIE9wZXJhIDEwLjY1KyBFcnJvci5zdGFjayB2ZXJ5IHNpbWlsYXIgdG8gRkYvU2FmYXJpXG4gICAgICAgIHBhcnNlT3BlcmExMTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTExKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFsaW5lLm1hdGNoKEZJUkVGT1hfU0FGQVJJX1NUQUNLX1JFR0VYUCkgJiYgIWxpbmUubWF0Y2goL15FcnJvciBjcmVhdGVkIGF0Lyk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGxpbmUuc3BsaXQoJ0AnKTtcbiAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uQ2FsbCA9ICh0b2tlbnMuc2hpZnQoKSB8fCAnJyk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uQ2FsbFxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLzxhbm9ueW1vdXMgZnVuY3Rpb24oOiAoXFx3KykpPz4vLCAnJDInKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteXFwpXSpcXCkvZywgJycpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB2YXIgYXJnc1JhdztcbiAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25DYWxsLm1hdGNoKC9cXCgoW15cXCldKilcXCkvKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzUmF3ID0gZnVuY3Rpb25DYWxsLnJlcGxhY2UoL15bXlxcKF0rXFwoKFteXFwpXSopXFwpJC8sICckMScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IChhcmdzUmF3ID09PSB1bmRlZmluZWQgfHwgYXJnc1JhdyA9PT0gJ1thcmd1bWVudHMgbm90IGF2YWlsYWJsZV0nKSA/XG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA6IGFyZ3NSYXcuc3BsaXQoJywnKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbG9jYXRpb25QYXJ0c1swXSxcbiAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggaXMgYSBjb21iaW5hdGlvbiBvZiBhbiBhcnJheSBhbmQgYSBzZXQuIEFkZGluZyBhIG5ld1xuICogbWVtYmVyIGlzIE8oMSksIHRlc3RpbmcgZm9yIG1lbWJlcnNoaXAgaXMgTygxKSwgYW5kIGZpbmRpbmcgdGhlIGluZGV4IG9mIGFuXG4gKiBlbGVtZW50IGlzIE8oMSkuIFJlbW92aW5nIGVsZW1lbnRzIGZyb20gdGhlIHNldCBpcyBub3Qgc3VwcG9ydGVkLiBPbmx5XG4gKiBzdHJpbmdzIGFyZSBzdXBwb3J0ZWQgZm9yIG1lbWJlcnNoaXAuXG4gKi9cbmZ1bmN0aW9uIEFycmF5U2V0KCkge1xuICB0aGlzLl9hcnJheSA9IFtdO1xuICB0aGlzLl9zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xufVxuXG4vKipcbiAqIFN0YXRpYyBtZXRob2QgZm9yIGNyZWF0aW5nIEFycmF5U2V0IGluc3RhbmNlcyBmcm9tIGFuIGV4aXN0aW5nIGFycmF5LlxuICovXG5BcnJheVNldC5mcm9tQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF9mcm9tQXJyYXkoYUFycmF5LCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzZXQgPSBuZXcgQXJyYXlTZXQoKTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFBcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHNldC5hZGQoYUFycmF5W2ldLCBhQWxsb3dEdXBsaWNhdGVzKTtcbiAgfVxuICByZXR1cm4gc2V0O1xufTtcblxuLyoqXG4gKiBSZXR1cm4gaG93IG1hbnkgdW5pcXVlIGl0ZW1zIGFyZSBpbiB0aGlzIEFycmF5U2V0LiBJZiBkdXBsaWNhdGVzIGhhdmUgYmVlblxuICogYWRkZWQsIHRoYW4gdGhvc2UgZG8gbm90IGNvdW50IHRvd2FyZHMgdGhlIHNpemUuXG4gKlxuICogQHJldHVybnMgTnVtYmVyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gQXJyYXlTZXRfc2l6ZSgpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3NldCkubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGlzIHNldC5cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgdmFyIGlzRHVwbGljYXRlID0gaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgdmFyIGlkeCA9IHRoaXMuX2FycmF5Lmxlbmd0aDtcbiAgaWYgKCFpc0R1cGxpY2F0ZSB8fCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgfVxuICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgdGhpcy5fc2V0W3NTdHJdID0gaWR4O1xuICB9XG59O1xuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBzdHJpbmcgYSBtZW1iZXIgb2YgdGhpcyBzZXQ/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBBcnJheVNldF9oYXMoYVN0cikge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHJldHVybiBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xufTtcblxuLyoqXG4gKiBXaGF0IGlzIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gc3RyaW5nIGluIHRoZSBhcnJheT9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBBcnJheVNldF9pbmRleE9mKGFTdHIpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICBpZiAoaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKSkge1xuICAgIHJldHVybiB0aGlzLl9zZXRbc1N0cl07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU3RyICsgJ1wiIGlzIG5vdCBpbiB0aGUgc2V0LicpO1xufTtcblxuLyoqXG4gKiBXaGF0IGlzIHRoZSBlbGVtZW50IGF0IHRoZSBnaXZlbiBpbmRleD9cbiAqXG4gKiBAcGFyYW0gTnVtYmVyIGFJZHhcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gQXJyYXlTZXRfYXQoYUlkeCkge1xuICBpZiAoYUlkeCA+PSAwICYmIGFJZHggPCB0aGlzLl9hcnJheS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJyYXlbYUlkeF07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBlbGVtZW50IGluZGV4ZWQgYnkgJyArIGFJZHgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhcnJheSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNldCAod2hpY2ggaGFzIHRoZSBwcm9wZXIgaW5kaWNlc1xuICogaW5kaWNhdGVkIGJ5IGluZGV4T2YpLiBOb3RlIHRoYXQgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIGludGVybmFsIGFycmF5IHVzZWRcbiAqIGZvciBzdG9yaW5nIHRoZSBtZW1iZXJzIHNvIHRoYXQgbm8gb25lIGNhbiBtZXNzIHdpdGggaW50ZXJuYWwgc3RhdGUuXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfdG9BcnJheSgpIHtcbiAgcmV0dXJuIHRoaXMuX2FycmF5LnNsaWNlKCk7XG59O1xuXG5leHBvcnRzLkFycmF5U2V0ID0gQXJyYXlTZXQ7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICpcbiAqIEJhc2VkIG9uIHRoZSBCYXNlIDY0IFZMUSBpbXBsZW1lbnRhdGlvbiBpbiBDbG9zdXJlIENvbXBpbGVyOlxuICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jbG9zdXJlLWNvbXBpbGVyL3NvdXJjZS9icm93c2UvdHJ1bmsvc3JjL2NvbS9nb29nbGUvZGVidWdnaW5nL3NvdXJjZW1hcC9CYXNlNjRWTFEuamF2YVxuICpcbiAqIENvcHlyaWdodCAyMDExIFRoZSBDbG9zdXJlIENvbXBpbGVyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbiAqIG1ldDpcbiAqXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxuICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcbiAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZFxuICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICogICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkXG4gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuICogXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCcuL2Jhc2U2NCcpO1xuXG4vLyBBIHNpbmdsZSBiYXNlIDY0IGRpZ2l0IGNhbiBjb250YWluIDYgYml0cyBvZiBkYXRhLiBGb3IgdGhlIGJhc2UgNjQgdmFyaWFibGVcbi8vIGxlbmd0aCBxdWFudGl0aWVzIHdlIHVzZSBpbiB0aGUgc291cmNlIG1hcCBzcGVjLCB0aGUgZmlyc3QgYml0IGlzIHRoZSBzaWduLFxuLy8gdGhlIG5leHQgZm91ciBiaXRzIGFyZSB0aGUgYWN0dWFsIHZhbHVlLCBhbmQgdGhlIDZ0aCBiaXQgaXMgdGhlXG4vLyBjb250aW51YXRpb24gYml0LiBUaGUgY29udGludWF0aW9uIGJpdCB0ZWxscyB1cyB3aGV0aGVyIHRoZXJlIGFyZSBtb3JlXG4vLyBkaWdpdHMgaW4gdGhpcyB2YWx1ZSBmb2xsb3dpbmcgdGhpcyBkaWdpdC5cbi8vXG4vLyAgIENvbnRpbnVhdGlvblxuLy8gICB8ICAgIFNpZ25cbi8vICAgfCAgICB8XG4vLyAgIFYgICAgVlxuLy8gICAxMDEwMTFcblxudmFyIFZMUV9CQVNFX1NISUZUID0gNTtcblxuLy8gYmluYXJ5OiAxMDAwMDBcbnZhciBWTFFfQkFTRSA9IDEgPDwgVkxRX0JBU0VfU0hJRlQ7XG5cbi8vIGJpbmFyeTogMDExMTExXG52YXIgVkxRX0JBU0VfTUFTSyA9IFZMUV9CQVNFIC0gMTtcblxuLy8gYmluYXJ5OiAxMDAwMDBcbnZhciBWTFFfQ09OVElOVUFUSU9OX0JJVCA9IFZMUV9CQVNFO1xuXG4vKipcbiAqIENvbnZlcnRzIGZyb20gYSB0d28tY29tcGxlbWVudCB2YWx1ZSB0byBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gKiAgIDEgYmVjb21lcyAyICgxMCBiaW5hcnkpLCAtMSBiZWNvbWVzIDMgKDExIGJpbmFyeSlcbiAqICAgMiBiZWNvbWVzIDQgKDEwMCBiaW5hcnkpLCAtMiBiZWNvbWVzIDUgKDEwMSBiaW5hcnkpXG4gKi9cbmZ1bmN0aW9uIHRvVkxRU2lnbmVkKGFWYWx1ZSkge1xuICByZXR1cm4gYVZhbHVlIDwgMFxuICAgID8gKCgtYVZhbHVlKSA8PCAxKSArIDFcbiAgICA6IChhVmFsdWUgPDwgMSkgKyAwO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRvIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgZnJvbSBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gKiAgIDIgKDEwIGJpbmFyeSkgYmVjb21lcyAxLCAzICgxMSBiaW5hcnkpIGJlY29tZXMgLTFcbiAqICAgNCAoMTAwIGJpbmFyeSkgYmVjb21lcyAyLCA1ICgxMDEgYmluYXJ5KSBiZWNvbWVzIC0yXG4gKi9cbmZ1bmN0aW9uIGZyb21WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHZhciBpc05lZ2F0aXZlID0gKGFWYWx1ZSAmIDEpID09PSAxO1xuICB2YXIgc2hpZnRlZCA9IGFWYWx1ZSA+PiAxO1xuICByZXR1cm4gaXNOZWdhdGl2ZVxuICAgID8gLXNoaWZ0ZWRcbiAgICA6IHNoaWZ0ZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmFzZSA2NCBWTFEgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZW5jb2RlKGFWYWx1ZSkge1xuICB2YXIgZW5jb2RlZCA9IFwiXCI7XG4gIHZhciBkaWdpdDtcblxuICB2YXIgdmxxID0gdG9WTFFTaWduZWQoYVZhbHVlKTtcblxuICBkbyB7XG4gICAgZGlnaXQgPSB2bHEgJiBWTFFfQkFTRV9NQVNLO1xuICAgIHZscSA+Pj49IFZMUV9CQVNFX1NISUZUO1xuICAgIGlmICh2bHEgPiAwKSB7XG4gICAgICAvLyBUaGVyZSBhcmUgc3RpbGwgbW9yZSBkaWdpdHMgaW4gdGhpcyB2YWx1ZSwgc28gd2UgbXVzdCBtYWtlIHN1cmUgdGhlXG4gICAgICAvLyBjb250aW51YXRpb24gYml0IGlzIG1hcmtlZC5cbiAgICAgIGRpZ2l0IHw9IFZMUV9DT05USU5VQVRJT05fQklUO1xuICAgIH1cbiAgICBlbmNvZGVkICs9IGJhc2U2NC5lbmNvZGUoZGlnaXQpO1xuICB9IHdoaWxlICh2bHEgPiAwKTtcblxuICByZXR1cm4gZW5jb2RlZDtcbn07XG5cbi8qKlxuICogRGVjb2RlcyB0aGUgbmV4dCBiYXNlIDY0IFZMUSB2YWx1ZSBmcm9tIHRoZSBnaXZlbiBzdHJpbmcgYW5kIHJldHVybnMgdGhlXG4gKiB2YWx1ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyB2aWEgdGhlIG91dCBwYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gYmFzZTY0VkxRX2RlY29kZShhU3RyLCBhSW5kZXgsIGFPdXRQYXJhbSkge1xuICB2YXIgc3RyTGVuID0gYVN0ci5sZW5ndGg7XG4gIHZhciByZXN1bHQgPSAwO1xuICB2YXIgc2hpZnQgPSAwO1xuICB2YXIgY29udGludWF0aW9uLCBkaWdpdDtcblxuICBkbyB7XG4gICAgaWYgKGFJbmRleCA+PSBzdHJMZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG1vcmUgZGlnaXRzIGluIGJhc2UgNjQgVkxRIHZhbHVlLlwiKTtcbiAgICB9XG5cbiAgICBkaWdpdCA9IGJhc2U2NC5kZWNvZGUoYVN0ci5jaGFyQ29kZUF0KGFJbmRleCsrKSk7XG4gICAgaWYgKGRpZ2l0ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiYXNlNjQgZGlnaXQ6IFwiICsgYVN0ci5jaGFyQXQoYUluZGV4IC0gMSkpO1xuICAgIH1cblxuICAgIGNvbnRpbnVhdGlvbiA9ICEhKGRpZ2l0ICYgVkxRX0NPTlRJTlVBVElPTl9CSVQpO1xuICAgIGRpZ2l0ICY9IFZMUV9CQVNFX01BU0s7XG4gICAgcmVzdWx0ID0gcmVzdWx0ICsgKGRpZ2l0IDw8IHNoaWZ0KTtcbiAgICBzaGlmdCArPSBWTFFfQkFTRV9TSElGVDtcbiAgfSB3aGlsZSAoY29udGludWF0aW9uKTtcblxuICBhT3V0UGFyYW0udmFsdWUgPSBmcm9tVkxRU2lnbmVkKHJlc3VsdCk7XG4gIGFPdXRQYXJhbS5yZXN0ID0gYUluZGV4O1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIGludFRvQ2hhck1hcCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJy5zcGxpdCgnJyk7XG5cbi8qKlxuICogRW5jb2RlIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIG9mIDAgdG8gNjMgdG8gYSBzaW5nbGUgYmFzZSA2NCBkaWdpdC5cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiAobnVtYmVyKSB7XG4gIGlmICgwIDw9IG51bWJlciAmJiBudW1iZXIgPCBpbnRUb0NoYXJNYXAubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGludFRvQ2hhck1hcFtudW1iZXJdO1xuICB9XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGJldHdlZW4gMCBhbmQgNjM6IFwiICsgbnVtYmVyKTtcbn07XG5cbi8qKlxuICogRGVjb2RlIGEgc2luZ2xlIGJhc2UgNjQgY2hhcmFjdGVyIGNvZGUgZGlnaXQgdG8gYW4gaW50ZWdlci4gUmV0dXJucyAtMSBvblxuICogZmFpbHVyZS5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiAoY2hhckNvZGUpIHtcbiAgdmFyIGJpZ0EgPSA2NTsgICAgIC8vICdBJ1xuICB2YXIgYmlnWiA9IDkwOyAgICAgLy8gJ1onXG5cbiAgdmFyIGxpdHRsZUEgPSA5NzsgIC8vICdhJ1xuICB2YXIgbGl0dGxlWiA9IDEyMjsgLy8gJ3onXG5cbiAgdmFyIHplcm8gPSA0ODsgICAgIC8vICcwJ1xuICB2YXIgbmluZSA9IDU3OyAgICAgLy8gJzknXG5cbiAgdmFyIHBsdXMgPSA0MzsgICAgIC8vICcrJ1xuICB2YXIgc2xhc2ggPSA0NzsgICAgLy8gJy8nXG5cbiAgdmFyIGxpdHRsZU9mZnNldCA9IDI2O1xuICB2YXIgbnVtYmVyT2Zmc2V0ID0gNTI7XG5cbiAgLy8gMCAtIDI1OiBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlxuICBpZiAoYmlnQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBiaWdaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGJpZ0EpO1xuICB9XG5cbiAgLy8gMjYgLSA1MTogYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcbiAgaWYgKGxpdHRsZUEgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gbGl0dGxlWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBsaXR0bGVBICsgbGl0dGxlT2Zmc2V0KTtcbiAgfVxuXG4gIC8vIDUyIC0gNjE6IDAxMjM0NTY3ODlcbiAgaWYgKHplcm8gPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gbmluZSkge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSB6ZXJvICsgbnVtYmVyT2Zmc2V0KTtcbiAgfVxuXG4gIC8vIDYyOiArXG4gIGlmIChjaGFyQ29kZSA9PSBwbHVzKSB7XG4gICAgcmV0dXJuIDYyO1xuICB9XG5cbiAgLy8gNjM6IC9cbiAgaWYgKGNoYXJDb2RlID09IHNsYXNoKSB7XG4gICAgcmV0dXJuIDYzO1xuICB9XG5cbiAgLy8gSW52YWxpZCBiYXNlNjQgZGlnaXQuXG4gIHJldHVybiAtMTtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbmV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogUmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2guXG4gKlxuICogQHBhcmFtIGFMb3cgSW5kaWNlcyBoZXJlIGFuZCBsb3dlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFIaWdoIEluZGljZXMgaGVyZSBhbmQgaGlnaGVyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBub24tZW1wdHkgYXJyYXkgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgRnVuY3Rpb24gd2hpY2ggdGFrZXMgdHdvIGVsZW1lbnRzIGFuZCByZXR1cm5zIC0xLCAwLCBvciAxLlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiByZWN1cnNpdmVTZWFyY2goYUxvdywgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gIC8vXG4gIC8vICAgMS4gV2UgZmluZCB0aGUgZXhhY3QgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gIC8vXG4gIC8vICAgMi4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBidXQgd2UgY2FuIHJldHVybiB0aGUgaW5kZXggb2ZcbiAgLy8gICAgICB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQuXG4gIC8vXG4gIC8vICAgMy4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBhbmQgdGhlcmUgaXMgbm8gbmV4dC1jbG9zZXN0XG4gIC8vICAgICAgZWxlbWVudCB0aGFuIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IsIHNvIHdlIHJldHVybiAtMS5cbiAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gIHZhciBjbXAgPSBhQ29tcGFyZShhTmVlZGxlLCBhSGF5c3RhY2tbbWlkXSwgdHJ1ZSk7XG4gIGlmIChjbXAgPT09IDApIHtcbiAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgcmV0dXJuIG1pZDtcbiAgfVxuICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBncmVhdGVyIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKGFIaWdoIC0gbWlkID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKG1pZCwgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gYUhpZ2ggPCBhSGF5c3RhY2subGVuZ3RoID8gYUhpZ2ggOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBsZXNzIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKG1pZCAtIGFMb3cgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgbG93ZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFMb3cgPCAwID8gLTEgOiBhTG93O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCB3aGljaCB3aWxsIGFsd2F5cyB0cnkgYW5kIHJldHVyblxuICogdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGVsZW1lbnQgaWYgdGhlcmUgaXMgbm8gZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2VcbiAqIG1hcHBpbmdzIGJldHdlZW4gb3JpZ2luYWwgYW5kIGdlbmVyYXRlZCBsaW5lL2NvbCBwYWlycyBhcmUgc2luZ2xlIHBvaW50cyxcbiAqIGFuZCB0aGVyZSBpcyBhbiBpbXBsaWNpdCByZWdpb24gYmV0d2VlbiBlYWNoIG9mIHRoZW0sIHNvIGEgbWlzcyBqdXN0IG1lYW5zXG4gKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQgb2YgYSByZWdpb24uXG4gKlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgeW91IGFyZSBsb29raW5nIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgbmVlZGxlIGFuZCBhbiBlbGVtZW50IGluIHRoZVxuICogICAgIGFycmF5IGFuZCByZXR1cm5zIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuZWVkbGUgaXMgbGVzc1xuICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqL1xuZXhwb3J0cy5zZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgaWYgKGFIYXlzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaW5kZXggPSByZWN1cnNpdmVTZWFyY2goLTEsIGFIYXlzdGFjay5sZW5ndGgsIGFOZWVkbGUsIGFIYXlzdGFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21wYXJlLCBhQmlhcyB8fCBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIFdlIGhhdmUgZm91bmQgZWl0aGVyIHRoZSBleGFjdCBlbGVtZW50LCBvciB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQgdGhhblxuICAvLyB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLiBIb3dldmVyLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBzdWNoXG4gIC8vIGVsZW1lbnQuIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGVzZS5cbiAgd2hpbGUgKGluZGV4IC0gMSA+PSAwKSB7XG4gICAgaWYgKGFDb21wYXJlKGFIYXlzdGFja1tpbmRleF0sIGFIYXlzdGFja1tpbmRleCAtIDFdLCB0cnVlKSAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC0taW5kZXg7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG4vLyBJdCB0dXJucyBvdXQgdGhhdCBzb21lIChtb3N0PykgSmF2YVNjcmlwdCBlbmdpbmVzIGRvbid0IHNlbGYtaG9zdFxuLy8gYEFycmF5LnByb3RvdHlwZS5zb3J0YC4gVGhpcyBtYWtlcyBzZW5zZSBiZWNhdXNlIEMrKyB3aWxsIGxpa2VseSByZW1haW5cbi8vIGZhc3RlciB0aGFuIEpTIHdoZW4gZG9pbmcgcmF3IENQVS1pbnRlbnNpdmUgc29ydGluZy4gSG93ZXZlciwgd2hlbiB1c2luZyBhXG4vLyBjdXN0b20gY29tcGFyYXRvciBmdW5jdGlvbiwgY2FsbGluZyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZSBWTSdzIEMrKyBhbmRcbi8vIEpJVCdkIEpTIGlzIHJhdGhlciBzbG93ICphbmQqIGxvc2VzIEpJVCB0eXBlIGluZm9ybWF0aW9uLCByZXN1bHRpbmcgaW5cbi8vIHdvcnNlIGdlbmVyYXRlZCBjb2RlIGZvciB0aGUgY29tcGFyYXRvciBmdW5jdGlvbiB0aGFuIHdvdWxkIGJlIG9wdGltYWwuIEluXG4vLyBmYWN0LCB3aGVuIHNvcnRpbmcgd2l0aCBhIGNvbXBhcmF0b3IsIHRoZXNlIGNvc3RzIG91dHdlaWdoIHRoZSBiZW5lZml0cyBvZlxuLy8gc29ydGluZyBpbiBDKysuIEJ5IHVzaW5nIG91ciBvd24gSlMtaW1wbGVtZW50ZWQgUXVpY2sgU29ydCAoYmVsb3cpLCB3ZSBnZXRcbi8vIGEgfjM1MDBtcyBtZWFuIHNwZWVkLXVwIGluIGBiZW5jaC9iZW5jaC5odG1sYC5cblxuLyoqXG4gKiBTd2FwIHRoZSBlbGVtZW50cyBpbmRleGVkIGJ5IGB4YCBhbmQgYHlgIGluIHRoZSBhcnJheSBgYXJ5YC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBUaGUgYXJyYXkuXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogICAgICAgIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgaXRlbS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgaXRlbS5cbiAqL1xuZnVuY3Rpb24gc3dhcChhcnksIHgsIHkpIHtcbiAgdmFyIHRlbXAgPSBhcnlbeF07XG4gIGFyeVt4XSA9IGFyeVt5XTtcbiAgYXJ5W3ldID0gdGVtcDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgd2l0aGluIHRoZSByYW5nZSBgbG93IC4uIGhpZ2hgIGluY2x1c2l2ZS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbG93XG4gKiAgICAgICAgVGhlIGxvd2VyIGJvdW5kIG9uIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7TnVtYmVyfSBoaWdoXG4gKiAgICAgICAgVGhlIHVwcGVyIGJvdW5kIG9uIHRoZSByYW5nZS5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tSW50SW5SYW5nZShsb3csIGhpZ2gpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQobG93ICsgKE1hdGgucmFuZG9tKCkgKiAoaGlnaCAtIGxvdykpKTtcbn1cblxuLyoqXG4gKiBUaGUgUXVpY2sgU29ydCBhbGdvcml0aG0uXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gKiAgICAgICAgQW4gYXJyYXkgdG8gc29ydC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXBhcmF0b3JcbiAqICAgICAgICBGdW5jdGlvbiB0byB1c2UgdG8gY29tcGFyZSB0d28gaXRlbXMuXG4gKiBAcGFyYW0ge051bWJlcn0gcFxuICogICAgICAgIFN0YXJ0IGluZGV4IG9mIHRoZSBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9IHJcbiAqICAgICAgICBFbmQgaW5kZXggb2YgdGhlIGFycmF5XG4gKi9cbmZ1bmN0aW9uIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcCwgcikge1xuICAvLyBJZiBvdXIgbG93ZXIgYm91bmQgaXMgbGVzcyB0aGFuIG91ciB1cHBlciBib3VuZCwgd2UgKDEpIHBhcnRpdGlvbiB0aGVcbiAgLy8gYXJyYXkgaW50byB0d28gcGllY2VzIGFuZCAoMikgcmVjdXJzZSBvbiBlYWNoIGhhbGYuIElmIGl0IGlzIG5vdCwgdGhpcyBpc1xuICAvLyB0aGUgZW1wdHkgYXJyYXkgYW5kIG91ciBiYXNlIGNhc2UuXG5cbiAgaWYgKHAgPCByKSB7XG4gICAgLy8gKDEpIFBhcnRpdGlvbmluZy5cbiAgICAvL1xuICAgIC8vIFRoZSBwYXJ0aXRpb25pbmcgY2hvb3NlcyBhIHBpdm90IGJldHdlZW4gYHBgIGFuZCBgcmAgYW5kIG1vdmVzIGFsbFxuICAgIC8vIGVsZW1lbnRzIHRoYXQgYXJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcGl2b3QgdG8gdGhlIGJlZm9yZSBpdCwgYW5kXG4gICAgLy8gYWxsIHRoZSBlbGVtZW50cyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gaXQgYWZ0ZXIgaXQuIFRoZSBlZmZlY3QgaXMgdGhhdFxuICAgIC8vIG9uY2UgcGFydGl0aW9uIGlzIGRvbmUsIHRoZSBwaXZvdCBpcyBpbiB0aGUgZXhhY3QgcGxhY2UgaXQgd2lsbCBiZSB3aGVuXG4gICAgLy8gdGhlIGFycmF5IGlzIHB1dCBpbiBzb3J0ZWQgb3JkZXIsIGFuZCBpdCB3aWxsIG5vdCBuZWVkIHRvIGJlIG1vdmVkXG4gICAgLy8gYWdhaW4uIFRoaXMgcnVucyBpbiBPKG4pIHRpbWUuXG5cbiAgICAvLyBBbHdheXMgY2hvb3NlIGEgcmFuZG9tIHBpdm90IHNvIHRoYXQgYW4gaW5wdXQgYXJyYXkgd2hpY2ggaXMgcmV2ZXJzZVxuICAgIC8vIHNvcnRlZCBkb2VzIG5vdCBjYXVzZSBPKG5eMikgcnVubmluZyB0aW1lLlxuICAgIHZhciBwaXZvdEluZGV4ID0gcmFuZG9tSW50SW5SYW5nZShwLCByKTtcbiAgICB2YXIgaSA9IHAgLSAxO1xuXG4gICAgc3dhcChhcnksIHBpdm90SW5kZXgsIHIpO1xuICAgIHZhciBwaXZvdCA9IGFyeVtyXTtcblxuICAgIC8vIEltbWVkaWF0ZWx5IGFmdGVyIGBqYCBpcyBpbmNyZW1lbnRlZCBpbiB0aGlzIGxvb3AsIHRoZSBmb2xsb3dpbmcgaG9sZFxuICAgIC8vIHRydWU6XG4gICAgLy9cbiAgICAvLyAgICogRXZlcnkgZWxlbWVudCBpbiBgYXJ5W3AgLi4gaV1gIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcGl2b3QuXG4gICAgLy9cbiAgICAvLyAgICogRXZlcnkgZWxlbWVudCBpbiBgYXJ5W2krMSAuLiBqLTFdYCBpcyBncmVhdGVyIHRoYW4gdGhlIHBpdm90LlxuICAgIGZvciAodmFyIGogPSBwOyBqIDwgcjsgaisrKSB7XG4gICAgICBpZiAoY29tcGFyYXRvcihhcnlbal0sIHBpdm90KSA8PSAwKSB7XG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgc3dhcChhcnksIGksIGopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3YXAoYXJ5LCBpICsgMSwgaik7XG4gICAgdmFyIHEgPSBpICsgMTtcblxuICAgIC8vICgyKSBSZWN1cnNlIG9uIGVhY2ggaGFsZi5cblxuICAgIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcCwgcSAtIDEpO1xuICAgIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcSArIDEsIHIpO1xuICB9XG59XG5cbi8qKlxuICogU29ydCB0aGUgZ2l2ZW4gYXJyYXkgaW4tcGxhY2Ugd2l0aCB0aGUgZ2l2ZW4gY29tcGFyYXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqL1xuZXhwb3J0cy5xdWlja1NvcnQgPSBmdW5jdGlvbiAoYXJ5LCBjb21wYXJhdG9yKSB7XG4gIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgMCwgYXJ5Lmxlbmd0aCAtIDEpO1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBiaW5hcnlTZWFyY2ggPSByZXF1aXJlKCcuL2JpbmFyeS1zZWFyY2gnKTtcbnZhciBBcnJheVNldCA9IHJlcXVpcmUoJy4vYXJyYXktc2V0JykuQXJyYXlTZXQ7XG52YXIgYmFzZTY0VkxRID0gcmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7XG52YXIgcXVpY2tTb3J0ID0gcmVxdWlyZSgnLi9xdWljay1zb3J0JykucXVpY2tTb3J0O1xuXG5mdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgfVxuXG4gIHJldHVybiBzb3VyY2VNYXAuc2VjdGlvbnMgIT0gbnVsbFxuICAgID8gbmV3IEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXApXG4gICAgOiBuZXcgQmFzaWNTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXApO1xufVxuXG5Tb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID0gZnVuY3Rpb24oYVNvdXJjZU1hcCkge1xuICByZXR1cm4gQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwKGFTb3VyY2VNYXApO1xufVxuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLy8gYF9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZCBgX19vcmlnaW5hbE1hcHBpbmdzYCBhcmUgYXJyYXlzIHRoYXQgaG9sZCB0aGVcbi8vIHBhcnNlZCBtYXBwaW5nIGNvb3JkaW5hdGVzIGZyb20gdGhlIHNvdXJjZSBtYXAncyBcIm1hcHBpbmdzXCIgYXR0cmlidXRlLiBUaGV5XG4vLyBhcmUgbGF6aWx5IGluc3RhbnRpYXRlZCwgYWNjZXNzZWQgdmlhIHRoZSBgX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbi8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgZ2V0dGVycyByZXNwZWN0aXZlbHksIGFuZCB3ZSBvbmx5IHBhcnNlIHRoZSBtYXBwaW5nc1xuLy8gYW5kIGNyZWF0ZSB0aGVzZSBhcnJheXMgb25jZSBxdWVyaWVkIGZvciBhIHNvdXJjZSBsb2NhdGlvbi4gV2UganVtcCB0aHJvdWdoXG4vLyB0aGVzZSBob29wcyBiZWNhdXNlIHRoZXJlIGNhbiBiZSBtYW55IHRob3VzYW5kcyBvZiBtYXBwaW5ncywgYW5kIHBhcnNpbmdcbi8vIHRoZW0gaXMgZXhwZW5zaXZlLCBzbyB3ZSBvbmx5IHdhbnQgdG8gZG8gaXQgaWYgd2UgbXVzdC5cbi8vXG4vLyBFYWNoIG9iamVjdCBpbiB0aGUgYXJyYXlzIGlzIG9mIHRoZSBmb3JtOlxuLy9cbi8vICAgICB7XG4vLyAgICAgICBnZW5lcmF0ZWRMaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBzb3VyY2U6IFRoZSBwYXRoIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSB0aGF0IGdlbmVyYXRlZCB0aGlzXG4vLyAgICAgICAgICAgICAgIGNodW5rIG9mIGNvZGUsXG4vLyAgICAgICBvcmlnaW5hbExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRoYXRcbi8vICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsQ29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRoYXRcbi8vICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgbmFtZTogVGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIHN5bWJvbCB3aGljaCBnZW5lcmF0ZWQgdGhpcyBjaHVuayBvZlxuLy8gICAgICAgICAgICAgY29kZS5cbi8vICAgICB9XG4vL1xuLy8gQWxsIHByb3BlcnRpZXMgZXhjZXB0IGZvciBgZ2VuZXJhdGVkTGluZWAgYW5kIGBnZW5lcmF0ZWRDb2x1bW5gIGNhbiBiZVxuLy8gYG51bGxgLlxuLy9cbi8vIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMuXG4vL1xuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMuXG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX2dlbmVyYXRlZE1hcHBpbmdzID0gbnVsbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfZ2VuZXJhdGVkTWFwcGluZ3MnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gIH1cbn0pO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19vcmlnaW5hbE1hcHBpbmdzID0gbnVsbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfb3JpZ2luYWxNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncykge1xuICAgICAgdGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncywgdGhpcy5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fX29yaWdpbmFsTWFwcGluZ3M7XG4gIH1cbn0pO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGluZGV4KSB7XG4gICAgdmFyIGMgPSBhU3RyLmNoYXJBdChpbmRleCk7XG4gICAgcmV0dXJuIGMgPT09IFwiO1wiIHx8IGMgPT09IFwiLFwiO1xuICB9O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgX3BhcnNlTWFwcGluZ3NcIik7XG4gIH07XG5cblNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUiA9IDE7XG5Tb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUiA9IDI7XG5cblNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgZWFjaCBtYXBwaW5nIGJldHdlZW4gYW4gb3JpZ2luYWwgc291cmNlL2xpbmUvY29sdW1uIGFuZCBhXG4gKiBnZW5lcmF0ZWQgbGluZS9jb2x1bW4gaW4gdGhpcyBzb3VyY2UgbWFwLlxuICpcbiAqIEBwYXJhbSBGdW5jdGlvbiBhQ2FsbGJhY2tcbiAqICAgICAgICBUaGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBlYWNoIG1hcHBpbmcuXG4gKiBAcGFyYW0gT2JqZWN0IGFDb250ZXh0XG4gKiAgICAgICAgT3B0aW9uYWwuIElmIHNwZWNpZmllZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSB0aGUgdmFsdWUgb2YgYHRoaXNgIGV2ZXJ5XG4gKiAgICAgICAgdGltZSB0aGF0IGBhQ2FsbGJhY2tgIGlzIGNhbGxlZC5cbiAqIEBwYXJhbSBhT3JkZXJcbiAqICAgICAgICBFaXRoZXIgYFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUmAgb3JcbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVJgLiBTcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCB0b1xuICogICAgICAgIGl0ZXJhdGUgb3ZlciB0aGUgbWFwcGluZ3Mgc29ydGVkIGJ5IHRoZSBnZW5lcmF0ZWQgZmlsZSdzIGxpbmUvY29sdW1uXG4gKiAgICAgICAgb3JkZXIgb3IgdGhlIG9yaWdpbmFsJ3Mgc291cmNlL2xpbmUvY29sdW1uIG9yZGVyLCByZXNwZWN0aXZlbHkuIERlZmF1bHRzIHRvXG4gKiAgICAgICAgYFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUmAuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5lYWNoTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2VhY2hNYXBwaW5nKGFDYWxsYmFjaywgYUNvbnRleHQsIGFPcmRlcikge1xuICAgIHZhciBjb250ZXh0ID0gYUNvbnRleHQgfHwgbnVsbDtcbiAgICB2YXIgb3JkZXIgPSBhT3JkZXIgfHwgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSO1xuXG4gICAgdmFyIG1hcHBpbmdzO1xuICAgIHN3aXRjaCAob3JkZXIpIHtcbiAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUjpcbiAgICAgIG1hcHBpbmdzID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gb3JkZXIgb2YgaXRlcmF0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlUm9vdCA9IHRoaXMuc291cmNlUm9vdDtcbiAgICBtYXBwaW5ncy5tYXAoZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBtYXBwaW5nLnNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCAmJiBzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uLFxuICAgICAgICBvcmlnaW5hbExpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgbmFtZTogbWFwcGluZy5uYW1lID09PSBudWxsID8gbnVsbCA6IHRoaXMuX25hbWVzLmF0KG1hcHBpbmcubmFtZSlcbiAgICAgIH07XG4gICAgfSwgdGhpcykuZm9yRWFjaChhQ2FsbGJhY2ssIGNvbnRleHQpO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgYWxsIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHByb3ZpZGVkLiBJZiBubyBjb2x1bW4gaXMgcHJvdmlkZWQsIHJldHVybnMgYWxsIG1hcHBpbmdzXG4gKiBjb3JyZXNwb25kaW5nIHRvIGEgZWl0aGVyIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yIG9yIHRoZSBuZXh0XG4gKiBjbG9zZXN0IGxpbmUgdGhhdCBoYXMgYW55IG1hcHBpbmdzLiBPdGhlcndpc2UsIHJldHVybnMgYWxsIG1hcHBpbmdzXG4gKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBsaW5lIGFuZCBlaXRoZXIgdGhlIGNvbHVtbiB3ZSBhcmUgc2VhcmNoaW5nIGZvclxuICogb3IgdGhlIG5leHQgY2xvc2VzdCBjb2x1bW4gdGhhdCBoYXMgYW55IG9mZnNldHMuXG4gKlxuICogVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGNvbHVtbjogT3B0aW9uYWwuIHRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKlxuICogYW5kIGFuIGFycmF5IG9mIG9iamVjdHMgaXMgcmV0dXJuZWQsIGVhY2ggd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yKGFBcmdzKSB7XG4gICAgdmFyIGxpbmUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKTtcblxuICAgIC8vIFdoZW4gdGhlcmUgaXMgbm8gZXhhY3QgbWF0Y2gsIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kTWFwcGluZ1xuICAgIC8vIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IG1hcHBpbmcgbGVzcyB0aGFuIHRoZSBuZWVkbGUuIEJ5XG4gICAgLy8gc2V0dGluZyBuZWVkbGUub3JpZ2luYWxDb2x1bW4gdG8gMCwgd2UgdGh1cyBmaW5kIHRoZSBsYXN0IG1hcHBpbmcgZm9yXG4gICAgLy8gdGhlIGdpdmVuIGxpbmUsIHByb3ZpZGVkIHN1Y2ggYSBtYXBwaW5nIGV4aXN0cy5cbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgc291cmNlOiB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpLFxuICAgICAgb3JpZ2luYWxMaW5lOiBsaW5lLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJywgMClcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBuZWVkbGUuc291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIG5lZWRsZS5zb3VyY2UpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3NvdXJjZXMuaGFzKG5lZWRsZS5zb3VyY2UpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIG5lZWRsZS5zb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2YobmVlZGxlLnNvdXJjZSk7XG5cbiAgICB2YXIgbWFwcGluZ3MgPSBbXTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKG5lZWRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKGFBcmdzLmNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZTtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIGZvdW5kLiBTaW5jZVxuICAgICAgICAvLyBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGZvdW5kLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gb3JpZ2luYWxMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIHdlcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgLy8gU2luY2UgbWFwcGluZ3MgYXJlIHNvcnRlZCwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG1hcHBpbmdzIGZvclxuICAgICAgICAvLyB0aGUgbGluZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgd2hpbGUgKG1hcHBpbmcgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBsaW5lICYmXG4gICAgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID09IG9yaWdpbmFsQ29sdW1uKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5ncztcbiAgfTtcblxuZXhwb3J0cy5Tb3VyY2VNYXBDb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2ggd2UgY2FuXG4gKiBxdWVyeSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGZpbGUgcG9zaXRpb25zIGJ5IGdpdmluZyBpdCBhIGZpbGVcbiAqIHBvc2l0aW9uIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyB0aGUgcmF3IHNvdXJjZSBtYXAgKGVpdGhlciBhcyBhIEpTT04gc3RyaW5nLCBvclxuICogYWxyZWFkeSBwYXJzZWQgdG8gYW4gb2JqZWN0KS4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzb3VyY2UgbWFwcyBoYXZlIHRoZVxuICogZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gc291cmNlczogQW4gYXJyYXkgb2YgVVJMcyB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG5hbWVzOiBBbiBhcnJheSBvZiBpZGVudGlmaWVycyB3aGljaCBjYW4gYmUgcmVmZXJyZW5jZWQgYnkgaW5kaXZpZHVhbCBtYXBwaW5ncy5cbiAqICAgLSBzb3VyY2VSb290OiBPcHRpb25hbC4gVGhlIFVSTCByb290IGZyb20gd2hpY2ggYWxsIHNvdXJjZXMgYXJlIHJlbGF0aXZlLlxuICogICAtIHNvdXJjZXNDb250ZW50OiBPcHRpb25hbC4gQW4gYXJyYXkgb2YgY29udGVudHMgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAqICAgLSBtYXBwaW5nczogQSBzdHJpbmcgb2YgYmFzZTY0IFZMUXMgd2hpY2ggY29udGFpbiB0aGUgYWN0dWFsIG1hcHBpbmdzLlxuICogICAtIGZpbGU6IE9wdGlvbmFsLiBUaGUgZ2VuZXJhdGVkIGZpbGUgdGhpcyBzb3VyY2UgbWFwIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAqXG4gKiBIZXJlIGlzIGFuIGV4YW1wbGUgc291cmNlIG1hcCwgdGFrZW4gZnJvbSB0aGUgc291cmNlIG1hcCBzcGVjWzBdOlxuICpcbiAqICAgICB7XG4gKiAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgIGZpbGU6IFwib3V0LmpzXCIsXG4gKiAgICAgICBzb3VyY2VSb290IDogXCJcIixcbiAqICAgICAgIHNvdXJjZXM6IFtcImZvby5qc1wiLCBcImJhci5qc1wiXSxcbiAqICAgICAgIG5hbWVzOiBbXCJzcmNcIiwgXCJtYXBzXCIsIFwiYXJlXCIsIFwiZnVuXCJdLFxuICogICAgICAgbWFwcGluZ3M6IFwiQUEsQUI7O0FCQ0RFO1wiXG4gKiAgICAgfVxuICpcbiAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0P3BsaT0xI1xuICovXG5mdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgdmFyIHZlcnNpb24gPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICd2ZXJzaW9uJyk7XG4gIHZhciBzb3VyY2VzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlcycpO1xuICAvLyBTYXNzIDMuMyBsZWF2ZXMgb3V0IHRoZSAnbmFtZXMnIGFycmF5LCBzbyB3ZSBkZXZpYXRlIGZyb20gdGhlIHNwZWMgKHdoaWNoXG4gIC8vIHJlcXVpcmVzIHRoZSBhcnJheSkgdG8gcGxheSBuaWNlIGhlcmUuXG4gIHZhciBuYW1lcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ25hbWVzJywgW10pO1xuICB2YXIgc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZVJvb3QnLCBudWxsKTtcbiAgdmFyIHNvdXJjZXNDb250ZW50ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlc0NvbnRlbnQnLCBudWxsKTtcbiAgdmFyIG1hcHBpbmdzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbWFwcGluZ3MnKTtcbiAgdmFyIGZpbGUgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdmaWxlJywgbnVsbCk7XG5cbiAgLy8gT25jZSBhZ2FpbiwgU2FzcyBkZXZpYXRlcyBmcm9tIHRoZSBzcGVjIGFuZCBzdXBwbGllcyB0aGUgdmVyc2lvbiBhcyBhXG4gIC8vIHN0cmluZyByYXRoZXIgdGhhbiBhIG51bWJlciwgc28gd2UgdXNlIGxvb3NlIGVxdWFsaXR5IGNoZWNraW5nIGhlcmUuXG4gIGlmICh2ZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgfVxuXG4gIHNvdXJjZXMgPSBzb3VyY2VzXG4gICAgLm1hcChTdHJpbmcpXG4gICAgLy8gU29tZSBzb3VyY2UgbWFwcyBwcm9kdWNlIHJlbGF0aXZlIHNvdXJjZSBwYXRocyBsaWtlIFwiLi9mb28uanNcIiBpbnN0ZWFkIG9mXG4gICAgLy8gXCJmb28uanNcIi4gIE5vcm1hbGl6ZSB0aGVzZSBmaXJzdCBzbyB0aGF0IGZ1dHVyZSBjb21wYXJpc29ucyB3aWxsIHN1Y2NlZWQuXG4gICAgLy8gU2VlIGJ1Z3ppbC5sYS8xMDkwNzY4LlxuICAgIC5tYXAodXRpbC5ub3JtYWxpemUpXG4gICAgLy8gQWx3YXlzIGVuc3VyZSB0aGF0IGFic29sdXRlIHNvdXJjZXMgYXJlIGludGVybmFsbHkgc3RvcmVkIHJlbGF0aXZlIHRvXG4gICAgLy8gdGhlIHNvdXJjZSByb290LCBpZiB0aGUgc291cmNlIHJvb3QgaXMgYWJzb2x1dGUuIE5vdCBkb2luZyB0aGlzIHdvdWxkXG4gICAgLy8gYmUgcGFydGljdWxhcmx5IHByb2JsZW1hdGljIHdoZW4gdGhlIHNvdXJjZSByb290IGlzIGEgcHJlZml4IG9mIHRoZVxuICAgIC8vIHNvdXJjZSAodmFsaWQsIGJ1dCB3aHk/PykuIFNlZSBnaXRodWIgaXNzdWUgIzE5OSBhbmQgYnVnemlsLmxhLzExODg5ODIuXG4gICAgLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gc291cmNlUm9vdCAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlUm9vdCkgJiYgdXRpbC5pc0Fic29sdXRlKHNvdXJjZSlcbiAgICAgICAgPyB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZSlcbiAgICAgICAgOiBzb3VyY2U7XG4gICAgfSk7XG5cbiAgLy8gUGFzcyBgdHJ1ZWAgYmVsb3cgdG8gYWxsb3cgZHVwbGljYXRlIG5hbWVzIGFuZCBzb3VyY2VzLiBXaGlsZSBzb3VyY2UgbWFwc1xuICAvLyBhcmUgaW50ZW5kZWQgdG8gYmUgY29tcHJlc3NlZCBhbmQgZGVkdXBsaWNhdGVkLCB0aGUgVHlwZVNjcmlwdCBjb21waWxlclxuICAvLyBzb21ldGltZXMgZ2VuZXJhdGVzIHNvdXJjZSBtYXBzIHdpdGggZHVwbGljYXRlcyBpbiB0aGVtLiBTZWUgR2l0aHViIGlzc3VlXG4gIC8vICM3MiBhbmQgYnVnemlsLmxhLzg4OTQ5Mi5cbiAgdGhpcy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkobmFtZXMubWFwKFN0cmluZyksIHRydWUpO1xuICB0aGlzLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KHNvdXJjZXMsIHRydWUpO1xuXG4gIHRoaXMuc291cmNlUm9vdCA9IHNvdXJjZVJvb3Q7XG4gIHRoaXMuc291cmNlc0NvbnRlbnQgPSBzb3VyY2VzQ29udGVudDtcbiAgdGhpcy5fbWFwcGluZ3MgPSBtYXBwaW5ncztcbiAgdGhpcy5maWxlID0gZmlsZTtcbn1cblxuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIENyZWF0ZSBhIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgZnJvbSBhIFNvdXJjZU1hcEdlbmVyYXRvci5cbiAqXG4gKiBAcGFyYW0gU291cmNlTWFwR2VuZXJhdG9yIGFTb3VyY2VNYXBcbiAqICAgICAgICBUaGUgc291cmNlIG1hcCB0aGF0IHdpbGwgYmUgY29uc3VtZWQuXG4gKiBAcmV0dXJucyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2Zyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCkge1xuICAgIHZhciBzbWMgPSBPYmplY3QuY3JlYXRlKEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcblxuICAgIHZhciBuYW1lcyA9IHNtYy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fbmFtZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICB2YXIgc291cmNlcyA9IHNtYy5fc291cmNlcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9zb3VyY2VzLnRvQXJyYXkoKSwgdHJ1ZSk7XG4gICAgc21jLnNvdXJjZVJvb3QgPSBhU291cmNlTWFwLl9zb3VyY2VSb290O1xuICAgIHNtYy5zb3VyY2VzQ29udGVudCA9IGFTb3VyY2VNYXAuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQoc21jLl9zb3VyY2VzLnRvQXJyYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYy5zb3VyY2VSb290KTtcbiAgICBzbWMuZmlsZSA9IGFTb3VyY2VNYXAuX2ZpbGU7XG5cbiAgICAvLyBCZWNhdXNlIHdlIGFyZSBtb2RpZnlpbmcgdGhlIGVudHJpZXMgKGJ5IGNvbnZlcnRpbmcgc3RyaW5nIHNvdXJjZXMgYW5kXG4gICAgLy8gbmFtZXMgdG8gaW5kaWNlcyBpbnRvIHRoZSBzb3VyY2VzIGFuZCBuYW1lcyBBcnJheVNldHMpLCB3ZSBoYXZlIHRvIG1ha2VcbiAgICAvLyBhIGNvcHkgb2YgdGhlIGVudHJ5IG9yIGVsc2UgYmFkIHRoaW5ncyBoYXBwZW4uIFNoYXJlZCBtdXRhYmxlIHN0YXRlXG4gICAgLy8gc3RyaWtlcyBhZ2FpbiEgU2VlIGdpdGh1YiBpc3N1ZSAjMTkxLlxuXG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gYVNvdXJjZU1hcC5fbWFwcGluZ3MudG9BcnJheSgpLnNsaWNlKCk7XG4gICAgdmFyIGRlc3RHZW5lcmF0ZWRNYXBwaW5ncyA9IHNtYy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIGRlc3RPcmlnaW5hbE1hcHBpbmdzID0gc21jLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc3JjTWFwcGluZyA9IGdlbmVyYXRlZE1hcHBpbmdzW2ldO1xuICAgICAgdmFyIGRlc3RNYXBwaW5nID0gbmV3IE1hcHBpbmc7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gc3JjTWFwcGluZy5nZW5lcmF0ZWRMaW5lO1xuICAgICAgZGVzdE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uID0gc3JjTWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG5cbiAgICAgIGlmIChzcmNNYXBwaW5nLnNvdXJjZSkge1xuICAgICAgICBkZXN0TWFwcGluZy5zb3VyY2UgPSBzb3VyY2VzLmluZGV4T2Yoc3JjTWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbExpbmUgPSBzcmNNYXBwaW5nLm9yaWdpbmFsTGluZTtcbiAgICAgICAgZGVzdE1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBzcmNNYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIGlmIChzcmNNYXBwaW5nLm5hbWUpIHtcbiAgICAgICAgICBkZXN0TWFwcGluZy5uYW1lID0gbmFtZXMuaW5kZXhPZihzcmNNYXBwaW5nLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVzdE9yaWdpbmFsTWFwcGluZ3MucHVzaChkZXN0TWFwcGluZyk7XG4gICAgICB9XG5cbiAgICAgIGRlc3RHZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICB9XG5cbiAgICBxdWlja1NvcnQoc21jLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG5cbiAgICByZXR1cm4gc21jO1xuICB9O1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vKipcbiAqIFRoZSBsaXN0IG9mIG9yaWdpbmFsIHNvdXJjZXMuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ3NvdXJjZXMnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCA/IHV0aWwuam9pbih0aGlzLnNvdXJjZVJvb3QsIHMpIDogcztcbiAgICB9LCB0aGlzKTtcbiAgfVxufSk7XG5cbi8qKlxuICogUHJvdmlkZSB0aGUgSklUIHdpdGggYSBuaWNlIHNoYXBlIC8gaGlkZGVuIGNsYXNzLlxuICovXG5mdW5jdGlvbiBNYXBwaW5nKCkge1xuICB0aGlzLmdlbmVyYXRlZExpbmUgPSAwO1xuICB0aGlzLmdlbmVyYXRlZENvbHVtbiA9IDA7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5vcmlnaW5hbExpbmUgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsQ29sdW1uID0gbnVsbDtcbiAgdGhpcy5uYW1lID0gbnVsbDtcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHZhciBnZW5lcmF0ZWRMaW5lID0gMTtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsTGluZSA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgdmFyIHByZXZpb3VzTmFtZSA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFTdHIubGVuZ3RoO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNhY2hlZFNlZ21lbnRzID0ge307XG4gICAgdmFyIHRlbXAgPSB7fTtcbiAgICB2YXIgb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBnZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBtYXBwaW5nLCBzdHIsIHNlZ21lbnQsIGVuZCwgdmFsdWU7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChhU3RyLmNoYXJBdChpbmRleCkgPT09ICc7Jykge1xuICAgICAgICBnZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJywnKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbWFwcGluZyA9IG5ldyBNYXBwaW5nKCk7XG4gICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9IGdlbmVyYXRlZExpbmU7XG5cbiAgICAgICAgLy8gQmVjYXVzZSBlYWNoIG9mZnNldCBpcyBlbmNvZGVkIHJlbGF0aXZlIHRvIHRoZSBwcmV2aW91cyBvbmUsXG4gICAgICAgIC8vIG1hbnkgc2VnbWVudHMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBlbmNvZGluZy4gV2UgY2FuIGV4cGxvaXQgdGhpc1xuICAgICAgICAvLyBmYWN0IGJ5IGNhY2hpbmcgdGhlIHBhcnNlZCB2YXJpYWJsZSBsZW5ndGggZmllbGRzIG9mIGVhY2ggc2VnbWVudCxcbiAgICAgICAgLy8gYWxsb3dpbmcgdXMgdG8gYXZvaWQgYSBzZWNvbmQgcGFyc2UgaWYgd2UgZW5jb3VudGVyIHRoZSBzYW1lXG4gICAgICAgIC8vIHNlZ21lbnQgYWdhaW4uXG4gICAgICAgIGZvciAoZW5kID0gaW5kZXg7IGVuZCA8IGxlbmd0aDsgZW5kKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhcklzTWFwcGluZ1NlcGFyYXRvcihhU3RyLCBlbmQpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RyID0gYVN0ci5zbGljZShpbmRleCwgZW5kKTtcblxuICAgICAgICBzZWdtZW50ID0gY2FjaGVkU2VnbWVudHNbc3RyXTtcbiAgICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgICBpbmRleCArPSBzdHIubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlZ21lbnQgPSBbXTtcbiAgICAgICAgICB3aGlsZSAoaW5kZXggPCBlbmQpIHtcbiAgICAgICAgICAgIGJhc2U2NFZMUS5kZWNvZGUoYVN0ciwgaW5kZXgsIHRlbXApO1xuICAgICAgICAgICAgdmFsdWUgPSB0ZW1wLnZhbHVlO1xuICAgICAgICAgICAgaW5kZXggPSB0ZW1wLnJlc3Q7XG4gICAgICAgICAgICBzZWdtZW50LnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCBhIHNvdXJjZSwgYnV0IG5vIGxpbmUgYW5kIGNvbHVtbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCBhIHNvdXJjZSBhbmQgbGluZSwgYnV0IG5vIGNvbHVtbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhY2hlZFNlZ21lbnRzW3N0cl0gPSBzZWdtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2VuZXJhdGVkIGNvbHVtbi5cbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiArIHNlZ21lbnRbMF07XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG5cbiAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gMSkge1xuICAgICAgICAgIC8vIE9yaWdpbmFsIHNvdXJjZS5cbiAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHByZXZpb3VzU291cmNlICsgc2VnbWVudFsxXTtcbiAgICAgICAgICBwcmV2aW91c1NvdXJjZSArPSBzZWdtZW50WzFdO1xuXG4gICAgICAgICAgLy8gT3JpZ2luYWwgbGluZS5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IHByZXZpb3VzT3JpZ2luYWxMaW5lICsgc2VnbWVudFsyXTtcbiAgICAgICAgICBwcmV2aW91c09yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICAgIC8vIExpbmVzIGFyZSBzdG9yZWQgMC1iYXNlZFxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lICs9IDE7XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBjb2x1bW4uXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gKyBzZWdtZW50WzNdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gNCkge1xuICAgICAgICAgICAgLy8gT3JpZ2luYWwgbmFtZS5cbiAgICAgICAgICAgIG1hcHBpbmcubmFtZSA9IHByZXZpb3VzTmFtZSArIHNlZ21lbnRbNF07XG4gICAgICAgICAgICBwcmV2aW91c05hbWUgKz0gc2VnbWVudFs0XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICBpZiAodHlwZW9mIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG9yaWdpbmFsTWFwcGluZ3MucHVzaChtYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydChnZW5lcmF0ZWRNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCk7XG4gICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gZ2VuZXJhdGVkTWFwcGluZ3M7XG5cbiAgICBxdWlja1NvcnQob3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBvcmlnaW5hbE1hcHBpbmdzO1xuICB9O1xuXG4vKipcbiAqIEZpbmQgdGhlIG1hcHBpbmcgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGh5cG90aGV0aWNhbCBcIm5lZWRsZVwiIG1hcHBpbmcgdGhhdFxuICogd2UgYXJlIHNlYXJjaGluZyBmb3IgaW4gdGhlIGdpdmVuIFwiaGF5c3RhY2tcIiBvZiBtYXBwaW5ncy5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZmluZE1hcHBpbmcoYU5lZWRsZSwgYU1hcHBpbmdzLCBhTGluZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb2x1bW5OYW1lLCBhQ29tcGFyYXRvciwgYUJpYXMpIHtcbiAgICAvLyBUbyByZXR1cm4gdGhlIHBvc2l0aW9uIHdlIGFyZSBzZWFyY2hpbmcgZm9yLCB3ZSBtdXN0IGZpcnN0IGZpbmQgdGhlXG4gICAgLy8gbWFwcGluZyBmb3IgdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCB0aGVuIHJldHVybiB0aGUgb3Bwb3NpdGUgcG9zaXRpb24gaXRcbiAgICAvLyBwb2ludHMgdG8uIEJlY2F1c2UgdGhlIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHdlIGNhbiB1c2UgYmluYXJ5IHNlYXJjaCB0b1xuICAgIC8vIGZpbmQgdGhlIGJlc3QgbWFwcGluZy5cblxuICAgIGlmIChhTmVlZGxlW2FMaW5lTmFtZV0gPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTGluZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLCBnb3QgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICArIGFOZWVkbGVbYUxpbmVOYW1lXSk7XG4gICAgfVxuICAgIGlmIChhTmVlZGxlW2FDb2x1bW5OYW1lXSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbHVtbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLCBnb3QgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICArIGFOZWVkbGVbYUNvbHVtbk5hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmluYXJ5U2VhcmNoLnNlYXJjaChhTmVlZGxlLCBhTWFwcGluZ3MsIGFDb21wYXJhdG9yLCBhQmlhcyk7XG4gIH07XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgbGFzdCBjb2x1bW4gZm9yIGVhY2ggZ2VuZXJhdGVkIG1hcHBpbmcuIFRoZSBsYXN0IGNvbHVtbiBpc1xuICogaW5jbHVzaXZlLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb21wdXRlQ29sdW1uU3BhbnMgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9jb21wdXRlQ29sdW1uU3BhbnMoKSB7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aDsgKytpbmRleCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIC8vIE1hcHBpbmdzIGRvIG5vdCBjb250YWluIGEgZmllbGQgZm9yIHRoZSBsYXN0IGdlbmVyYXRlZCBjb2x1bW50LiBXZVxuICAgICAgLy8gY2FuIGNvbWUgdXAgd2l0aCBhbiBvcHRpbWlzdGljIGVzdGltYXRlLCBob3dldmVyLCBieSBhc3N1bWluZyB0aGF0XG4gICAgICAvLyBtYXBwaW5ncyBhcmUgY29udGlndW91cyAoaS5lLiBnaXZlbiB0d28gY29uc2VjdXRpdmUgbWFwcGluZ3MsIHRoZVxuICAgICAgLy8gZmlyc3QgbWFwcGluZyBlbmRzIHdoZXJlIHRoZSBzZWNvbmQgb25lIHN0YXJ0cykuXG4gICAgICBpZiAoaW5kZXggKyAxIDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoKSB7XG4gICAgICAgIHZhciBuZXh0TWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4ICsgMV07XG5cbiAgICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9PT0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIG1hcHBpbmcubGFzdEdlbmVyYXRlZENvbHVtbiA9IG5leHRNYXBwaW5nLmdlbmVyYXRlZENvbHVtbiAtIDE7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGxhc3QgbWFwcGluZyBmb3IgZWFjaCBsaW5lIHNwYW5zIHRoZSBlbnRpcmUgbGluZS5cbiAgICAgIG1hcHBpbmcubGFzdEdlbmVyYXRlZENvbHVtbiA9IEluZmluaXR5O1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICBuZWVkbGUsXG4gICAgICB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncyxcbiAgICAgIFwiZ2VuZXJhdGVkTGluZVwiLFxuICAgICAgXCJnZW5lcmF0ZWRDb2x1bW5cIixcbiAgICAgIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQsXG4gICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZWVkbGUuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcobWFwcGluZywgJ3NvdXJjZScsIG51bGwpO1xuICAgICAgICBpZiAoc291cmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5hdChzb3VyY2UpO1xuICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbmFtZScsIG51bGwpO1xuICAgICAgICBpZiAobmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5hdChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbExpbmUnLCBudWxsKSxcbiAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc291cmNlOiBudWxsLFxuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIG5hbWU6IG51bGxcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgdGhlIHNvdXJjZSBjb250ZW50IGZvciBldmVyeSBzb3VyY2UgaW4gdGhlIHNvdXJjZVxuICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnQubGVuZ3RoID49IHRoaXMuX3NvdXJjZXMuc2l6ZSgpICYmXG4gICAgICAhdGhpcy5zb3VyY2VzQ29udGVudC5zb21lKGZ1bmN0aW9uIChzYykgeyByZXR1cm4gc2MgPT0gbnVsbDsgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgYVNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBhU291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc291cmNlcy5oYXMoYVNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihhU291cmNlKV07XG4gICAgfVxuXG4gICAgdmFyIHVybDtcbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGxcbiAgICAgICAgJiYgKHVybCA9IHV0aWwudXJsUGFyc2UodGhpcy5zb3VyY2VSb290KSkpIHtcbiAgICAgIC8vIFhYWDogZmlsZTovLyBVUklzIGFuZCBhYnNvbHV0ZSBwYXRocyBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZm9yXG4gICAgICAvLyBtYW55IHVzZXJzLiBXZSBjYW4gaGVscCB0aGVtIG91dCB3aGVuIHRoZXkgZXhwZWN0IGZpbGU6Ly8gVVJJcyB0b1xuICAgICAgLy8gYmVoYXZlIGxpa2UgaXQgd291bGQgaWYgdGhleSB3ZXJlIHJ1bm5pbmcgYSBsb2NhbCBIVFRQIHNlcnZlci4gU2VlXG4gICAgICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD04ODU1OTcuXG4gICAgICB2YXIgZmlsZVVyaUFic1BhdGggPSBhU291cmNlLnJlcGxhY2UoL15maWxlOlxcL1xcLy8sIFwiXCIpO1xuICAgICAgaWYgKHVybC5zY2hlbWUgPT0gXCJmaWxlXCJcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhmaWxlVXJpQWJzUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGZpbGVVcmlBYnNQYXRoKV1cbiAgICAgIH1cblxuICAgICAgaWYgKCghdXJsLnBhdGggfHwgdXJsLnBhdGggPT0gXCIvXCIpXG4gICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoXCIvXCIgKyBhU291cmNlKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoXCIvXCIgKyBhU291cmNlKV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHJlY3Vyc2l2ZWx5IGZyb21cbiAgICAvLyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IuIEluIHRoYXQgY2FzZSwgd2VcbiAgICAvLyBkb24ndCB3YW50IHRvIHRocm93IGlmIHdlIGNhbid0IGZpbmQgdGhlIHNvdXJjZSAtIHdlIGp1c3Qgd2FudCB0b1xuICAgIC8vIHJldHVybiBudWxsLCBzbyB3ZSBwcm92aWRlIGEgZmxhZyB0byBleGl0IGdyYWNlZnVsbHkuXG4gICAgaWYgKG51bGxPbk1pc3NpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aFxuICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBiaWFzOiBFaXRoZXIgJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdTb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgc291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBsYXN0Q29sdW1uOiBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICBcIm9yaWdpbmFsTGluZVwiLFxuICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKG1hcHBpbmcuc291cmNlID09PSBuZWVkbGUuc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGwsXG4gICAgICBsYXN0Q29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuZXhwb3J0cy5CYXNpY1NvdXJjZU1hcENvbnN1bWVyID0gQmFzaWNTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBBbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBhcnNlZCBzb3VyY2UgbWFwIHdoaWNoXG4gKiB3ZSBjYW4gcXVlcnkgZm9yIGluZm9ybWF0aW9uLiBJdCBkaWZmZXJzIGZyb20gQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpblxuICogdGhhdCBpdCB0YWtlcyBcImluZGV4ZWRcIiBzb3VyY2UgbWFwcyAoaS5lLiBvbmVzIHdpdGggYSBcInNlY3Rpb25zXCIgZmllbGQpIGFzXG4gKiBpbnB1dC5cbiAqXG4gKiBUaGUgb25seSBwYXJhbWV0ZXIgaXMgYSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yIGFscmVhZHlcbiAqIHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgZm9yIGluZGV4ZWQgc291cmNlIG1hcHMsIHRoZXlcbiAqIGhhdmUgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICpcbiAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICogICAtIGZpbGU6IE9wdGlvbmFsLiBUaGUgZ2VuZXJhdGVkIGZpbGUgdGhpcyBzb3VyY2UgbWFwIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAqICAgLSBzZWN0aW9uczogQSBsaXN0IG9mIHNlY3Rpb24gZGVmaW5pdGlvbnMuXG4gKlxuICogRWFjaCB2YWx1ZSB1bmRlciB0aGUgXCJzZWN0aW9uc1wiIGZpZWxkIGhhcyB0d28gZmllbGRzOlxuICogICAtIG9mZnNldDogVGhlIG9mZnNldCBpbnRvIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgYXQgd2hpY2ggdGhpcyBzZWN0aW9uXG4gKiAgICAgICBiZWdpbnMgdG8gYXBwbHksIGRlZmluZWQgYXMgYW4gb2JqZWN0IHdpdGggYSBcImxpbmVcIiBhbmQgXCJjb2x1bW5cIlxuICogICAgICAgZmllbGQuXG4gKiAgIC0gbWFwOiBBIHNvdXJjZSBtYXAgZGVmaW5pdGlvbi4gVGhpcyBzb3VyY2UgbWFwIGNvdWxkIGFsc28gYmUgaW5kZXhlZCxcbiAqICAgICAgIGJ1dCBkb2Vzbid0IGhhdmUgdG8gYmUuXG4gKlxuICogSW5zdGVhZCBvZiB0aGUgXCJtYXBcIiBmaWVsZCwgaXQncyBhbHNvIHBvc3NpYmxlIHRvIGhhdmUgYSBcInVybFwiIGZpZWxkXG4gKiBzcGVjaWZ5aW5nIGEgVVJMIHRvIHJldHJpZXZlIGEgc291cmNlIG1hcCBmcm9tLCBidXQgdGhhdCdzIGN1cnJlbnRseVxuICogdW5zdXBwb3J0ZWQuXG4gKlxuICogSGVyZSdzIGFuIGV4YW1wbGUgc291cmNlIG1hcCwgdGFrZW4gZnJvbSB0aGUgc291cmNlIG1hcCBzcGVjWzBdLCBidXRcbiAqIG1vZGlmaWVkIHRvIG9taXQgYSBzZWN0aW9uIHdoaWNoIHVzZXMgdGhlIFwidXJsXCIgZmllbGQuXG4gKlxuICogIHtcbiAqICAgIHZlcnNpb24gOiAzLFxuICogICAgZmlsZTogXCJhcHAuanNcIixcbiAqICAgIHNlY3Rpb25zOiBbe1xuICogICAgICBvZmZzZXQ6IHtsaW5lOjEwMCwgY29sdW1uOjEwfSxcbiAqICAgICAgbWFwOiB7XG4gKiAgICAgICAgdmVyc2lvbiA6IDMsXG4gKiAgICAgICAgZmlsZTogXCJzZWN0aW9uLmpzXCIsXG4gKiAgICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgIG5hbWVzOiBbXCJzcmNcIiwgXCJtYXBzXCIsIFwiYXJlXCIsIFwiZnVuXCJdLFxuICogICAgICAgIG1hcHBpbmdzOiBcIkFBQUEsRTs7QUJDREU7XCJcbiAqICAgICAgfVxuICogICAgfV0sXG4gKiAgfVxuICpcbiAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0I2hlYWRpbmc9aC41MzVlczN4ZXByZ3RcbiAqL1xuZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgdmFyIHZlcnNpb24gPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICd2ZXJzaW9uJyk7XG4gIHZhciBzZWN0aW9ucyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NlY3Rpb25zJyk7XG5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgdGhpcy5fc291cmNlcyA9IG5ldyBBcnJheVNldCgpO1xuICB0aGlzLl9uYW1lcyA9IG5ldyBBcnJheVNldCgpO1xuXG4gIHZhciBsYXN0T2Zmc2V0ID0ge1xuICAgIGxpbmU6IC0xLFxuICAgIGNvbHVtbjogMFxuICB9O1xuICB0aGlzLl9zZWN0aW9ucyA9IHNlY3Rpb25zLm1hcChmdW5jdGlvbiAocykge1xuICAgIGlmIChzLnVybCkge1xuICAgICAgLy8gVGhlIHVybCBmaWVsZCB3aWxsIHJlcXVpcmUgc3VwcG9ydCBmb3IgYXN5bmNocm9uaWNpdHkuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9pc3N1ZXMvMTZcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VwcG9ydCBmb3IgdXJsIGZpZWxkIGluIHNlY3Rpb25zIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgICB9XG4gICAgdmFyIG9mZnNldCA9IHV0aWwuZ2V0QXJnKHMsICdvZmZzZXQnKTtcbiAgICB2YXIgb2Zmc2V0TGluZSA9IHV0aWwuZ2V0QXJnKG9mZnNldCwgJ2xpbmUnKTtcbiAgICB2YXIgb2Zmc2V0Q29sdW1uID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnY29sdW1uJyk7XG5cbiAgICBpZiAob2Zmc2V0TGluZSA8IGxhc3RPZmZzZXQubGluZSB8fFxuICAgICAgICAob2Zmc2V0TGluZSA9PT0gbGFzdE9mZnNldC5saW5lICYmIG9mZnNldENvbHVtbiA8IGxhc3RPZmZzZXQuY29sdW1uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWN0aW9uIG9mZnNldHMgbXVzdCBiZSBvcmRlcmVkIGFuZCBub24tb3ZlcmxhcHBpbmcuJyk7XG4gICAgfVxuICAgIGxhc3RPZmZzZXQgPSBvZmZzZXQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2VuZXJhdGVkT2Zmc2V0OiB7XG4gICAgICAgIC8vIFRoZSBvZmZzZXQgZmllbGRzIGFyZSAwLWJhc2VkLCBidXQgd2UgdXNlIDEtYmFzZWQgaW5kaWNlcyB3aGVuXG4gICAgICAgIC8vIGVuY29kaW5nL2RlY29kaW5nIGZyb20gVkxRLlxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBvZmZzZXRMaW5lICsgMSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBvZmZzZXRDb2x1bW4gKyAxXG4gICAgICB9LFxuICAgICAgY29uc3VtZXI6IG5ldyBTb3VyY2VNYXBDb25zdW1lcih1dGlsLmdldEFyZyhzLCAnbWFwJykpXG4gICAgfVxuICB9KTtcbn1cblxuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vKipcbiAqIFRoZSBsaXN0IG9mIG9yaWdpbmFsIHNvdXJjZXMuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3NlY3Rpb25zW2ldLmNvbnN1bWVyLnNvdXJjZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgc291cmNlcy5wdXNoKHRoaXMuX3NlY3Rpb25zW2ldLmNvbnN1bWVyLnNvdXJjZXNbal0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc291cmNlcztcbiAgfVxufSk7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkXG4gKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgb3IgbnVsbC5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9vcmlnaW5hbFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIGdlbmVyYXRlZExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgZ2VuZXJhdGVkQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIC8vIEZpbmQgdGhlIHNlY3Rpb24gY29udGFpbmluZyB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9uIHdlJ3JlIHRyeWluZyB0byBtYXBcbiAgICAvLyB0byBhbiBvcmlnaW5hbCBwb3NpdGlvbi5cbiAgICB2YXIgc2VjdGlvbkluZGV4ID0gYmluYXJ5U2VhcmNoLnNlYXJjaChuZWVkbGUsIHRoaXMuX3NlY3Rpb25zLFxuICAgICAgZnVuY3Rpb24obmVlZGxlLCBzZWN0aW9uKSB7XG4gICAgICAgIHZhciBjbXAgPSBuZWVkbGUuZ2VuZXJhdGVkTGluZSAtIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU7XG4gICAgICAgIGlmIChjbXApIHtcbiAgICAgICAgICByZXR1cm4gY21wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgfSk7XG4gICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xuXG4gICAgaWYgKCFzZWN0aW9uKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbmFtZTogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VjdGlvbi5jb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHtcbiAgICAgIGxpbmU6IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgIGNvbHVtbjogbmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBuZWVkbGUuZ2VuZXJhdGVkTGluZVxuICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICA6IDApLFxuICAgICAgYmlhczogYUFyZ3MuYmlhc1xuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgdGhlIHNvdXJjZSBjb250ZW50IGZvciBldmVyeSBzb3VyY2UgaW4gdGhlIHNvdXJjZVxuICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlY3Rpb25zLmV2ZXJ5KGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gcy5jb25zdW1lci5oYXNDb250ZW50c09mQWxsU291cmNlcygpO1xuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICogb3JpZ2luYWwgc291cmNlIGZpbGUuIFJldHVybnMgbnVsbCBpZiBubyBvcmlnaW5hbCBzb3VyY2UgY29udGVudCBpc1xuICogYXZhaWxhYmxlLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfc291cmNlQ29udGVudEZvcihhU291cmNlLCBudWxsT25NaXNzaW5nKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgdmFyIGNvbnRlbnQgPSBzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgdHJ1ZSk7XG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG51bGxPbk1pc3NpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aFxuICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG5cbiAgICAgIC8vIE9ubHkgY29uc2lkZXIgdGhpcyBzZWN0aW9uIGlmIHRoZSByZXF1ZXN0ZWQgc291cmNlIGlzIGluIHRoZSBsaXN0IG9mXG4gICAgICAvLyBzb3VyY2VzIG9mIHRoZSBjb25zdW1lci5cbiAgICAgIGlmIChzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZXMuaW5kZXhPZih1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpKSA9PT0gLTEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgZ2VuZXJhdGVkUG9zaXRpb24gPSBzZWN0aW9uLmNvbnN1bWVyLmdlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKTtcbiAgICAgIGlmIChnZW5lcmF0ZWRQb3NpdGlvbikge1xuICAgICAgICB2YXIgcmV0ID0ge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZFBvc2l0aW9uLmxpbmUgK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZFBvc2l0aW9uLmNvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gZ2VuZXJhdGVkUG9zaXRpb24ubGluZVxuICAgICAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgICAgIDogMClcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG4gICAgICB2YXIgc2VjdGlvbk1hcHBpbmdzID0gc2VjdGlvbi5jb25zdW1lci5fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlY3Rpb25NYXBwaW5ncy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgbWFwcGluZyA9IHNlY3Rpb25NYXBwaW5nc1tqXTtcblxuICAgICAgICB2YXIgc291cmNlID0gc2VjdGlvbi5jb25zdW1lci5fc291cmNlcy5hdChtYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGlmIChzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc2VjdGlvbi5jb25zdW1lci5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgICAgIHZhciBuYW1lID0gc2VjdGlvbi5jb25zdW1lci5fbmFtZXMuYXQobWFwcGluZy5uYW1lKTtcbiAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgICBuYW1lID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcblxuICAgICAgICAvLyBUaGUgbWFwcGluZ3MgY29taW5nIGZyb20gdGhlIGNvbnN1bWVyIGZvciB0aGUgc2VjdGlvbiBoYXZlXG4gICAgICAgIC8vIGdlbmVyYXRlZCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzZWN0aW9uLCBzbyB3ZVxuICAgICAgICAvLyBuZWVkIHRvIG9mZnNldCB0aGVtIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY29uY2F0ZW5hdGVkXG4gICAgICAgIC8vIGdlbmVyYXRlZCBmaWxlLlxuICAgICAgICB2YXIgYWRqdXN0ZWRNYXBwaW5nID0ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG1hcHBpbmcuZ2VuZXJhdGVkTGluZVxuICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICA6IDApLFxuICAgICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgb3JpZ2luYWxDb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKGFkanVzdGVkTWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgYWRqdXN0ZWRNYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncy5wdXNoKGFkanVzdGVkTWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBxdWlja1NvcnQodGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICBxdWlja1NvcnQodGhpcy5fX29yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuICB9O1xuXG5leHBvcnRzLkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciA9IEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcjtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIHBhcmFtZXRlci9vcHRpb25zXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBhcmdzIFRoZSBvYmplY3Qgd2UgYXJlIGV4dHJhY3RpbmcgdmFsdWVzIGZyb21cbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgQW4gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nXG4gKiBmcm9tIHRoZSBvYmplY3QuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmcsIGFuXG4gKiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gZ2V0QXJnKGFBcmdzLCBhTmFtZSwgYURlZmF1bHRWYWx1ZSkge1xuICBpZiAoYU5hbWUgaW4gYUFyZ3MpIHtcbiAgICByZXR1cm4gYUFyZ3NbYU5hbWVdO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYURlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFOYW1lICsgJ1wiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuJyk7XG4gIH1cbn1cbmV4cG9ydHMuZ2V0QXJnID0gZ2V0QXJnO1xuXG52YXIgdXJsUmVnZXhwID0gL14oPzooW1xcdytcXC0uXSspOik/XFwvXFwvKD86KFxcdys6XFx3KylAKT8oW1xcdy5dKikoPzo6KFxcZCspKT8oXFxTKikkLztcbnZhciBkYXRhVXJsUmVnZXhwID0gL15kYXRhOi4rXFwsLiskLztcblxuZnVuY3Rpb24gdXJsUGFyc2UoYVVybCkge1xuICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjaGVtZTogbWF0Y2hbMV0sXG4gICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgaG9zdDogbWF0Y2hbM10sXG4gICAgcG9ydDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV1cbiAgfTtcbn1cbmV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuZnVuY3Rpb24gdXJsR2VuZXJhdGUoYVBhcnNlZFVybCkge1xuICB2YXIgdXJsID0gJyc7XG4gIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnNjaGVtZSArICc6JztcbiAgfVxuICB1cmwgKz0gJy8vJztcbiAgaWYgKGFQYXJzZWRVcmwuYXV0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmF1dGggKyAnQCc7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwuaG9zdCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucG9ydCkge1xuICAgIHVybCArPSBcIjpcIiArIGFQYXJzZWRVcmwucG9ydFxuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBhdGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5wYXRoO1xuICB9XG4gIHJldHVybiB1cmw7XG59XG5leHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gKlxuICogLSBSZXBsYWNlcyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggb25lIHNsYXNoLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICpcbiAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciB1cmwgdG8gbm9ybWFsaXplLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgdmFyIHBhdGggPSBhUGF0aDtcbiAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgaWYgKHVybCkge1xuICAgIGlmICghdXJsLnBhdGgpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG4gICAgcGF0aCA9IHVybC5wYXRoO1xuICB9XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoL1xcLysvKTtcbiAgZm9yICh2YXIgcGFydCwgdXAgPSAwLCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwID4gMCkge1xuICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJ0IGlzIGJsYW5rIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLiBUcnlpbmcgdG8gZ29cbiAgICAgICAgLy8gYWJvdmUgdGhlIHJvb3QgaXMgYSBuby1vcC4gVGhlcmVmb3JlIHdlIGNhbiByZW1vdmUgYWxsICcuLicgcGFydHNcbiAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgIHBhcnRzLnNwbGljZShpICsgMSwgdXApO1xuICAgICAgICB1cCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMik7XG4gICAgICAgIHVwLS07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKHBhdGggPT09ICcnKSB7XG4gICAgcGF0aCA9IGlzQWJzb2x1dGUgPyAnLycgOiAnLic7XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgdXJsLnBhdGggPSBwYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5cbi8qKlxuICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAqXG4gKiAtIElmIGFQYXRoIGlzIGEgVVJMIG9yIGEgZGF0YSBVUkksIGFQYXRoIGlzIHJldHVybmVkLCB1bmxlc3MgYVBhdGggaXMgYVxuICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gKiAgIGZpcnN0LlxuICogLSBPdGhlcndpc2UgYVBhdGggaXMgYSBwYXRoLiBJZiBhUm9vdCBpcyBhIFVSTCwgdGhlbiBpdHMgcGF0aCBwb3J0aW9uXG4gKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAqICAgaXMgcmV0dXJuZWQuXG4gKiAgIC0gSWYgYVBhdGggaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaXMgYVBhdGguXG4gKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gKiAtIEpvaW5pbmcgZm9yIGV4YW1wbGUgJ2h0dHA6Ly8nIGFuZCAnd3d3LmV4YW1wbGUuY29tJyBpcyBhbHNvIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuICBpZiAoYVBhdGggPT09IFwiXCIpIHtcbiAgICBhUGF0aCA9IFwiLlwiO1xuICB9XG4gIHZhciBhUGF0aFVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgdmFyIGFSb290VXJsID0gdXJsUGFyc2UoYVJvb3QpO1xuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdCA9IGFSb290VXJsLnBhdGggfHwgJy8nO1xuICB9XG5cbiAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgaWYgKGFQYXRoVXJsICYmICFhUGF0aFVybC5zY2hlbWUpIHtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFQYXRoVXJsKTtcbiAgfVxuXG4gIGlmIChhUGF0aFVybCB8fCBhUGF0aC5tYXRjaChkYXRhVXJsUmVnZXhwKSkge1xuICAgIHJldHVybiBhUGF0aDtcbiAgfVxuXG4gIC8vIGBqb2luKCdodHRwOi8vJywgJ3d3dy5leGFtcGxlLmNvbScpYFxuICBpZiAoYVJvb3RVcmwgJiYgIWFSb290VXJsLmhvc3QgJiYgIWFSb290VXJsLnBhdGgpIHtcbiAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuXG4gIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgID8gYVBhdGhcbiAgICA6IG5vcm1hbGl6ZShhUm9vdC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIGFQYXRoKTtcblxuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdFVybC5wYXRoID0gam9pbmVkO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cbiAgcmV0dXJuIGpvaW5lZDtcbn1cbmV4cG9ydHMuam9pbiA9IGpvaW47XG5cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uIChhUGF0aCkge1xuICByZXR1cm4gYVBhdGguY2hhckF0KDApID09PSAnLycgfHwgISFhUGF0aC5tYXRjaCh1cmxSZWdleHApO1xufTtcblxuLyoqXG4gKiBNYWtlIGEgcGF0aCByZWxhdGl2ZSB0byBhIFVSTCBvciBhbm90aGVyIHBhdGguXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBtYWRlIHJlbGF0aXZlIHRvIGFSb290LlxuICovXG5mdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuXG4gIGFSb290ID0gYVJvb3QucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gIC8vIGNoZWNraW5nIHdoZXRoZXIgdGhlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlIHBhdGggd29uJ3Qgd29yay4gSW5zdGVhZCwgd2VcbiAgLy8gbmVlZCB0byByZW1vdmUgY29tcG9uZW50cyBmcm9tIHRoZSByb290IG9uZSBieSBvbmUsIHVudGlsIGVpdGhlciB3ZSBmaW5kXG4gIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgdmFyIGxldmVsID0gMDtcbiAgd2hpbGUgKGFQYXRoLmluZGV4T2YoYVJvb3QgKyAnLycpICE9PSAwKSB7XG4gICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb25seSBwYXJ0IG9mIHRoZSByb290IHRoYXQgaXMgbGVmdCBpcyB0aGUgc2NoZW1lIChpLmUuIGh0dHA6Ly8sXG4gICAgLy8gZmlsZTovLy8sIGV0Yy4pLCBvbmUgb3IgbW9yZSBzbGFzaGVzICgvKSwgb3Igc2ltcGx5IG5vdGhpbmcgYXQgYWxsLCB3ZVxuICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgYVJvb3QgPSBhUm9vdC5zbGljZSgwLCBpbmRleCk7XG4gICAgaWYgKGFSb290Lm1hdGNoKC9eKFteXFwvXSs6XFwvKT9cXC8qJC8pKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgKytsZXZlbDtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhZGQgYSBcIi4uL1wiIGZvciBlYWNoIGNvbXBvbmVudCB3ZSByZW1vdmVkIGZyb20gdGhlIHJvb3QuXG4gIHJldHVybiBBcnJheShsZXZlbCArIDEpLmpvaW4oXCIuLi9cIikgKyBhUGF0aC5zdWJzdHIoYVJvb3QubGVuZ3RoICsgMSk7XG59XG5leHBvcnRzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG5cbnZhciBzdXBwb3J0c051bGxQcm90byA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gISgnX19wcm90b19fJyBpbiBvYmopO1xufSgpKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkgKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICogaGF2ZSB0byBwcmVmaXggYWxsIHRoZSBzdHJpbmdzIGluIG91ciBzZXQgd2l0aCBhbiBhcmJpdHJhcnkgY2hhcmFjdGVyLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8zMFxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5mdW5jdGlvbiB0b1NldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuICckJyArIGFTdHI7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMudG9TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogdG9TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGZyb21TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiBhU3RyLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLmZyb21TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogZnJvbVNldFN0cmluZztcblxuZnVuY3Rpb24gaXNQcm90b1N0cmluZyhzKSB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBzLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOSAvKiBcIl9fcHJvdG9fX1wiLmxlbmd0aCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMSkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAyKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDMpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNCkgIT09IDExNiAvKiAndCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA1KSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDYpICE9PSAxMTQgLyogJ3InICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNykgIT09IDExMiAvKiAncCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA4KSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDkpICE9PSA5NSAgLyogJ18nICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IGxlbmd0aCAtIDEwOyBpID49IDA7IGktLSkge1xuICAgIGlmIChzLmNoYXJDb2RlQXQoaSkgIT09IDM2IC8qICckJyAqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2hlcmUgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4sIGJ1dCBkaWZmZXJlbnQgZ2VuZXJhdGVkXG4gKiBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXBwaW5nIHdpdGggYVxuICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyA9IGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zO1xuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBkZWZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgaW5kaWNlcyB3aGVyZVxuICogdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiwgYnV0IGRpZmZlcmVudFxuICogc291cmNlL25hbWUvb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGFcbiAqIG1hcHBpbmcgd2l0aCBhIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkO1xuXG5mdW5jdGlvbiBzdHJjbXAoYVN0cjEsIGFTdHIyKSB7XG4gIGlmIChhU3RyMSA9PT0gYVN0cjIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZDtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrLWdlbmVyYXRvcicsIFsnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc3RhY2tmcmFtZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrR2VuZXJhdG9yID0gZmFjdG9yeShyb290LlN0YWNrRnJhbWUpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24oU3RhY2tGcmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGJhY2t0cmFjZTogZnVuY3Rpb24gU3RhY2tHZW5lcmF0b3IkJGJhY2t0cmFjZShvcHRzKSB7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICAgICAgICAgIHZhciBtYXhTdGFja1NpemUgPSAxMDtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3B0cy5tYXhTdGFja1NpemUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgbWF4U3RhY2tTaXplID0gb3B0cy5tYXhTdGFja1NpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjdXJyID0gYXJndW1lbnRzLmNhbGxlZTtcbiAgICAgICAgICAgIHdoaWxlIChjdXJyICYmIHN0YWNrLmxlbmd0aCA8IG1heFN0YWNrU2l6ZSkge1xuICAgICAgICAgICAgICAgIC8vIEFsbG93IFY4IG9wdGltaXphdGlvbnNcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShjdXJyWydhcmd1bWVudHMnXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gY3VyclsnYXJndW1lbnRzJ11baV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgvZnVuY3Rpb24oPzpcXHMrKFtcXHckXSspKStcXHMqXFwoLy50ZXN0KGN1cnIudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh7ZnVuY3Rpb25OYW1lOiBSZWdFeHAuJDEgfHwgdW5kZWZpbmVkLCBhcmdzOiBhcmdzfSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3IFN0YWNrRnJhbWUoe2FyZ3M6IGFyZ3N9KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIuY2FsbGVyO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0YWNrO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcbiIsIihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFja2ZyYW1lJywgW10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tGcmFtZSA9IGZhY3RvcnkoKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgZnVuY3Rpb24gX2lzTnVtYmVyKG4pIHtcbiAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfY2FwaXRhbGl6ZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0clswXS50b1VwcGVyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZ2V0dGVyKHApIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3BdO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBib29sZWFuUHJvcHMgPSBbJ2lzQ29uc3RydWN0b3InLCAnaXNFdmFsJywgJ2lzTmF0aXZlJywgJ2lzVG9wbGV2ZWwnXTtcbiAgICB2YXIgbnVtZXJpY1Byb3BzID0gWydjb2x1bW5OdW1iZXInLCAnbGluZU51bWJlciddO1xuICAgIHZhciBzdHJpbmdQcm9wcyA9IFsnZmlsZU5hbWUnLCAnZnVuY3Rpb25OYW1lJywgJ3NvdXJjZSddO1xuICAgIHZhciBhcnJheVByb3BzID0gWydhcmdzJ107XG5cbiAgICBmdW5jdGlvbiBTdGFja0ZyYW1lKG9iaikge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICB2YXIgcHJvcHMgPSBib29sZWFuUHJvcHMuY29uY2F0KG51bWVyaWNQcm9wcy5jb25jYXQoc3RyaW5nUHJvcHMuY29uY2F0KGFycmF5UHJvcHMpKSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wc1tpXSkgJiYgb2JqW3Byb3BzW2ldXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbJ3NldCcgKyBfY2FwaXRhbGl6ZShwcm9wc1tpXSldKG9ialtwcm9wc1tpXV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIFN0YWNrRnJhbWUucHJvdG90eXBlID0ge1xuICAgICAgICBnZXRBcmdzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmdzO1xuICAgICAgICB9LFxuICAgICAgICBzZXRBcmdzOiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSAhPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3MgbXVzdCBiZSBhbiBBcnJheScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcmdzID0gdjtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRFdmFsT3JpZ2luOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmFsT3JpZ2luO1xuICAgICAgICB9LFxuICAgICAgICBzZXRFdmFsT3JpZ2luOiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsT3JpZ2luID0gdjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZhbE9yaWdpbiA9IG5ldyBTdGFja0ZyYW1lKHYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFdmFsIE9yaWdpbiBtdXN0IGJlIGFuIE9iamVjdCBvciBTdGFja0ZyYW1lJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0aGlzLmdldEZ1bmN0aW9uTmFtZSgpIHx8ICd7YW5vbnltb3VzfSc7XG4gICAgICAgICAgICB2YXIgYXJncyA9ICcoJyArICh0aGlzLmdldEFyZ3MoKSB8fCBbXSkuam9pbignLCcpICsgJyknO1xuICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gdGhpcy5nZXRGaWxlTmFtZSgpID8gKCdAJyArIHRoaXMuZ2V0RmlsZU5hbWUoKSkgOiAnJztcbiAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gX2lzTnVtYmVyKHRoaXMuZ2V0TGluZU51bWJlcigpKSA/ICgnOicgKyB0aGlzLmdldExpbmVOdW1iZXIoKSkgOiAnJztcbiAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSBfaXNOdW1iZXIodGhpcy5nZXRDb2x1bW5OdW1iZXIoKSkgPyAoJzonICsgdGhpcy5nZXRDb2x1bW5OdW1iZXIoKSkgOiAnJztcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbk5hbWUgKyBhcmdzICsgZmlsZU5hbWUgKyBsaW5lTnVtYmVyICsgY29sdW1uTnVtYmVyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9vbGVhblByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUoYm9vbGVhblByb3BzW2ldKV0gPSBfZ2V0dGVyKGJvb2xlYW5Qcm9wc1tpXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUoYm9vbGVhblByb3BzW2ldKV0gPSAoZnVuY3Rpb24gKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBCb29sZWFuKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoYm9vbGVhblByb3BzW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bWVyaWNQcm9wcy5sZW5ndGg7IGorKykge1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gX2dldHRlcihudW1lcmljUHJvcHNbal0pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc051bWJlcih2KSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHAgKyAnIG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpc1twXSA9IE51bWJlcih2KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKG51bWVyaWNQcm9wc1tqXSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBzdHJpbmdQcm9wcy5sZW5ndGg7IGsrKykge1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKHN0cmluZ1Byb3BzW2tdKV0gPSBfZ2V0dGVyKHN0cmluZ1Byb3BzW2tdKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShzdHJpbmdQcm9wc1trXSldID0gKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gU3RyaW5nKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoc3RyaW5nUHJvcHNba10pO1xuICAgIH1cblxuICAgIHJldHVybiBTdGFja0ZyYW1lO1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZS1ncHMnLCBbJ3NvdXJjZS1tYXAnLCAnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc291cmNlLW1hcC9saWIvc291cmNlLW1hcC1jb25zdW1lcicpLCByZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tUcmFjZUdQUyA9IGZhY3Rvcnkocm9vdC5Tb3VyY2VNYXAgfHwgcm9vdC5zb3VyY2VNYXAsIHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTb3VyY2VNYXAsIFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBNYWtlIGEgWC1Eb21haW4gcmVxdWVzdCB0byB1cmwgYW5kIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB3aXRoIHJlc3BvbnNlIHRleHQgaWYgZnVsZmlsbGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gX3hkcih1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgcmVxLm9wZW4oJ2dldCcsIHVybCk7XG4gICAgICAgICAgICByZXEub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocmVxLnN0YXR1cyA+PSAyMDAgJiYgcmVxLnN0YXR1cyA8IDMwMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICh1cmwuc3Vic3RyKDAsIDcpID09PSAnZmlsZTovLycgJiYgcmVxLnJlc3BvbnNlVGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVxLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdIVFRQIHN0YXR1czogJyArIHJlcS5zdGF0dXMgKyAnIHJldHJpZXZpbmcgJyArIHVybCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcS5zZW5kKCk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIEJhc2U2NC1lbmNvZGVkIHN0cmluZyBpbnRvIGl0cyBvcmlnaW5hbCByZXByZXNlbnRhdGlvbi5cbiAgICAgKiBVc2VkIGZvciBpbmxpbmUgc291cmNlbWFwcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiNjRzdHIgQmFzZS02NCBlbmNvZGVkIHN0cmluZ1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gX2F0b2IoYjY0c3RyKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuYXRvYikge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5hdG9iKGI2NHN0cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciB3aW5kb3cuYXRvYiBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcGFyc2VKc29uKHN0cmluZykge1xuICAgICAgICBpZiAodHlwZW9mIEpTT04gIT09ICd1bmRlZmluZWQnICYmIEpTT04ucGFyc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciBKU09OLnBhcnNlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlci8qLCBjb2x1bW5OdW1iZXIqLykge1xuICAgICAgICB2YXIgc3ludGF4ZXMgPSBbXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSBmdW5jdGlvbiAoe2FyZ3N9KSBUT0RPIGFyZ3MgY2FwdHVyZVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqZnVuY3Rpb25cXGIvLFxuICAgICAgICAgICAgLy8gZnVuY3Rpb24ge25hbWV9KHthcmdzfSkgbVsxXT1uYW1lIG1bMl09YXJnc1xuICAgICAgICAgICAgL2Z1bmN0aW9uXFxzKyhbXignXCJgXSo/KVxccypcXCgoW14pXSopXFwpLyxcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGV2YWwoKVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqKD86ZXZhbHxuZXcgRnVuY3Rpb24pXFxiLyxcbiAgICAgICAgICAgIC8vIGZuX25hbWUoKSB7XG4gICAgICAgICAgICAvXFxiKD8hKD86aWZ8Zm9yfHN3aXRjaHx3aGlsZXx3aXRofGNhdGNoKVxcYikoPzooPzpzdGF0aWMpXFxzKyk/KFxcUyspXFxzKlxcKC4qP1xcKVxccypcXHsvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gKCkgPT4ge1xuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqXFwoLio/XFwpXFxzKj0+L1xuICAgICAgICBdO1xuICAgICAgICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoJ1xcbicpO1xuXG4gICAgICAgIC8vIFdhbGsgYmFja3dhcmRzIGluIHRoZSBzb3VyY2UgbGluZXMgdW50aWwgd2UgZmluZCB0aGUgbGluZSB3aGljaCBtYXRjaGVzIG9uZSBvZiB0aGUgcGF0dGVybnMgYWJvdmVcbiAgICAgICAgdmFyIGNvZGUgPSAnJztcbiAgICAgICAgdmFyIG1heExpbmVzID0gTWF0aC5taW4obGluZU51bWJlciwgMjApO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heExpbmVzOyArK2kpIHtcbiAgICAgICAgICAgIC8vIGxpbmVObyBpcyAxLWJhc2VkLCBzb3VyY2VbXSBpcyAwLWJhc2VkXG4gICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVzW2xpbmVOdW1iZXIgLSBpIC0gMV07XG4gICAgICAgICAgICB2YXIgY29tbWVudFBvcyA9IGxpbmUuaW5kZXhPZignLy8nKTtcbiAgICAgICAgICAgIGlmIChjb21tZW50UG9zID49IDApIHtcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHIoMCwgY29tbWVudFBvcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgY29kZSA9IGxpbmUgKyBjb2RlO1xuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBzeW50YXhlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHN5bnRheGVzW2luZGV4XS5leGVjKGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5jcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNvbnN1bWUgc291cmNlIG1hcHMgaW4gb2xkZXIgYnJvd3NlcnMnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhY2tmcmFtZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIFN0YWNrRnJhbWUgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmZpbGVOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gZmlsZSBuYW1lIGlzIG5vdCBhIFN0cmluZycpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBsaW5lIG51bWJlciBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICUgMSAhPT0gMCB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBjb2x1bW4gbnVtYmVyIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kU291cmNlTWFwcGluZ1VSTChzb3VyY2UpIHtcbiAgICAgICAgdmFyIG0gPSAvXFwvXFwvWyNAXSA/c291cmNlTWFwcGluZ1VSTD0oW15cXHMnXCJdKylcXHMqJC9tLmV4ZWMoc291cmNlKTtcbiAgICAgICAgaWYgKG0gJiYgbVsxXSkge1xuICAgICAgICAgICAgcmV0dXJuIG1bMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NvdXJjZU1hcHBpbmdVUkwgbm90IGZvdW5kJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZXh0cmFjdExvY2F0aW9uSW5mb0Zyb21Tb3VyY2VNYXBTb3VyY2Uoc3RhY2tmcmFtZSwgc291cmNlTWFwQ29uc3VtZXIsIHNvdXJjZUNhY2hlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBsb2MgPSBzb3VyY2VNYXBDb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHtcbiAgICAgICAgICAgICAgICBsaW5lOiBzdGFja2ZyYW1lLmxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBzdGFja2ZyYW1lLmNvbHVtbk51bWJlclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChsb2Muc291cmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FjaGUgbWFwcGVkIHNvdXJjZXNcbiAgICAgICAgICAgICAgICB2YXIgbWFwcGVkU291cmNlID0gc291cmNlTWFwQ29uc3VtZXIuc291cmNlQ29udGVudEZvcihsb2Muc291cmNlKTtcbiAgICAgICAgICAgICAgICBpZiAobWFwcGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUNhY2hlW2xvYy5zb3VyY2VdID0gbWFwcGVkU291cmNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgIC8vIGdpdmVuIHN0YWNrZnJhbWUgYW5kIHNvdXJjZSBsb2NhdGlvbiwgdXBkYXRlIHN0YWNrZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBsb2MubmFtZSB8fCBzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHN0YWNrZnJhbWUuYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2Muc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvYy5jb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IG9yaWdpbmFsIHNvdXJjZSBmb3IgZ2l2ZW4gc3RhY2tmcmFtZSBhbmQgc291cmNlIG1hcCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgKiAgICAgIG9wdHMuc291cmNlQ2FjaGUgPSB7dXJsOiBcIlNvdXJjZSBTdHJpbmdcIn0gPT4gcHJlbG9hZCBzb3VyY2UgY2FjaGVcbiAgICAgKiAgICAgIG9wdHMuc291cmNlTWFwQ29uc3VtZXJDYWNoZSA9IHsvcGF0aC9maWxlLmpzLm1hcDogU291cmNlTWFwQ29uc3VtZXJ9XG4gICAgICogICAgICBvcHRzLm9mZmxpbmUgPSBUcnVlIHRvIHByZXZlbnQgbmV0d29yayByZXF1ZXN0cy5cbiAgICAgKiAgICAgICAgICAgICAgQmVzdCBlZmZvcnQgd2l0aG91dCBzb3VyY2VzIG9yIHNvdXJjZSBtYXBzLlxuICAgICAqICAgICAgb3B0cy5hamF4ID0gUHJvbWlzZSByZXR1cm5pbmcgZnVuY3Rpb24gdG8gbWFrZSBYLURvbWFpbiByZXF1ZXN0c1xuICAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBTdGFja1RyYWNlR1BTKG9wdHMpIHtcbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFN0YWNrVHJhY2VHUFMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrVHJhY2VHUFMob3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICAgICAgdGhpcy5zb3VyY2VDYWNoZSA9IG9wdHMuc291cmNlQ2FjaGUgfHwge307XG4gICAgICAgIHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZSA9IG9wdHMuc291cmNlTWFwQ29uc3VtZXJDYWNoZSB8fCB7fTtcblxuICAgICAgICB0aGlzLmFqYXggPSBvcHRzLmFqYXggfHwgX3hkcjtcblxuICAgICAgICB0aGlzLl9hdG9iID0gb3B0cy5hdG9iIHx8IF9hdG9iO1xuXG4gICAgICAgIHRoaXMuX2dldCA9IGZ1bmN0aW9uIF9nZXQobG9jYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNEYXRhVXJsID0gbG9jYXRpb24uc3Vic3RyKDAsIDUpID09PSAnZGF0YTonO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdHMub2ZmbGluZSAmJiAhaXNEYXRhVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0Nhbm5vdCBtYWtlIG5ldHdvcmsgcmVxdWVzdHMgaW4gb2ZmbGluZSBtb2RlJykpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0RhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRhdGEgVVJMcyBjYW4gaGF2ZSBwYXJhbWV0ZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIzOTdcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdXBwb3J0ZWRFbmNvZGluZ1JlZ2V4cCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgL15kYXRhOmFwcGxpY2F0aW9uXFwvanNvbjsoW1xcdz06XCItXSs7KSpiYXNlNjQsLztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGxvY2F0aW9uLm1hdGNoKHN1cHBvcnRlZEVuY29kaW5nUmVnZXhwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VNYXBTdGFydCA9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jb2RlZFNvdXJjZSA9IGxvY2F0aW9uLnN1YnN0cihzb3VyY2VNYXBTdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHRoaXMuX2F0b2IoZW5jb2RlZFNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0gPSBzb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdUaGUgZW5jb2Rpbmcgb2YgdGhlIGlubGluZSBzb3VyY2VtYXAgaXMgbm90IHN1cHBvcnRlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4aHJQcm9taXNlID0gdGhpcy5hamF4KGxvY2F0aW9uLCB7bWV0aG9kOiAnZ2V0J30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FjaGUgdGhlIFByb21pc2UgdG8gcHJldmVudCBkdXBsaWNhdGUgaW4tZmxpZ2h0IHJlcXVlc3RzXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSA9IHhoclByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJQcm9taXNlLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0aW5nIFNvdXJjZU1hcENvbnN1bWVycyBpcyBleHBlbnNpdmUsIHNvIHRoaXMgd3JhcHMgdGhlIGNyZWF0aW9uIG9mIGFcbiAgICAgICAgICogU291cmNlTWFwQ29uc3VtZXIgaW4gYSBwZXItaW5zdGFuY2UgY2FjaGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBzb3VyY2VNYXBwaW5nVVJMID0ge1N0cmluZ30gVVJMIHRvIGZldGNoIHNvdXJjZSBtYXAgZnJvbVxuICAgICAgICAgKiBAcGFyYW0gZGVmYXVsdFNvdXJjZVJvb3QgPSBEZWZhdWx0IHNvdXJjZSByb290IGZvciBzb3VyY2UgbWFwIGlmIHVuZGVmaW5lZFxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyBhIFNvdXJjZU1hcENvbnN1bWVyXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9nZXRTb3VyY2VNYXBDb25zdW1lciA9IGZ1bmN0aW9uIF9nZXRTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXBwaW5nVVJMLCBkZWZhdWx0U291cmNlUm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGVbc291cmNlTWFwcGluZ1VSTF0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGVbc291cmNlTWFwcGluZ1VSTF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VNYXBDb25zdW1lclByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXQoc291cmNlTWFwcGluZ1VSTCkudGhlbihmdW5jdGlvbihzb3VyY2VNYXBTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZU1hcFNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwU291cmNlID0gX3BhcnNlSnNvbihzb3VyY2VNYXBTb3VyY2UucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZU1hcFNvdXJjZS5zb3VyY2VSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBTb3VyY2Uuc291cmNlUm9vdCA9IGRlZmF1bHRTb3VyY2VSb290O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFNvdXJjZU1hcC5Tb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXBTb3VyY2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSA9IHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzb3VyY2VNYXBDb25zdW1lclByb21pc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgZW5oYW5jZSBmdW5jdGlvbiBuYW1lIGFuZCB1c2Ugc291cmNlIG1hcHMgZm9yIGFcbiAgICAgICAgICogYmV0dGVyIFN0YWNrRnJhbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZSBvYmplY3RcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB3aXRoIHNvdXJjZS1tYXBwZWQgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5waW5wb2ludCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMkJHBpbnBvaW50KHN0YWNrZnJhbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldE1hcHBlZExvY2F0aW9uKHN0YWNrZnJhbWUpLnRoZW4oZnVuY3Rpb24obWFwcGVkU3RhY2tGcmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobWFwcGVkU3RhY2tGcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRGdW5jdGlvbk5hbWUobWFwcGVkU3RhY2tGcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc29sdmUsIHJlc29sdmVNYXBwZWRTdGFja0ZyYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgWydjYXRjaCddKHJlc29sdmVNYXBwZWRTdGFja0ZyYW1lKTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHJlamVjdCk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIFN0YWNrRnJhbWUsIGd1ZXNzIGZ1bmN0aW9uIG5hbWUgZnJvbSBsb2NhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmluZEZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMkJGZpbmRGdW5jdGlvbk5hbWUoc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXQoc3RhY2tmcmFtZS5maWxlTmFtZSkudGhlbihmdW5jdGlvbiBnZXRTb3VyY2VDYWxsYmFjayhzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBzdGFja2ZyYW1lLmxpbmVOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSBzdGFja2ZyYW1lLmNvbHVtbk51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGd1ZXNzZWRGdW5jdGlvbk5hbWUgPSBfZmluZEZ1bmN0aW9uTmFtZShzb3VyY2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcmVwbGFjZSBmdW5jdGlvbk5hbWUgaWYgd2UgZm91bmQgc29tZXRoaW5nXG4gICAgICAgICAgICAgICAgICAgIGlmIChndWVzc2VkRnVuY3Rpb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGd1ZXNzZWRGdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogc3RhY2tmcmFtZS5hcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBzdGFja2ZyYW1lLmZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBjb2x1bW5OdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCByZWplY3QpWydjYXRjaCddKHJlamVjdCk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIFN0YWNrRnJhbWUsIHNlZWsgc291cmNlLW1hcHBlZCBsb2NhdGlvbiBhbmQgcmV0dXJuIG5ldyBlbmhhbmNlZCBTdGFja0ZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWVcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBlbmhhbmNlZCBTdGFja0ZyYW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5nZXRNYXBwZWRMb2NhdGlvbiA9IGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMkJGdldE1hcHBlZExvY2F0aW9uKHN0YWNrZnJhbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBfZW5zdXJlU3VwcG9ydGVkRW52aXJvbm1lbnQoKTtcbiAgICAgICAgICAgICAgICBfZW5zdXJlU3RhY2tGcmFtZUlzTGVnaXQoc3RhY2tmcmFtZSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlO1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IHN0YWNrZnJhbWUuZmlsZU5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0KGZpbGVOYW1lKS50aGVuKGZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwcGluZ1VSTCA9IF9maW5kU291cmNlTWFwcGluZ1VSTChzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNEYXRhVXJsID0gc291cmNlTWFwcGluZ1VSTC5zdWJzdHIoMCwgNSkgPT09ICdkYXRhOic7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0U291cmNlUm9vdCA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZS5sYXN0SW5kZXhPZignLycpICsgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZU1hcHBpbmdVUkxbMF0gIT09ICcvJyAmJiAhaXNEYXRhVXJsICYmICEoL15odHRwcz86XFwvXFwvfF5cXC9cXC8vaSkudGVzdChzb3VyY2VNYXBwaW5nVVJMKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwcGluZ1VSTCA9IGRlZmF1bHRTb3VyY2VSb290ICsgc291cmNlTWFwcGluZ1VSTDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXBwaW5nVVJMLCBkZWZhdWx0U291cmNlUm9vdCkudGhlbihmdW5jdGlvbihzb3VyY2VNYXBDb25zdW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9leHRyYWN0TG9jYXRpb25JbmZvRnJvbVNvdXJjZU1hcFNvdXJjZShzdGFja2ZyYW1lLCBzb3VyY2VNYXBDb25zdW1lciwgc291cmNlQ2FjaGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSlbJ2NhdGNoJ10oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbn0pKTtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrdHJhY2UnLCBbJ2Vycm9yLXN0YWNrLXBhcnNlcicsICdzdGFjay1nZW5lcmF0b3InLCAnc3RhY2t0cmFjZS1ncHMnXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ2Vycm9yLXN0YWNrLXBhcnNlcicpLCByZXF1aXJlKCdzdGFjay1nZW5lcmF0b3InKSwgcmVxdWlyZSgnc3RhY2t0cmFjZS1ncHMnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja1RyYWNlID0gZmFjdG9yeShyb290LkVycm9yU3RhY2tQYXJzZXIsIHJvb3QuU3RhY2tHZW5lcmF0b3IsIHJvb3QuU3RhY2tUcmFjZUdQUyk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiBTdGFja1RyYWNlKEVycm9yU3RhY2tQYXJzZXIsIFN0YWNrR2VuZXJhdG9yLCBTdGFja1RyYWNlR1BTKSB7XG4gICAgdmFyIF9vcHRpb25zID0ge1xuICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKHN0YWNrZnJhbWUpIHtcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgc3RhY2tmcmFtZXMgZm9yIHRoaXMgbGlicmFyeSBieSBkZWZhdWx0XG4gICAgICAgICAgICByZXR1cm4gKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ0Vycm9yU3RhY2tQYXJzZXIkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignU3RhY2tUcmFjZUdQUyQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja0dlbmVyYXRvciQkJykgPT09IC0xO1xuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VDYWNoZToge31cbiAgICB9O1xuXG4gICAgdmFyIF9nZW5lcmF0ZUVycm9yID0gZnVuY3Rpb24gU3RhY2tUcmFjZSQkR2VuZXJhdGVFcnJvcigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEVycm9yIG11c3QgYmUgdGhyb3duIHRvIGdldCBzdGFjayBpbiBJRVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGVycjtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBNZXJnZSAyIGdpdmVuIE9iamVjdHMuIElmIGEgY29uZmxpY3Qgb2NjdXJzIHRoZSBzZWNvbmQgb2JqZWN0IHdpbnMuXG4gICAgICogRG9lcyBub3QgZG8gZGVlcCBtZXJnZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZmlyc3QgYmFzZSBvYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc2Vjb25kIG92ZXJyaWRlc1xuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IG1lcmdlZCBmaXJzdCBhbmQgc2Vjb25kXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfbWVyZ2UoZmlyc3QsIHNlY29uZCkge1xuICAgICAgICB2YXIgdGFyZ2V0ID0ge307XG5cbiAgICAgICAgW2ZpcnN0LCBzZWNvbmRdLmZvckVhY2goZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gb2JqW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSB7XG4gICAgICAgIHJldHVybiBlcnIuc3RhY2sgfHwgZXJyWydvcGVyYSNzb3VyY2Vsb2MnXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZmlsdGVyZWQoc3RhY2tmcmFtZXMsIGZpbHRlcikge1xuICAgICAgICBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHN0YWNrZnJhbWVzLmZpbHRlcihmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGFja2ZyYW1lcztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgYmFja3RyYWNlIGZyb20gaW52b2NhdGlvbiBwb2ludC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBvZiBTdGFja0ZyYW1lXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGdldChvcHRzKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gX2dlbmVyYXRlRXJyb3IoKTtcbiAgICAgICAgICAgIHJldHVybiBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpID8gdGhpcy5mcm9tRXJyb3IoZXJyLCBvcHRzKSA6IHRoaXMuZ2VuZXJhdGVBcnRpZmljaWFsbHkob3B0cyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIGJhY2t0cmFjZSBmcm9tIGludm9jYXRpb24gcG9pbnQuXG4gICAgICAgICAqIElNUE9SVEFOVDogRG9lcyBub3QgaGFuZGxlIHNvdXJjZSBtYXBzIG9yIGd1ZXNzIGZ1bmN0aW9uIG5hbWVzIVxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldFN5bmM6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGdldFN5bmMob3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgZXJyID0gX2dlbmVyYXRlRXJyb3IoKTtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikgPyBFcnJvclN0YWNrUGFyc2VyLnBhcnNlKGVycikgOiBTdGFja0dlbmVyYXRvci5iYWNrdHJhY2Uob3B0cyk7XG4gICAgICAgICAgICByZXR1cm4gX2ZpbHRlcmVkKHN0YWNrLCBvcHRzLmZpbHRlcik7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGFuIGVycm9yIG9iamVjdCwgcGFyc2UgaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIG9iamVjdFxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gZm9yIEFycmF5W1N0YWNrRnJhbWV9XG4gICAgICAgICAqL1xuICAgICAgICBmcm9tRXJyb3I6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGZyb21FcnJvcihlcnJvciwgb3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgZ3BzID0gbmV3IFN0YWNrVHJhY2VHUFMob3B0cyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgIHZhciBzdGFja2ZyYW1lcyA9IF9maWx0ZXJlZChFcnJvclN0YWNrUGFyc2VyLnBhcnNlKGVycm9yKSwgb3B0cy5maWx0ZXIpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoUHJvbWlzZS5hbGwoc3RhY2tmcmFtZXMubWFwKGZ1bmN0aW9uKHNmKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlT3JpZ2luYWwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdwcy5waW5wb2ludChzZikudGhlbihyZXNvbHZlLCByZXNvbHZlT3JpZ2luYWwpWydjYXRjaCddKHJlc29sdmVPcmlnaW5hbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pKSk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVc2UgU3RhY2tHZW5lcmF0b3IgdG8gZ2VuZXJhdGUgYSBiYWNrdHJhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBvZiBBcnJheVtTdGFja0ZyYW1lXVxuICAgICAgICAgKi9cbiAgICAgICAgZ2VuZXJhdGVBcnRpZmljaWFsbHk6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGdlbmVyYXRlQXJ0aWZpY2lhbGx5KG9wdHMpIHtcbiAgICAgICAgICAgIG9wdHMgPSBfbWVyZ2UoX29wdGlvbnMsIG9wdHMpO1xuICAgICAgICAgICAgdmFyIHN0YWNrRnJhbWVzID0gU3RhY2tHZW5lcmF0b3IuYmFja3RyYWNlKG9wdHMpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRzLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHN0YWNrRnJhbWVzID0gc3RhY2tGcmFtZXMuZmlsdGVyKG9wdHMuZmlsdGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3RhY2tGcmFtZXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIGZ1bmN0aW9uLCB3cmFwIGl0IHN1Y2ggdGhhdCBpbnZvY2F0aW9ucyB0cmlnZ2VyIGEgY2FsbGJhY2sgdGhhdFxuICAgICAgICAgKiBpcyBjYWxsZWQgd2l0aCBhIHN0YWNrIHRyYWNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiB0byBiZSBpbnN0cnVtZW50ZWRcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGEgc3RhY2sgdHJhY2Ugb24gaW52b2NhdGlvblxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcnJiYWNrIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBlcnJvciBpZiB1bmFibGUgdG8gZ2V0IHN0YWNrIHRyYWNlLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBvcHRpb25hbCBjb250ZXh0IG9iamVjdCAoZS5nLiB3aW5kb3cpXG4gICAgICAgICAqL1xuICAgICAgICBpbnN0cnVtZW50OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRpbnN0cnVtZW50KGZuLCBjYWxsYmFjaywgZXJyYmFjaywgdGhpc0FyZykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGluc3RydW1lbnQgbm9uLWZ1bmN0aW9uIG9iamVjdCcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZm4uX19zdGFja3RyYWNlT3JpZ2luYWxGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgaW5zdHJ1bWVudGVkLCByZXR1cm4gZ2l2ZW4gRnVuY3Rpb25cbiAgICAgICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBpbnN0cnVtZW50ZWQgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRpbnN0cnVtZW50ZWQoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXQoKS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrKVsnY2F0Y2gnXShlcnJiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcgfHwgdGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mcm9tRXJyb3IoZSkudGhlbihjYWxsYmFjaywgZXJyYmFjaylbJ2NhdGNoJ10oZXJyYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcyk7XG4gICAgICAgICAgICBpbnN0cnVtZW50ZWQuX19zdGFja3RyYWNlT3JpZ2luYWxGbiA9IGZuO1xuXG4gICAgICAgICAgICByZXR1cm4gaW5zdHJ1bWVudGVkO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIGZ1bmN0aW9uIHRoYXQgaGFzIGJlZW4gaW5zdHJ1bWVudGVkLFxuICAgICAgICAgKiByZXZlcnQgdGhlIGZ1bmN0aW9uIHRvIGl0J3Mgb3JpZ2luYWwgKG5vbi1pbnN0cnVtZW50ZWQpIHN0YXRlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiB0byBkZS1pbnN0cnVtZW50XG4gICAgICAgICAqL1xuICAgICAgICBkZWluc3RydW1lbnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGRlaW5zdHJ1bWVudChmbikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGRlLWluc3RydW1lbnQgbm9uLWZ1bmN0aW9uIG9iamVjdCcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZm4uX19zdGFja3RyYWNlT3JpZ2luYWxGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiBub3QgaW5zdHJ1bWVudGVkLCByZXR1cm4gb3JpZ2luYWxcbiAgICAgICAgICAgICAgICByZXR1cm4gZm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGFuIGVycm9yIG1lc3NhZ2UgYW5kIEFycmF5IG9mIFN0YWNrRnJhbWVzLCBzZXJpYWxpemUgYW5kIFBPU1QgdG8gZ2l2ZW4gVVJMLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBzdGFja2ZyYW1lc1xuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBlcnJvck1zZ1xuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVxdWVzdE9wdGlvbnNcbiAgICAgICAgICovXG4gICAgICAgIHJlcG9ydDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkcmVwb3J0KHN0YWNrZnJhbWVzLCB1cmwsIGVycm9yTXNnLCByZXF1ZXN0T3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gb25yZWFkeXN0YXRlY2hhbmdlKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzID49IDIwMCAmJiByZXEuc3RhdHVzIDwgNDAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignUE9TVCB0byAnICsgdXJsICsgJyBmYWlsZWQgd2l0aCBzdGF0dXM6ICcgKyByZXEuc3RhdHVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJlcS5vcGVuKCdwb3N0JywgdXJsKTtcblxuICAgICAgICAgICAgICAgIC8vIFNldCByZXF1ZXN0IGhlYWRlcnNcbiAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdE9wdGlvbnMgJiYgdHlwZW9mIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBoZWFkZXJzID0gcmVxdWVzdE9wdGlvbnMuaGVhZGVycztcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaGVhZGVyIGluIGhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXJzLmhhc093blByb3BlcnR5KGhlYWRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIsIGhlYWRlcnNbaGVhZGVyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVwb3J0UGF5bG9hZCA9IHtzdGFjazogc3RhY2tmcmFtZXN9O1xuICAgICAgICAgICAgICAgIGlmIChlcnJvck1zZyAhPT0gdW5kZWZpbmVkICYmIGVycm9yTXNnICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydFBheWxvYWQubWVzc2FnZSA9IGVycm9yTXNnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlcS5zZW5kKEpTT04uc3RyaW5naWZ5KHJlcG9ydFBheWxvYWQpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcbiJdfQ== +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9hcnJheS1zZXQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LXZscS5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iYXNlNjQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9xdWljay1zb3J0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAtY29uc3VtZXIuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9zdGFjay1nZW5lcmF0b3Ivc3RhY2stZ2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrZnJhbWUvc3RhY2tmcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja3RyYWNlLWdwcy9zdGFja3RyYWNlLWdwcy5qcyIsInN0YWNrdHJhY2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2phQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcFZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdlcnJvci1zdGFjay1wYXJzZXInLCBbJ3N0YWNrZnJhbWUnXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ3N0YWNrZnJhbWUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5FcnJvclN0YWNrUGFyc2VyID0gZmFjdG9yeShyb290LlN0YWNrRnJhbWUpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlcihTdGFja0ZyYW1lKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIEZJUkVGT1hfU0FGQVJJX1NUQUNLX1JFR0VYUCA9IC8oXnxAKVxcUytcXDpcXGQrLztcbiAgICB2YXIgQ0hST01FX0lFX1NUQUNLX1JFR0VYUCA9IC9eXFxzKmF0IC4qKFxcUytcXDpcXGQrfFxcKG5hdGl2ZVxcKSkvbTtcbiAgICB2YXIgU0FGQVJJX05BVElWRV9DT0RFX1JFR0VYUCA9IC9eKGV2YWxAKT8oXFxbbmF0aXZlIGNvZGVcXF0pPyQvO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGFuIEVycm9yIG9iamVjdCwgZXh0cmFjdCB0aGUgbW9zdCBpbmZvcm1hdGlvbiBmcm9tIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IG9mIFN0YWNrRnJhbWVzXG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2UoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3Iuc3RhY2t0cmFjZSAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGVycm9yWydvcGVyYSNzb3VyY2Vsb2MnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhY2sgJiYgZXJyb3Iuc3RhY2subWF0Y2goQ0hST01FX0lFX1NUQUNLX1JFR0VYUCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVY4T3JJRShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VGRk9yU2FmYXJpKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGFyc2UgZ2l2ZW4gRXJyb3Igb2JqZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gU2VwYXJhdGUgbGluZSBhbmQgY29sdW1uIG51bWJlcnMgZnJvbSBhIHN0cmluZyBvZiB0aGUgZm9ybTogKFVSSTpMaW5lOkNvbHVtbilcbiAgICAgICAgZXh0cmFjdExvY2F0aW9uOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRleHRyYWN0TG9jYXRpb24odXJsTGlrZSkge1xuICAgICAgICAgICAgLy8gRmFpbC1mYXN0IGJ1dCByZXR1cm4gbG9jYXRpb25zIGxpa2UgXCIobmF0aXZlKVwiXG4gICAgICAgICAgICBpZiAodXJsTGlrZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt1cmxMaWtlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJlZ0V4cCA9IC8oLis/KSg/OlxcOihcXGQrKSk/KD86XFw6KFxcZCspKT8kLztcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IHJlZ0V4cC5leGVjKHVybExpa2UucmVwbGFjZSgvW1xcKFxcKV0vZywgJycpKTtcbiAgICAgICAgICAgIHJldHVybiBbcGFydHNbMV0sIHBhcnRzWzJdIHx8IHVuZGVmaW5lZCwgcGFydHNbM10gfHwgdW5kZWZpbmVkXTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZVY4T3JJRTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VWOE9ySUUoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIWxpbmUubWF0Y2goQ0hST01FX0lFX1NUQUNLX1JFR0VYUCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignKGV2YWwgJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IGV2YWwgaW5mb3JtYXRpb24gdW50aWwgd2UgaW1wbGVtZW50IHN0YWNrdHJhY2UuanMvc3RhY2tmcmFtZSM4XG4gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoL2V2YWwgY29kZS9nLCAnZXZhbCcpLnJlcGxhY2UoLyhcXChldmFsIGF0IFteXFwoKV0qKXwoXFwpXFwsLiokKS9nLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBsaW5lLnJlcGxhY2UoL15cXHMrLywgJycpLnJlcGxhY2UoL1xcKGV2YWwgY29kZS9nLCAnKCcpLnNwbGl0KC9cXHMrLykuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbih0b2tlbnMucG9wKCkpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0b2tlbnMuam9pbignICcpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBbJ2V2YWwnLCAnPGFub255bW91cz4nXS5pbmRleE9mKGxvY2F0aW9uUGFydHNbMF0pID4gLTEgPyB1bmRlZmluZWQgOiBsb2NhdGlvblBhcnRzWzBdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlRkZPclNhZmFyaTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VGRk9yU2FmYXJpKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIWxpbmUubWF0Y2goU0FGQVJJX05BVElWRV9DT0RFX1JFR0VYUCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSBldmFsIGluZm9ybWF0aW9uIHVudGlsIHdlIGltcGxlbWVudCBzdGFja3RyYWNlLmpzL3N0YWNrZnJhbWUjOFxuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJyA+IGV2YWwnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoLyBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsXFw6XFxkK1xcOlxcZCsvZywgJzokMScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJ0AnKSA9PT0gLTEgJiYgbGluZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyaSBldmFsIGZyYW1lcyBvbmx5IGhhdmUgZnVuY3Rpb24gbmFtZXMgYW5kIG5vdGhpbmcgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBsaW5lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBsaW5lLnNwbGl0KCdAJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRva2Vucy5qb2luKCdAJykgfHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhKGUpIHtcbiAgICAgICAgICAgIGlmICghZS5zdGFja3RyYWNlIHx8IChlLm1lc3NhZ2UuaW5kZXhPZignXFxuJykgPiAtMSAmJlxuICAgICAgICAgICAgICAgIGUubWVzc2FnZS5zcGxpdCgnXFxuJykubGVuZ3RoID4gZS5zdGFja3RyYWNlLnNwbGl0KCdcXG4nKS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTkoZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFlLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTEwKGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTEoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTk6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmE5KGUpIHtcbiAgICAgICAgICAgIHZhciBsaW5lUkUgPSAvTGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKS9pO1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gZS5tZXNzYWdlLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDIsIGxlbiA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZVJFLmV4ZWMobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZXNbaV1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhMTA6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMChlKSB7XG4gICAgICAgICAgICB2YXIgbGluZVJFID0gL0xpbmUgKFxcZCspLipzY3JpcHQgKD86aW4gKT8oXFxTKykoPzo6IEluIGZ1bmN0aW9uIChcXFMrKSk/JC9pO1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gZS5zdGFja3RyYWNlLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZVJFLmV4ZWMobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IG1hdGNoWzNdIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lc1tpXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gT3BlcmEgMTAuNjUrIEVycm9yLnN0YWNrIHZlcnkgc2ltaWxhciB0byBGRi9TYWZhcmlcbiAgICAgICAgcGFyc2VPcGVyYTExOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhMTEoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIWxpbmUubWF0Y2goRklSRUZPWF9TQUZBUklfU1RBQ0tfUkVHRVhQKSAmJiAhbGluZS5tYXRjaCgvXkVycm9yIGNyZWF0ZWQgYXQvKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5zcGxpdCgnQCcpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25DYWxsID0gKHRva2Vucy5zaGlmdCgpIHx8ICcnKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25DYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPGFub255bW91cyBmdW5jdGlvbig6IChcXHcrKSk/Pi8sICckMicpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwoW15cXCldKlxcKS9nLCAnJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzUmF3O1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkNhbGwubWF0Y2goL1xcKChbXlxcKV0qKVxcKS8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NSYXcgPSBmdW5jdGlvbkNhbGwucmVwbGFjZSgvXlteXFwoXStcXCgoW15cXCldKilcXCkkLywgJyQxJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gKGFyZ3NSYXcgPT09IHVuZGVmaW5lZCB8fCBhcmdzUmF3ID09PSAnW2FyZ3VtZW50cyBub3QgYXZhaWxhYmxlXScpID9cbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDogYXJnc1Jhdy5zcGxpdCgnLCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3XG4gKiBtZW1iZXIgaXMgTygxKSwgdGVzdGluZyBmb3IgbWVtYmVyc2hpcCBpcyBPKDEpLCBhbmQgZmluZGluZyB0aGUgaW5kZXggb2YgYW5cbiAqIGVsZW1lbnQgaXMgTygxKS4gUmVtb3ZpbmcgZWxlbWVudHMgZnJvbSB0aGUgc2V0IGlzIG5vdCBzdXBwb3J0ZWQuIE9ubHlcbiAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgbWVtYmVyc2hpcC5cbiAqL1xuZnVuY3Rpb24gQXJyYXlTZXQoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8qKlxuICogU3RhdGljIG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gKi9cbkFycmF5U2V0LmZyb21BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X2Zyb21BcnJheShhQXJyYXksIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYUFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgc2V0LmFkZChhQXJyYXlbaV0sIGFBbGxvd0R1cGxpY2F0ZXMpO1xuICB9XG4gIHJldHVybiBzZXQ7XG59O1xuXG4vKipcbiAqIFJldHVybiBob3cgbWFueSB1bmlxdWUgaXRlbXMgYXJlIGluIHRoaXMgQXJyYXlTZXQuIElmIGR1cGxpY2F0ZXMgaGF2ZSBiZWVuXG4gKiBhZGRlZCwgdGhhbiB0aG9zZSBkbyBub3QgY291bnQgdG93YXJkcyB0aGUgc2l6ZS5cbiAqXG4gKiBAcmV0dXJucyBOdW1iZXJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiBBcnJheVNldF9zaXplKCkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fc2V0KS5sZW5ndGg7XG59O1xuXG4vKipcbiAqIEFkZCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoaXMgc2V0LlxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gQXJyYXlTZXRfYWRkKGFTdHIsIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICB2YXIgaXNEdXBsaWNhdGUgPSBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB2YXIgaWR4ID0gdGhpcy5fYXJyYXkubGVuZ3RoO1xuICBpZiAoIWlzRHVwbGljYXRlIHx8IGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICB0aGlzLl9hcnJheS5wdXNoKGFTdHIpO1xuICB9XG4gIGlmICghaXNEdXBsaWNhdGUpIHtcbiAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gIH1cbn07XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIHN0cmluZyBhIG1lbWJlciBvZiB0aGlzIHNldD9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIEFycmF5U2V0X2hhcyhhU3RyKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgcmV0dXJuIGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIGlmIChoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgaW50VG9DaGFyTWFwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcblxuLyoqXG4gKiBFbmNvZGUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMCB0byA2MyB0byBhIHNpbmdsZSBiYXNlIDY0IGRpZ2l0LlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgaWYgKDAgPD0gbnVtYmVyICYmIG51bWJlciA8IGludFRvQ2hhck1hcC5sZW5ndGgpIHtcbiAgICByZXR1cm4gaW50VG9DaGFyTWFwW251bWJlcl07XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogXCIgKyBudW1iZXIpO1xufTtcblxuLyoqXG4gKiBEZWNvZGUgYSBzaW5nbGUgYmFzZSA2NCBjaGFyYWN0ZXIgY29kZSBkaWdpdCB0byBhbiBpbnRlZ2VyLiBSZXR1cm5zIC0xIG9uXG4gKiBmYWlsdXJlLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIChjaGFyQ29kZSkge1xuICB2YXIgYmlnQSA9IDY1OyAgICAgLy8gJ0EnXG4gIHZhciBiaWdaID0gOTA7ICAgICAvLyAnWidcblxuICB2YXIgbGl0dGxlQSA9IDk3OyAgLy8gJ2EnXG4gIHZhciBsaXR0bGVaID0gMTIyOyAvLyAneidcblxuICB2YXIgemVybyA9IDQ4OyAgICAgLy8gJzAnXG4gIHZhciBuaW5lID0gNTc7ICAgICAvLyAnOSdcblxuICB2YXIgcGx1cyA9IDQzOyAgICAgLy8gJysnXG4gIHZhciBzbGFzaCA9IDQ3OyAgICAvLyAnLydcblxuICB2YXIgbGl0dGxlT2Zmc2V0ID0gMjY7XG4gIHZhciBudW1iZXJPZmZzZXQgPSA1MjtcblxuICAvLyAwIC0gMjU6IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXG4gIGlmIChiaWdBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGJpZ1opIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gYmlnQSk7XG4gIH1cblxuICAvLyAyNiAtIDUxOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuICBpZiAobGl0dGxlQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBsaXR0bGVaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGxpdHRsZUEgKyBsaXR0bGVPZmZzZXQpO1xuICB9XG5cbiAgLy8gNTIgLSA2MTogMDEyMzQ1Njc4OVxuICBpZiAoemVybyA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBuaW5lKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIHplcm8gKyBudW1iZXJPZmZzZXQpO1xuICB9XG5cbiAgLy8gNjI6ICtcbiAgaWYgKGNoYXJDb2RlID09IHBsdXMpIHtcbiAgICByZXR1cm4gNjI7XG4gIH1cblxuICAvLyA2MzogL1xuICBpZiAoY2hhckNvZGUgPT0gc2xhc2gpIHtcbiAgICByZXR1cm4gNjM7XG4gIH1cblxuICAvLyBJbnZhbGlkIGJhc2U2NCBkaWdpdC5cbiAgcmV0dXJuIC0xO1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5leHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBSZWN1cnNpdmUgaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaC5cbiAqXG4gKiBAcGFyYW0gYUxvdyBJbmRpY2VzIGhlcmUgYW5kIGxvd2VyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYUhpZ2ggSW5kaWNlcyBoZXJlIGFuZCBoaWdoZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IGJlaW5nIHNlYXJjaGVkIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIG5vbi1lbXB0eSBhcnJheSBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBGdW5jdGlvbiB3aGljaCB0YWtlcyB0d28gZWxlbWVudHMgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgLy9cbiAgLy8gICAxLiBXZSBmaW5kIHRoZSBleGFjdCBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgLy9cbiAgLy8gICAyLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGJ1dCB3ZSBjYW4gcmV0dXJuIHRoZSBpbmRleCBvZlxuICAvLyAgICAgIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudC5cbiAgLy9cbiAgLy8gICAzLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGFuZCB0aGVyZSBpcyBubyBuZXh0LWNsb3Nlc3RcbiAgLy8gICAgICBlbGVtZW50IHRoYW4gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgc28gd2UgcmV0dXJuIC0xLlxuICB2YXIgbWlkID0gTWF0aC5mbG9vcigoYUhpZ2ggLSBhTG93KSAvIDIpICsgYUxvdztcbiAgdmFyIGNtcCA9IGFDb21wYXJlKGFOZWVkbGUsIGFIYXlzdGFja1ttaWRdLCB0cnVlKTtcbiAgaWYgKGNtcCA9PT0gMCkge1xuICAgIC8vIEZvdW5kIHRoZSBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgICByZXR1cm4gbWlkO1xuICB9XG4gIGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGdyZWF0ZXIgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAoYUhpZ2ggLSBtaWQgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgdXBwZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2gobWlkLCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIFRoZSBleGFjdCBuZWVkbGUgZWxlbWVudCB3YXMgbm90IGZvdW5kIGluIHRoaXMgaGF5c3RhY2suIERldGVybWluZSBpZlxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBhSGlnaCA8IGFIYXlzdGFjay5sZW5ndGggPyBhSGlnaCA6IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGxlc3MgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAobWlkIC0gYUxvdyA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSBsb3dlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBtaWQsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYUxvdyA8IDAgPyAtMSA6IGFMb3c7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoIHdoaWNoIHdpbGwgYWx3YXlzIHRyeSBhbmQgcmV0dXJuXG4gKiB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgZWxlbWVudCBpZiB0aGVyZSBpcyBubyBleGFjdCBoaXQuIFRoaXMgaXMgYmVjYXVzZVxuICogbWFwcGluZ3MgYmV0d2VlbiBvcmlnaW5hbCBhbmQgZ2VuZXJhdGVkIGxpbmUvY29sIHBhaXJzIGFyZSBzaW5nbGUgcG9pbnRzLFxuICogYW5kIHRoZXJlIGlzIGFuIGltcGxpY2l0IHJlZ2lvbiBiZXR3ZWVuIGVhY2ggb2YgdGhlbSwgc28gYSBtaXNzIGp1c3QgbWVhbnNcbiAqIHRoYXQgeW91IGFyZW4ndCBvbiB0aGUgdmVyeSBzdGFydCBvZiBhIHJlZ2lvbi5cbiAqXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCB5b3UgYXJlIGxvb2tpbmcgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgYXJyYXkgdGhhdCBpcyBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBuZWVkbGUgYW5kIGFuIGVsZW1lbnQgaW4gdGhlXG4gKiAgICAgYXJyYXkgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5lZWRsZSBpcyBsZXNzXG4gKiAgICAgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgZWxlbWVudCwgcmVzcGVjdGl2ZWx5LlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICovXG5leHBvcnRzLnNlYXJjaCA9IGZ1bmN0aW9uIHNlYXJjaChhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICBpZiAoYUhheXN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHJlY3Vyc2l2ZVNlYXJjaCgtMSwgYUhheXN0YWNrLmxlbmd0aCwgYU5lZWRsZSwgYUhheXN0YWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbXBhcmUsIGFCaWFzIHx8IGV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLy8gV2UgaGF2ZSBmb3VuZCBlaXRoZXIgdGhlIGV4YWN0IGVsZW1lbnQsIG9yIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudCB0aGFuXG4gIC8vIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIHN1Y2hcbiAgLy8gZWxlbWVudC4gTWFrZSBzdXJlIHdlIGFsd2F5cyByZXR1cm4gdGhlIHNtYWxsZXN0IG9mIHRoZXNlLlxuICB3aGlsZSAoaW5kZXggLSAxID49IDApIHtcbiAgICBpZiAoYUNvbXBhcmUoYUhheXN0YWNrW2luZGV4XSwgYUhheXN0YWNrW2luZGV4IC0gMV0sIHRydWUpICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLS1pbmRleDtcbiAgfVxuXG4gIHJldHVybiBpbmRleDtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGdldHRpbmcgdmFsdWVzIGZyb20gcGFyYW1ldGVyL29wdGlvbnNcbiAqIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGFyZ3MgVGhlIG9iamVjdCB3ZSBhcmUgZXh0cmFjdGluZyB2YWx1ZXMgZnJvbVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdlIGFyZSBnZXR0aW5nLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBBbiBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmdcbiAqIGZyb20gdGhlIG9iamVjdC4gSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkIGFuZCB0aGUgcHJvcGVydHkgaXMgbWlzc2luZywgYW5cbiAqIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICovXG5mdW5jdGlvbiBnZXRBcmcoYUFyZ3MsIGFOYW1lLCBhRGVmYXVsdFZhbHVlKSB7XG4gIGlmIChhTmFtZSBpbiBhQXJncykge1xuICAgIHJldHVybiBhQXJnc1thTmFtZV07XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBhRGVmYXVsdFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYU5hbWUgKyAnXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKTtcbiAgfVxufVxuZXhwb3J0cy5nZXRBcmcgPSBnZXRBcmc7XG5cbnZhciB1cmxSZWdleHAgPSAvXig/OihbXFx3K1xcLS5dKyk6KT9cXC9cXC8oPzooXFx3KzpcXHcrKUApPyhbXFx3Ll0qKSg/OjooXFxkKykpPyhcXFMqKSQvO1xudmFyIGRhdGFVcmxSZWdleHAgPSAvXmRhdGE6LitcXCwuKyQvO1xuXG5mdW5jdGlvbiB1cmxQYXJzZShhVXJsKSB7XG4gIHZhciBtYXRjaCA9IGFVcmwubWF0Y2godXJsUmVnZXhwKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NoZW1lOiBtYXRjaFsxXSxcbiAgICBhdXRoOiBtYXRjaFsyXSxcbiAgICBob3N0OiBtYXRjaFszXSxcbiAgICBwb3J0OiBtYXRjaFs0XSxcbiAgICBwYXRoOiBtYXRjaFs1XVxuICB9O1xufVxuZXhwb3J0cy51cmxQYXJzZSA9IHVybFBhcnNlO1xuXG5mdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFyc2VkVXJsKSB7XG4gIHZhciB1cmwgPSAnJztcbiAgaWYgKGFQYXJzZWRVcmwuc2NoZW1lKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuc2NoZW1lICsgJzonO1xuICB9XG4gIHVybCArPSAnLy8nO1xuICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuYXV0aCArICdAJztcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuaG9zdDtcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7XG4gICAgdXJsICs9IFwiOlwiICsgYVBhcnNlZFVybC5wb3J0XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucGF0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnBhdGg7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cbmV4cG9ydHMudXJsR2VuZXJhdGUgPSB1cmxHZW5lcmF0ZTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGF0aCwgb3IgdGhlIHBhdGggcG9ydGlvbiBvZiBhIFVSTDpcbiAqXG4gKiAtIFJlcGxhY2VzIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aCBvbmUgc2xhc2guXG4gKiAtIFJlbW92ZXMgdW5uZWNlc3NhcnkgJy4nIHBhcnRzLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICc8ZGlyPi8uLicgcGFydHMuXG4gKlxuICogQmFzZWQgb24gY29kZSBpbiB0aGUgTm9kZS5qcyAncGF0aCcgY29yZSBtb2R1bGUuXG4gKlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIHVybCB0byBub3JtYWxpemUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhUGF0aCkge1xuICB2YXIgcGF0aCA9IGFQYXRoO1xuICB2YXIgdXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICBpZiAodXJsKSB7XG4gICAgaWYgKCF1cmwucGF0aCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cbiAgICBwYXRoID0gdXJsLnBhdGg7XG4gIH1cbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCk7XG5cbiAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuICBmb3IgKHZhciBwYXJ0LCB1cCA9IDAsIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHBhcnQgPSBwYXJ0c1tpXTtcbiAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXAgPiAwKSB7XG4gICAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYmxhbmsgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuIFRyeWluZyB0byBnb1xuICAgICAgICAvLyBhYm92ZSB0aGUgcm9vdCBpcyBhIG5vLW9wLiBUaGVyZWZvcmUgd2UgY2FuIHJlbW92ZSBhbGwgJy4uJyBwYXJ0c1xuICAgICAgICAvLyBkaXJlY3RseSBhZnRlciB0aGUgcm9vdC5cbiAgICAgICAgcGFydHMuc3BsaWNlKGkgKyAxLCB1cCk7XG4gICAgICAgIHVwID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShpLCAyKTtcbiAgICAgICAgdXAtLTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcblxuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICBwYXRoID0gaXNBYnNvbHV0ZSA/ICcvJyA6ICcuJztcbiAgfVxuXG4gIGlmICh1cmwpIHtcbiAgICB1cmwucGF0aCA9IHBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKHVybCk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcblxuLyoqXG4gKiBKb2lucyB0d28gcGF0aHMvVVJMcy5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIGpvaW5lZCB3aXRoIHRoZSByb290LlxuICpcbiAqIC0gSWYgYVBhdGggaXMgYSBVUkwgb3IgYSBkYXRhIFVSSSwgYVBhdGggaXMgcmV0dXJuZWQsIHVubGVzcyBhUGF0aCBpcyBhXG4gKiAgIHNjaGVtZS1yZWxhdGl2ZSBVUkw6IFRoZW4gdGhlIHNjaGVtZSBvZiBhUm9vdCwgaWYgYW55LCBpcyBwcmVwZW5kZWRcbiAqICAgZmlyc3QuXG4gKiAtIE90aGVyd2lzZSBhUGF0aCBpcyBhIHBhdGguIElmIGFSb290IGlzIGEgVVJMLCB0aGVuIGl0cyBwYXRoIHBvcnRpb25cbiAqICAgaXMgdXBkYXRlZCB3aXRoIHRoZSByZXN1bHQgYW5kIGFSb290IGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhlIHJlc3VsdFxuICogICBpcyByZXR1cm5lZC5cbiAqICAgLSBJZiBhUGF0aCBpcyBhYnNvbHV0ZSwgdGhlIHJlc3VsdCBpcyBhUGF0aC5cbiAqICAgLSBPdGhlcndpc2UgdGhlIHR3byBwYXRocyBhcmUgam9pbmVkIHdpdGggYSBzbGFzaC5cbiAqIC0gSm9pbmluZyBmb3IgZXhhbXBsZSAnaHR0cDovLycgYW5kICd3d3cuZXhhbXBsZS5jb20nIGlzIGFsc28gc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBqb2luKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG4gIGlmIChhUGF0aCA9PT0gXCJcIikge1xuICAgIGFQYXRoID0gXCIuXCI7XG4gIH1cbiAgdmFyIGFQYXRoVXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICB2YXIgYVJvb3RVcmwgPSB1cmxQYXJzZShhUm9vdCk7XG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290ID0gYVJvb3RVcmwucGF0aCB8fCAnLyc7XG4gIH1cblxuICAvLyBgam9pbihmb28sICcvL3d3dy5leGFtcGxlLm9yZycpYFxuICBpZiAoYVBhdGhVcmwgJiYgIWFQYXRoVXJsLnNjaGVtZSkge1xuICAgIGlmIChhUm9vdFVybCkge1xuICAgICAgYVBhdGhVcmwuc2NoZW1lID0gYVJvb3RVcmwuc2NoZW1lO1xuICAgIH1cbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVBhdGhVcmwpO1xuICB9XG5cbiAgaWYgKGFQYXRoVXJsIHx8IGFQYXRoLm1hdGNoKGRhdGFVcmxSZWdleHApKSB7XG4gICAgcmV0dXJuIGFQYXRoO1xuICB9XG5cbiAgLy8gYGpvaW4oJ2h0dHA6Ly8nLCAnd3d3LmV4YW1wbGUuY29tJylgXG4gIGlmIChhUm9vdFVybCAmJiAhYVJvb3RVcmwuaG9zdCAmJiAhYVJvb3RVcmwucGF0aCkge1xuICAgIGFSb290VXJsLmhvc3QgPSBhUGF0aDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG5cbiAgdmFyIGpvaW5lZCA9IGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgPyBhUGF0aFxuICAgIDogbm9ybWFsaXplKGFSb290LnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgYVBhdGgpO1xuXG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290VXJsLnBhdGggPSBqb2luZWQ7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuICByZXR1cm4gam9pbmVkO1xufVxuZXhwb3J0cy5qb2luID0gam9pbjtcblxuZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24gKGFQYXRoKSB7XG4gIHJldHVybiBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJyB8fCAhIWFQYXRoLm1hdGNoKHVybFJlZ2V4cCk7XG59O1xuXG4vKipcbiAqIE1ha2UgYSBwYXRoIHJlbGF0aXZlIHRvIGEgVVJMIG9yIGFub3RoZXIgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIG1hZGUgcmVsYXRpdmUgdG8gYVJvb3QuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0aXZlKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG5cbiAgYVJvb3QgPSBhUm9vdC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgcGF0aCB0byBiZSBhYm92ZSB0aGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBzaW1wbHlcbiAgLy8gY2hlY2tpbmcgd2hldGhlciB0aGUgcm9vdCBpcyBhIHByZWZpeCBvZiB0aGUgcGF0aCB3b24ndCB3b3JrLiBJbnN0ZWFkLCB3ZVxuICAvLyBuZWVkIHRvIHJlbW92ZSBjb21wb25lbnRzIGZyb20gdGhlIHJvb3Qgb25lIGJ5IG9uZSwgdW50aWwgZWl0aGVyIHdlIGZpbmRcbiAgLy8gYSBwcmVmaXggdGhhdCBmaXRzLCBvciB3ZSBydW4gb3V0IG9mIGNvbXBvbmVudHMgdG8gcmVtb3ZlLlxuICB2YXIgbGV2ZWwgPSAwO1xuICB3aGlsZSAoYVBhdGguaW5kZXhPZihhUm9vdCArICcvJykgIT09IDApIHtcbiAgICB2YXIgaW5kZXggPSBhUm9vdC5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBvbmx5IHBhcnQgb2YgdGhlIHJvb3QgdGhhdCBpcyBsZWZ0IGlzIHRoZSBzY2hlbWUgKGkuZS4gaHR0cDovLyxcbiAgICAvLyBmaWxlOi8vLywgZXRjLiksIG9uZSBvciBtb3JlIHNsYXNoZXMgKC8pLCBvciBzaW1wbHkgbm90aGluZyBhdCBhbGwsIHdlXG4gICAgLy8gaGF2ZSBleGhhdXN0ZWQgYWxsIGNvbXBvbmVudHMsIHNvIHRoZSBwYXRoIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcm9vdC5cbiAgICBhUm9vdCA9IGFSb290LnNsaWNlKDAsIGluZGV4KTtcbiAgICBpZiAoYVJvb3QubWF0Y2goL14oW15cXC9dKzpcXC8pP1xcLyokLykpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICArK2xldmVsO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGFkZCBhIFwiLi4vXCIgZm9yIGVhY2ggY29tcG9uZW50IHdlIHJlbW92ZWQgZnJvbSB0aGUgcm9vdC5cbiAgcmV0dXJuIEFycmF5KGxldmVsICsgMSkuam9pbihcIi4uL1wiKSArIGFQYXRoLnN1YnN0cihhUm9vdC5sZW5ndGggKyAxKTtcbn1cbmV4cG9ydHMucmVsYXRpdmUgPSByZWxhdGl2ZTtcblxudmFyIHN1cHBvcnRzTnVsbFByb3RvID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAhKCdfX3Byb3RvX18nIGluIG9iaik7XG59KCkpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSAocykge1xuICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBCZWNhdXNlIGJlaGF2aW9yIGdvZXMgd2Fja3kgd2hlbiB5b3Ugc2V0IGBfX3Byb3RvX19gIG9uIG9iamVjdHMsIHdlXG4gKiBoYXZlIHRvIHByZWZpeCBhbGwgdGhlIHN0cmluZ3MgaW4gb3VyIHNldCB3aXRoIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXIuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvcHVsbC8zMSBhbmRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzMwXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbmZ1bmN0aW9uIHRvU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gJyQnICsgYVN0cjtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy50b1NldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiB0b1NldFN0cmluZztcblxuZnVuY3Rpb24gZnJvbVNldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuIGFTdHIuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMuZnJvbVNldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiBmcm9tU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBpc1Byb3RvU3RyaW5nKHMpIHtcbiAgaWYgKCFzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IHMubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPCA5IC8qIFwiX19wcm90b19fXCIubGVuZ3RoICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHMuY2hhckNvZGVBdChsZW5ndGggLSAxKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDIpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMykgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA0KSAhPT0gMTE2IC8qICd0JyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDUpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNikgIT09IDExNCAvKiAncicgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA3KSAhPT0gMTEyIC8qICdwJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDgpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOSkgIT09IDk1ICAvKiAnXycgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gbGVuZ3RoIC0gMTA7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHMuY2hhckNvZGVBdChpKSAhPT0gMzYgLyogJyQnICovKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiwgYnV0IGRpZmZlcmVudCBnZW5lcmF0ZWRcbiAqIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhIG1hcHBpbmcgd2l0aCBhXG4gKiBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyhtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGRlZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBpbmRpY2VzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICogbWFwcGluZyB3aXRoIGEgc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQ7XG5cbmZ1bmN0aW9uIHN0cmNtcChhU3RyMSwgYVN0cjIpIHtcbiAgaWYgKGFTdHIxID09PSBhU3RyMikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKGFTdHIxID4gYVN0cjIpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggaW5mbGF0ZWQgc291cmNlIGFuZCBuYW1lIHN0cmluZ3Mgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gc3RyY21wKG1hcHBpbmdBLnNvdXJjZSwgbWFwcGluZ0Iuc291cmNlKTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gc3RyY21wKG1hcHBpbmdBLm5hbWUsIG1hcHBpbmdCLm5hbWUpO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2stZ2VuZXJhdG9yJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tHZW5lcmF0b3IgPSBmYWN0b3J5KHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTdGFja0ZyYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFja3RyYWNlOiBmdW5jdGlvbiBTdGFja0dlbmVyYXRvciQkYmFja3RyYWNlKG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICAgICAgdmFyIG1heFN0YWNrU2l6ZSA9IDEwO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcHRzLm1heFN0YWNrU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBtYXhTdGFja1NpemUgPSBvcHRzLm1heFN0YWNrU2l6ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGN1cnIgPSBhcmd1bWVudHMuY2FsbGVlO1xuICAgICAgICAgICAgd2hpbGUgKGN1cnIgJiYgc3RhY2subGVuZ3RoIDwgbWF4U3RhY2tTaXplKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxsb3cgVjggb3B0aW1pemF0aW9uc1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGN1cnJbJ2FyZ3VtZW50cyddLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBjdXJyWydhcmd1bWVudHMnXVtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKC9mdW5jdGlvbig/OlxccysoW1xcdyRdKykpK1xccypcXCgvLnRlc3QoY3Vyci50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ldyBTdGFja0ZyYW1lKHtmdW5jdGlvbk5hbWU6IFJlZ0V4cC4kMSB8fCB1bmRlZmluZWQsIGFyZ3M6IGFyZ3N9KSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh7YXJnczogYXJnc30pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci5jYWxsZXI7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2tmcmFtZScsIFtdLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrRnJhbWUgPSBmYWN0b3J5KCk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbigpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgZnVuY3Rpb24gX2lzTnVtYmVyKG4pIHtcbiAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfY2FwaXRhbGl6ZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2dldHRlcihwKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3BdO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBib29sZWFuUHJvcHMgPSBbJ2lzQ29uc3RydWN0b3InLCAnaXNFdmFsJywgJ2lzTmF0aXZlJywgJ2lzVG9wbGV2ZWwnXTtcbiAgICB2YXIgbnVtZXJpY1Byb3BzID0gWydjb2x1bW5OdW1iZXInLCAnbGluZU51bWJlciddO1xuICAgIHZhciBzdHJpbmdQcm9wcyA9IFsnZmlsZU5hbWUnLCAnZnVuY3Rpb25OYW1lJywgJ3NvdXJjZSddO1xuICAgIHZhciBhcnJheVByb3BzID0gWydhcmdzJ107XG5cbiAgICB2YXIgcHJvcHMgPSBib29sZWFuUHJvcHMuY29uY2F0KG51bWVyaWNQcm9wcywgc3RyaW5nUHJvcHMsIGFycmF5UHJvcHMpO1xuXG4gICAgZnVuY3Rpb24gU3RhY2tGcmFtZShvYmopIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcHNbaV0pICYmIG9ialtwcm9wc1tpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzWydzZXQnICsgX2NhcGl0YWxpemUocHJvcHNbaV0pXShvYmpbcHJvcHNbaV1dKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBTdGFja0ZyYW1lLnByb3RvdHlwZSA9IHtcbiAgICAgICAgZ2V0QXJnczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmdzO1xuICAgICAgICB9LFxuICAgICAgICBzZXRBcmdzOiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJncyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFyZ3MgPSB2O1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldEV2YWxPcmlnaW46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZhbE9yaWdpbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0RXZhbE9yaWdpbjogZnVuY3Rpb24odikge1xuICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsT3JpZ2luID0gdjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZhbE9yaWdpbiA9IG5ldyBTdGFja0ZyYW1lKHYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFdmFsIE9yaWdpbiBtdXN0IGJlIGFuIE9iamVjdCBvciBTdGFja0ZyYW1lJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2V0RnVuY3Rpb25OYW1lKCkgfHwgJ3thbm9ueW1vdXN9JztcbiAgICAgICAgICAgIHZhciBhcmdzID0gJygnICsgKHRoaXMuZ2V0QXJncygpIHx8IFtdKS5qb2luKCcsJykgKyAnKSc7XG4gICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSB0aGlzLmdldEZpbGVOYW1lKCkgPyAoJ0AnICsgdGhpcy5nZXRGaWxlTmFtZSgpKSA6ICcnO1xuICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBfaXNOdW1iZXIodGhpcy5nZXRMaW5lTnVtYmVyKCkpID8gKCc6JyArIHRoaXMuZ2V0TGluZU51bWJlcigpKSA6ICcnO1xuICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IF9pc051bWJlcih0aGlzLmdldENvbHVtbk51bWJlcigpKSA/ICgnOicgKyB0aGlzLmdldENvbHVtbk51bWJlcigpKSA6ICcnO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZSArIGFyZ3MgKyBmaWxlTmFtZSArIGxpbmVOdW1iZXIgKyBjb2x1bW5OdW1iZXI7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib29sZWFuUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IF9nZXR0ZXIoYm9vbGVhblByb3BzW2ldKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBCb29sZWFuKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoYm9vbGVhblByb3BzW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bWVyaWNQcm9wcy5sZW5ndGg7IGorKykge1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gX2dldHRlcihudW1lcmljUHJvcHNbal0pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gKGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfaXNOdW1iZXIodikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihwICsgJyBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBOdW1iZXIodik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShudW1lcmljUHJvcHNbal0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3RyaW5nUHJvcHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShzdHJpbmdQcm9wc1trXSldID0gX2dldHRlcihzdHJpbmdQcm9wc1trXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUoc3RyaW5nUHJvcHNba10pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBTdHJpbmcodik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShzdHJpbmdQcm9wc1trXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0YWNrRnJhbWU7XG59KSk7XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFja3RyYWNlLWdwcycsIFsnc291cmNlLW1hcCcsICdzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyJyksIHJlcXVpcmUoJ3N0YWNrZnJhbWUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja1RyYWNlR1BTID0gZmFjdG9yeShyb290LlNvdXJjZU1hcCB8fCByb290LnNvdXJjZU1hcCwgcm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uKFNvdXJjZU1hcCwgU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIE1ha2UgYSBYLURvbWFpbiByZXF1ZXN0IHRvIHVybCBhbmQgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IHdpdGggcmVzcG9uc2UgdGV4dCBpZiBmdWxmaWxsZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfeGRyKHVybCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICByZXEub3BlbignZ2V0JywgdXJsKTtcbiAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIG9ucmVhZHlzdGF0ZWNoYW5nZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChyZXEuc3RhdHVzID49IDIwMCAmJiByZXEuc3RhdHVzIDwgMzAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKHVybC5zdWJzdHIoMCwgNykgPT09ICdmaWxlOi8vJyAmJiByZXEucmVzcG9uc2VUZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0hUVFAgc3RhdHVzOiAnICsgcmVxLnN0YXR1cyArICcgcmV0cmlldmluZyAnICsgdXJsKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVxLnNlbmQoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgQmFzZTY0LWVuY29kZWQgc3RyaW5nIGludG8gaXRzIG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uLlxuICAgICAqIFVzZWQgZm9yIGlubGluZSBzb3VyY2VtYXBzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGI2NHN0ciBCYXNlLTY0IGVuY29kZWQgc3RyaW5nXG4gICAgICogQHJldHVybnMge1N0cmluZ30gb3JpZ2luYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NC1lbmNvZGVkIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfYXRvYihiNjRzdHIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5hdG9iKSB7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93LmF0b2IoYjY0c3RyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3VwcGx5IGEgcG9seWZpbGwgZm9yIHdpbmRvdy5hdG9iIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9wYXJzZUpzb24oc3RyaW5nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgSlNPTiAhPT0gJ3VuZGVmaW5lZCcgJiYgSlNPTi5wYXJzZSkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3VwcGx5IGEgcG9seWZpbGwgZm9yIEpTT04ucGFyc2UgaW4gdGhpcyBlbnZpcm9ubWVudCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRGdW5jdGlvbk5hbWUoc291cmNlLCBsaW5lTnVtYmVyLyosIGNvbHVtbk51bWJlciovKSB7XG4gICAgICAgIHZhciBzeW50YXhlcyA9IFtcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGZ1bmN0aW9uICh7YXJnc30pIFRPRE8gYXJncyBjYXB0dXJlXG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypmdW5jdGlvblxcYi8sXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiB7bmFtZX0oe2FyZ3N9KSBtWzFdPW5hbWUgbVsyXT1hcmdzXG4gICAgICAgICAgICAvZnVuY3Rpb25cXHMrKFteKCdcImBdKj8pXFxzKlxcKChbXildKilcXCkvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gZXZhbCgpXG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccyooPzpldmFsfG5ldyBGdW5jdGlvbilcXGIvLFxuICAgICAgICAgICAgLy8gZm5fbmFtZSgpIHtcbiAgICAgICAgICAgIC9cXGIoPyEoPzppZnxmb3J8c3dpdGNofHdoaWxlfHdpdGh8Y2F0Y2gpXFxiKSg/Oig/OnN0YXRpYylcXHMrKT8oXFxTKylcXHMqXFwoLio/XFwpXFxzKlxcey8sXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSAoKSA9PiB7XG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypcXCguKj9cXClcXHMqPT4vXG4gICAgICAgIF07XG4gICAgICAgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgnXFxuJyk7XG5cbiAgICAgICAgLy8gV2FsayBiYWNrd2FyZHMgaW4gdGhlIHNvdXJjZSBsaW5lcyB1bnRpbCB3ZSBmaW5kIHRoZSBsaW5lIHdoaWNoIG1hdGNoZXMgb25lIG9mIHRoZSBwYXR0ZXJucyBhYm92ZVxuICAgICAgICB2YXIgY29kZSA9ICcnO1xuICAgICAgICB2YXIgbWF4TGluZXMgPSBNYXRoLm1pbihsaW5lTnVtYmVyLCAyMCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4TGluZXM7ICsraSkge1xuICAgICAgICAgICAgLy8gbGluZU5vIGlzIDEtYmFzZWQsIHNvdXJjZVtdIGlzIDAtYmFzZWRcbiAgICAgICAgICAgIHZhciBsaW5lID0gbGluZXNbbGluZU51bWJlciAtIGkgLSAxXTtcbiAgICAgICAgICAgIHZhciBjb21tZW50UG9zID0gbGluZS5pbmRleE9mKCcvLycpO1xuICAgICAgICAgICAgaWYgKGNvbW1lbnRQb3MgPj0gMCkge1xuICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cigwLCBjb21tZW50UG9zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gbGluZSArIGNvZGU7XG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IHN5bnRheGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtID0gc3ludGF4ZXNbaW5kZXhdLmV4ZWMoY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG1bMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtWzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Vuc3VyZVN1cHBvcnRlZEVudmlyb25tZW50KCkge1xuICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY29uc3VtZSBzb3VyY2UgbWFwcyBpbiBvbGRlciBicm93c2VycycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGFja2ZyYW1lICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gU3RhY2tGcmFtZSBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUuZmlsZU5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBmaWxlIG5hbWUgaXMgbm90IGEgU3RyaW5nJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUubGluZU51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciAlIDEgIT09IDAgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGxpbmUgbnVtYmVyIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGNvbHVtbiBudW1iZXIgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSkge1xuICAgICAgICB2YXIgc291cmNlTWFwcGluZ1VybFJlZ0V4cCA9IC9cXC9cXC9bI0BdID9zb3VyY2VNYXBwaW5nVVJMPShbXlxccydcIl0rKVxccyokL21nO1xuICAgICAgICB2YXIgbGFzdFNvdXJjZU1hcHBpbmdVcmw7XG4gICAgICAgIHZhciBtYXRjaFNvdXJjZU1hcHBpbmdVcmw7XG4gICAgICAgIHdoaWxlIChtYXRjaFNvdXJjZU1hcHBpbmdVcmwgPSBzb3VyY2VNYXBwaW5nVXJsUmVnRXhwLmV4ZWMoc291cmNlKSkgeyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgICAgIGxhc3RTb3VyY2VNYXBwaW5nVXJsID0gbWF0Y2hTb3VyY2VNYXBwaW5nVXJsWzFdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXN0U291cmNlTWFwcGluZ1VybCkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzb3VyY2VNYXBwaW5nVVJMIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwU291cmNlKHN0YWNrZnJhbWUsIHNvdXJjZU1hcENvbnN1bWVyLCBzb3VyY2VDYWNoZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgbG9jID0gc291cmNlTWFwQ29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgICAgICAgICAgbGluZTogc3RhY2tmcmFtZS5saW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAobG9jLnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIC8vIGNhY2hlIG1hcHBlZCBzb3VyY2VzXG4gICAgICAgICAgICAgICAgdmFyIG1hcHBlZFNvdXJjZSA9IHNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IobG9jLnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hcHBlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VDYWNoZVtsb2Muc291cmNlXSA9IG1hcHBlZFNvdXJjZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAvLyBnaXZlbiBzdGFja2ZyYW1lIGFuZCBzb3VyY2UgbG9jYXRpb24sIHVwZGF0ZSBzdGFja2ZyYW1lXG4gICAgICAgICAgICAgICAgICAgIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbG9jLm5hbWUgfHwgc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBzdGFja2ZyYW1lLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbG9jLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvYy5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2MuY29sdW1uXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IGdldCBvcmlnaW5hbCBzb3VyY2UgZm9yIGdpdmVuIHN0YWNrZnJhbWUgYW5kIHNvdXJjZSBtYXAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICogICAgICBvcHRzLnNvdXJjZUNhY2hlID0ge3VybDogXCJTb3VyY2UgU3RyaW5nXCJ9ID0+IHByZWxvYWQgc291cmNlIGNhY2hlXG4gICAgICogICAgICBvcHRzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgPSB7L3BhdGgvZmlsZS5qcy5tYXA6IFNvdXJjZU1hcENvbnN1bWVyfVxuICAgICAqICAgICAgb3B0cy5vZmZsaW5lID0gVHJ1ZSB0byBwcmV2ZW50IG5ldHdvcmsgcmVxdWVzdHMuXG4gICAgICogICAgICAgICAgICAgIEJlc3QgZWZmb3J0IHdpdGhvdXQgc291cmNlcyBvciBzb3VyY2UgbWFwcy5cbiAgICAgKiAgICAgIG9wdHMuYWpheCA9IFByb21pc2UgcmV0dXJuaW5nIGZ1bmN0aW9uIHRvIG1ha2UgWC1Eb21haW4gcmVxdWVzdHNcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyhvcHRzKSB7XG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdGFja1RyYWNlR1BTKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja1RyYWNlR1BTKG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuc291cmNlQ2FjaGUgPSBvcHRzLnNvdXJjZUNhY2hlIHx8IHt9O1xuICAgICAgICB0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgPSBvcHRzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgfHwge307XG5cbiAgICAgICAgdGhpcy5hamF4ID0gb3B0cy5hamF4IHx8IF94ZHI7XG5cbiAgICAgICAgdGhpcy5fYXRvYiA9IG9wdHMuYXRvYiB8fCBfYXRvYjtcblxuICAgICAgICB0aGlzLl9nZXQgPSBmdW5jdGlvbiBfZ2V0KGxvY2F0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzRGF0YVVybCA9IGxvY2F0aW9uLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRzLm9mZmxpbmUgJiYgIWlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdDYW5ub3QgbWFrZSBuZXR3b3JrIHJlcXVlc3RzIGluIG9mZmxpbmUgbW9kZScpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNEYXRhVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIFVSTHMgY2FuIGhhdmUgcGFyYW1ldGVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VwcG9ydGVkRW5jb2RpbmdSZWdleHAgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9eZGF0YTphcHBsaWNhdGlvblxcL2pzb247KFtcXHc9OlwiLV0rOykqYmFzZTY0LC87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsb2NhdGlvbi5tYXRjaChzdXBwb3J0ZWRFbmNvZGluZ1JlZ2V4cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwU3RhcnQgPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kZWRTb3VyY2UgPSBsb2NhdGlvbi5zdWJzdHIoc291cmNlTWFwU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLl9hdG9iKGVuY29kZWRTb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0gc291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVGhlIGVuY29kaW5nIG9mIHRoZSBpbmxpbmUgc291cmNlbWFwIGlzIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGhyUHJvbWlzZSA9IHRoaXMuYWpheChsb2NhdGlvbiwge21ldGhvZDogJ2dldCd9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhY2hlIHRoZSBQcm9taXNlIHRvIHByZXZlbnQgZHVwbGljYXRlIGluLWZsaWdodCByZXF1ZXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0gPSB4aHJQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyUHJvbWlzZS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGluZyBTb3VyY2VNYXBDb25zdW1lcnMgaXMgZXhwZW5zaXZlLCBzbyB0aGlzIHdyYXBzIHRoZSBjcmVhdGlvbiBvZiBhXG4gICAgICAgICAqIFNvdXJjZU1hcENvbnN1bWVyIGluIGEgcGVyLWluc3RhbmNlIGNhY2hlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc291cmNlTWFwcGluZ1VSTCA9IFVSTCB0byBmZXRjaCBzb3VyY2UgbWFwIGZyb21cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGRlZmF1bHRTb3VyY2VSb290ID0gRGVmYXVsdCBzb3VyY2Ugcm9vdCBmb3Igc291cmNlIG1hcCBpZiB1bmRlZmluZWRcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgYSBTb3VyY2VNYXBDb25zdW1lclxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fZ2V0U291cmNlTWFwQ29uc3VtZXIgPSBmdW5jdGlvbiBfZ2V0U291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwcGluZ1VSTCwgZGVmYXVsdFNvdXJjZVJvb3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwQ29uc3VtZXJQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KHNvdXJjZU1hcHBpbmdVUkwpLnRoZW4oZnVuY3Rpb24oc291cmNlTWFwU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VNYXBTb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcFNvdXJjZSA9IF9wYXJzZUpzb24oc291cmNlTWFwU291cmNlLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VNYXBTb3VyY2Uuc291cmNlUm9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwU291cmNlLnNvdXJjZVJvb3QgPSBkZWZhdWx0U291cmNlUm9vdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBTb3VyY2VNYXAuU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwU291cmNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGVbc291cmNlTWFwcGluZ1VSTF0gPSBzb3VyY2VNYXBDb25zdW1lclByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc291cmNlTWFwQ29uc3VtZXJQcm9taXNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIFN0YWNrRnJhbWUsIGVuaGFuY2UgZnVuY3Rpb24gbmFtZSBhbmQgdXNlIHNvdXJjZSBtYXBzIGZvciBhXG4gICAgICAgICAqIGJldHRlciBTdGFja0ZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWUgb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggd2l0aCBzb3VyY2UtbWFwcGVkIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGlucG9pbnQgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRwaW5wb2ludChzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKS50aGVuKGZ1bmN0aW9uKG1hcHBlZFN0YWNrRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lKG1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlLCByZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIFsnY2F0Y2gnXShyZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCByZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBndWVzcyBmdW5jdGlvbiBuYW1lIGZyb20gbG9jYXRpb24gaW5mb3JtYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbmRGdW5jdGlvbk5hbWUgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRmaW5kRnVuY3Rpb25OYW1lKHN0YWNrZnJhbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBfZW5zdXJlU3RhY2tGcmFtZUlzTGVnaXQoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0KHN0YWNrZnJhbWUuZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24gZ2V0U291cmNlQ2FsbGJhY2soc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gc3RhY2tmcmFtZS5saW5lTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uTnVtYmVyID0gc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBndWVzc2VkRnVuY3Rpb25OYW1lID0gX2ZpbmRGdW5jdGlvbk5hbWUoc291cmNlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHJlcGxhY2UgZnVuY3Rpb25OYW1lIGlmIHdlIGZvdW5kIHNvbWV0aGluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3Vlc3NlZEZ1bmN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBndWVzc2VkRnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHN0YWNrZnJhbWUuYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogc3RhY2tmcmFtZS5maWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBzZWVrIHNvdXJjZS1tYXBwZWQgbG9jYXRpb24gYW5kIHJldHVybiBuZXcgZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZ2V0TWFwcGVkTG9jYXRpb24gPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRnZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN1cHBvcnRlZEVudmlyb25tZW50KCk7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZTtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBzdGFja2ZyYW1lLmZpbGVOYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChmaWxlTmFtZSkudGhlbihmdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmdVUkwgPSBfZmluZFNvdXJjZU1hcHBpbmdVUkwoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzRGF0YVVybCA9IHNvdXJjZU1hcHBpbmdVUkwuc3Vic3RyKDAsIDUpID09PSAnZGF0YTonO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdFNvdXJjZVJvb3QgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgZmlsZU5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VNYXBwaW5nVVJMWzBdICE9PSAnLycgJiYgIWlzRGF0YVVybCAmJiAhKC9eaHR0cHM/OlxcL1xcL3xeXFwvXFwvL2kpLnRlc3Qoc291cmNlTWFwcGluZ1VSTCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcHBpbmdVUkwgPSBkZWZhdWx0U291cmNlUm9vdCArIHNvdXJjZU1hcHBpbmdVUkw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwcGluZ1VSTCwgZGVmYXVsdFNvdXJjZVJvb3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihzb3VyY2VNYXBDb25zdW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZXh0cmFjdExvY2F0aW9uSW5mb0Zyb21Tb3VyY2VNYXBTb3VyY2Uoc3RhY2tmcmFtZSwgc291cmNlTWFwQ29uc3VtZXIsIHNvdXJjZUNhY2hlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVsnY2F0Y2gnXShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZScsIFsnZXJyb3Itc3RhY2stcGFyc2VyJywgJ3N0YWNrLWdlbmVyYXRvcicsICdzdGFja3RyYWNlLWdwcyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnZXJyb3Itc3RhY2stcGFyc2VyJyksIHJlcXVpcmUoJ3N0YWNrLWdlbmVyYXRvcicpLCByZXF1aXJlKCdzdGFja3RyYWNlLWdwcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2UgPSBmYWN0b3J5KHJvb3QuRXJyb3JTdGFja1BhcnNlciwgcm9vdC5TdGFja0dlbmVyYXRvciwgcm9vdC5TdGFja1RyYWNlR1BTKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIFN0YWNrVHJhY2UoRXJyb3JTdGFja1BhcnNlciwgU3RhY2tHZW5lcmF0b3IsIFN0YWNrVHJhY2VHUFMpIHtcbiAgICB2YXIgX29wdGlvbnMgPSB7XG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBzdGFja2ZyYW1lcyBmb3IgdGhpcyBsaWJyYXJ5IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2UkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignRXJyb3JTdGFja1BhcnNlciQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlR1BTJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrR2VuZXJhdG9yJCQnKSA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZUNhY2hlOiB7fVxuICAgIH07XG5cbiAgICB2YXIgX2dlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRHZW5lcmF0ZUVycm9yKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRXJyb3IgbXVzdCBiZSB0aHJvd24gdG8gZ2V0IHN0YWNrIGluIElFXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdlIDIgZ2l2ZW4gT2JqZWN0cy4gSWYgYSBjb25mbGljdCBvY2N1cnMgdGhlIHNlY29uZCBvYmplY3Qgd2lucy5cbiAgICAgKiBEb2VzIG5vdCBkbyBkZWVwIG1lcmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaXJzdCBiYXNlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWNvbmQgb3ZlcnJpZGVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gbWVyZ2VkIGZpcnN0IGFuZCBzZWNvbmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tZXJnZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcblxuICAgICAgICBbZmlyc3QsIHNlY29uZF0uZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVyci5zdGFjayB8fCBlcnJbJ29wZXJhI3NvdXJjZWxvYyddO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXJlZChzdGFja2ZyYW1lcywgZmlsdGVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXMuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrZnJhbWVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0KG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikgPyB0aGlzLmZyb21FcnJvcihlcnIsIG9wdHMpIDogdGhpcy5nZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgYmFja3RyYWNlIGZyb20gaW52b2NhdGlvbiBwb2ludC5cbiAgICAgICAgICogSU1QT1JUQU5UOiBEb2VzIG5vdCBoYW5kbGUgc291cmNlIG1hcHMgb3IgZ3Vlc3MgZnVuY3Rpb24gbmFtZXMhXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0U3luYzogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0U3luYyhvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyKSA6IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyZWQoc3RhY2ssIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3Igb2JqZWN0LCBwYXJzZSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmb3IgQXJyYXlbU3RhY2tGcmFtZX1cbiAgICAgICAgICovXG4gICAgICAgIGZyb21FcnJvcjogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZnJvbUVycm9yKGVycm9yLCBvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBncHMgPSBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrZnJhbWVzID0gX2ZpbHRlcmVkKEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyb3IpLCBvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShQcm9taXNlLmFsbChzdGFja2ZyYW1lcy5tYXAoZnVuY3Rpb24oc2YpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVPcmlnaW5hbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ3BzLnBpbnBvaW50KHNmKS50aGVuKHJlc29sdmUsIHJlc29sdmVPcmlnaW5hbClbJ2NhdGNoJ10ocmVzb2x2ZU9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBTdGFja0dlbmVyYXRvciB0byBnZW5lcmF0ZSBhIGJhY2t0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IG9mIEFycmF5W1N0YWNrRnJhbWVdXG4gICAgICAgICAqL1xuICAgICAgICBnZW5lcmF0ZUFydGlmaWNpYWxseTogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2VuZXJhdGVBcnRpZmljaWFsbHkob3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgc3RhY2tGcmFtZXMgPSBTdGFja0dlbmVyYXRvci5iYWNrdHJhY2Uob3B0cyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgc3RhY2tGcmFtZXMgPSBzdGFja0ZyYW1lcy5maWx0ZXIob3B0cy5maWx0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGFja0ZyYW1lcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24sIHdyYXAgaXQgc3VjaCB0aGF0IGludm9jYXRpb25zIHRyaWdnZXIgYSBjYWxsYmFjayB0aGF0XG4gICAgICAgICAqIGlzIGNhbGxlZCB3aXRoIGEgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGluc3RydW1lbnRlZFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdpdGggYSBzdGFjayB0cmFjZSBvbiBpbnZvY2F0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVycmJhY2sgb3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGVycm9yIGlmIHVuYWJsZSB0byBnZXQgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIG9wdGlvbmFsIGNvbnRleHQgb2JqZWN0IChlLmcuIHdpbmRvdylcbiAgICAgICAgICovXG4gICAgICAgIGluc3RydW1lbnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnQoZm4sIGNhbGxiYWNrLCBlcnJiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBpbnN0cnVtZW50ZWQsIHJldHVybiBnaXZlbiBGdW5jdGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGluc3RydW1lbnRlZCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnRlZCgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCgpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZyB8fCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb21FcnJvcihlKS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrKVsnY2F0Y2gnXShlcnJiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGluc3RydW1lbnRlZC5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID0gZm47XG5cbiAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50ZWQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBpbnN0cnVtZW50ZWQsXG4gICAgICAgICAqIHJldmVydCB0aGUgZnVuY3Rpb24gdG8gaXQncyBvcmlnaW5hbCAobm9uLWluc3RydW1lbnRlZCkgc3RhdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGRlLWluc3RydW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGRlaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZGVpbnN0cnVtZW50KGZuKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGUtaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIG5vdCBpbnN0cnVtZW50ZWQsIHJldHVybiBvcmlnaW5hbFxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3IgbWVzc2FnZSBhbmQgQXJyYXkgb2YgU3RhY2tGcmFtZXMsIHNlcmlhbGl6ZSBhbmQgUE9TVCB0byBnaXZlbiBVUkwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrZnJhbWVzXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVycm9yTXNnXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0T3B0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgcmVwb3J0OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRyZXBvcnQoc3RhY2tmcmFtZXMsIHVybCwgZXJyb3JNc2csIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPj0gMjAwICYmIHJlcS5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdQT1NUIHRvICcgKyB1cmwgKyAnIGZhaWxlZCB3aXRoIHN0YXR1czogJyArIHJlcS5zdGF0dXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVxLm9wZW4oJ3Bvc3QnLCB1cmwpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHJlcXVlc3QgaGVhZGVyc1xuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucyAmJiB0eXBlb2YgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgaGVhZGVyc1toZWFkZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZXBvcnRQYXlsb2FkID0ge3N0YWNrOiBzdGFja2ZyYW1lc307XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQgJiYgZXJyb3JNc2cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0UGF5bG9hZC5tZXNzYWdlID0gZXJyb3JNc2c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVwb3J0UGF5bG9hZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIl19 diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index c871d4d..5af6c8b 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.StackTrace=e()}}(function(){var e;return function n(e,r,t){function o(a,s){if(!r[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=r[a]={exports:{}};e[a][0].call(l.exports,function(n){var r=e[a][1][n];return o(r?r:n)},l,l.exports,n,e,r,t)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var r=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),t=this.extractLocation(r.pop()),o=r.join(" ")||void 0,i=["eval",""].indexOf(t[0])>-1?void 0:t[0];return new e({functionName:o,fileName:i,lineNumber:t[1],columnNumber:t[2],source:n})},this)},parseFFOrSafari:function(n){var r=n.stack.split("\n").filter(function(e){return!e.match(t)},this);return r.map(function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),n.indexOf("@")===-1&&n.indexOf(":")===-1)return new e({functionName:n});var r=n.split("@"),t=this.extractLocation(r.pop()),o=r.join("@")||void 0;return new e({functionName:o,fileName:t[0],lineNumber:t[1],columnNumber:t[2],source:n})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,t=n.message.split("\n"),o=[],i=2,a=t.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:n})},this)}}})},{stackframe:10}],2:[function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=e("./util"),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;o=0&&e>1;return n?-r:r}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(n|=c),r+=i.encode(n);while(o>0);return r},r.decode=function(e,n,r){var t,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(s&c),s&=u,f+=s<0?n-u>1?t(u,n,o,i,a,s):s==r.LEAST_UPPER_BOUND?n1?t(e,u,o,i,a,s):s==r.LEAST_UPPER_BOUND?u:e<0?-1:e}r.GREATEST_LOWER_BOUND=1,r.LEAST_UPPER_BOUND=2,r.search=function(e,n,o,i){if(0===n.length)return-1;var a=t(-1,n.length,e,n,o,i||r.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],6:[function(e,n,r){function t(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,r,a){if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},r.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=c.fromArray(e._names.toArray(),!0),t=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;p1&&(r.source=m+o[1],m+=o[1],r.originalLine=g+o[2],g=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),"number"==typeof r.originalLine&&b.push(r)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=s.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},r.BasicSourceMapConsumer=o,a.prototype=Object.create(t.prototype),a.prototype.constructor=t,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),t?(t.path=n,i(t)):n}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=o(n),t=o(e);if(t&&(e=t.path||"/"),r&&!r.scheme)return t&&(r.scheme=t.scheme),i(r);if(r||n.match(_))return n;if(t&&!t.host&&!t.path)return t.host=n,i(t);var s="/"===n.charAt(0)?n:a(e.replace(/\/+$/,"")+"/"+n);return t?(t.path=s,i(t)):s}function u(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function g(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=m(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:m(e.name,n.name)))))}r.getArg=t;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;r.urlParse=o,r.urlGenerate=i,r.normalize=a,r.join=s,r.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},r.relative=u;var y=function(){var e=Object.create(null);return!("__proto__"in e)}();r.toSetString=y?c:l,r.fromSetString=y?c:f,r.compareByOriginalPositions=g,r.compareByGeneratedPositionsDeflated=h,r.compareByGeneratedPositionsInflated=d},{}],9:[function(n,r,t){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof t?r.exports=i(n("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var r=[],t=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(t=n.maxStackSize);for(var o=arguments.callee;o&&r.length=200&&t.status<300||"file://"===e.substr(0,7)&&t.responseText?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],t=e.split("\n"),o="",i=Math.min(n,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=r.length,l=0;l=200&&a.status<400?o(a.responseText):i(new Error("POST to "+n+" failed with status: "+a.status)))},a.open("post",n),a.setRequestHeader("Content-Type","application/json"),t&&"object"==typeof t.headers){var s=t.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==r&&null!==r&&(c.message=r),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":9,"stacktrace-gps":11}]},{},[12])(12)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.StackTrace=e()}}(function(){var e;return function n(e,r,t){function o(a,s){if(!r[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=r[a]={exports:{}};e[a][0].call(l.exports,function(n){var r=e[a][1][n];return o(r?r:n)},l,l.exports,n,e,r,t)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var r=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),t=this.extractLocation(r.pop()),o=r.join(" ")||void 0,i=["eval",""].indexOf(t[0])>-1?void 0:t[0];return new e({functionName:o,fileName:i,lineNumber:t[1],columnNumber:t[2],source:n})},this)},parseFFOrSafari:function(n){var r=n.stack.split("\n").filter(function(e){return!e.match(t)},this);return r.map(function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),n.indexOf("@")===-1&&n.indexOf(":")===-1)return new e({functionName:n});var r=n.split("@"),t=this.extractLocation(r.pop()),o=r.join("@")||void 0;return new e({functionName:o,fileName:t[0],lineNumber:t[1],columnNumber:t[2],source:n})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,t=n.message.split("\n"),o=[],i=2,a=t.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:n})},this)}}})},{stackframe:10}],2:[function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=e("./util"),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;o=0&&e>1;return n?-r:r}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(n|=c),r+=i.encode(n);while(o>0);return r},r.decode=function(e,n,r){var t,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(s&c),s&=u,f+=s<0?n-u>1?t(u,n,o,i,a,s):s==r.LEAST_UPPER_BOUND?n1?t(e,u,o,i,a,s):s==r.LEAST_UPPER_BOUND?u:e<0?-1:e}r.GREATEST_LOWER_BOUND=1,r.LEAST_UPPER_BOUND=2,r.search=function(e,n,o,i){if(0===n.length)return-1;var a=t(-1,n.length,e,n,o,i||r.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],6:[function(e,n,r){function t(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,r,a){if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},r.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=c.fromArray(e._names.toArray(),!0),t=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;p1&&(r.source=m+o[1],m+=o[1],r.originalLine=g+o[2],g=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),"number"==typeof r.originalLine&&b.push(r)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=s.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},r.BasicSourceMapConsumer=o,a.prototype=Object.create(t.prototype),a.prototype.constructor=t,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),t?(t.path=n,i(t)):n}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=o(n),t=o(e);if(t&&(e=t.path||"/"),r&&!r.scheme)return t&&(r.scheme=t.scheme),i(r);if(r||n.match(_))return n;if(t&&!t.host&&!t.path)return t.host=n,i(t);var s="/"===n.charAt(0)?n:a(e.replace(/\/+$/,"")+"/"+n);return t?(t.path=s,i(t)):s}function u(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function g(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=m(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:m(e.name,n.name)))))}r.getArg=t;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;r.urlParse=o,r.urlGenerate=i,r.normalize=a,r.join=s,r.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},r.relative=u;var y=function(){var e=Object.create(null);return!("__proto__"in e)}();r.toSetString=y?c:l,r.fromSetString=y?c:f,r.compareByOriginalPositions=g,r.compareByGeneratedPositionsDeflated=h,r.compareByGeneratedPositionsInflated=d},{}],9:[function(n,r,t){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof t?r.exports=i(n("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var r=[],t=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(t=n.maxStackSize);for(var o=arguments.callee;o&&r.length=200&&t.status<300||"file://"===e.substr(0,7)&&t.responseText?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],t=e.split("\n"),o="",i=Math.min(n,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=r.length,l=0;l=200&&a.status<400?o(a.responseText):i(new Error("POST to "+n+" failed with status: "+a.status)))},a.open("post",n),a.setRequestHeader("Content-Type","application/json"),t&&"object"==typeof t.headers){var s=t.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==r&&null!==r&&(c.message=r),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":9,"stacktrace-gps":11}]},{},[12])(12)}); //# sourceMappingURL=stacktrace.min.js.map From c2d6f612767c73c0e147d40672632dc444c15af2 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Wed, 16 Aug 2017 16:17:57 -0700 Subject: [PATCH 091/110] Update stack-generator dependency --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2fd4649..b9eb703 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ }, "dependencies": { "error-stack-parser": "^2.0.1", - "stack-generator": "^2.0.1", + "stack-generator": "^2.0.2", "stacktrace-gps": "^3.0.2" }, "devDependencies": { From 81f9a0ec0fb1e19c16473a837b2a6f48f690fea3 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Wed, 16 Aug 2017 16:18:05 -0700 Subject: [PATCH 092/110] Update package lock --- package-lock.json | 3171 ++------------------------------------------- 1 file changed, 83 insertions(+), 3088 deletions(-) diff --git a/package-lock.json b/package-lock.json index c827564..1383a7f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,21 +14,6 @@ "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz" } }, - "JSONStream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", - "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", - "dev": true, - "requires": { - "jsonparse": "1.3.1", - "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - } - }, - "JSV": { - "version": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", - "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", - "dev": true - }, "abbrev": { "version": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", @@ -80,27 +65,6 @@ } } }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - }, - "dependencies": { - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - } - } - }, "align-text": { "version": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", @@ -111,14 +75,6 @@ "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" } }, - "alter": { - "version": "https://registry.npmjs.org/alter/-/alter-0.2.0.tgz", - "integrity": "sha1-x1iICGF1cgNKrmJICvJrHU0cs80=", - "dev": true, - "requires": { - "stable": "https://registry.npmjs.org/stable/-/stable-0.1.5.tgz" - } - }, "amdefine": { "version": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", @@ -144,12 +100,6 @@ "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz" } }, - "aproba": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz", - "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw==", - "dev": true - }, "archiver": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", @@ -284,21 +234,6 @@ } } }, - "archy": { - "version": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "dev": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" - } - }, "argparse": { "version": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", @@ -320,11 +255,6 @@ "integrity": "sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=", "dev": true }, - "array-differ": { - "version": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, "array-filter": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", @@ -409,16 +339,6 @@ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", "dev": true }, - "ast-traverse": { - "version": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", - "integrity": "sha1-ac8rg4bxnc2hux4F1o/jWdiJfeY=", - "dev": true - }, - "ast-types": { - "version": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.2.tgz", - "integrity": "sha1-LMGZedFcZVEIv1ZTI7jn7jh1H2s=", - "dev": true - }, "astw": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", @@ -461,189 +381,6 @@ "integrity": "sha1-Cin/t5wxyecS7rCH6OemS0pW11U=", "dev": true }, - "babel-core": { - "version": "https://registry.npmjs.org/babel-core/-/babel-core-5.8.38.tgz", - "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", - "dev": true, - "requires": { - "babel-plugin-constant-folding": "https://registry.npmjs.org/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz", - "babel-plugin-dead-code-elimination": "https://registry.npmjs.org/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz", - "babel-plugin-eval": "https://registry.npmjs.org/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz", - "babel-plugin-inline-environment-variables": "https://registry.npmjs.org/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz", - "babel-plugin-jscript": "https://registry.npmjs.org/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz", - "babel-plugin-member-expression-literals": "https://registry.npmjs.org/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz", - "babel-plugin-property-literals": "https://registry.npmjs.org/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz", - "babel-plugin-proto-to-assign": "https://registry.npmjs.org/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz", - "babel-plugin-react-constant-elements": "https://registry.npmjs.org/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz", - "babel-plugin-react-display-name": "https://registry.npmjs.org/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz", - "babel-plugin-remove-console": "https://registry.npmjs.org/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz", - "babel-plugin-remove-debugger": "https://registry.npmjs.org/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz", - "babel-plugin-runtime": "https://registry.npmjs.org/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz", - "babel-plugin-undeclared-variables-check": "https://registry.npmjs.org/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz", - "babel-plugin-undefined-to-void": "https://registry.npmjs.org/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz", - "babylon": "https://registry.npmjs.org/babylon/-/babylon-5.8.38.tgz", - "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "convert-source-map": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "core-js": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "debug": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", - "detect-indent": "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz", - "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "fs-readdir-recursive": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz", - "globals": "https://registry.npmjs.org/globals/-/globals-6.4.1.tgz", - "home-or-tmp": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-1.0.0.tgz", - "is-integer": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.6.tgz", - "js-tokens": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.1.tgz", - "json5": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", - "lodash": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "output-file-sync": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", - "path-exists": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "private": "https://registry.npmjs.org/private/-/private-0.1.6.tgz", - "regenerator": "https://registry.npmjs.org/regenerator/-/regenerator-0.8.40.tgz", - "regexpu": "https://registry.npmjs.org/regexpu/-/regexpu-1.3.0.tgz", - "repeating": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", - "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", - "shebang-regex": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "slash": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "source-map-support": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", - "to-fast-properties": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.2.tgz", - "trim-right": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "try-resolve": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz" - }, - "dependencies": { - "lodash": { - "version": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "minimatch": { - "version": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" - } - }, - "path-exists": { - "version": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz", - "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", - "dev": true - }, - "repeating": { - "version": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "dev": true, - "requires": { - "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz" - } - } - } - }, - "babel-jscs": { - "version": "https://registry.npmjs.org/babel-jscs/-/babel-jscs-2.0.5.tgz", - "integrity": "sha1-CjRwRrSBRay8pW6MjtX3NrxU+dA=", - "dev": true, - "requires": { - "babel-core": "https://registry.npmjs.org/babel-core/-/babel-core-5.8.38.tgz", - "lodash.assign": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz" - } - }, - "babel-plugin-constant-folding": { - "version": "https://registry.npmjs.org/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz", - "integrity": "sha1-g2HTZMmORJw2kr26Ue/whEKQqo4=", - "dev": true - }, - "babel-plugin-dead-code-elimination": { - "version": "https://registry.npmjs.org/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz", - "integrity": "sha1-X3xFEnTc18zNv7s+C4XdKBIfD2U=", - "dev": true - }, - "babel-plugin-eval": { - "version": "https://registry.npmjs.org/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz", - "integrity": "sha1-ovrtJc5r5preS/7CY/cBaRlZUNo=", - "dev": true - }, - "babel-plugin-inline-environment-variables": { - "version": "https://registry.npmjs.org/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz", - "integrity": "sha1-H1jOkSB61qgmqL9kX6/mj/X+P/4=", - "dev": true - }, - "babel-plugin-jscript": { - "version": "https://registry.npmjs.org/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz", - "integrity": "sha1-jzQsOCduh6R9X6CovT1etsytj8w=", - "dev": true - }, - "babel-plugin-member-expression-literals": { - "version": "https://registry.npmjs.org/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz", - "integrity": "sha1-zF7bD6qNyScXDnTW0cAkQAIWJNM=", - "dev": true - }, - "babel-plugin-property-literals": { - "version": "https://registry.npmjs.org/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz", - "integrity": "sha1-AlIwGQAZKYCxwRjv6kjOk6q4MzY=", - "dev": true - }, - "babel-plugin-proto-to-assign": { - "version": "https://registry.npmjs.org/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz", - "integrity": "sha1-xJ56/QL1d7xNoF6i3wAiUM980SM=", - "dev": true, - "requires": { - "lodash": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz" - }, - "dependencies": { - "lodash": { - "version": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "babel-plugin-react-constant-elements": { - "version": "https://registry.npmjs.org/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz", - "integrity": "sha1-lGc26DeEKcvDSdz/YvUcFDs041o=", - "dev": true - }, - "babel-plugin-react-display-name": { - "version": "https://registry.npmjs.org/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz", - "integrity": "sha1-dU/jiSboQkpOexWrbqYTne4FFPw=", - "dev": true - }, - "babel-plugin-remove-console": { - "version": "https://registry.npmjs.org/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz", - "integrity": "sha1-2PJFVsOgUAXUKqqv0neH9T/wE6c=", - "dev": true - }, - "babel-plugin-remove-debugger": { - "version": "https://registry.npmjs.org/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz", - "integrity": "sha1-/S6jzWGkKK0fO5yJiC/0KT6MFMc=", - "dev": true - }, - "babel-plugin-runtime": { - "version": "https://registry.npmjs.org/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz", - "integrity": "sha1-v3x9lm3Vbs1cF/ocslPJrLflSq8=", - "dev": true - }, - "babel-plugin-undeclared-variables-check": { - "version": "https://registry.npmjs.org/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz", - "integrity": "sha1-XPGqU52BP/ZOmWQSkK9iCWX2Xe4=", - "dev": true, - "requires": { - "leven": "https://registry.npmjs.org/leven/-/leven-1.0.2.tgz" - } - }, - "babel-plugin-undefined-to-void": { - "version": "https://registry.npmjs.org/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz", - "integrity": "sha1-f1eO+LeN+uYAM4XYQXph7aBuL4E=", - "dev": true - }, - "babylon": { - "version": "https://registry.npmjs.org/babylon/-/babylon-5.8.38.tgz", - "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=", - "dev": true - }, "backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", @@ -682,11 +419,6 @@ "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" } }, - "beeper": { - "version": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", - "dev": true - }, "better-assert": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", @@ -731,15 +463,6 @@ "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", "dev": true }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - } - }, "bluebird": { "version": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", @@ -819,11 +542,6 @@ "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz" } }, - "breakable": { - "version": "https://registry.npmjs.org/breakable/-/breakable-1.0.0.tgz", - "integrity": "sha1-eEp5eRWjjq0nutRWtVcstLuqeME=", - "dev": true - }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -836,9 +554,9 @@ "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", "dev": true, "requires": { - "JSONStream": "1.3.1", "combine-source-map": "0.7.2", "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "JSONStream": "1.3.1", "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "umd": "3.0.1" } @@ -866,7 +584,6 @@ "integrity": "sha1-tanJAgJD8McORnW+yCI7xifkFc4=", "dev": true, "requires": { - "JSONStream": "1.3.1", "assert": "1.4.1", "browser-pack": "6.0.2", "browser-resolve": "1.11.2", @@ -888,6 +605,7 @@ "https-browserify": "0.0.1", "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "insert-module-globals": "7.0.1", + "JSONStream": "1.3.1", "labeled-stream-splicer": "2.0.0", "module-deps": "4.1.1", "os-browserify": "0.1.2", @@ -1105,6 +823,7 @@ "version": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "dev": true, + "optional": true, "requires": { "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "lazy-cache": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz" @@ -1149,49 +868,11 @@ "safe-buffer": "5.1.1" } }, - "cli": { - "version": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", - "dev": true, - "requires": { - "exit": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz" - }, - "dependencies": { - "glob": { - "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", - "dev": true, - "requires": { - "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - } - } - } - }, - "cli-table": { - "version": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", - "dev": true, - "requires": { - "colors": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz" - }, - "dependencies": { - "colors": { - "version": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true - } - } - }, "cliui": { "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, + "optional": true, "requires": { "center-align": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "right-align": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", @@ -1203,38 +884,11 @@ "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", "dev": true }, - "clone-buffer": { - "version": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, "clone-stats": { "version": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", "dev": true }, - "cloneable-readable": { - "version": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", - "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", - "dev": true, - "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, "colors": { "version": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", @@ -1285,48 +939,6 @@ "graceful-readlink": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" } }, - "comment-parser": { - "version": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.3.1.tgz", - "integrity": "sha1-/WV6rIwUktMIyaYQD8m0nSQ1q6E=", - "dev": true, - "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" - } - }, - "commoner": { - "version": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", - "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", - "dev": true, - "requires": { - "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "detective": "https://registry.npmjs.org/detective/-/detective-4.3.2.tgz", - "glob": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "private": "https://registry.npmjs.org/private/-/private-0.1.6.tgz", - "q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "recast": "https://registry.npmjs.org/recast/-/recast-0.11.18.tgz" - }, - "dependencies": { - "esprima": { - "version": "https://registry.npmjs.org/esprima/-/esprima-3.1.2.tgz", - "integrity": "sha1-lUtdGTIcpDYJL6kPBtZ5hTH+gYQ=", - "dev": true - }, - "recast": { - "version": "https://registry.npmjs.org/recast/-/recast-0.11.18.tgz", - "integrity": "sha1-B69iV8p2mGiBUglAHU1g7vG1uUc=", - "dev": true, - "requires": { - "ast-types": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.2.tgz", - "esprima": "https://registry.npmjs.org/esprima/-/esprima-3.1.2.tgz", - "private": "https://registry.npmjs.org/private/-/private-0.1.6.tgz", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" - } - } - } - }, "component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", @@ -1389,14 +1001,6 @@ } } }, - "concat-with-sourcemaps": { - "version": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.4.tgz", - "integrity": "sha1-9Vs74q60dgGxCi1SWcz7cP0vHdY=", - "dev": true, - "requires": { - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" - } - }, "config-chain": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", @@ -1444,12 +1048,6 @@ "date-now": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz" } }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -1473,28 +1071,11 @@ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", "dev": true }, - "core-js": { - "version": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - }, "core-util-is": { "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "coveralls": { - "version": "https://registry.npmjs.org/coveralls/-/coveralls-2.11.15.tgz", - "integrity": "sha1-N9NHQ2nWbBTzP6c6nSXO5uCZ/KA=", - "dev": true, - "requires": { - "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", - "lcov-parse": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", - "log-driver": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", - "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "request": "https://registry.npmjs.org/request/-/request-2.75.0.tgz" - } - }, "crc": { "version": "3.4.4", "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", @@ -1547,34 +1128,6 @@ "sha.js": "2.4.8" } }, - "cross-env": { - "version": "https://registry.npmjs.org/cross-env/-/cross-env-3.1.3.tgz", - "integrity": "sha1-WM2CMYCPUAiXCLCR9903J1qOgVQ=", - "dev": true, - "requires": { - "cross-spawn": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz" - } - }, - "cross-spawn": { - "version": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "requires": { - "lru-cache": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", - "which": "https://registry.npmjs.org/which/-/which-1.2.12.tgz" - }, - "dependencies": { - "lru-cache": { - "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", - "integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=", - "dev": true, - "requires": { - "pseudomap": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "yallist": "https://registry.npmjs.org/yallist/-/yallist-2.0.0.tgz" - } - } - } - }, "cryptiles": { "version": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", @@ -1644,19 +1197,6 @@ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", "dev": true }, - "cycle": { - "version": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", - "dev": true - }, - "d": { - "version": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", - "integrity": "sha1-2hhMU10Y2O57oqoim5FACfrhEwk=", - "dev": true, - "requires": { - "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz" - } - }, "dashdash": { "version": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", @@ -1686,11 +1226,6 @@ "meow": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" } }, - "deap": { - "version": "https://registry.npmjs.org/deap/-/deap-1.0.0.tgz", - "integrity": "sha1-sUi/gkMKJ2mbdIOgPra2dYW/yIg=", - "dev": true - }, "debug": { "version": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", "integrity": "sha1-wE0XplTpICRkgD8JYVP3Cm8x9L4=", @@ -1723,87 +1258,21 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, - "deep-equal": { - "version": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true - }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "defaults": { - "version": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz" - } - }, "defined": { "version": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, - "defs": { - "version": "https://registry.npmjs.org/defs/-/defs-1.1.1.tgz", - "integrity": "sha1-siYJ8sehG6ej2xFoBcE5scr/qdI=", - "dev": true, - "requires": { - "alter": "https://registry.npmjs.org/alter/-/alter-0.2.0.tgz", - "ast-traverse": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", - "breakable": "https://registry.npmjs.org/breakable/-/breakable-1.0.0.tgz", - "esprima-fb": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "simple-fmt": "https://registry.npmjs.org/simple-fmt/-/simple-fmt-0.1.0.tgz", - "simple-is": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz", - "stringmap": "https://registry.npmjs.org/stringmap/-/stringmap-0.2.2.tgz", - "stringset": "https://registry.npmjs.org/stringset/-/stringset-0.2.1.tgz", - "tryor": "https://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz", - "yargs": "https://registry.npmjs.org/yargs/-/yargs-3.27.0.tgz" - }, - "dependencies": { - "camelcase": { - "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "esprima-fb": { - "version": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", - "dev": true - }, - "window-size": { - "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", - "dev": true - }, - "yargs": { - "version": "https://registry.npmjs.org/yargs/-/yargs-3.27.0.tgz", - "integrity": "sha1-ISBUaTFuk5Ex1Z8toMbX+YIh6kA=", - "dev": true, - "requires": { - "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "cliui": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "os-locale": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "window-size": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "y18n": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz" - } - } - } - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { "globby": "6.1.0", @@ -1827,22 +1296,11 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, "depd": { "version": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", "dev": true }, - "deprecated": { - "version": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", - "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", - "dev": true - }, "deps-sort": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", @@ -1865,34 +1323,6 @@ "minimalistic-assert": "1.0.0" } }, - "detect-file": { - "version": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", - "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", - "dev": true, - "requires": { - "fs-exists-sync": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz" - } - }, - "detect-indent": { - "version": "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz", - "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", - "dev": true, - "requires": { - "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "repeating": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz" - }, - "dependencies": { - "repeating": { - "version": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "dev": true, - "requires": { - "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz" - } - } - } - }, "detect-newline": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", @@ -1932,16 +1362,6 @@ "randombytes": "2.0.5" } }, - "docset-generator": { - "version": "https://registry.npmjs.org/docset-generator/-/docset-generator-0.2.2.tgz", - "integrity": "sha1-hCdOTIbxpCXIdDvmumMCRpoChHg=", - "dev": true, - "requires": { - "extended-fs": "https://registry.npmjs.org/extended-fs/-/extended-fs-0.3.3.tgz", - "sequelize": "https://registry.npmjs.org/sequelize/-/sequelize-3.27.0.tgz", - "sqlite3": "https://registry.npmjs.org/sqlite3/-/sqlite3-3.1.8.tgz" - } - }, "dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", @@ -1954,60 +1374,12 @@ "void-elements": "2.0.1" } }, - "dom-serializer": { - "version": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz" - }, - "dependencies": { - "domelementtype": { - "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - }, - "entities": { - "version": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - } - } - }, "domain-browser": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", "dev": true }, - "domelementtype": { - "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dev": true, - "requires": { - "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz" - } - }, - "domutils": { - "version": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz" - } - }, - "dottie": { - "version": "https://registry.npmjs.org/dottie/-/dottie-1.1.1.tgz", - "integrity": "sha1-RcKj9IvWUo7u0memmoSOqspvqmo=", - "dev": true - }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -2053,24 +1425,6 @@ "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", "dev": true }, - "end-of-stream": { - "version": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", - "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", - "dev": true, - "requires": { - "once": "https://registry.npmjs.org/once/-/once-1.3.3.tgz" - }, - "dependencies": { - "once": { - "version": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "dev": true, - "requires": { - "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - } - } - } - }, "engine.io": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", @@ -2153,11 +1507,6 @@ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", "dev": true }, - "entities": { - "version": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", - "dev": true - }, "error-ex": { "version": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", "integrity": "sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=", @@ -2174,75 +1523,6 @@ "stackframe": "1.0.4" } }, - "es5-ext": { - "version": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz", - "integrity": "sha1-qoRkHU23a2Krul5F/YBey6sUAEc=", - "dev": true, - "requires": { - "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz", - "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz" - } - }, - "es6-iterator": { - "version": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz", - "integrity": "sha1-vZaFZ9YWNeM8C4BydhPJy0sJa6w=", - "dev": true, - "requires": { - "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", - "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz", - "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz" - } - }, - "es6-map": { - "version": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.4.tgz", - "integrity": "sha1-o0sUe+IkdzpNfagHJ5TO+jYyuJc=", - "dev": true, - "requires": { - "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", - "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz", - "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz", - "es6-set": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.4.tgz", - "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz", - "event-emitter": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.4.tgz" - } - }, - "es6-promise": { - "version": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", - "dev": true - }, - "es6-set": { - "version": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.4.tgz", - "integrity": "sha1-lRa2dhwpZLkv9HlFYjOiR9xwfOg=", - "dev": true, - "requires": { - "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", - "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz", - "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz", - "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz", - "event-emitter": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.4.tgz" - } - }, - "es6-symbol": { - "version": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz", - "integrity": "sha1-lEgcZV56fK2C66gy2X1UM0ltf/o=", - "dev": true, - "requires": { - "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", - "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz" - } - }, - "es6-weak-map": { - "version": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.1.tgz", - "integrity": "sha1-DSu9iCfrX7S6j5f7/qUNQ9sh6oE=", - "dev": true, - "requires": { - "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", - "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz", - "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz", - "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz" - } - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -2285,62 +1565,16 @@ } } }, - "escope": { - "version": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.4.tgz", - "es6-weak-map": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.1.tgz", - "esrecurse": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz", - "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" - } - }, "esprima": { "version": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "dev": true }, - "esrecurse": { - "version": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz", - "integrity": "sha1-RxO2U2rffyrE8yfVWed1a/9kgiA=", - "dev": true, - "requires": { - "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz", - "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz" - }, - "dependencies": { - "estraverse": { - "version": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz", - "integrity": "sha1-9srKcokzqFDvkGYdDheYK6RxEaI=", - "dev": true - }, - "object-assign": { - "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "dev": true - } - } - }, - "estraverse": { - "version": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, "esutils": { "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "event-emitter": { - "version": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.4.tgz", - "integrity": "sha1-jWPd+0z+H647MsomXExyAiIIC7U=", - "dev": true, - "requires": { - "d": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", - "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz" - } - }, "eventemitter3": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", @@ -2427,41 +1661,11 @@ "fill-range": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz" } }, - "expand-tilde": { - "version": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", - "dev": true, - "requires": { - "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" - } - }, "extend": { "version": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=", "dev": true }, - "extended-fs": { - "version": "https://registry.npmjs.org/extended-fs/-/extended-fs-0.3.3.tgz", - "integrity": "sha1-i6esNx7Gb/HT1Y17F798qYInmZw=", - "dev": true, - "requires": { - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", - "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "q": "https://registry.npmjs.org/q/-/q-0.9.7.tgz" - }, - "dependencies": { - "graceful-fs": { - "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", - "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=", - "dev": true - }, - "q": { - "version": "https://registry.npmjs.org/q/-/q-0.9.7.tgz", - "integrity": "sha1-TeLmyzspCIyeTLwDv51C+5bOL3U=", - "dev": true - } - } - }, "extglob": { "version": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", @@ -2475,20 +1679,6 @@ "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", "dev": true }, - "eyes": { - "version": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", - "dev": true - }, - "fancy-log": { - "version": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.2.0.tgz", - "integrity": "sha1-1aUbU+mrIsoH1VjytnrlX9tfy9g=", - "dev": true, - "requires": { - "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "time-stamp": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.0.1.tgz" - } - }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", @@ -2544,11 +1734,6 @@ } } }, - "find-index": { - "version": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", - "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", - "dev": true - }, "find-up": { "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", @@ -2558,41 +1743,6 @@ "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" } }, - "findup-sync": { - "version": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", - "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", - "dev": true, - "requires": { - "detect-file": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", - "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "micromatch": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "resolve-dir": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz" - } - }, - "fined": { - "version": "https://registry.npmjs.org/fined/-/fined-1.0.2.tgz", - "integrity": "sha1-WyhCS3YNdZiWC374SA3/itNmDpc=", - "dev": true, - "requires": { - "expand-tilde": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "lodash.assignwith": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", - "lodash.isempty": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "lodash.isplainobject": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "lodash.isstring": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "lodash.pick": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "parse-filepath": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz" - } - }, - "first-chunk-stream": { - "version": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", - "dev": true - }, - "flagged-respawn": { - "version": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", - "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", - "dev": true - }, "for-in": { "version": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz", "integrity": "sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=", @@ -2611,16 +1761,6 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, - "form-data": { - "version": "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz", - "integrity": "sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU=", - "dev": true, - "requires": { - "asynckit": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz" - } - }, "fs-access": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", @@ -2630,16 +1770,6 @@ "null-check": "1.0.0" } }, - "fs-exists-sync": { - "version": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", - "dev": true - }, - "fs-readdir-recursive": { - "version": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz", - "integrity": "sha1-MVtPuMHKW4xH3v7zGdBz2tNWgFk=", - "dev": true - }, "fs.realpath": { "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", @@ -3414,22 +2544,22 @@ } } }, - "string-width": { - "version": "1.0.2", + "string_decoder": { + "version": "1.0.1", "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "safe-buffer": "5.0.1" } }, - "string_decoder": { - "version": "1.0.1", + "string-width": { + "version": "1.0.2", "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.0.1" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "stringstream": { @@ -3544,67 +2674,12 @@ } } }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", - "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", - "dev": true, - "requires": { - "fstream": "1.0.11", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz" - } - }, "function-bind": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", "dev": true }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "1.1.2", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "string-width": "1.0.2", - "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "wide-align": "1.1.2" - }, - "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } - } - }, - "gaze": { - "version": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", - "dev": true, - "requires": { - "globule": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz" - } - }, "generate-function": { "version": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", @@ -3618,11 +2693,6 @@ "is-property": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" } }, - "generic-pool": { - "version": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.2.tgz", - "integrity": "sha1-iGvFvwvrfblugby7oHiBjeWmJoM=", - "dev": true - }, "get-stdin": { "version": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", @@ -3672,133 +2742,33 @@ "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" } }, - "glob-stream": { - "version": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", - "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "glob": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "glob2base": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "ordered-read-streams": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", - "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "unique-stream": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz" + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" }, "dependencies": { - "glob": { - "version": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - } - }, - "isarray": { - "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "minimatch": { - "version": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" - } - }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - }, - "through2": { - "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - } - } - } - }, - "glob-watcher": { - "version": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", - "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", - "dev": true, - "requires": { - "gaze": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz" - } - }, - "glob2base": { - "version": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", - "dev": true, - "requires": { - "find-index": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz" - } - }, - "global-modules": { - "version": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", - "dev": true, - "requires": { - "global-prefix": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "is-windows": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz" - } - }, - "global-prefix": { - "version": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", - "dev": true, - "requires": { - "homedir-polyfill": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "ini": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "is-windows": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "which": "https://registry.npmjs.org/which/-/which-1.2.12.tgz" - } - }, - "globals": { - "version": "https://registry.npmjs.org/globals/-/globals-6.4.1.tgz", - "integrity": "sha1-hJgDKzttHMge68X3lpDY/in6v08=", - "dev": true - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - }, - "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "balanced-match": "1.0.0", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" } }, "glob": { @@ -3832,55 +2802,6 @@ } } }, - "globule": { - "version": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", - "dev": true, - "requires": { - "glob": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "lodash": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz" - }, - "dependencies": { - "glob": { - "version": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz" - } - }, - "graceful-fs": { - "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "inherits": { - "version": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - }, - "minimatch": { - "version": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "sigmund": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz" - } - } - } - }, - "glogg": { - "version": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", - "dev": true, - "requires": { - "sparkles": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz" - } - }, "graceful-fs": { "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", @@ -3891,157 +2812,6 @@ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", "dev": true }, - "gulp": { - "version": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", - "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", - "dev": true, - "requires": { - "archy": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "deprecated": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", - "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", - "interpret": "https://registry.npmjs.org/interpret/-/interpret-1.0.1.tgz", - "liftoff": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", - "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "orchestrator": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", - "pretty-hrtime": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "tildify": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", - "v8flags": "https://registry.npmjs.org/v8flags/-/v8flags-2.0.11.tgz", - "vinyl-fs": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz" - } - }, - "gulp-concat": { - "version": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", - "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", - "dev": true, - "requires": { - "concat-with-sourcemaps": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.4.tgz", - "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-2.0.1.tgz" - }, - "dependencies": { - "clone-stats": { - "version": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "replace-ext": { - "version": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "vinyl": { - "version": "https://registry.npmjs.org/vinyl/-/vinyl-2.0.1.tgz", - "integrity": "sha1-HDtJMeesTB7+50PzuRp0wJRAe7Y=", - "dev": true, - "requires": { - "clone": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "clone-buffer": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "cloneable-readable": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", - "is-stream": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "remove-trailing-separator": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz", - "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz" - } - } - } - }, - "gulp-coveralls": { - "version": "https://registry.npmjs.org/gulp-coveralls/-/gulp-coveralls-0.1.4.tgz", - "integrity": "sha1-L2IKyN9i0LhrS73mTaNnzEGhkMk=", - "dev": true, - "requires": { - "coveralls": "https://registry.npmjs.org/coveralls/-/coveralls-2.11.15.tgz", - "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", - "through2": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz" - }, - "dependencies": { - "isarray": { - "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - }, - "through2": { - "version": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", - "dev": true, - "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - } - } - } - }, - "gulp-jshint": { - "version": "https://registry.npmjs.org/gulp-jshint/-/gulp-jshint-1.12.0.tgz", - "integrity": "sha1-I/vRuv3W+/5h6mRmenSAmpYdA94=", - "dev": true, - "requires": { - "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", - "jshint": "https://registry.npmjs.org/jshint/-/jshint-2.9.4.tgz", - "lodash": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "rcloader": "https://registry.npmjs.org/rcloader/-/rcloader-0.1.2.tgz", - "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz" - }, - "dependencies": { - "isarray": { - "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "lodash": { - "version": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "minimatch": { - "version": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" - } - }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - }, - "through2": { - "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - } - } - } - }, - "gulp-rename": { - "version": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", - "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=", - "dev": true - }, "gulp-sourcemaps": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.12.0.tgz", @@ -4074,54 +2844,6 @@ } } }, - "gulp-uglify": { - "version": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-1.5.4.tgz", - "integrity": "sha1-UkeI2HZm0J+dDCH7IXf5ADmmWMk=", - "dev": true, - "requires": { - "deap": "https://registry.npmjs.org/deap/-/deap-1.0.0.tgz", - "fancy-log": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.2.0.tgz", - "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", - "isobject": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "uglify-js": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", - "uglify-save-license": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz", - "vinyl-sourcemaps-apply": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz" - } - }, - "gulp-util": { - "version": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz", - "integrity": "sha1-eJJcS4+LSQBawBoBHFV+YhiUHLs=", - "dev": true, - "requires": { - "array-differ": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "array-uniq": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "beeper": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "dateformat": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "fancy-log": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.2.0.tgz", - "gulplog": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "has-gulplog": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "lodash._reescape": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "lodash._reevaluate": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "lodash._reinterpolate": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "lodash.template": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "multipipe": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz" - } - }, - "gulplog": { - "version": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "requires": { - "glogg": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz" - } - }, "handlebars": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", @@ -4145,12 +2867,6 @@ } } }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true - }, "har-validator": { "version": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", @@ -4196,11 +2912,6 @@ } } }, - "has-color": { - "version": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", - "dev": true - }, "has-cors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", @@ -4213,20 +2924,6 @@ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, - "has-gulplog": { - "version": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "requires": { - "sparkles": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, "hash-base": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", @@ -4273,23 +2970,6 @@ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", "dev": true }, - "home-or-tmp": { - "version": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-1.0.0.tgz", - "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", - "dev": true, - "requires": { - "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "user-home": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz" - } - }, - "homedir-polyfill": { - "version": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" - } - }, "hosted-git-info": { "version": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", "integrity": "sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=", @@ -4301,36 +2981,6 @@ "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", "dev": true }, - "htmlparser2": { - "version": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dev": true, - "requires": { - "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "domhandler": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "domutils": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "entities": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" - }, - "dependencies": { - "isarray": { - "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - } - } - }, "http-errors": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", @@ -4388,11 +3038,6 @@ "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz" } }, - "i": { - "version": "https://registry.npmjs.org/i/-/i-0.3.5.tgz", - "integrity": "sha1-HSuFQVjsgWkRPGy39raAHpniEdU=", - "dev": true - }, "iconv-lite": { "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", @@ -4417,11 +3062,6 @@ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "dev": true }, - "inflection": { - "version": "https://registry.npmjs.org/inflection/-/inflection-1.10.0.tgz", - "integrity": "sha1-W//LEZetPoEFD44X4hZoCH7p6y8=", - "dev": true - }, "inflight": { "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", @@ -4431,11 +3071,6 @@ "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" } }, - "inherit": { - "version": "https://registry.npmjs.org/inherit/-/inherit-2.2.6.tgz", - "integrity": "sha1-8WFLBshUToEo5CKchjR9tzrZeI0=", - "dev": true - }, "inherits": { "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", @@ -4461,35 +3096,16 @@ "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", "dev": true, "requires": { - "JSONStream": "1.3.1", "combine-source-map": "0.7.2", "concat-stream": "1.5.2", "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", + "JSONStream": "1.3.1", "lexical-scope": "1.2.0", "process": "0.11.10", "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" } }, - "interpret": { - "version": "https://registry.npmjs.org/interpret/-/interpret-1.0.1.tgz", - "integrity": "sha1-1Xn7f2k7hYAElHrzn6DbSfeVYCw=", - "dev": true - }, - "invert-kv": { - "version": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is-absolute": { - "version": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", - "dev": true, - "requires": { - "is-relative": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "is-windows": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz" - } - }, "is-arrayish": { "version": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", @@ -4548,15 +3164,6 @@ "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" } }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" - } - }, "is-glob": { "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", @@ -4565,14 +3172,6 @@ "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" } }, - "is-integer": { - "version": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.6.tgz", - "integrity": "sha1-UnOBn62ogNEj4awAqTjnFy3Y2V4=", - "dev": true, - "requires": { - "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz" - } - }, "is-my-json-valid": { "version": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", "integrity": "sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=", @@ -4631,42 +3230,16 @@ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", "dev": true }, - "is-relative": { - "version": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", - "dev": true, - "requires": { - "is-unc-path": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz" - } - }, - "is-stream": { - "version": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, "is-typedarray": { "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "is-unc-path": { - "version": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", - "dev": true, - "requires": { - "unc-path-regex": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz" - } - }, "is-utf8": { "version": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "is-windows": { - "version": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - }, "isarray": { "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", @@ -4793,11 +3366,6 @@ } } }, - "jasmine-ajax": { - "version": "https://registry.npmjs.org/jasmine-ajax/-/jasmine-ajax-3.3.1.tgz", - "integrity": "sha1-+MrZ/Unf1E8895jTb06FfRJcdcU=", - "dev": true - }, "jasmine-core": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.7.0.tgz", @@ -4813,11 +3381,6 @@ "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz" } }, - "js-tokens": { - "version": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.1.tgz", - "integrity": "sha1-zENaXIuUrRWst5gxQPyAGCyJrq4=", - "dev": true - }, "js-yaml": { "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", @@ -4833,138 +3396,6 @@ "dev": true, "optional": true }, - "jscs": { - "version": "https://registry.npmjs.org/jscs/-/jscs-2.11.0.tgz", - "integrity": "sha1-bhHvDKqgdzH53MKysn2OzuHdvLY=", - "dev": true, - "requires": { - "babel-jscs": "https://registry.npmjs.org/babel-jscs/-/babel-jscs-2.0.5.tgz", - "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "cli-table": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "escope": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "exit": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "glob": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "htmlparser2": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.4.6.tgz", - "jscs-jsdoc": "https://registry.npmjs.org/jscs-jsdoc/-/jscs-jsdoc-1.3.2.tgz", - "jscs-preset-wikimedia": "https://registry.npmjs.org/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.0.tgz", - "jsonlint": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.2.tgz", - "lodash": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "natural-compare": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.2.2.tgz", - "pathval": "https://registry.npmjs.org/pathval/-/pathval-0.1.1.tgz", - "prompt": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", - "reserved-words": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.1.tgz", - "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", - "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "strip-json-comments": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "to-double-quotes": "https://registry.npmjs.org/to-double-quotes/-/to-double-quotes-2.0.0.tgz", - "to-single-quotes": "https://registry.npmjs.org/to-single-quotes/-/to-single-quotes-2.0.1.tgz", - "vow": "https://registry.npmjs.org/vow/-/vow-0.4.13.tgz", - "vow-fs": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.6.tgz", - "xmlbuilder": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-3.1.0.tgz" - }, - "dependencies": { - "js-yaml": { - "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.4.6.tgz", - "integrity": "sha1-a+GyP2JJ9T0pM3D9TRqqY84bTrA=", - "dev": true, - "requires": { - "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "inherit": "https://registry.npmjs.org/inherit/-/inherit-2.2.6.tgz" - } - }, - "lodash": { - "version": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "jscs-jsdoc": { - "version": "https://registry.npmjs.org/jscs-jsdoc/-/jscs-jsdoc-1.3.2.tgz", - "integrity": "sha1-HyyCtqtLl1JNqVj0a05WLgMF+ac=", - "dev": true, - "requires": { - "comment-parser": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.3.1.tgz", - "jsdoctypeparser": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz" - } - }, - "jscs-preset-wikimedia": { - "version": "https://registry.npmjs.org/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.0.tgz", - "integrity": "sha1-//VjNCA4/C6IJre7cwnDrjQG/H4=", - "dev": true - }, - "jsdoc-dash-template": { - "version": "https://registry.npmjs.org/jsdoc-dash-template/-/jsdoc-dash-template-1.2.0.tgz", - "integrity": "sha1-8iUxyOvERmJ5pxNuVO+SDHKtEOk=", - "dev": true, - "requires": { - "jsdoc-docset": "https://registry.npmjs.org/jsdoc-docset/-/jsdoc-docset-0.2.1.tgz" - } - }, - "jsdoc-docset": { - "version": "https://registry.npmjs.org/jsdoc-docset/-/jsdoc-docset-0.2.1.tgz", - "integrity": "sha1-5XLsy4aj+lYBrnxrtkMBU1MeezU=", - "dev": true, - "requires": { - "docset-generator": "https://registry.npmjs.org/docset-generator/-/docset-generator-0.2.2.tgz", - "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz" - }, - "dependencies": { - "object-assign": { - "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "dev": true - } - } - }, - "jsdoctypeparser": { - "version": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz", - "integrity": "sha1-597cFToRhJ/8UUEUSuhqfvDCU5I=", - "dev": true, - "requires": { - "lodash": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz" - }, - "dependencies": { - "lodash": { - "version": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "jsesc": { - "version": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "jshint": { - "version": "https://registry.npmjs.org/jshint/-/jshint-2.9.4.tgz", - "integrity": "sha1-XjupeEjVKQJz21FK7kf+JM9ZKTQ=", - "dev": true, - "requires": { - "cli": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "console-browserify": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "exit": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "htmlparser2": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "lodash": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "shelljs": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "strip-json-comments": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz" - }, - "dependencies": { - "lodash": { - "version": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", - "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=", - "dev": true - } - } - }, "json-schema": { "version": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", @@ -4989,26 +3420,12 @@ "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", "dev": true }, - "json5": { - "version": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", - "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=", - "dev": true - }, "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true }, - "jsonlint": { - "version": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.2.tgz", - "integrity": "sha1-VzcEUIX1XrRVxosf9OvAG9UOiDA=", - "dev": true, - "requires": { - "JSV": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", - "nomnom": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz" - } - }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -5020,6 +3437,16 @@ "integrity": "sha1-ZmHhYdL8RF8Z+YQwIxNDci4fy9U=", "dev": true }, + "JSONStream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", + "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "dev": true, + "requires": { + "jsonparse": "1.3.1", + "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + } + }, "jsprim": { "version": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", "integrity": "sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=", @@ -5195,14 +3622,6 @@ "integrity": "sha1-IuTAa/mhguUpTR9wXjczgRuBCs8=", "dev": true }, - "karma-jasmine-ajax": { - "version": "https://registry.npmjs.org/karma-jasmine-ajax/-/karma-jasmine-ajax-0.1.13.tgz", - "integrity": "sha1-eLuS2Jb+MqJaGACYxHci4dlgW/w=", - "dev": true, - "requires": { - "jasmine-ajax": "https://registry.npmjs.org/jasmine-ajax/-/jasmine-ajax-3.3.1.tgz" - } - }, "karma-opera-launcher": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/karma-opera-launcher/-/karma-opera-launcher-1.0.0.tgz", @@ -5290,7 +3709,8 @@ "lazy-cache": { "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true + "dev": true, + "optional": true }, "lazy-debug-legacy": { "version": "0.0.1", @@ -5307,24 +3727,6 @@ "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" } }, - "lcid": { - "version": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz" - } - }, - "lcov-parse": { - "version": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", - "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", - "dev": true - }, - "leven": { - "version": "https://registry.npmjs.org/leven/-/leven-1.0.2.tgz", - "integrity": "sha1-kUS27ryl8dBoAWnxpncNzqYLdcM=", - "dev": true - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -5344,22 +3746,6 @@ "astw": "2.2.0" } }, - "liftoff": { - "version": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", - "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", - "dev": true, - "requires": { - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "findup-sync": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", - "fined": "https://registry.npmjs.org/fined/-/fined-1.0.2.tgz", - "flagged-respawn": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", - "lodash.isplainobject": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "lodash.isstring": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "lodash.mapvalues": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "rechoir": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz" - } - }, "load-json-file": { "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", @@ -5372,194 +3758,12 @@ "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" } }, - "lodash": { - "version": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", - "dev": true - }, - "lodash._baseassign": { - "version": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "requires": { - "lodash._basecopy": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "lodash.keys": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz" - } - }, - "lodash._basecopy": { - "version": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basetostring": { - "version": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._bindcallback": { - "version": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", - "dev": true - }, - "lodash._createassigner": { - "version": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", - "dev": true, - "requires": { - "lodash._bindcallback": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "lodash._isiterateecall": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "lodash.restparam": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz" - } - }, - "lodash._getnative": { - "version": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._reescape": { - "version": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true - }, - "lodash._reevaluate": { - "version": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash._root": { - "version": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "lodash.assign": { - "version": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", - "dev": true, - "requires": { - "lodash._baseassign": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "lodash._createassigner": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "lodash.keys": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz" - } - }, - "lodash.assignwith": { - "version": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", - "integrity": "sha1-EnqX8CrcQXUalU0ksN4X4QDgOOs=", - "dev": true - }, - "lodash.clonedeep": { - "version": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.escape": { - "version": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz" - } - }, - "lodash.isarguments": { - "version": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.isempty": { - "version": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=", - "dev": true - }, - "lodash.isplainobject": { - "version": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.isstring": { - "version": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", - "dev": true - }, - "lodash.keys": { - "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "lodash.isarguments": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "lodash.isarray": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz" - } - }, - "lodash.mapvalues": { - "version": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", - "dev": true - }, "lodash.memoize": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", "dev": true }, - "lodash.pick": { - "version": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", - "dev": true - }, - "lodash.restparam": { - "version": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "lodash.template": { - "version": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "lodash._basetostring": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "lodash._basevalues": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "lodash._isiterateecall": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "lodash._reinterpolate": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "lodash.escape": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "lodash.keys": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "lodash.restparam": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "lodash.templatesettings": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz" - } - }, - "lodash.templatesettings": { - "version": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true, - "requires": { - "lodash._reinterpolate": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "lodash.escape": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz" - } - }, - "log-driver": { - "version": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", - "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=", - "dev": true - }, "log4js": { "version": "0.6.38", "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", @@ -5604,16 +3808,6 @@ "signal-exit": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz" } }, - "lru-cache": { - "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "map-cache": { - "version": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, "map-obj": { "version": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", @@ -5744,7 +3938,6 @@ "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", "dev": true, "requires": { - "JSONStream": "1.3.1", "browser-resolve": "1.11.2", "cached-path-relative": "1.0.1", "concat-stream": "1.5.2", @@ -5752,6 +3945,7 @@ "detective": "https://registry.npmjs.org/detective/-/detective-4.3.2.tgz", "duplexer2": "0.1.4", "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "JSONStream": "1.3.1", "parents": "1.0.1", "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", @@ -5761,82 +3955,16 @@ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" } }, - "moment": { - "version": "https://registry.npmjs.org/moment/-/moment-2.17.1.tgz", - "integrity": "sha1-/tlQYGPzaxDwZsi1mhRNf66+HYI=", - "dev": true - }, - "moment-timezone": { - "version": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.10.tgz", - "integrity": "sha1-N2YknC0xfQjwfYltMDPCb4fEris=", - "dev": true, - "requires": { - "moment": "https://registry.npmjs.org/moment/-/moment-2.17.1.tgz" - } - }, "ms": { "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", "dev": true }, - "multipipe": { - "version": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true, - "requires": { - "duplexer2": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz" - }, - "dependencies": { - "duplexer2": { - "version": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" - } - }, - "isarray": { - "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - } - } - }, - "mute-stream": { - "version": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", - "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=", - "dev": true - }, "nan": { "version": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", "integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=", - "dev": true - }, - "natives": { - "version": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", - "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", - "dev": true - }, - "natural-compare": { - "version": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.2.2.tgz", - "integrity": "sha1-H5bWDjFBysG20FZTzg2urHY69qo=", - "dev": true - }, - "ncp": { - "version": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", - "integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=", - "dev": true + "dev": true, + "optional": true }, "negotiator": { "version": "0.6.1", @@ -5844,203 +3972,11 @@ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", "dev": true }, - "node-pre-gyp": { - "version": "0.6.36", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz", - "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=", - "dev": true, - "requires": { - "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "nopt": "4.0.1", - "npmlog": "4.1.2", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.4.1", - "tar": "2.2.1", - "tar-pack": "3.4.0" - }, - "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "requires": { - "asynckit": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "3.0.4", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - } - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "requires": { - "abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "osenv": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz" - } - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "requires": { - "aws-sign2": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "aws4": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", - "caseless": "0.12.0", - "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "http-signature": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "is-typedarray": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", - "oauth-sign": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" - } - }, - "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "dev": true - } - } - }, "node-uuid": { "version": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", "integrity": "sha1-baWhdmjEs91ZYjvaEc9/pMH2Cm8=", "dev": true }, - "nomnom": { - "version": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", - "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", - "dev": true, - "requires": { - "chalk": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", - "underscore": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz" - }, - "dependencies": { - "ansi-styles": { - "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", - "dev": true - }, - "chalk": { - "version": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", - "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", - "dev": true, - "requires": { - "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "has-color": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz" - } - }, - "strip-ansi": { - "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", - "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", - "dev": true - } - } - }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -6094,18 +4030,6 @@ } } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, "null-check": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", @@ -6122,11 +4046,6 @@ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", "dev": true }, - "object-assign": { - "version": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, "object-component": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", @@ -6205,21 +4124,6 @@ "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", "dev": true }, - "orchestrator": { - "version": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", - "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", - "dev": true, - "requires": { - "end-of-stream": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", - "sequencify": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", - "stream-consume": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz" - } - }, - "ordered-read-streams": { - "version": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", - "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", - "dev": true - }, "os-browserify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", @@ -6231,14 +4135,6 @@ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, - "os-locale": { - "version": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz" - } - }, "os-tmpdir": { "version": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", @@ -6253,23 +4149,6 @@ "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" } }, - "output-file-sync": { - "version": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", - "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", - "dev": true, - "requires": { - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz" - }, - "dependencies": { - "object-assign": { - "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "dev": true - } - } - }, "p-map": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.1.1.tgz", @@ -6304,16 +4183,6 @@ "pbkdf2": "3.0.13" } }, - "parse-filepath": { - "version": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", - "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", - "dev": true, - "requires": { - "is-absolute": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "map-cache": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "path-root": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz" - } - }, "parse-glob": { "version": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", @@ -6333,11 +4202,6 @@ "error-ex": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz" } }, - "parse-passwd": { - "version": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, "parsejson": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", @@ -6402,19 +4266,6 @@ "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", "dev": true }, - "path-root": { - "version": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz" - } - }, - "path-root-regex": { - "version": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, "path-type": { "version": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", @@ -6425,11 +4276,6 @@ "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" } }, - "pathval": { - "version": "https://registry.npmjs.org/pathval/-/pathval-0.1.1.tgz", - "integrity": "sha1-CPkRzcqczllCiA2ngXvAtyO2bYI=", - "dev": true - }, "pbkdf2": { "version": "3.0.13", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.13.tgz", @@ -6443,12 +4289,6 @@ "sha.js": "2.4.8" } }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true - }, "phantomjs2-ext": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/phantomjs2-ext/-/phantomjs2-ext-0.2.2.tgz", @@ -6715,11 +4555,6 @@ "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" } }, - "pkginfo": { - "version": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.0.tgz", - "integrity": "sha1-NJ27f/04CB/K3AhT32h/DHdEzWU=", - "dev": true - }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -6731,16 +4566,6 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, - "pretty-hrtime": { - "version": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "private": { - "version": "https://registry.npmjs.org/private/-/private-0.1.6.tgz", - "integrity": "sha1-VcapdtD5uvuZJIUTUP5HubX7t8E=", - "dev": true - }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -6758,29 +4583,12 @@ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", "dev": true }, - "prompt": { - "version": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", - "integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=", - "dev": true, - "requires": { - "pkginfo": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.0.tgz", - "read": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "revalidator": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", - "utile": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", - "winston": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz" - } - }, "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", "dev": true }, - "pseudomap": { - "version": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, "public-encrypt": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", @@ -6810,11 +4618,6 @@ "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", "dev": true }, - "qs": { - "version": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz", - "integrity": "sha1-zgPF/wk1vB2daanxTL0Y5WjWdiU=", - "dev": true - }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -6862,58 +4665,6 @@ "unpipe": "1.0.0" } }, - "rc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", - "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", - "dev": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - } - } - }, - "rcfinder": { - "version": "https://registry.npmjs.org/rcfinder/-/rcfinder-0.1.9.tgz", - "integrity": "sha1-8+gPOH3fmugK4wpBADKWQuroERU=", - "dev": true, - "requires": { - "lodash.clonedeep": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" - } - }, - "rcloader": { - "version": "https://registry.npmjs.org/rcloader/-/rcloader-0.1.2.tgz", - "integrity": "sha1-oJY6ZDfQnvjLktky0trUl7DRc2w=", - "dev": true, - "requires": { - "lodash": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "rcfinder": "https://registry.npmjs.org/rcfinder/-/rcfinder-0.1.9.tgz" - }, - "dependencies": { - "lodash": { - "version": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - } - } - }, - "read": { - "version": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "requires": { - "mute-stream": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz" - } - }, "read-only-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", @@ -6968,37 +4719,6 @@ "set-immediate-shim": "1.0.1" } }, - "recast": { - "version": "https://registry.npmjs.org/recast/-/recast-0.10.33.tgz", - "integrity": "sha1-lCgI96oBbx+nFCxGHX5XBKqo1pc=", - "dev": true, - "requires": { - "ast-types": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.12.tgz", - "esprima-fb": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "private": "https://registry.npmjs.org/private/-/private-0.1.6.tgz", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" - }, - "dependencies": { - "ast-types": { - "version": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.12.tgz", - "integrity": "sha1-oNkOQ1G7iHcWyD/WN+v4GK9K38w=", - "dev": true - }, - "esprima-fb": { - "version": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", - "dev": true - } - } - }, - "rechoir": { - "version": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz" - } - }, "redent": { "version": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", @@ -7008,31 +4728,6 @@ "strip-indent": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz" } }, - "regenerate": { - "version": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", - "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=", - "dev": true - }, - "regenerator": { - "version": "https://registry.npmjs.org/regenerator/-/regenerator-0.8.40.tgz", - "integrity": "sha1-oORXxY69uuV1yfjNdRJ+k3VkNdg=", - "dev": true, - "requires": { - "commoner": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", - "defs": "https://registry.npmjs.org/defs/-/defs-1.1.1.tgz", - "esprima-fb": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "private": "https://registry.npmjs.org/private/-/private-0.1.6.tgz", - "recast": "https://registry.npmjs.org/recast/-/recast-0.10.33.tgz", - "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - }, - "dependencies": { - "esprima-fb": { - "version": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", - "dev": true - } - } - }, "regex-cache": { "version": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", @@ -7042,36 +4737,6 @@ "is-primitive": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" } }, - "regexpu": { - "version": "https://registry.npmjs.org/regexpu/-/regexpu-1.3.0.tgz", - "integrity": "sha1-5TTcmRqeWEYFDJjebX3UpVyeoW0=", - "dev": true, - "requires": { - "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "recast": "https://registry.npmjs.org/recast/-/recast-0.10.33.tgz", - "regenerate": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", - "regjsgen": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "regjsparser": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz" - } - }, - "regjsgen": { - "version": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" - } - }, - "remove-trailing-separator": { - "version": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz", - "integrity": "sha1-YV67lq9VlVLUv0BXyENtSGq2PMQ=", - "dev": true - }, "repeat-element": { "version": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", @@ -7095,34 +4760,6 @@ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", "dev": true }, - "request": { - "version": "https://registry.npmjs.org/request/-/request-2.75.0.tgz", - "integrity": "sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM=", - "dev": true, - "requires": { - "aws-sign2": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "aws4": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", - "bl": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", - "caseless": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "form-data": "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz", - "har-validator": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "hawk": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "http-signature": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "is-typedarray": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", - "node-uuid": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", - "oauth-sign": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "qs": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz", - "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "tunnel-agent": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz" - } - }, "request-progress": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz", @@ -7138,57 +4775,22 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, - "reserved-words": { - "version": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.1.tgz", - "integrity": "sha1-b3wV5eVhTFDalhYw2kat3IfAzvI=", - "dev": true - }, "resolve": { "version": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", "integrity": "sha1-lYnD8vYUnRQXpAvswWY9tuxrwmw=", "dev": true }, - "resolve-dir": { - "version": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", - "dev": true, - "requires": { - "expand-tilde": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "global-modules": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz" - } - }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, - "retry-as-promised": { - "version": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.2.0.tgz", - "integrity": "sha1-sEY9f9PPWy/tZFAKtui4pJxbjmw=", - "dev": true, - "requires": { - "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.6.tgz", - "cross-env": "https://registry.npmjs.org/cross-env/-/cross-env-3.1.3.tgz", - "debug": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz" - }, - "dependencies": { - "bluebird": { - "version": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.6.tgz", - "integrity": "sha1-AdqNgh2HgT0ViWfnQ9X+bGLPjA8=", - "dev": true - } - } - }, - "revalidator": { - "version": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", - "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=", - "dev": true - }, "right-align": { "version": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dev": true, + "optional": true, "requires": { "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz" } @@ -7226,15 +4828,6 @@ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" } }, - "run-sequence": { - "version": "https://registry.npmjs.org/run-sequence/-/run-sequence-1.2.2.tgz", - "integrity": "sha1-UJWgvr6YczsBQL0I3YDsAw3azes=", - "dev": true, - "requires": { - "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "gulp-util": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz" - } - }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", @@ -7291,57 +4884,6 @@ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", "dev": true }, - "sequelize": { - "version": "https://registry.npmjs.org/sequelize/-/sequelize-3.27.0.tgz", - "integrity": "sha1-agolI24Ok8J/DE6tUHm2A6M2ppc=", - "dev": true, - "requires": { - "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.6.tgz", - "depd": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", - "dottie": "https://registry.npmjs.org/dottie/-/dottie-1.1.1.tgz", - "generic-pool": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.2.tgz", - "inflection": "https://registry.npmjs.org/inflection/-/inflection-1.10.0.tgz", - "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.12.0.tgz", - "moment": "https://registry.npmjs.org/moment/-/moment-2.17.1.tgz", - "moment-timezone": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.10.tgz", - "node-uuid": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", - "retry-as-promised": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.2.0.tgz", - "semver": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "shimmer": "https://registry.npmjs.org/shimmer/-/shimmer-1.1.0.tgz", - "terraformer-wkt-parser": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.1.2.tgz", - "toposort-class": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", - "validator": "https://registry.npmjs.org/validator/-/validator-5.7.0.tgz", - "wkx": "https://registry.npmjs.org/wkx/-/wkx-0.2.0.tgz" - }, - "dependencies": { - "bluebird": { - "version": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.6.tgz", - "integrity": "sha1-AdqNgh2HgT0ViWfnQ9X+bGLPjA8=", - "dev": true - }, - "lodash": { - "version": "https://registry.npmjs.org/lodash/-/lodash-4.12.0.tgz", - "integrity": "sha1-K9bcRqBA9Z5obJcu0h2T3FkFMlg=", - "dev": true - }, - "semver": { - "version": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, - "sequencify": { - "version": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", - "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, "set-immediate-shim": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", @@ -7373,11 +4915,6 @@ "sha.js": "2.4.8" } }, - "shebang-regex": { - "version": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, "shell-quote": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", @@ -7390,41 +4927,11 @@ "jsonify": "0.0.0" } }, - "shelljs": { - "version": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", - "dev": true - }, - "shimmer": { - "version": "https://registry.npmjs.org/shimmer/-/shimmer-1.1.0.tgz", - "integrity": "sha1-l9c3cTf/u6tCVSLkKf4KqJpIizU=", - "dev": true - }, - "sigmund": { - "version": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, "signal-exit": { "version": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "simple-fmt": { - "version": "https://registry.npmjs.org/simple-fmt/-/simple-fmt-0.1.0.tgz", - "integrity": "sha1-GRv1ZqWeZTBILLJatTtKjchcOms=", - "dev": true - }, - "simple-is": { - "version": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz", - "integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=", - "dev": true - }, - "slash": { - "version": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, "sntp": { "version": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", @@ -7559,7 +5066,8 @@ }, "source-map": { "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true }, "source-map-resolve": { "version": "0.3.1", @@ -7573,35 +5081,12 @@ "urix": "0.1.0" } }, - "source-map-support": { - "version": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", - "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", - "dev": true, - "requires": { - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz" - }, - "dependencies": { - "source-map": { - "version": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", - "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", - "dev": true, - "requires": { - "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" - } - } - } - }, "source-map-url": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz", "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=", "dev": true }, - "sparkles": { - "version": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", - "dev": true - }, "spdx-correct": { "version": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", @@ -7625,15 +5110,6 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sqlite3": { - "version": "https://registry.npmjs.org/sqlite3/-/sqlite3-3.1.8.tgz", - "integrity": "sha1-TLz5Zdi5AdGxAVy8f8QVquFX36o=", - "dev": true, - "requires": { - "nan": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", - "node-pre-gyp": "0.6.36" - } - }, "sshpk": { "version": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz", "integrity": "sha1-MOGl0ykkSXShr2FREznVla9mOLA=", @@ -7657,24 +5133,14 @@ } } }, - "stable": { - "version": "https://registry.npmjs.org/stable/-/stable-0.1.5.tgz", - "integrity": "sha1-CCMvYMcy6YkHhLW+0HNPizKoh7k=", - "dev": true - }, "stack-generator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.1.tgz", - "integrity": "sha1-s32LDZoqblLAbMjhhfmPGZ+2OAQ=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.2.tgz", + "integrity": "sha512-Qj3X+vY7qQ0OOLQomEihHk5SSnSPCI3z4RfB8kDk9lnzwznBODlkWODitEo8sHpp0a2VdSy3yuJkabNsQN5RGA==", "requires": { "stackframe": "1.0.4" } }, - "stack-trace": { - "version": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", - "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=", - "dev": true - }, "stackframe": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", @@ -7685,8 +5151,15 @@ "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.2.tgz", "integrity": "sha512-9o+nWhiz5wFnrB3hBHs2PTyYrS60M1vvpSzHxwxnIbtY2q9Nt51hZvhrG1+2AxD374ecwyS+IUwfkHRE/2zuGg==", "requires": { - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "source-map": "0.5.6", "stackframe": "1.0.4" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + } } }, "statuses": { @@ -7715,11 +5188,6 @@ "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" } }, - "stream-consume": { - "version": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", - "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", - "dev": true - }, "stream-http": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", @@ -7769,32 +5237,11 @@ "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - } - }, "string_decoder": { "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, - "stringmap": { - "version": "https://registry.npmjs.org/stringmap/-/stringmap-0.2.2.tgz", - "integrity": "sha1-VWwTeyWPlCuHdvWy71gqoGnX0bE=", - "dev": true - }, - "stringset": { - "version": "https://registry.npmjs.org/stringset/-/stringset-0.2.1.tgz", - "integrity": "sha1-7yWcTjSTRDd/zRyRPdLoSMnAQrU=", - "dev": true - }, "stringstream": { "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", @@ -7824,11 +5271,6 @@ "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" } }, - "strip-json-comments": { - "version": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "dev": true - }, "subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", @@ -7840,51 +5282,16 @@ }, "supports-color": { "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "syntax-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", - "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", - "dev": true, - "requires": { - "acorn": "4.0.13" - } - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - } + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true }, - "tar-pack": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", - "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", + "syntax-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", + "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", "dev": true, "requires": { - "debug": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", - "tar": "2.2.1", - "uid-number": "0.0.6" - }, - "dependencies": { - "uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", - "dev": true - } + "acorn": "4.0.13" } }, "tar-stream": { @@ -7910,19 +5317,6 @@ } } }, - "terraformer": { - "version": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.7.tgz", - "integrity": "sha1-2KGaVvvyWWbqBi0h9RW5NYlwLWk=", - "dev": true - }, - "terraformer-wkt-parser": { - "version": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.1.2.tgz", - "integrity": "sha1-M2oMj8gglKWv+DKI9prt7NNpvww=", - "dev": true, - "requires": { - "terraformer": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.7.tgz" - } - }, "throttleit": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", @@ -7943,19 +5337,6 @@ "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" } }, - "tildify": { - "version": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", - "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", - "dev": true, - "requires": { - "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" - } - }, - "time-stamp": { - "version": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.0.1.tgz", - "integrity": "sha1-n0vSNVnJNllm8zAtu6KwfGuZsVE=", - "dev": true - }, "timers-browserify": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", @@ -7986,26 +5367,6 @@ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, - "to-double-quotes": { - "version": "https://registry.npmjs.org/to-double-quotes/-/to-double-quotes-2.0.0.tgz", - "integrity": "sha1-qvIx1vqUiUn4GTAburRITYWI5Kc=", - "dev": true - }, - "to-fast-properties": { - "version": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.2.tgz", - "integrity": "sha1-8/XAw7pymafvmUJ+RGMyV63kMyA=", - "dev": true - }, - "to-single-quotes": { - "version": "https://registry.npmjs.org/to-single-quotes/-/to-single-quotes-2.0.1.tgz", - "integrity": "sha1-fMKRUfD18sQZRvEZ9ZMv5VQXASU=", - "dev": true - }, - "toposort-class": { - "version": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", - "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=", - "dev": true - }, "tough-cookie": { "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", @@ -8019,21 +5380,6 @@ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", "dev": true }, - "trim-right": { - "version": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "try-resolve": { - "version": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz", - "integrity": "sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=", - "dev": true - }, - "tryor": { - "version": "https://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz", - "integrity": "sha1-gUXkynyv9ArN48z5Rui4u3W0Fys=", - "dev": true - }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -8097,6 +5443,7 @@ "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=", "dev": true, + "optional": true, "requires": { "async": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", @@ -8107,19 +5454,16 @@ "async": { "version": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true + "dev": true, + "optional": true } } }, - "uglify-save-license": { - "version": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz", - "integrity": "sha1-lXJsF8xv0XHDYX479NjYKqjEzOE=", - "dev": true - }, "uglify-to-browserify": { "version": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true + "dev": true, + "optional": true }, "uid-number": { "version": "0.0.5", @@ -8139,16 +5483,6 @@ "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", "dev": true }, - "unc-path-regex": { - "version": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "underscore": { - "version": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - }, "underscore.string": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", @@ -8159,11 +5493,6 @@ "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" } }, - "unique-stream": { - "version": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", - "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", - "dev": true - }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -8194,11 +5523,6 @@ } } }, - "user-home": { - "version": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, "useragent": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", @@ -8239,45 +5563,12 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "utile": { - "version": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", - "integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=", - "dev": true, - "requires": { - "async": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "deep-equal": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "i": "https://registry.npmjs.org/i/-/i-0.3.5.tgz", - "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "ncp": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", - "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz" - }, - "dependencies": { - "async": { - "version": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true - } - } - }, "utils-merge": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", "dev": true }, - "uuid": { - "version": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - }, - "v8flags": { - "version": "https://registry.npmjs.org/v8flags/-/v8flags-2.0.11.tgz", - "integrity": "sha1-vKjzDw1tYGEswsAGQeaWLUKuaIE=", - "dev": true, - "requires": { - "user-home": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz" - } - }, "validate-npm-package-license": { "version": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", @@ -8287,11 +5578,6 @@ "spdx-expression-parse": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz" } }, - "validator": { - "version": "https://registry.npmjs.org/validator/-/validator-5.7.0.tgz", - "integrity": "sha1-eoelgUa2laxIYHEUHAxJ1n2gXlw=", - "dev": true - }, "vargs": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/vargs/-/vargs-0.1.0.tgz", @@ -8306,191 +5592,6 @@ "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz" } }, - "vinyl": { - "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true, - "requires": { - "clone": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz" - } - }, - "vinyl-buffer": { - "version": "https://registry.npmjs.org/vinyl-buffer/-/vinyl-buffer-1.0.0.tgz", - "integrity": "sha1-ygZ+oIQx1QdyKx3lCD9gJhbrwjQ=", - "dev": true, - "requires": { - "bl": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", - "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz" - }, - "dependencies": { - "bl": { - "version": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", - "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", - "dev": true, - "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" - } - }, - "isarray": { - "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - }, - "through2": { - "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - } - } - } - }, - "vinyl-fs": { - "version": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", - "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", - "dev": true, - "requires": { - "defaults": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "glob-stream": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", - "glob-watcher": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", - "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz" - }, - "dependencies": { - "clone": { - "version": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "graceful-fs": { - "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", - "dev": true, - "requires": { - "natives": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz" - } - }, - "isarray": { - "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - }, - "strip-bom": { - "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", - "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", - "dev": true, - "requires": { - "first-chunk-stream": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "is-utf8": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" - } - }, - "through2": { - "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - } - }, - "vinyl": { - "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz" - } - } - } - }, - "vinyl-source-stream": { - "version": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.0.tgz", - "integrity": "sha1-RMvlEIIFJ53rDFZTwJSiiHk4sas=", - "dev": true, - "requires": { - "through2": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "vinyl": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz" - }, - "dependencies": { - "clone": { - "version": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "isarray": { - "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - }, - "through2": { - "version": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - } - }, - "vinyl": { - "version": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz" - } - } - } - }, - "vinyl-sourcemaps-apply": { - "version": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", - "dev": true, - "requires": { - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" - } - }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", @@ -8506,45 +5607,6 @@ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true }, - "vow": { - "version": "https://registry.npmjs.org/vow/-/vow-0.4.13.tgz", - "integrity": "sha1-58FPG9nIvg5zWaRZf+LR720afog=", - "dev": true - }, - "vow-fs": { - "version": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.6.tgz", - "integrity": "sha1-LUxZviLivyYY3fWXq0uqkjvnIA0=", - "dev": true, - "requires": { - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "uuid": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "vow": "https://registry.npmjs.org/vow/-/vow-0.4.13.tgz", - "vow-queue": "https://registry.npmjs.org/vow-queue/-/vow-queue-0.4.2.tgz" - }, - "dependencies": { - "glob": { - "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", - "dev": true, - "requires": { - "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - } - } - } - }, - "vow-queue": { - "version": "https://registry.npmjs.org/vow-queue/-/vow-queue-0.4.2.tgz", - "integrity": "sha1-5/4XFg4Vx8QYTRtmapvGThjjAYQ=", - "dev": true, - "requires": { - "vow": "https://registry.npmjs.org/vow/-/vow-0.4.13.tgz" - } - }, "walkdir": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", @@ -8643,55 +5705,11 @@ "isexe": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz" } }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true, - "requires": { - "string-width": "1.0.2" - } - }, "window-size": { "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "winston": { - "version": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", - "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=", "dev": true, - "requires": { - "async": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "colors": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "cycle": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "eyes": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "pkginfo": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", - "stack-trace": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz" - }, - "dependencies": { - "async": { - "version": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true - }, - "colors": { - "version": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", - "dev": true - }, - "pkginfo": { - "version": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", - "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=", - "dev": true - } - } - }, - "wkx": { - "version": "https://registry.npmjs.org/wkx/-/wkx-0.2.0.tgz", - "integrity": "sha1-dsJPFqzQzY+TzTSqMx4PeWElboQ=", - "dev": true + "optional": true }, "wordwrap": { "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", @@ -8719,21 +5737,6 @@ "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", "dev": true }, - "xmlbuilder": { - "version": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-3.1.0.tgz", - "integrity": "sha1-LIaIjy1OrehQ+jjKf3Ij9yCVFuE=", - "dev": true, - "requires": { - "lodash": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz" - }, - "dependencies": { - "lodash": { - "version": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, "xmlhttprequest-ssl": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", @@ -8745,20 +5748,11 @@ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true }, - "y18n": { - "version": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "https://registry.npmjs.org/yallist/-/yallist-2.0.0.tgz", - "integrity": "sha1-MGxUODXwnuGkyyO3vOmrNByRzdQ=", - "dev": true - }, "yargs": { "version": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, + "optional": true, "requires": { "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", "cliui": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", @@ -8769,7 +5763,8 @@ "camelcase": { "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true + "dev": true, + "optional": true } } }, From 4832357b5fd9dd83ed0f390fb663fcefac219036 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Wed, 16 Aug 2017 16:18:17 -0700 Subject: [PATCH 093/110] Remove firefox beta from CI --- karma.conf.ci.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/karma.conf.ci.js b/karma.conf.ci.js index 363a89d..2dafce6 100644 --- a/karma.conf.ci.js +++ b/karma.conf.ci.js @@ -65,11 +65,6 @@ module.exports = function(config) { browserName: 'firefox', version: 'latest' }, - slFirefoxBeta: { - base: 'SauceLabs', - browserName: 'firefox', - version: 'beta' - }, slSafari8: { base: 'SauceLabs', browserName: 'safari', From f9c28ba02ec22c8ae4ff29bf13e3ee9bac94fc9b Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Thu, 31 May 2018 12:19:19 -0700 Subject: [PATCH 094/110] Add Ben as maintainer --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index b9eb703..797a764 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "maintainers": [ "Eric Wendelin (https://www.eriwen.com)", "Victor Homyakov (https://github.com/victor-homyakov)", - "Oliver Salzburg (https://github.com/oliversalzburg)" + "Oliver Salzburg (https://github.com/oliversalzburg)", + "Ben Gourley (https://github.com/bengourley)" ], "version": "2.0.0", "license": "MIT", From 1afefd32f6f25639034585d49b7b0d31fd1060f3 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Thu, 31 May 2018 12:32:05 -0700 Subject: [PATCH 095/110] Update stack-generator and error-stack-parser dependencies --- ...ktrace-with-promises-and-json-polyfills.js | 347 +- ...ce-with-promises-and-json-polyfills.min.js | 4 +- dist/stacktrace.js | 347 +- dist/stacktrace.min.js | 2 +- package-lock.json | 14914 ++++++++++++---- package.json | 4 +- 6 files changed, 11715 insertions(+), 3903 deletions(-) diff --git a/dist/stacktrace-with-promises-and-json-polyfills.js b/dist/stacktrace-with-promises-and-json-polyfills.js index c120914..e327f07 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.js @@ -91,9 +91,10 @@ functionName: line }); } else { - var tokens = line.split('@'); - var locationParts = this.extractLocation(tokens.pop()); - var functionName = tokens.join('@') || undefined; + var functionNameRegex = /((.*".+"[^@]*)?[^@]*)(?:@)/; + var matches = line.match(functionNameRegex); + var functionName = matches && matches[1] ? matches[1] : undefined; + var locationParts = this.extractLocation(line.replace(functionNameRegex, '')); return new StackFrame({ functionName: functionName, @@ -191,7 +192,7 @@ }; })); -},{"stackframe":13}],2:[function(require,module,exports){ +},{"stackframe":6}],2:[function(require,module,exports){ (function (process,global){ /*! * @overview es6-promise - a tiny implementation of Promises/A+. @@ -2443,6 +2444,166 @@ process.chdir = function (dir) { process.umask = function() { return 0; }; },{}],5:[function(require,module,exports){ +(function(root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stack-generator', ['stackframe'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('stackframe')); + } else { + root.StackGenerator = factory(root.StackFrame); + } +}(this, function(StackFrame) { + return { + backtrace: function StackGenerator$$backtrace(opts) { + var stack = []; + var maxStackSize = 10; + + if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') { + maxStackSize = opts.maxStackSize; + } + + var curr = arguments.callee; + while (curr && stack.length < maxStackSize && curr['arguments']) { + // Allow V8 optimizations + var args = new Array(curr['arguments'].length); + for (var i = 0; i < args.length; ++i) { + args[i] = curr['arguments'][i]; + } + if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { + stack.push(new StackFrame({functionName: RegExp.$1 || undefined, args: args})); + } else { + stack.push(new StackFrame({args: args})); + } + + try { + curr = curr.caller; + } catch (e) { + break; + } + } + return stack; + } + }; +})); + +},{"stackframe":6}],6:[function(require,module,exports){ +(function(root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stackframe', [], factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + root.StackFrame = factory(); + } +}(this, function() { + 'use strict'; + function _isNumber(n) { + return !isNaN(parseFloat(n)) && isFinite(n); + } + + function _capitalize(str) { + return str.charAt(0).toUpperCase() + str.substring(1); + } + + function _getter(p) { + return function() { + return this[p]; + }; + } + + var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel']; + var numericProps = ['columnNumber', 'lineNumber']; + var stringProps = ['fileName', 'functionName', 'source']; + var arrayProps = ['args']; + + var props = booleanProps.concat(numericProps, stringProps, arrayProps); + + function StackFrame(obj) { + if (obj instanceof Object) { + for (var i = 0; i < props.length; i++) { + if (obj.hasOwnProperty(props[i]) && obj[props[i]] !== undefined) { + this['set' + _capitalize(props[i])](obj[props[i]]); + } + } + } + } + + StackFrame.prototype = { + getArgs: function() { + return this.args; + }, + setArgs: function(v) { + if (Object.prototype.toString.call(v) !== '[object Array]') { + throw new TypeError('Args must be an Array'); + } + this.args = v; + }, + + getEvalOrigin: function() { + return this.evalOrigin; + }, + setEvalOrigin: function(v) { + if (v instanceof StackFrame) { + this.evalOrigin = v; + } else if (v instanceof Object) { + this.evalOrigin = new StackFrame(v); + } else { + throw new TypeError('Eval Origin must be an Object or StackFrame'); + } + }, + + toString: function() { + var functionName = this.getFunctionName() || '{anonymous}'; + var args = '(' + (this.getArgs() || []).join(',') + ')'; + var fileName = this.getFileName() ? ('@' + this.getFileName()) : ''; + var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : ''; + var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : ''; + return functionName + args + fileName + lineNumber + columnNumber; + } + }; + + for (var i = 0; i < booleanProps.length; i++) { + StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]); + StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) { + return function(v) { + this[p] = Boolean(v); + }; + })(booleanProps[i]); + } + + for (var j = 0; j < numericProps.length; j++) { + StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]); + StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) { + return function(v) { + if (!_isNumber(v)) { + throw new TypeError(p + ' must be a Number'); + } + this[p] = Number(v); + }; + })(numericProps[j]); + } + + for (var k = 0; k < stringProps.length; k++) { + StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]); + StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) { + return function(v) { + this[p] = String(v); + }; + })(stringProps[k]); + } + + return StackFrame; +})); + +},{}],7:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -2548,7 +2709,7 @@ ArraySet.prototype.toArray = function ArraySet_toArray() { exports.ArraySet = ArraySet; -},{"./util":11}],6:[function(require,module,exports){ +},{"./util":13}],8:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -2690,7 +2851,7 @@ exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { aOutParam.rest = aIndex; }; -},{"./base64":7}],7:[function(require,module,exports){ +},{"./base64":9}],9:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -2759,7 +2920,7 @@ exports.decode = function (charCode) { return -1; }; -},{}],8:[function(require,module,exports){ +},{}],10:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -2872,7 +3033,7 @@ exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { return index; }; -},{}],9:[function(require,module,exports){ +},{}],11:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -2988,7 +3149,7 @@ exports.quickSort = function (ary, comparator) { doQuickSort(ary, comparator, 0, ary.length - 1); }; -},{}],10:[function(require,module,exports){ +},{}],12:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -4072,7 +4233,7 @@ IndexedSourceMapConsumer.prototype._parseMappings = exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; -},{"./array-set":5,"./base64-vlq":6,"./binary-search":8,"./quick-sort":9,"./util":11}],11:[function(require,module,exports){ +},{"./array-set":7,"./base64-vlq":8,"./binary-search":10,"./quick-sort":11,"./util":13}],13:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -4491,166 +4652,6 @@ function compareByGeneratedPositionsInflated(mappingA, mappingB) { } exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; -},{}],12:[function(require,module,exports){ -(function(root, factory) { - 'use strict'; - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. - - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define('stack-generator', ['stackframe'], factory); - } else if (typeof exports === 'object') { - module.exports = factory(require('stackframe')); - } else { - root.StackGenerator = factory(root.StackFrame); - } -}(this, function(StackFrame) { - return { - backtrace: function StackGenerator$$backtrace(opts) { - var stack = []; - var maxStackSize = 10; - - if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') { - maxStackSize = opts.maxStackSize; - } - - var curr = arguments.callee; - while (curr && stack.length < maxStackSize) { - // Allow V8 optimizations - var args = new Array(curr['arguments'].length); - for (var i = 0; i < args.length; ++i) { - args[i] = curr['arguments'][i]; - } - if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { - stack.push(new StackFrame({functionName: RegExp.$1 || undefined, args: args})); - } else { - stack.push(new StackFrame({args: args})); - } - - try { - curr = curr.caller; - } catch (e) { - break; - } - } - return stack; - } - }; -})); - -},{"stackframe":13}],13:[function(require,module,exports){ -(function(root, factory) { - 'use strict'; - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. - - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define('stackframe', [], factory); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.StackFrame = factory(); - } -}(this, function() { - 'use strict'; - function _isNumber(n) { - return !isNaN(parseFloat(n)) && isFinite(n); - } - - function _capitalize(str) { - return str.charAt(0).toUpperCase() + str.substring(1); - } - - function _getter(p) { - return function() { - return this[p]; - }; - } - - var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel']; - var numericProps = ['columnNumber', 'lineNumber']; - var stringProps = ['fileName', 'functionName', 'source']; - var arrayProps = ['args']; - - var props = booleanProps.concat(numericProps, stringProps, arrayProps); - - function StackFrame(obj) { - if (obj instanceof Object) { - for (var i = 0; i < props.length; i++) { - if (obj.hasOwnProperty(props[i]) && obj[props[i]] !== undefined) { - this['set' + _capitalize(props[i])](obj[props[i]]); - } - } - } - } - - StackFrame.prototype = { - getArgs: function() { - return this.args; - }, - setArgs: function(v) { - if (Object.prototype.toString.call(v) !== '[object Array]') { - throw new TypeError('Args must be an Array'); - } - this.args = v; - }, - - getEvalOrigin: function() { - return this.evalOrigin; - }, - setEvalOrigin: function(v) { - if (v instanceof StackFrame) { - this.evalOrigin = v; - } else if (v instanceof Object) { - this.evalOrigin = new StackFrame(v); - } else { - throw new TypeError('Eval Origin must be an Object or StackFrame'); - } - }, - - toString: function() { - var functionName = this.getFunctionName() || '{anonymous}'; - var args = '(' + (this.getArgs() || []).join(',') + ')'; - var fileName = this.getFileName() ? ('@' + this.getFileName()) : ''; - var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : ''; - var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : ''; - return functionName + args + fileName + lineNumber + columnNumber; - } - }; - - for (var i = 0; i < booleanProps.length; i++) { - StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]); - StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) { - return function(v) { - this[p] = Boolean(v); - }; - })(booleanProps[i]); - } - - for (var j = 0; j < numericProps.length; j++) { - StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]); - StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) { - return function(v) { - if (!_isNumber(v)) { - throw new TypeError(p + ' must be a Number'); - } - this[p] = Number(v); - }; - })(numericProps[j]); - } - - for (var k = 0; k < stringProps.length; k++) { - StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]); - StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) { - return function(v) { - this[p] = String(v); - }; - })(stringProps[k]); - } - - return StackFrame; -})); - },{}],14:[function(require,module,exports){ (function(root, factory) { 'use strict'; @@ -4993,7 +4994,7 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate }; })); -},{"source-map/lib/source-map-consumer":10,"stackframe":13}],15:[function(require,module,exports){ +},{"source-map/lib/source-map-consumer":12,"stackframe":6}],15:[function(require,module,exports){ // Polyfill for old browsers // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray if (!Array.isArray) { @@ -5351,6 +5352,6 @@ if (!Array.prototype.forEach) { }; })); -},{"error-stack-parser":1,"stack-generator":12,"stacktrace-gps":14}]},{},[2,3,15,16])(16) +},{"error-stack-parser":1,"stack-generator":5,"stacktrace-gps":14}]},{},[2,3,15,16])(16) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9lczYtcHJvbWlzZS9kaXN0L2VzNi1wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2pzb24zL2xpYi9qc29uMy5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYXJyYXktc2V0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2Jhc2U2NC12bHEuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2JpbmFyeS1zZWFyY2guanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvcXVpY2stc29ydC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyLmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3V0aWwuanMiLCJub2RlX21vZHVsZXMvc3RhY2stZ2VuZXJhdG9yL3N0YWNrLWdlbmVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja2ZyYW1lL3N0YWNrZnJhbWUuanMiLCJub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1ncHMvc3RhY2t0cmFjZS1ncHMuanMiLCJwb2x5ZmlsbHMuanMiLCJzdGFja3RyYWNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUMvTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNqb0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3Q0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDamFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ2Vycm9yLXN0YWNrLXBhcnNlcicsIFsnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc3RhY2tmcmFtZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LkVycm9yU3RhY2tQYXJzZXIgPSBmYWN0b3J5KHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyKFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgRklSRUZPWF9TQUZBUklfU1RBQ0tfUkVHRVhQID0gLyhefEApXFxTK1xcOlxcZCsvO1xuICAgIHZhciBDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQID0gL15cXHMqYXQgLiooXFxTK1xcOlxcZCt8XFwobmF0aXZlXFwpKS9tO1xuICAgIHZhciBTQUZBUklfTkFUSVZFX0NPREVfUkVHRVhQID0gL14oZXZhbEApPyhcXFtuYXRpdmUgY29kZVxcXSk/JC87XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gRXJyb3Igb2JqZWN0LCBleHRyYWN0IHRoZSBtb3N0IGluZm9ybWF0aW9uIGZyb20gaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gb2YgU3RhY2tGcmFtZXNcbiAgICAgICAgICovXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZShlcnJvcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlcnJvci5zdGFja3RyYWNlICE9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZXJyb3JbJ29wZXJhI3NvdXJjZWxvYyddICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmEoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGFjayAmJiBlcnJvci5zdGFjay5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlVjhPcklFKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUZGT3JTYWZhcmkoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXJzZSBnaXZlbiBFcnJvciBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvLyBTZXBhcmF0ZSBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycyBmcm9tIGEgc3RyaW5nIG9mIHRoZSBmb3JtOiAoVVJJOkxpbmU6Q29sdW1uKVxuICAgICAgICBleHRyYWN0TG9jYXRpb246IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJGV4dHJhY3RMb2NhdGlvbih1cmxMaWtlKSB7XG4gICAgICAgICAgICAvLyBGYWlsLWZhc3QgYnV0IHJldHVybiBsb2NhdGlvbnMgbGlrZSBcIihuYXRpdmUpXCJcbiAgICAgICAgICAgIGlmICh1cmxMaWtlLmluZGV4T2YoJzonKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3VybExpa2VdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcmVnRXhwID0gLyguKz8pKD86XFw6KFxcZCspKT8oPzpcXDooXFxkKykpPyQvO1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gcmVnRXhwLmV4ZWModXJsTGlrZS5yZXBsYWNlKC9bXFwoXFwpXS9nLCAnJykpO1xuICAgICAgICAgICAgcmV0dXJuIFtwYXJ0c1sxXSwgcGFydHNbMl0gfHwgdW5kZWZpbmVkLCBwYXJ0c1szXSB8fCB1bmRlZmluZWRdO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlVjhPcklFOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZVY4T3JJRShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCcoZXZhbCAnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgZXZhbCBpbmZvcm1hdGlvbiB1bnRpbCB3ZSBpbXBsZW1lbnQgc3RhY2t0cmFjZS5qcy9zdGFja2ZyYW1lIzhcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvZXZhbCBjb2RlL2csICdldmFsJykucmVwbGFjZSgvKFxcKGV2YWwgYXQgW15cXCgpXSopfChcXClcXCwuKiQpL2csICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGxpbmUucmVwbGFjZSgvXlxccysvLCAnJykucmVwbGFjZSgvXFwoZXZhbCBjb2RlL2csICcoJykuc3BsaXQoL1xccysvKS5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRva2Vucy5qb2luKCcgJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IFsnZXZhbCcsICc8YW5vbnltb3VzPiddLmluZGV4T2YobG9jYXRpb25QYXJ0c1swXSkgPiAtMSA/IHVuZGVmaW5lZCA6IGxvY2F0aW9uUGFydHNbMF07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VGRk9yU2FmYXJpOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZUZGT3JTYWZhcmkoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhbGluZS5tYXRjaChTQUZBUklfTkFUSVZFX0NPREVfUkVHRVhQKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IGV2YWwgaW5mb3JtYXRpb24gdW50aWwgd2UgaW1wbGVtZW50IHN0YWNrdHJhY2UuanMvc3RhY2tmcmFtZSM4XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignID4gZXZhbCcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvIGxpbmUgKFxcZCspKD86ID4gZXZhbCBsaW5lIFxcZCspKiA+IGV2YWxcXDpcXGQrXFw6XFxkKy9nLCAnOiQxJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignQCcpID09PSAtMSAmJiBsaW5lLmluZGV4T2YoJzonKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIGV2YWwgZnJhbWVzIG9ubHkgaGF2ZSBmdW5jdGlvbiBuYW1lcyBhbmQgbm90aGluZyBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGxpbmVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGxpbmUuc3BsaXQoJ0AnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbih0b2tlbnMucG9wKCkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gdG9rZW5zLmpvaW4oJ0AnKSB8fCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmEoZSkge1xuICAgICAgICAgICAgaWYgKCFlLnN0YWNrdHJhY2UgfHwgKGUubWVzc2FnZS5pbmRleE9mKCdcXG4nKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlLnNwbGl0KCdcXG4nKS5sZW5ndGggPiBlLnN0YWNrdHJhY2Uuc3BsaXQoJ1xcbicpLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhOShlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWUuc3RhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTAoZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmExMShlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhOTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTkoZSkge1xuICAgICAgICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspL2k7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBlLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMiwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lUkUuZXhlYyhsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lc1tpXVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmExMDogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTEwKGUpIHtcbiAgICAgICAgICAgIHZhciBsaW5lUkUgPSAvTGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKSg/OjogSW4gZnVuY3Rpb24gKFxcUyspKT8kL2k7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBlLnN0YWNrdHJhY2Uuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lUkUuZXhlYyhsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbWF0Y2hbM10gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVzW2ldXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBPcGVyYSAxMC42NSsgRXJyb3Iuc3RhY2sgdmVyeSBzaW1pbGFyIHRvIEZGL1NhZmFyaVxuICAgICAgICBwYXJzZU9wZXJhMTE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFApICYmICFsaW5lLm1hdGNoKC9eRXJyb3IgY3JlYXRlZCBhdC8pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBsaW5lLnNwbGl0KCdAJyk7XG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbih0b2tlbnMucG9wKCkpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbkNhbGwgPSAodG9rZW5zLnNoaWZ0KCkgfHwgJycpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbkNhbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88YW5vbnltb3VzIGZ1bmN0aW9uKDogKFxcdyspKT8+LywgJyQyJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXChbXlxcKV0qXFwpL2csICcnKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3NSYXc7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uQ2FsbC5tYXRjaCgvXFwoKFteXFwpXSopXFwpLykpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1JhdyA9IGZ1bmN0aW9uQ2FsbC5yZXBsYWNlKC9eW15cXChdK1xcKChbXlxcKV0qKVxcKSQvLCAnJDEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSAoYXJnc1JhdyA9PT0gdW5kZWZpbmVkIHx8IGFyZ3NSYXcgPT09ICdbYXJndW1lbnRzIG5vdCBhdmFpbGFibGVdJykgP1xuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgOiBhcmdzUmF3LnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG59KSk7XG4iLCIvKiFcbiAqIEBvdmVydmlldyBlczYtcHJvbWlzZSAtIGEgdGlueSBpbXBsZW1lbnRhdGlvbiBvZiBQcm9taXNlcy9BKy5cbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE0IFllaHVkYSBLYXR6LCBUb20gRGFsZSwgU3RlZmFuIFBlbm5lciBhbmQgY29udHJpYnV0b3JzIChDb252ZXJzaW9uIHRvIEVTNiBBUEkgYnkgSmFrZSBBcmNoaWJhbGQpXG4gKiBAbGljZW5zZSAgIExpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlXG4gKiAgICAgICAgICAgIFNlZSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc3RlZmFucGVubmVyL2VzNi1wcm9taXNlL21hc3Rlci9MSUNFTlNFXG4gKiBAdmVyc2lvbiAgIDMuMy4xXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsLkVTNlByb21pc2UgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG9iamVjdE9yRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG59XG5cbnZhciBfaXNBcnJheSA9IHVuZGVmaW5lZDtcbmlmICghQXJyYXkuaXNBcnJheSkge1xuICBfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcbn0gZWxzZSB7XG4gIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbn1cblxudmFyIGlzQXJyYXkgPSBfaXNBcnJheTtcblxudmFyIGxlbiA9IDA7XG52YXIgdmVydHhOZXh0ID0gdW5kZWZpbmVkO1xudmFyIGN1c3RvbVNjaGVkdWxlckZuID0gdW5kZWZpbmVkO1xuXG52YXIgYXNhcCA9IGZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGFyZykge1xuICBxdWV1ZVtsZW5dID0gY2FsbGJhY2s7XG4gIHF1ZXVlW2xlbiArIDFdID0gYXJnO1xuICBsZW4gKz0gMjtcbiAgaWYgKGxlbiA9PT0gMikge1xuICAgIC8vIElmIGxlbiBpcyAyLCB0aGF0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBhc3luYyBmbHVzaC5cbiAgICAvLyBJZiBhZGRpdGlvbmFsIGNhbGxiYWNrcyBhcmUgcXVldWVkIGJlZm9yZSB0aGUgcXVldWUgaXMgZmx1c2hlZCwgdGhleVxuICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgZmx1c2ggdGhhdCB3ZSBhcmUgc2NoZWR1bGluZy5cbiAgICBpZiAoY3VzdG9tU2NoZWR1bGVyRm4pIHtcbiAgICAgIGN1c3RvbVNjaGVkdWxlckZuKGZsdXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZWR1bGVGbHVzaCgpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gc2V0U2NoZWR1bGVyKHNjaGVkdWxlRm4pIHtcbiAgY3VzdG9tU2NoZWR1bGVyRm4gPSBzY2hlZHVsZUZuO1xufVxuXG5mdW5jdGlvbiBzZXRBc2FwKGFzYXBGbikge1xuICBhc2FwID0gYXNhcEZuO1xufVxuXG52YXIgYnJvd3NlcldpbmRvdyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdW5kZWZpbmVkO1xudmFyIGJyb3dzZXJHbG9iYWwgPSBicm93c2VyV2luZG93IHx8IHt9O1xudmFyIEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID0gYnJvd3Nlckdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGJyb3dzZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBpc05vZGUgPSB0eXBlb2Ygc2VsZiA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICh7fSkudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nO1xuXG4vLyB0ZXN0IGZvciB3ZWIgd29ya2VyIGJ1dCBub3QgaW4gSUUxMFxudmFyIGlzV29ya2VyID0gdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJztcblxuLy8gbm9kZVxuZnVuY3Rpb24gdXNlTmV4dFRpY2soKSB7XG4gIC8vIG5vZGUgdmVyc2lvbiAwLjEwLnggZGlzcGxheXMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gbmV4dFRpY2sgaXMgdXNlZCByZWN1cnNpdmVseVxuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2N1am9qcy93aGVuL2lzc3Vlcy80MTAgZm9yIGRldGFpbHNcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gIH07XG59XG5cbi8vIHZlcnR4XG5mdW5jdGlvbiB1c2VWZXJ0eFRpbWVyKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZlcnR4TmV4dChmbHVzaCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZU11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gIHZhciBpdGVyYXRpb25zID0gMDtcbiAgdmFyIG9ic2VydmVyID0gbmV3IEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKGZsdXNoKTtcbiAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gIG9ic2VydmVyLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgbm9kZS5kYXRhID0gaXRlcmF0aW9ucyA9ICsraXRlcmF0aW9ucyAlIDI7XG4gIH07XG59XG5cbi8vIHdlYiB3b3JrZXJcbmZ1bmN0aW9uIHVzZU1lc3NhZ2VDaGFubmVsKCkge1xuICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZsdXNoO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKDApO1xuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VTZXRUaW1lb3V0KCkge1xuICAvLyBTdG9yZSBzZXRUaW1lb3V0IHJlZmVyZW5jZSBzbyBlczYtcHJvbWlzZSB3aWxsIGJlIHVuYWZmZWN0ZWQgYnlcbiAgLy8gb3RoZXIgY29kZSBtb2RpZnlpbmcgc2V0VGltZW91dCAobGlrZSBzaW5vbi51c2VGYWtlVGltZXJzKCkpXG4gIHZhciBnbG9iYWxTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2xvYmFsU2V0VGltZW91dChmbHVzaCwgMSk7XG4gIH07XG59XG5cbnZhciBxdWV1ZSA9IG5ldyBBcnJheSgxMDAwKTtcbmZ1bmN0aW9uIGZsdXNoKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gcXVldWVbaV07XG4gICAgdmFyIGFyZyA9IHF1ZXVlW2kgKyAxXTtcblxuICAgIGNhbGxiYWNrKGFyZyk7XG5cbiAgICBxdWV1ZVtpXSA9IHVuZGVmaW5lZDtcbiAgICBxdWV1ZVtpICsgMV0gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBsZW4gPSAwO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0VmVydHgoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHIgPSByZXF1aXJlO1xuICAgIHZhciB2ZXJ0eCA9IHIoJ3ZlcnR4Jyk7XG4gICAgdmVydHhOZXh0ID0gdmVydHgucnVuT25Mb29wIHx8IHZlcnR4LnJ1bk9uQ29udGV4dDtcbiAgICByZXR1cm4gdXNlVmVydHhUaW1lcigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHVzZVNldFRpbWVvdXQoKTtcbiAgfVxufVxuXG52YXIgc2NoZWR1bGVGbHVzaCA9IHVuZGVmaW5lZDtcbi8vIERlY2lkZSB3aGF0IGFzeW5jIG1ldGhvZCB0byB1c2UgdG8gdHJpZ2dlcmluZyBwcm9jZXNzaW5nIG9mIHF1ZXVlZCBjYWxsYmFja3M6XG5pZiAoaXNOb2RlKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VOZXh0VGljaygpO1xufSBlbHNlIGlmIChCcm93c2VyTXV0YXRpb25PYnNlcnZlcikge1xuICBzY2hlZHVsZUZsdXNoID0gdXNlTXV0YXRpb25PYnNlcnZlcigpO1xufSBlbHNlIGlmIChpc1dvcmtlcikge1xuICBzY2hlZHVsZUZsdXNoID0gdXNlTWVzc2FnZUNoYW5uZWwoKTtcbn0gZWxzZSBpZiAoYnJvd3NlcldpbmRvdyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSBhdHRlbXB0VmVydHgoKTtcbn0gZWxzZSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VTZXRUaW1lb3V0KCk7XG59XG5cbmZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgdmFyIF9hcmd1bWVudHMgPSBhcmd1bWVudHM7XG5cbiAgdmFyIHBhcmVudCA9IHRoaXM7XG5cbiAgdmFyIGNoaWxkID0gbmV3IHRoaXMuY29uc3RydWN0b3Iobm9vcCk7XG5cbiAgaWYgKGNoaWxkW1BST01JU0VfSURdID09PSB1bmRlZmluZWQpIHtcbiAgICBtYWtlUHJvbWlzZShjaGlsZCk7XG4gIH1cblxuICB2YXIgX3N0YXRlID0gcGFyZW50Ll9zdGF0ZTtcblxuICBpZiAoX3N0YXRlKSB7XG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjYWxsYmFjayA9IF9hcmd1bWVudHNbX3N0YXRlIC0gMV07XG4gICAgICBhc2FwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrKF9zdGF0ZSwgY2hpbGQsIGNhbGxiYWNrLCBwYXJlbnQuX3Jlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbik7XG4gIH1cblxuICByZXR1cm4gY2hpbGQ7XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yZXNvbHZlYCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdpbGwgYmVjb21lIHJlc29sdmVkIHdpdGggdGhlXG4gIHBhc3NlZCBgdmFsdWVgLiBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgcmVzb2x2ZSgxKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyB2YWx1ZSA9PT0gMVxuICB9KTtcbiAgYGBgXG5cbiAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoMSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyB2YWx1ZSA9PT0gMVxuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCByZXNvbHZlXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBbnl9IHZhbHVlIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCB3aXRoXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgZnVsZmlsbGVkIHdpdGggdGhlIGdpdmVuXG4gIGB2YWx1ZWBcbiovXG5mdW5jdGlvbiByZXNvbHZlKG9iamVjdCkge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuXG4gIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0LmNvbnN0cnVjdG9yID09PSBDb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcbiAgX3Jlc29sdmUocHJvbWlzZSwgb2JqZWN0KTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbnZhciBQUk9NSVNFX0lEID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDE2KTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnZhciBQRU5ESU5HID0gdm9pZCAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xuXG52YXIgR0VUX1RIRU5fRVJST1IgPSBuZXcgRXJyb3JPYmplY3QoKTtcblxuZnVuY3Rpb24gc2VsZkZ1bGZpbGxtZW50KCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIik7XG59XG5cbmZ1bmN0aW9uIGNhbm5vdFJldHVybk93bigpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGhlbihwcm9taXNlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHByb21pc2UudGhlbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBHRVRfVEhFTl9FUlJPUi5lcnJvciA9IGVycm9yO1xuICAgIHJldHVybiBHRVRfVEhFTl9FUlJPUjtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlUaGVuKHRoZW4sIHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpIHtcbiAgdHJ5IHtcbiAgICB0aGVuLmNhbGwodmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUsIHRoZW4pIHtcbiAgYXNhcChmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgIHZhciBzZWFsZWQgPSBmYWxzZTtcbiAgICB2YXIgZXJyb3IgPSB0cnlUaGVuKHRoZW4sIHRoZW5hYmxlLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChzZWFsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2VhbGVkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGVuYWJsZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuXG4gICAgICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSwgJ1NldHRsZTogJyArIChwcm9taXNlLl9sYWJlbCB8fCAnIHVua25vd24gcHJvbWlzZScpKTtcblxuICAgIGlmICghc2VhbGVkICYmIGVycm9yKSB7XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgX3JlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgfVxuICB9LCBwcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUpIHtcbiAgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gRlVMRklMTEVEKSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgfSBlbHNlIGlmICh0aGVuYWJsZS5fc3RhdGUgPT09IFJFSkVDVEVEKSB7XG4gICAgX3JlamVjdChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgfSBlbHNlIHtcbiAgICBzdWJzY3JpYmUodGhlbmFibGUsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuJCQpIHtcbiAgaWYgKG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IgPT09IHByb21pc2UuY29uc3RydWN0b3IgJiYgdGhlbiQkID09PSB0aGVuICYmIG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IucmVzb2x2ZSA9PT0gcmVzb2x2ZSkge1xuICAgIGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICB9IGVsc2Uge1xuICAgIGlmICh0aGVuJCQgPT09IEdFVF9USEVOX0VSUk9SKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIEdFVF9USEVOX0VSUk9SLmVycm9yKTtcbiAgICB9IGVsc2UgaWYgKHRoZW4kJCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbih0aGVuJCQpKSB7XG4gICAgICBoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSwgdGhlbiQkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCBtYXliZVRoZW5hYmxlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpIHtcbiAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgX3JlamVjdChwcm9taXNlLCBzZWxmRnVsZmlsbG1lbnQoKSk7XG4gIH0gZWxzZSBpZiAob2JqZWN0T3JGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIHZhbHVlLCBnZXRUaGVuKHZhbHVlKSk7XG4gIH0gZWxzZSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaFJlamVjdGlvbihwcm9taXNlKSB7XG4gIGlmIChwcm9taXNlLl9vbmVycm9yKSB7XG4gICAgcHJvbWlzZS5fb25lcnJvcihwcm9taXNlLl9yZXN1bHQpO1xuICB9XG5cbiAgcHVibGlzaChwcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gZnVsZmlsbChwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwcm9taXNlLl9yZXN1bHQgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fc3RhdGUgPSBGVUxGSUxMRUQ7XG5cbiAgaWYgKHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIGFzYXAocHVibGlzaCwgcHJvbWlzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3JlamVjdChwcm9taXNlLCByZWFzb24pIHtcbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByb21pc2UuX3N0YXRlID0gUkVKRUNURUQ7XG4gIHByb21pc2UuX3Jlc3VsdCA9IHJlYXNvbjtcblxuICBhc2FwKHB1Ymxpc2hSZWplY3Rpb24sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBzdWJzY3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgdmFyIF9zdWJzY3JpYmVycyA9IHBhcmVudC5fc3Vic2NyaWJlcnM7XG4gIHZhciBsZW5ndGggPSBfc3Vic2NyaWJlcnMubGVuZ3RoO1xuXG4gIHBhcmVudC5fb25lcnJvciA9IG51bGw7XG5cbiAgX3N1YnNjcmliZXJzW2xlbmd0aF0gPSBjaGlsZDtcbiAgX3N1YnNjcmliZXJzW2xlbmd0aCArIEZVTEZJTExFRF0gPSBvbkZ1bGZpbGxtZW50O1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgUkVKRUNURURdID0gb25SZWplY3Rpb247XG5cbiAgaWYgKGxlbmd0aCA9PT0gMCAmJiBwYXJlbnQuX3N0YXRlKSB7XG4gICAgYXNhcChwdWJsaXNoLCBwYXJlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1Ymxpc2gocHJvbWlzZSkge1xuICB2YXIgc3Vic2NyaWJlcnMgPSBwcm9taXNlLl9zdWJzY3JpYmVycztcbiAgdmFyIHNldHRsZWQgPSBwcm9taXNlLl9zdGF0ZTtcblxuICBpZiAoc3Vic2NyaWJlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGNoaWxkID0gdW5kZWZpbmVkLFxuICAgICAgY2FsbGJhY2sgPSB1bmRlZmluZWQsXG4gICAgICBkZXRhaWwgPSBwcm9taXNlLl9yZXN1bHQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJzY3JpYmVycy5sZW5ndGg7IGkgKz0gMykge1xuICAgIGNoaWxkID0gc3Vic2NyaWJlcnNbaV07XG4gICAgY2FsbGJhY2sgPSBzdWJzY3JpYmVyc1tpICsgc2V0dGxlZF07XG5cbiAgICBpZiAoY2hpbGQpIHtcbiAgICAgIGludm9rZUNhbGxiYWNrKHNldHRsZWQsIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soZGV0YWlsKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlLl9zdWJzY3JpYmVycy5sZW5ndGggPSAwO1xufVxuXG5mdW5jdGlvbiBFcnJvck9iamVjdCgpIHtcbiAgdGhpcy5lcnJvciA9IG51bGw7XG59XG5cbnZhciBUUllfQ0FUQ0hfRVJST1IgPSBuZXcgRXJyb3JPYmplY3QoKTtcblxuZnVuY3Rpb24gdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCkge1xuICB0cnkge1xuICAgIHJldHVybiBjYWxsYmFjayhkZXRhaWwpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgVFJZX0NBVENIX0VSUk9SLmVycm9yID0gZTtcbiAgICByZXR1cm4gVFJZX0NBVENIX0VSUk9SO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZUNhbGxiYWNrKHNldHRsZWQsIHByb21pc2UsIGNhbGxiYWNrLCBkZXRhaWwpIHtcbiAgdmFyIGhhc0NhbGxiYWNrID0gaXNGdW5jdGlvbihjYWxsYmFjayksXG4gICAgICB2YWx1ZSA9IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yID0gdW5kZWZpbmVkLFxuICAgICAgc3VjY2VlZGVkID0gdW5kZWZpbmVkLFxuICAgICAgZmFpbGVkID0gdW5kZWZpbmVkO1xuXG4gIGlmIChoYXNDYWxsYmFjaykge1xuICAgIHZhbHVlID0gdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCk7XG5cbiAgICBpZiAodmFsdWUgPT09IFRSWV9DQVRDSF9FUlJPUikge1xuICAgICAgZmFpbGVkID0gdHJ1ZTtcbiAgICAgIGVycm9yID0gdmFsdWUuZXJyb3I7XG4gICAgICB2YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1Y2NlZWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGNhbm5vdFJldHVybk93bigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBkZXRhaWw7XG4gICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIC8vIG5vb3BcbiAgfSBlbHNlIGlmIChoYXNDYWxsYmFjayAmJiBzdWNjZWVkZWQpIHtcbiAgICAgIF9yZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGZhaWxlZCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBGVUxGSUxMRUQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gUkVKRUNURUQpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVByb21pc2UocHJvbWlzZSwgcmVzb2x2ZXIpIHtcbiAgdHJ5IHtcbiAgICByZXNvbHZlcihmdW5jdGlvbiByZXNvbHZlUHJvbWlzZSh2YWx1ZSkge1xuICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIHJlamVjdFByb21pc2UocmVhc29uKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIGUpO1xuICB9XG59XG5cbnZhciBpZCA9IDA7XG5mdW5jdGlvbiBuZXh0SWQoKSB7XG4gIHJldHVybiBpZCsrO1xufVxuXG5mdW5jdGlvbiBtYWtlUHJvbWlzZShwcm9taXNlKSB7XG4gIHByb21pc2VbUFJPTUlTRV9JRF0gPSBpZCsrO1xuICBwcm9taXNlLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9zdWJzY3JpYmVycyA9IFtdO1xufVxuXG5mdW5jdGlvbiBFbnVtZXJhdG9yKENvbnN0cnVjdG9yLCBpbnB1dCkge1xuICB0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcblxuICBpZiAoIXRoaXMucHJvbWlzZVtQUk9NSVNFX0lEXSkge1xuICAgIG1ha2VQcm9taXNlKHRoaXMucHJvbWlzZSk7XG4gIH1cblxuICBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMubGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgIHRoaXMuX3JlbWFpbmluZyA9IGlucHV0Lmxlbmd0aDtcblxuICAgIHRoaXMuX3Jlc3VsdCA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGZ1bGZpbGwodGhpcy5wcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoIHx8IDA7XG4gICAgICB0aGlzLl9lbnVtZXJhdGUoKTtcbiAgICAgIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIF9yZWplY3QodGhpcy5wcm9taXNlLCB2YWxpZGF0aW9uRXJyb3IoKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGlvbkVycm9yKCkge1xuICByZXR1cm4gbmV3IEVycm9yKCdBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXknKTtcbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl9lbnVtZXJhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgdmFyIF9pbnB1dCA9IHRoaXMuX2lucHV0O1xuXG4gIGZvciAodmFyIGkgPSAwOyB0aGlzLl9zdGF0ZSA9PT0gUEVORElORyAmJiBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLl9lYWNoRW50cnkoX2lucHV0W2ldLCBpKTtcbiAgfVxufTtcblxuRW51bWVyYXRvci5wcm90b3R5cGUuX2VhY2hFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSwgaSkge1xuICB2YXIgYyA9IHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I7XG4gIHZhciByZXNvbHZlJCQgPSBjLnJlc29sdmU7XG5cbiAgaWYgKHJlc29sdmUkJCA9PT0gcmVzb2x2ZSkge1xuICAgIHZhciBfdGhlbiA9IGdldFRoZW4oZW50cnkpO1xuXG4gICAgaWYgKF90aGVuID09PSB0aGVuICYmIGVudHJ5Ll9zdGF0ZSAhPT0gUEVORElORykge1xuICAgICAgdGhpcy5fc2V0dGxlZEF0KGVudHJ5Ll9zdGF0ZSwgaSwgZW50cnkuX3Jlc3VsdCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgX3RoZW4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuICAgICAgdGhpcy5fcmVzdWx0W2ldID0gZW50cnk7XG4gICAgfSBlbHNlIGlmIChjID09PSBQcm9taXNlKSB7XG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBjKG5vb3ApO1xuICAgICAgaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBlbnRyeSwgX3RoZW4pO1xuICAgICAgdGhpcy5fd2lsbFNldHRsZUF0KHByb21pc2UsIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQobmV3IGMoZnVuY3Rpb24gKHJlc29sdmUkJCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSQkKGVudHJ5KTtcbiAgICAgIH0pLCBpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fd2lsbFNldHRsZUF0KHJlc29sdmUkJChlbnRyeSksIGkpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fc2V0dGxlZEF0ID0gZnVuY3Rpb24gKHN0YXRlLCBpLCB2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTtcblxuICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IFBFTkRJTkcpIHtcbiAgICB0aGlzLl9yZW1haW5pbmctLTtcblxuICAgIGlmIChzdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXN1bHRbaV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5fcmVtYWluaW5nID09PSAwKSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0ID0gZnVuY3Rpb24gKHByb21pc2UsIGkpIHtcbiAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuXG4gIHN1YnNjcmliZShwcm9taXNlLCB1bmRlZmluZWQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoRlVMRklMTEVELCBpLCB2YWx1ZSk7XG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICByZXR1cm4gZW51bWVyYXRvci5fc2V0dGxlZEF0KFJFSkVDVEVELCBpLCByZWFzb24pO1xuICB9KTtcbn07XG5cbi8qKlxuICBgUHJvbWlzZS5hbGxgIGFjY2VwdHMgYW4gYXJyYXkgb2YgcHJvbWlzZXMsIGFuZCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2hcbiAgaXMgZnVsZmlsbGVkIHdpdGggYW4gYXJyYXkgb2YgZnVsZmlsbG1lbnQgdmFsdWVzIGZvciB0aGUgcGFzc2VkIHByb21pc2VzLCBvclxuICByZWplY3RlZCB3aXRoIHRoZSByZWFzb24gb2YgdGhlIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIGJlIHJlamVjdGVkLiBJdCBjYXN0cyBhbGxcbiAgZWxlbWVudHMgb2YgdGhlIHBhc3NlZCBpdGVyYWJsZSB0byBwcm9taXNlcyBhcyBpdCBydW5zIHRoaXMgYWxnb3JpdGhtLlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSByZXNvbHZlKDEpO1xuICBsZXQgcHJvbWlzZTIgPSByZXNvbHZlKDIpO1xuICBsZXQgcHJvbWlzZTMgPSByZXNvbHZlKDMpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gVGhlIGFycmF5IGhlcmUgd291bGQgYmUgWyAxLCAyLCAzIF07XG4gIH0pO1xuICBgYGBcblxuICBJZiBhbnkgb2YgdGhlIGBwcm9taXNlc2AgZ2l2ZW4gdG8gYGFsbGAgYXJlIHJlamVjdGVkLCB0aGUgZmlyc3QgcHJvbWlzZVxuICB0aGF0IGlzIHJlamVjdGVkIHdpbGwgYmUgZ2l2ZW4gYXMgYW4gYXJndW1lbnQgdG8gdGhlIHJldHVybmVkIHByb21pc2VzJ3NcbiAgcmVqZWN0aW9uIGhhbmRsZXIuIEZvciBleGFtcGxlOlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSByZXNvbHZlKDEpO1xuICBsZXQgcHJvbWlzZTIgPSByZWplY3QobmV3IEVycm9yKFwiMlwiKSk7XG4gIGxldCBwcm9taXNlMyA9IHJlamVjdChuZXcgRXJyb3IoXCIzXCIpKTtcbiAgbGV0IHByb21pc2VzID0gWyBwcm9taXNlMSwgcHJvbWlzZTIsIHByb21pc2UzIF07XG5cbiAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oYXJyYXkpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zIGJlY2F1c2UgdGhlcmUgYXJlIHJlamVjdGVkIHByb21pc2VzIVxuICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgIC8vIGVycm9yLm1lc3NhZ2UgPT09IFwiMlwiXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIGFsbFxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IGVudHJpZXMgYXJyYXkgb2YgcHJvbWlzZXNcbiAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgbGFiZWxpbmcgdGhlIHByb21pc2UuXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIGFsbCBgcHJvbWlzZXNgIGhhdmUgYmVlblxuICBmdWxmaWxsZWQsIG9yIHJlamVjdGVkIGlmIGFueSBvZiB0aGVtIGJlY29tZSByZWplY3RlZC5cbiAgQHN0YXRpY1xuKi9cbmZ1bmN0aW9uIGFsbChlbnRyaWVzKSB7XG4gIHJldHVybiBuZXcgRW51bWVyYXRvcih0aGlzLCBlbnRyaWVzKS5wcm9taXNlO1xufVxuXG4vKipcbiAgYFByb21pc2UucmFjZWAgcmV0dXJucyBhIG5ldyBwcm9taXNlIHdoaWNoIGlzIHNldHRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZVxuICBmaXJzdCBwYXNzZWQgcHJvbWlzZSB0byBzZXR0bGUuXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVzb2x2ZSgncHJvbWlzZSAxJyk7XG4gICAgfSwgMjAwKTtcbiAgfSk7XG5cbiAgbGV0IHByb21pc2UyID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDInKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyByZXN1bHQgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgaXQgd2FzIHJlc29sdmVkIGJlZm9yZSBwcm9taXNlMVxuICAgIC8vIHdhcyByZXNvbHZlZC5cbiAgfSk7XG4gIGBgYFxuXG4gIGBQcm9taXNlLnJhY2VgIGlzIGRldGVybWluaXN0aWMgaW4gdGhhdCBvbmx5IHRoZSBzdGF0ZSBvZiB0aGUgZmlyc3RcbiAgc2V0dGxlZCBwcm9taXNlIG1hdHRlcnMuIEZvciBleGFtcGxlLCBldmVuIGlmIG90aGVyIHByb21pc2VzIGdpdmVuIHRvIHRoZVxuICBgcHJvbWlzZXNgIGFycmF5IGFyZ3VtZW50IGFyZSByZXNvbHZlZCwgYnV0IHRoZSBmaXJzdCBzZXR0bGVkIHByb21pc2UgaGFzXG4gIGJlY29tZSByZWplY3RlZCBiZWZvcmUgdGhlIG90aGVyIHByb21pc2VzIGJlY2FtZSBmdWxmaWxsZWQsIHRoZSByZXR1cm5lZFxuICBwcm9taXNlIHdpbGwgYmVjb21lIHJlamVjdGVkOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoJ3Byb21pc2UgMicpKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyBDb2RlIGhlcmUgbmV2ZXIgcnVuc1xuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAncHJvbWlzZSAyJyBiZWNhdXNlIHByb21pc2UgMiBiZWNhbWUgcmVqZWN0ZWQgYmVmb3JlXG4gICAgLy8gcHJvbWlzZSAxIGJlY2FtZSBmdWxmaWxsZWRcbiAgfSk7XG4gIGBgYFxuXG4gIEFuIGV4YW1wbGUgcmVhbC13b3JsZCB1c2UgY2FzZSBpcyBpbXBsZW1lbnRpbmcgdGltZW91dHM6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBQcm9taXNlLnJhY2UoW2FqYXgoJ2Zvby5qc29uJyksIHRpbWVvdXQoNTAwMCldKVxuICBgYGBcblxuICBAbWV0aG9kIHJhY2VcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FycmF5fSBwcm9taXNlcyBhcnJheSBvZiBwcm9taXNlcyB0byBvYnNlcnZlXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHdoaWNoIHNldHRsZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBmaXJzdCBwYXNzZWRcbiAgcHJvbWlzZSB0byBzZXR0bGUuXG4qL1xuZnVuY3Rpb24gcmFjZShlbnRyaWVzKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKCFpc0FycmF5KGVudHJpZXMpKSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAoXywgcmVqZWN0KSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1lvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4nKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gZW50cmllcy5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLnJlc29sdmUoZW50cmllc1tpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yZWplY3RgIHJldHVybnMgYSBwcm9taXNlIHJlamVjdGVkIHdpdGggdGhlIHBhc3NlZCBgcmVhc29uYC5cbiAgSXQgaXMgc2hvcnRoYW5kIGZvciB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCFcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUydcbiAgfSk7XG4gIGBgYFxuXG4gIEluc3RlYWQgb2Ygd3JpdGluZyB0aGUgYWJvdmUsIHlvdXIgY29kZSBub3cgc2ltcGx5IGJlY29tZXMgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdXSE9PUFMnKSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCFcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUydcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgcmVqZWN0XG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBbnl9IHJlYXNvbiB2YWx1ZSB0aGF0IHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aC5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgZ2l2ZW4gYHJlYXNvbmAuXG4qL1xuZnVuY3Rpb24gcmVqZWN0KHJlYXNvbikge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcbiAgX3JlamVjdChwcm9taXNlLCByZWFzb24pO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gbmVlZHNSZXNvbHZlcigpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xufVxuXG5mdW5jdGlvbiBuZWVkc05ldygpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbn1cblxuLyoqXG4gIFByb21pc2Ugb2JqZWN0cyByZXByZXNlbnQgdGhlIGV2ZW50dWFsIHJlc3VsdCBvZiBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uLiBUaGVcbiAgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCwgd2hpY2hcbiAgcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGUgcmVhc29uXG4gIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuXG4gIFRlcm1pbm9sb2d5XG4gIC0tLS0tLS0tLS0tXG5cbiAgLSBgcHJvbWlzZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHdpdGggYSBgdGhlbmAgbWV0aG9kIHdob3NlIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoaXMgc3BlY2lmaWNhdGlvbi5cbiAgLSBgdGhlbmFibGVgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB0aGF0IGRlZmluZXMgYSBgdGhlbmAgbWV0aG9kLlxuICAtIGB2YWx1ZWAgaXMgYW55IGxlZ2FsIEphdmFTY3JpcHQgdmFsdWUgKGluY2x1ZGluZyB1bmRlZmluZWQsIGEgdGhlbmFibGUsIG9yIGEgcHJvbWlzZSkuXG4gIC0gYGV4Y2VwdGlvbmAgaXMgYSB2YWx1ZSB0aGF0IGlzIHRocm93biB1c2luZyB0aGUgdGhyb3cgc3RhdGVtZW50LlxuICAtIGByZWFzb25gIGlzIGEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2h5IGEgcHJvbWlzZSB3YXMgcmVqZWN0ZWQuXG4gIC0gYHNldHRsZWRgIHRoZSBmaW5hbCByZXN0aW5nIHN0YXRlIG9mIGEgcHJvbWlzZSwgZnVsZmlsbGVkIG9yIHJlamVjdGVkLlxuXG4gIEEgcHJvbWlzZSBjYW4gYmUgaW4gb25lIG9mIHRocmVlIHN0YXRlczogcGVuZGluZywgZnVsZmlsbGVkLCBvciByZWplY3RlZC5cblxuICBQcm9taXNlcyB0aGF0IGFyZSBmdWxmaWxsZWQgaGF2ZSBhIGZ1bGZpbGxtZW50IHZhbHVlIGFuZCBhcmUgaW4gdGhlIGZ1bGZpbGxlZFxuICBzdGF0ZS4gIFByb21pc2VzIHRoYXQgYXJlIHJlamVjdGVkIGhhdmUgYSByZWplY3Rpb24gcmVhc29uIGFuZCBhcmUgaW4gdGhlXG4gIHJlamVjdGVkIHN0YXRlLiAgQSBmdWxmaWxsbWVudCB2YWx1ZSBpcyBuZXZlciBhIHRoZW5hYmxlLlxuXG4gIFByb21pc2VzIGNhbiBhbHNvIGJlIHNhaWQgdG8gKnJlc29sdmUqIGEgdmFsdWUuICBJZiB0aGlzIHZhbHVlIGlzIGFsc28gYVxuICBwcm9taXNlLCB0aGVuIHRoZSBvcmlnaW5hbCBwcm9taXNlJ3Mgc2V0dGxlZCBzdGF0ZSB3aWxsIG1hdGNoIHRoZSB2YWx1ZSdzXG4gIHNldHRsZWQgc3RhdGUuICBTbyBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgd2lsbFxuICBpdHNlbGYgcmVqZWN0LCBhbmQgYSBwcm9taXNlIHRoYXQgKnJlc29sdmVzKiBhIHByb21pc2UgdGhhdCBmdWxmaWxscyB3aWxsXG4gIGl0c2VsZiBmdWxmaWxsLlxuXG5cbiAgQmFzaWMgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLVxuXG4gIGBgYGpzXG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgLy8gb24gc3VjY2Vzc1xuICAgIHJlc29sdmUodmFsdWUpO1xuXG4gICAgLy8gb24gZmFpbHVyZVxuICAgIHJlamVjdChyZWFzb24pO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAvLyBvbiBmdWxmaWxsbWVudFxuICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAvLyBvbiByZWplY3Rpb25cbiAgfSk7XG4gIGBgYFxuXG4gIEFkdmFuY2VkIFVzYWdlOlxuICAtLS0tLS0tLS0tLS0tLS1cblxuICBQcm9taXNlcyBzaGluZSB3aGVuIGFic3RyYWN0aW5nIGF3YXkgYXN5bmNocm9ub3VzIGludGVyYWN0aW9ucyBzdWNoIGFzXG4gIGBYTUxIdHRwUmVxdWVzdGBzLlxuXG4gIGBgYGpzXG4gIGZ1bmN0aW9uIGdldEpTT04odXJsKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwpO1xuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2pzb24nO1xuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICB4aHIuc2VuZCgpO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSB0aGlzLkRPTkUpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignZ2V0SlNPTjogYCcgKyB1cmwgKyAnYCBmYWlsZWQgd2l0aCBzdGF0dXM6IFsnICsgdGhpcy5zdGF0dXMgKyAnXScpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRKU09OKCcvcG9zdHMuanNvbicpLnRoZW4oZnVuY3Rpb24oanNvbikge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgVW5saWtlIGNhbGxiYWNrcywgcHJvbWlzZXMgYXJlIGdyZWF0IGNvbXBvc2FibGUgcHJpbWl0aXZlcy5cblxuICBgYGBqc1xuICBQcm9taXNlLmFsbChbXG4gICAgZ2V0SlNPTignL3Bvc3RzJyksXG4gICAgZ2V0SlNPTignL2NvbW1lbnRzJylcbiAgXSkudGhlbihmdW5jdGlvbih2YWx1ZXMpe1xuICAgIHZhbHVlc1swXSAvLyA9PiBwb3N0c0pTT05cbiAgICB2YWx1ZXNbMV0gLy8gPT4gY29tbWVudHNKU09OXG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9KTtcbiAgYGBgXG5cbiAgQGNsYXNzIFByb21pc2VcbiAgQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZXJcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAY29uc3RydWN0b3JcbiovXG5mdW5jdGlvbiBQcm9taXNlKHJlc29sdmVyKSB7XG4gIHRoaXNbUFJPTUlTRV9JRF0gPSBuZXh0SWQoKTtcbiAgdGhpcy5fcmVzdWx0ID0gdGhpcy5fc3RhdGUgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG5cbiAgaWYgKG5vb3AgIT09IHJlc29sdmVyKSB7XG4gICAgdHlwZW9mIHJlc29sdmVyICE9PSAnZnVuY3Rpb24nICYmIG5lZWRzUmVzb2x2ZXIoKTtcbiAgICB0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSA/IGluaXRpYWxpemVQcm9taXNlKHRoaXMsIHJlc29sdmVyKSA6IG5lZWRzTmV3KCk7XG4gIH1cbn1cblxuUHJvbWlzZS5hbGwgPSBhbGw7XG5Qcm9taXNlLnJhY2UgPSByYWNlO1xuUHJvbWlzZS5yZXNvbHZlID0gcmVzb2x2ZTtcblByb21pc2UucmVqZWN0ID0gcmVqZWN0O1xuUHJvbWlzZS5fc2V0U2NoZWR1bGVyID0gc2V0U2NoZWR1bGVyO1xuUHJvbWlzZS5fc2V0QXNhcCA9IHNldEFzYXA7XG5Qcm9taXNlLl9hc2FwID0gYXNhcDtcblxuUHJvbWlzZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBQcm9taXNlLFxuXG4gIC8qKlxuICAgIFRoZSBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLFxuICAgIHdoaWNoIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlJ3MgZXZlbnR1YWwgdmFsdWUgb3IgdGhlXG4gICAgcmVhc29uIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbih1c2VyKXtcbiAgICAgIC8vIHVzZXIgaXMgYXZhaWxhYmxlXG4gICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIHVzZXIgaXMgdW5hdmFpbGFibGUsIGFuZCB5b3UgYXJlIGdpdmVuIHRoZSByZWFzb24gd2h5XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIENoYWluaW5nXG4gICAgLS0tLS0tLS1cbiAgXG4gICAgVGhlIHJldHVybiB2YWx1ZSBvZiBgdGhlbmAgaXMgaXRzZWxmIGEgcHJvbWlzZS4gIFRoaXMgc2Vjb25kLCAnZG93bnN0cmVhbSdcbiAgICBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZmlyc3QgcHJvbWlzZSdzIGZ1bGZpbGxtZW50XG4gICAgb3IgcmVqZWN0aW9uIGhhbmRsZXIsIG9yIHJlamVjdGVkIGlmIHRoZSBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24uXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICByZXR1cm4gdXNlci5uYW1lO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiAnZGVmYXVsdCBuYW1lJztcbiAgICB9KS50aGVuKGZ1bmN0aW9uICh1c2VyTmFtZSkge1xuICAgICAgLy8gSWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGB1c2VyTmFtZWAgd2lsbCBiZSB0aGUgdXNlcidzIG5hbWUsIG90aGVyd2lzZSBpdFxuICAgICAgLy8gd2lsbCBiZSBgJ2RlZmF1bHQgbmFtZSdgXG4gICAgfSk7XG4gIFxuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCB1c2VyLCBidXQgc3RpbGwgdW5oYXBweScpO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgLy8gaWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGByZWFzb25gIHdpbGwgYmUgJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jy5cbiAgICAgIC8vIElmIGBmaW5kVXNlcmAgcmVqZWN0ZWQsIGByZWFzb25gIHdpbGwgYmUgJ2BmaW5kVXNlcmAgcmVqZWN0ZWQgYW5kIHdlJ3JlIHVuaGFwcHknLlxuICAgIH0pO1xuICAgIGBgYFxuICAgIElmIHRoZSBkb3duc3RyZWFtIHByb21pc2UgZG9lcyBub3Qgc3BlY2lmeSBhIHJlamVjdGlvbiBoYW5kbGVyLCByZWplY3Rpb24gcmVhc29ucyB3aWxsIGJlIHByb3BhZ2F0ZWQgZnVydGhlciBkb3duc3RyZWFtLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgdGhyb3cgbmV3IFBlZGFnb2dpY2FsRXhjZXB0aW9uKCdVcHN0cmVhbSBlcnJvcicpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAvLyBUaGUgYFBlZGdhZ29jaWFsRXhjZXB0aW9uYCBpcyBwcm9wYWdhdGVkIGFsbCB0aGUgd2F5IGRvd24gdG8gaGVyZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBBc3NpbWlsYXRpb25cbiAgICAtLS0tLS0tLS0tLS1cbiAgXG4gICAgU29tZXRpbWVzIHRoZSB2YWx1ZSB5b3Ugd2FudCB0byBwcm9wYWdhdGUgdG8gYSBkb3duc3RyZWFtIHByb21pc2UgY2FuIG9ubHkgYmVcbiAgICByZXRyaWV2ZWQgYXN5bmNocm9ub3VzbHkuIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHJldHVybmluZyBhIHByb21pc2UgaW4gdGhlXG4gICAgZnVsZmlsbG1lbnQgb3IgcmVqZWN0aW9uIGhhbmRsZXIuIFRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCB0aGVuIGJlIHBlbmRpbmdcbiAgICB1bnRpbCB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBzZXR0bGVkLiBUaGlzIGlzIGNhbGxlZCAqYXNzaW1pbGF0aW9uKi5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgICAgLy8gVGhlIHVzZXIncyBjb21tZW50cyBhcmUgbm93IGF2YWlsYWJsZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBJZiB0aGUgYXNzaW1saWF0ZWQgcHJvbWlzZSByZWplY3RzLCB0aGVuIHRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCBhbHNvIHJlamVjdC5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCBmdWxmaWxscywgd2UnbGwgaGF2ZSB0aGUgdmFsdWUgaGVyZVxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIElmIGBmaW5kQ29tbWVudHNCeUF1dGhvcmAgcmVqZWN0cywgd2UnbGwgaGF2ZSB0aGUgcmVhc29uIGhlcmVcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgU2ltcGxlIEV4YW1wbGVcbiAgICAtLS0tLS0tLS0tLS0tLVxuICBcbiAgICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBsZXQgcmVzdWx0O1xuICBcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gZmluZFJlc3VsdCgpO1xuICAgICAgLy8gc3VjY2Vzc1xuICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAvLyBmYWlsdXJlXG4gICAgfVxuICAgIGBgYFxuICBcbiAgICBFcnJiYWNrIEV4YW1wbGVcbiAgXG4gICAgYGBganNcbiAgICBmaW5kUmVzdWx0KGZ1bmN0aW9uKHJlc3VsdCwgZXJyKXtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgLy8gZmFpbHVyZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgfVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBQcm9taXNlIEV4YW1wbGU7XG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBmaW5kUmVzdWx0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgICAgLy8gc3VjY2Vzc1xuICAgIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAvLyBmYWlsdXJlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEFkdmFuY2VkIEV4YW1wbGVcbiAgICAtLS0tLS0tLS0tLS0tLVxuICBcbiAgICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBsZXQgYXV0aG9yLCBib29rcztcbiAgXG4gICAgdHJ5IHtcbiAgICAgIGF1dGhvciA9IGZpbmRBdXRob3IoKTtcbiAgICAgIGJvb2tzICA9IGZpbmRCb29rc0J5QXV0aG9yKGF1dGhvcik7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9XG4gICAgYGBgXG4gIFxuICAgIEVycmJhY2sgRXhhbXBsZVxuICBcbiAgICBgYGBqc1xuICBcbiAgICBmdW5jdGlvbiBmb3VuZEJvb2tzKGJvb2tzKSB7XG4gIFxuICAgIH1cbiAgXG4gICAgZnVuY3Rpb24gZmFpbHVyZShyZWFzb24pIHtcbiAgXG4gICAgfVxuICBcbiAgICBmaW5kQXV0aG9yKGZ1bmN0aW9uKGF1dGhvciwgZXJyKXtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZpbmRCb29va3NCeUF1dGhvcihhdXRob3IsIGZ1bmN0aW9uKGJvb2tzLCBlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3VuZEJvb2tzKGJvb2tzKTtcbiAgICAgICAgICAgICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICBmYWlsdXJlKHJlYXNvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIFByb21pc2UgRXhhbXBsZTtcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGZpbmRBdXRob3IoKS5cbiAgICAgIHRoZW4oZmluZEJvb2tzQnlBdXRob3IpLlxuICAgICAgdGhlbihmdW5jdGlvbihib29rcyl7XG4gICAgICAgIC8vIGZvdW5kIGJvb2tzXG4gICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEBtZXRob2QgdGhlblxuICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uRnVsZmlsbGVkXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3RlZFxuICAgIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgICBAcmV0dXJuIHtQcm9taXNlfVxuICAqL1xuICB0aGVuOiB0aGVuLFxuXG4gIC8qKlxuICAgIGBjYXRjaGAgaXMgc2ltcGx5IHN1Z2FyIGZvciBgdGhlbih1bmRlZmluZWQsIG9uUmVqZWN0aW9uKWAgd2hpY2ggbWFrZXMgaXQgdGhlIHNhbWVcbiAgICBhcyB0aGUgY2F0Y2ggYmxvY2sgb2YgYSB0cnkvY2F0Y2ggc3RhdGVtZW50LlxuICBcbiAgICBgYGBqc1xuICAgIGZ1bmN0aW9uIGZpbmRBdXRob3IoKXtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGRuJ3QgZmluZCB0aGF0IGF1dGhvcicpO1xuICAgIH1cbiAgXG4gICAgLy8gc3luY2hyb25vdXNcbiAgICB0cnkge1xuICAgICAgZmluZEF1dGhvcigpO1xuICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIH1cbiAgXG4gICAgLy8gYXN5bmMgd2l0aCBwcm9taXNlc1xuICAgIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQG1ldGhvZCBjYXRjaFxuICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVqZWN0aW9uXG4gICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG4gICdjYXRjaCc6IGZ1bmN0aW9uIF9jYXRjaChvblJlamVjdGlvbikge1xuICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3Rpb24pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBwb2x5ZmlsbCgpIHtcbiAgICB2YXIgbG9jYWwgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbG9jYWwgPSBnbG9iYWw7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbG9jYWwgPSBzZWxmO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2NhbCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgUCA9IGxvY2FsLlByb21pc2U7XG5cbiAgICBpZiAoUCkge1xuICAgICAgICB2YXIgcHJvbWlzZVRvU3RyaW5nID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb21pc2VUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChQLnJlc29sdmUoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIHNpbGVudGx5IGlnbm9yZWRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9taXNlVG9TdHJpbmcgPT09ICdbb2JqZWN0IFByb21pc2VdJyAmJiAhUC5jYXN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2NhbC5Qcm9taXNlID0gUHJvbWlzZTtcbn1cblxucG9seWZpbGwoKTtcbi8vIFN0cmFuZ2UgY29tcGF0Li5cblByb21pc2UucG9seWZpbGwgPSBwb2x5ZmlsbDtcblByb21pc2UuUHJvbWlzZSA9IFByb21pc2U7XG5cbnJldHVybiBQcm9taXNlO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXM2LXByb21pc2UubWFwIiwiLyohIEpTT04gdjMuMy4yIHwgaHR0cDovL2Jlc3RpZWpzLmdpdGh1Yi5pby9qc29uMyB8IENvcHlyaWdodCAyMDEyLTIwMTQsIEtpdCBDYW1icmlkZ2UgfCBodHRwOi8va2l0Lm1pdC1saWNlbnNlLm9yZyAqL1xuOyhmdW5jdGlvbiAoKSB7XG4gIC8vIERldGVjdCB0aGUgYGRlZmluZWAgZnVuY3Rpb24gZXhwb3NlZCBieSBhc3luY2hyb25vdXMgbW9kdWxlIGxvYWRlcnMuIFRoZVxuICAvLyBzdHJpY3QgYGRlZmluZWAgY2hlY2sgaXMgbmVjZXNzYXJ5IGZvciBjb21wYXRpYmlsaXR5IHdpdGggYHIuanNgLlxuICB2YXIgaXNMb2FkZXIgPSB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZDtcblxuICAvLyBBIHNldCBvZiB0eXBlcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIG9iamVjdHMgZnJvbSBwcmltaXRpdmVzLlxuICB2YXIgb2JqZWN0VHlwZXMgPSB7XG4gICAgXCJmdW5jdGlvblwiOiB0cnVlLFxuICAgIFwib2JqZWN0XCI6IHRydWVcbiAgfTtcblxuICAvLyBEZXRlY3QgdGhlIGBleHBvcnRzYCBvYmplY3QgZXhwb3NlZCBieSBDb21tb25KUyBpbXBsZW1lbnRhdGlvbnMuXG4gIHZhciBmcmVlRXhwb3J0cyA9IG9iamVjdFR5cGVzW3R5cGVvZiBleHBvcnRzXSAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbiAgLy8gVXNlIHRoZSBgZ2xvYmFsYCBvYmplY3QgZXhwb3NlZCBieSBOb2RlIChpbmNsdWRpbmcgQnJvd3NlcmlmeSB2aWFcbiAgLy8gYGluc2VydC1tb2R1bGUtZ2xvYmFsc2ApLCBOYXJ3aGFsLCBhbmQgUmluZ28gYXMgdGhlIGRlZmF1bHQgY29udGV4dCxcbiAgLy8gYW5kIHRoZSBgd2luZG93YCBvYmplY3QgaW4gYnJvd3NlcnMuIFJoaW5vIGV4cG9ydHMgYSBgZ2xvYmFsYCBmdW5jdGlvblxuICAvLyBpbnN0ZWFkLlxuICB2YXIgcm9vdCA9IG9iamVjdFR5cGVzW3R5cGVvZiB3aW5kb3ddICYmIHdpbmRvdyB8fCB0aGlzLFxuICAgICAgZnJlZUdsb2JhbCA9IGZyZWVFeHBvcnRzICYmIG9iamVjdFR5cGVzW3R5cGVvZiBtb2R1bGVdICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIHR5cGVvZiBnbG9iYWwgPT0gXCJvYmplY3RcIiAmJiBnbG9iYWw7XG5cbiAgaWYgKGZyZWVHbG9iYWwgJiYgKGZyZWVHbG9iYWxbXCJnbG9iYWxcIl0gPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbFtcIndpbmRvd1wiXSA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsW1wic2VsZlwiXSA9PT0gZnJlZUdsb2JhbCkpIHtcbiAgICByb290ID0gZnJlZUdsb2JhbDtcbiAgfVxuXG4gIC8vIFB1YmxpYzogSW5pdGlhbGl6ZXMgSlNPTiAzIHVzaW5nIHRoZSBnaXZlbiBgY29udGV4dGAgb2JqZWN0LCBhdHRhY2hpbmcgdGhlXG4gIC8vIGBzdHJpbmdpZnlgIGFuZCBgcGFyc2VgIGZ1bmN0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGBleHBvcnRzYCBvYmplY3QuXG4gIGZ1bmN0aW9uIHJ1bkluQ29udGV4dChjb250ZXh0LCBleHBvcnRzKSB7XG4gICAgY29udGV4dCB8fCAoY29udGV4dCA9IHJvb3RbXCJPYmplY3RcIl0oKSk7XG4gICAgZXhwb3J0cyB8fCAoZXhwb3J0cyA9IHJvb3RbXCJPYmplY3RcIl0oKSk7XG5cbiAgICAvLyBOYXRpdmUgY29uc3RydWN0b3IgYWxpYXNlcy5cbiAgICB2YXIgTnVtYmVyID0gY29udGV4dFtcIk51bWJlclwiXSB8fCByb290W1wiTnVtYmVyXCJdLFxuICAgICAgICBTdHJpbmcgPSBjb250ZXh0W1wiU3RyaW5nXCJdIHx8IHJvb3RbXCJTdHJpbmdcIl0sXG4gICAgICAgIE9iamVjdCA9IGNvbnRleHRbXCJPYmplY3RcIl0gfHwgcm9vdFtcIk9iamVjdFwiXSxcbiAgICAgICAgRGF0ZSA9IGNvbnRleHRbXCJEYXRlXCJdIHx8IHJvb3RbXCJEYXRlXCJdLFxuICAgICAgICBTeW50YXhFcnJvciA9IGNvbnRleHRbXCJTeW50YXhFcnJvclwiXSB8fCByb290W1wiU3ludGF4RXJyb3JcIl0sXG4gICAgICAgIFR5cGVFcnJvciA9IGNvbnRleHRbXCJUeXBlRXJyb3JcIl0gfHwgcm9vdFtcIlR5cGVFcnJvclwiXSxcbiAgICAgICAgTWF0aCA9IGNvbnRleHRbXCJNYXRoXCJdIHx8IHJvb3RbXCJNYXRoXCJdLFxuICAgICAgICBuYXRpdmVKU09OID0gY29udGV4dFtcIkpTT05cIl0gfHwgcm9vdFtcIkpTT05cIl07XG5cbiAgICAvLyBEZWxlZ2F0ZSB0byB0aGUgbmF0aXZlIGBzdHJpbmdpZnlgIGFuZCBgcGFyc2VgIGltcGxlbWVudGF0aW9ucy5cbiAgICBpZiAodHlwZW9mIG5hdGl2ZUpTT04gPT0gXCJvYmplY3RcIiAmJiBuYXRpdmVKU09OKSB7XG4gICAgICBleHBvcnRzLnN0cmluZ2lmeSA9IG5hdGl2ZUpTT04uc3RyaW5naWZ5O1xuICAgICAgZXhwb3J0cy5wYXJzZSA9IG5hdGl2ZUpTT04ucGFyc2U7XG4gICAgfVxuXG4gICAgLy8gQ29udmVuaWVuY2UgYWxpYXNlcy5cbiAgICB2YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlLFxuICAgICAgICBnZXRDbGFzcyA9IG9iamVjdFByb3RvLnRvU3RyaW5nLFxuICAgICAgICBpc1Byb3BlcnR5LCBmb3JFYWNoLCB1bmRlZjtcblxuICAgIC8vIFRlc3QgdGhlIGBEYXRlI2dldFVUQypgIG1ldGhvZHMuIEJhc2VkIG9uIHdvcmsgYnkgQFlhZmZsZS5cbiAgICB2YXIgaXNFeHRlbmRlZCA9IG5ldyBEYXRlKC0zNTA5ODI3MzM0NTczMjkyKTtcbiAgICB0cnkge1xuICAgICAgLy8gVGhlIGBnZXRVVENGdWxsWWVhcmAsIGBNb250aGAsIGFuZCBgRGF0ZWAgbWV0aG9kcyByZXR1cm4gbm9uc2Vuc2ljYWxcbiAgICAgIC8vIHJlc3VsdHMgZm9yIGNlcnRhaW4gZGF0ZXMgaW4gT3BlcmEgPj0gMTAuNTMuXG4gICAgICBpc0V4dGVuZGVkID0gaXNFeHRlbmRlZC5nZXRVVENGdWxsWWVhcigpID09IC0xMDkyNTIgJiYgaXNFeHRlbmRlZC5nZXRVVENNb250aCgpID09PSAwICYmIGlzRXh0ZW5kZWQuZ2V0VVRDRGF0ZSgpID09PSAxICYmXG4gICAgICAgIC8vIFNhZmFyaSA8IDIuMC4yIHN0b3JlcyB0aGUgaW50ZXJuYWwgbWlsbGlzZWNvbmQgdGltZSB2YWx1ZSBjb3JyZWN0bHksXG4gICAgICAgIC8vIGJ1dCBjbGlwcyB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBkYXRlIG1ldGhvZHMgdG8gdGhlIHJhbmdlIG9mXG4gICAgICAgIC8vIHNpZ25lZCAzMi1iaXQgaW50ZWdlcnMgKFstMiAqKiAzMSwgMiAqKiAzMSAtIDFdKS5cbiAgICAgICAgaXNFeHRlbmRlZC5nZXRVVENIb3VycygpID09IDEwICYmIGlzRXh0ZW5kZWQuZ2V0VVRDTWludXRlcygpID09IDM3ICYmIGlzRXh0ZW5kZWQuZ2V0VVRDU2Vjb25kcygpID09IDYgJiYgaXNFeHRlbmRlZC5nZXRVVENNaWxsaXNlY29uZHMoKSA9PSA3MDg7XG4gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuXG4gICAgLy8gSW50ZXJuYWw6IERldGVybWluZXMgd2hldGhlciB0aGUgbmF0aXZlIGBKU09OLnN0cmluZ2lmeWAgYW5kIGBwYXJzZWBcbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgYXJlIHNwZWMtY29tcGxpYW50LiBCYXNlZCBvbiB3b3JrIGJ5IEtlbiBTbnlkZXIuXG4gICAgZnVuY3Rpb24gaGFzKG5hbWUpIHtcbiAgICAgIGlmIChoYXNbbmFtZV0gIT09IHVuZGVmKSB7XG4gICAgICAgIC8vIFJldHVybiBjYWNoZWQgZmVhdHVyZSB0ZXN0IHJlc3VsdC5cbiAgICAgICAgcmV0dXJuIGhhc1tuYW1lXTtcbiAgICAgIH1cbiAgICAgIHZhciBpc1N1cHBvcnRlZDtcbiAgICAgIGlmIChuYW1lID09IFwiYnVnLXN0cmluZy1jaGFyLWluZGV4XCIpIHtcbiAgICAgICAgLy8gSUUgPD0gNyBkb2Vzbid0IHN1cHBvcnQgYWNjZXNzaW5nIHN0cmluZyBjaGFyYWN0ZXJzIHVzaW5nIHNxdWFyZVxuICAgICAgICAvLyBicmFja2V0IG5vdGF0aW9uLiBJRSA4IG9ubHkgc3VwcG9ydHMgdGhpcyBmb3IgcHJpbWl0aXZlcy5cbiAgICAgICAgaXNTdXBwb3J0ZWQgPSBcImFcIlswXSAhPSBcImFcIjtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBcImpzb25cIikge1xuICAgICAgICAvLyBJbmRpY2F0ZXMgd2hldGhlciBib3RoIGBKU09OLnN0cmluZ2lmeWAgYW5kIGBKU09OLnBhcnNlYCBhcmVcbiAgICAgICAgLy8gc3VwcG9ydGVkLlxuICAgICAgICBpc1N1cHBvcnRlZCA9IGhhcyhcImpzb24tc3RyaW5naWZ5XCIpICYmIGhhcyhcImpzb24tcGFyc2VcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdmFsdWUsIHNlcmlhbGl6ZWQgPSAne1wiYVwiOlsxLHRydWUsZmFsc2UsbnVsbCxcIlxcXFx1MDAwMFxcXFxiXFxcXG5cXFxcZlxcXFxyXFxcXHRcIl19JztcbiAgICAgICAgLy8gVGVzdCBgSlNPTi5zdHJpbmdpZnlgLlxuICAgICAgICBpZiAobmFtZSA9PSBcImpzb24tc3RyaW5naWZ5XCIpIHtcbiAgICAgICAgICB2YXIgc3RyaW5naWZ5ID0gZXhwb3J0cy5zdHJpbmdpZnksIHN0cmluZ2lmeVN1cHBvcnRlZCA9IHR5cGVvZiBzdHJpbmdpZnkgPT0gXCJmdW5jdGlvblwiICYmIGlzRXh0ZW5kZWQ7XG4gICAgICAgICAgaWYgKHN0cmluZ2lmeVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgLy8gQSB0ZXN0IGZ1bmN0aW9uIG9iamVjdCB3aXRoIGEgY3VzdG9tIGB0b0pTT05gIG1ldGhvZC5cbiAgICAgICAgICAgICh2YWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9KS50b0pTT04gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHN0cmluZ2lmeVN1cHBvcnRlZCA9XG4gICAgICAgICAgICAgICAgLy8gRmlyZWZveCAzLjFiMSBhbmQgYjIgc2VyaWFsaXplIHN0cmluZywgbnVtYmVyLCBhbmQgYm9vbGVhblxuICAgICAgICAgICAgICAgIC8vIHByaW1pdGl2ZXMgYXMgb2JqZWN0IGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSgwKSA9PT0gXCIwXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgYjIsIGFuZCBKU09OIDIgc2VyaWFsaXplIHdyYXBwZWQgcHJpbWl0aXZlcyBhcyBvYmplY3RcbiAgICAgICAgICAgICAgICAvLyBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IE51bWJlcigpKSA9PT0gXCIwXCIgJiZcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IFN0cmluZygpKSA9PSAnXCJcIicgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgMiB0aHJvdyBhbiBlcnJvciBpZiB0aGUgdmFsdWUgaXMgYG51bGxgLCBgdW5kZWZpbmVkYCwgb3JcbiAgICAgICAgICAgICAgICAvLyBkb2VzIG5vdCBkZWZpbmUgYSBjYW5vbmljYWwgSlNPTiByZXByZXNlbnRhdGlvbiAodGhpcyBhcHBsaWVzIHRvXG4gICAgICAgICAgICAgICAgLy8gb2JqZWN0cyB3aXRoIGB0b0pTT05gIHByb3BlcnRpZXMgYXMgd2VsbCwgKnVubGVzcyogdGhleSBhcmUgbmVzdGVkXG4gICAgICAgICAgICAgICAgLy8gd2l0aGluIGFuIG9iamVjdCBvciBhcnJheSkuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KGdldENsYXNzKSA9PT0gdW5kZWYgJiZcbiAgICAgICAgICAgICAgICAvLyBJRSA4IHNlcmlhbGl6ZXMgYHVuZGVmaW5lZGAgYXMgYFwidW5kZWZpbmVkXCJgLiBTYWZhcmkgPD0gNS4xLjcgYW5kXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjMgcGFzcyB0aGlzIHRlc3QuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KHVuZGVmKSA9PT0gdW5kZWYgJiZcbiAgICAgICAgICAgICAgICAvLyBTYWZhcmkgPD0gNS4xLjcgYW5kIEZGIDMuMWIzIHRocm93IGBFcnJvcmBzIGFuZCBgVHlwZUVycm9yYHMsXG4gICAgICAgICAgICAgICAgLy8gcmVzcGVjdGl2ZWx5LCBpZiB0aGUgdmFsdWUgaXMgb21pdHRlZCBlbnRpcmVseS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoKSA9PT0gdW5kZWYgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgMiB0aHJvdyBhbiBlcnJvciBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgbm90IGEgbnVtYmVyLFxuICAgICAgICAgICAgICAgIC8vIHN0cmluZywgYXJyYXksIG9iamVjdCwgQm9vbGVhbiwgb3IgYG51bGxgIGxpdGVyYWwuIFRoaXMgYXBwbGllcyB0b1xuICAgICAgICAgICAgICAgIC8vIG9iamVjdHMgd2l0aCBjdXN0b20gYHRvSlNPTmAgbWV0aG9kcyBhcyB3ZWxsLCB1bmxlc3MgdGhleSBhcmUgbmVzdGVkXG4gICAgICAgICAgICAgICAgLy8gaW5zaWRlIG9iamVjdCBvciBhcnJheSBsaXRlcmFscy4gWVVJIDMuMC4wYjEgaWdub3JlcyBjdXN0b20gYHRvSlNPTmBcbiAgICAgICAgICAgICAgICAvLyBtZXRob2RzIGVudGlyZWx5LlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSh2YWx1ZSkgPT09IFwiMVwiICYmXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KFt2YWx1ZV0pID09IFwiWzFdXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBQcm90b3R5cGUgPD0gMS42LjEgc2VyaWFsaXplcyBgW3VuZGVmaW5lZF1gIGFzIGBcIltdXCJgIGluc3RlYWQgb2ZcbiAgICAgICAgICAgICAgICAvLyBgXCJbbnVsbF1cImAuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KFt1bmRlZl0pID09IFwiW251bGxdXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBZVUkgMy4wLjBiMSBmYWlscyB0byBzZXJpYWxpemUgYG51bGxgIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShudWxsKSA9PSBcIm51bGxcIiAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCAyIGhhbHRzIHNlcmlhbGl6YXRpb24gaWYgYW4gYXJyYXkgY29udGFpbnMgYSBmdW5jdGlvbjpcbiAgICAgICAgICAgICAgICAvLyBgWzEsIHRydWUsIGdldENsYXNzLCAxXWAgc2VyaWFsaXplcyBhcyBcIlsxLHRydWUsXSxcIi4gRkYgMy4xYjNcbiAgICAgICAgICAgICAgICAvLyBlbGlkZXMgbm9uLUpTT04gdmFsdWVzIGZyb20gb2JqZWN0cyBhbmQgYXJyYXlzLCB1bmxlc3MgdGhleVxuICAgICAgICAgICAgICAgIC8vIGRlZmluZSBjdXN0b20gYHRvSlNPTmAgbWV0aG9kcy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoW3VuZGVmLCBnZXRDbGFzcywgbnVsbF0pID09IFwiW251bGwsbnVsbCxudWxsXVwiICYmXG4gICAgICAgICAgICAgICAgLy8gU2ltcGxlIHNlcmlhbGl6YXRpb24gdGVzdC4gRkYgMy4xYjEgdXNlcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZXNcbiAgICAgICAgICAgICAgICAvLyB3aGVyZSBjaGFyYWN0ZXIgZXNjYXBlIGNvZGVzIGFyZSBleHBlY3RlZCAoZS5nLiwgYFxcYmAgPT4gYFxcdTAwMDhgKS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoeyBcImFcIjogW3ZhbHVlLCB0cnVlLCBmYWxzZSwgbnVsbCwgXCJcXHgwMFxcYlxcblxcZlxcclxcdFwiXSB9KSA9PSBzZXJpYWxpemVkICYmXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjEgYW5kIGIyIGlnbm9yZSB0aGUgYGZpbHRlcmAgYW5kIGB3aWR0aGAgYXJndW1lbnRzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShudWxsLCB2YWx1ZSkgPT09IFwiMVwiICYmXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KFsxLCAyXSwgbnVsbCwgMSkgPT0gXCJbXFxuIDEsXFxuIDJcXG5dXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBKU09OIDIsIFByb3RvdHlwZSA8PSAxLjcsIGFuZCBvbGRlciBXZWJLaXQgYnVpbGRzIGluY29ycmVjdGx5XG4gICAgICAgICAgICAgICAgLy8gc2VyaWFsaXplIGV4dGVuZGVkIHllYXJzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgRGF0ZSgtOC42NGUxNSkpID09ICdcIi0yNzE4MjEtMDQtMjBUMDA6MDA6MDAuMDAwWlwiJyAmJlxuICAgICAgICAgICAgICAgIC8vIFRoZSBtaWxsaXNlY29uZHMgYXJlIG9wdGlvbmFsIGluIEVTIDUsIGJ1dCByZXF1aXJlZCBpbiA1LjEuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBEYXRlKDguNjRlMTUpKSA9PSAnXCIrMjc1NzYwLTA5LTEzVDAwOjAwOjAwLjAwMFpcIicgJiZcbiAgICAgICAgICAgICAgICAvLyBGaXJlZm94IDw9IDExLjAgaW5jb3JyZWN0bHkgc2VyaWFsaXplcyB5ZWFycyBwcmlvciB0byAwIGFzIG5lZ2F0aXZlXG4gICAgICAgICAgICAgICAgLy8gZm91ci1kaWdpdCB5ZWFycyBpbnN0ZWFkIG9mIHNpeC1kaWdpdCB5ZWFycy4gQ3JlZGl0czogQFlhZmZsZS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IERhdGUoLTYyMTk4NzU1MmU1KSkgPT0gJ1wiLTAwMDAwMS0wMS0wMVQwMDowMDowMC4wMDBaXCInICYmXG4gICAgICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDUuMS41IGFuZCBPcGVyYSA+PSAxMC41MyBpbmNvcnJlY3RseSBzZXJpYWxpemUgbWlsbGlzZWNvbmRcbiAgICAgICAgICAgICAgICAvLyB2YWx1ZXMgbGVzcyB0aGFuIDEwMDAuIENyZWRpdHM6IEBZYWZmbGUuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBEYXRlKC0xKSkgPT0gJ1wiMTk2OS0xMi0zMVQyMzo1OTo1OS45OTlaXCInO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgIHN0cmluZ2lmeVN1cHBvcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpc1N1cHBvcnRlZCA9IHN0cmluZ2lmeVN1cHBvcnRlZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUZXN0IGBKU09OLnBhcnNlYC5cbiAgICAgICAgaWYgKG5hbWUgPT0gXCJqc29uLXBhcnNlXCIpIHtcbiAgICAgICAgICB2YXIgcGFyc2UgPSBleHBvcnRzLnBhcnNlO1xuICAgICAgICAgIGlmICh0eXBlb2YgcGFyc2UgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgYjIgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYSBiYXJlIGxpdGVyYWwgaXMgcHJvdmlkZWQuXG4gICAgICAgICAgICAgIC8vIENvbmZvcm1pbmcgaW1wbGVtZW50YXRpb25zIHNob3VsZCBhbHNvIGNvZXJjZSB0aGUgaW5pdGlhbCBhcmd1bWVudCB0b1xuICAgICAgICAgICAgICAvLyBhIHN0cmluZyBwcmlvciB0byBwYXJzaW5nLlxuICAgICAgICAgICAgICBpZiAocGFyc2UoXCIwXCIpID09PSAwICYmICFwYXJzZShmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBTaW1wbGUgcGFyc2luZyB0ZXN0LlxuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2Uoc2VyaWFsaXplZCk7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlU3VwcG9ydGVkID0gdmFsdWVbXCJhXCJdLmxlbmd0aCA9PSA1ICYmIHZhbHVlW1wiYVwiXVswXSA9PT0gMTtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyaSA8PSA1LjEuMiBhbmQgRkYgMy4xYjEgYWxsb3cgdW5lc2NhcGVkIHRhYnMgaW4gc3RyaW5ncy5cbiAgICAgICAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSAhcGFyc2UoJ1wiXFx0XCInKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge31cbiAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEZGIDQuMCBhbmQgNC4wLjEgYWxsb3cgbGVhZGluZyBgK2Agc2lnbnMgYW5kIGxlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAvLyBkZWNpbWFsIHBvaW50cy4gRkYgNC4wLCA0LjAuMSwgYW5kIElFIDktMTAgYWxzbyBhbGxvd1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGNlcnRhaW4gb2N0YWwgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSBwYXJzZShcIjAxXCIpICE9PSAxO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAocGFyc2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBGRiA0LjAsIDQuMC4xLCBhbmQgUmhpbm8gMS43UjMtUjQgYWxsb3cgdHJhaWxpbmcgZGVjaW1hbFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHBvaW50cy4gVGhlc2UgZW52aXJvbm1lbnRzLCBhbG9uZyB3aXRoIEZGIDMuMWIxIGFuZCAyLFxuICAgICAgICAgICAgICAgICAgICAgIC8vIGFsc28gYWxsb3cgdHJhaWxpbmcgY29tbWFzIGluIEpTT04gb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3VwcG9ydGVkID0gcGFyc2UoXCIxLlwiKSAhPT0gMTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgIHBhcnNlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlzU3VwcG9ydGVkID0gcGFyc2VTdXBwb3J0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNbbmFtZV0gPSAhIWlzU3VwcG9ydGVkO1xuICAgIH1cblxuICAgIGlmICghaGFzKFwianNvblwiKSkge1xuICAgICAgLy8gQ29tbW9uIGBbW0NsYXNzXV1gIG5hbWUgYWxpYXNlcy5cbiAgICAgIHZhciBmdW5jdGlvbkNsYXNzID0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiLFxuICAgICAgICAgIGRhdGVDbGFzcyA9IFwiW29iamVjdCBEYXRlXVwiLFxuICAgICAgICAgIG51bWJlckNsYXNzID0gXCJbb2JqZWN0IE51bWJlcl1cIixcbiAgICAgICAgICBzdHJpbmdDbGFzcyA9IFwiW29iamVjdCBTdHJpbmddXCIsXG4gICAgICAgICAgYXJyYXlDbGFzcyA9IFwiW29iamVjdCBBcnJheV1cIixcbiAgICAgICAgICBib29sZWFuQ2xhc3MgPSBcIltvYmplY3QgQm9vbGVhbl1cIjtcblxuICAgICAgLy8gRGV0ZWN0IGluY29tcGxldGUgc3VwcG9ydCBmb3IgYWNjZXNzaW5nIHN0cmluZyBjaGFyYWN0ZXJzIGJ5IGluZGV4LlxuICAgICAgdmFyIGNoYXJJbmRleEJ1Z2d5ID0gaGFzKFwiYnVnLXN0cmluZy1jaGFyLWluZGV4XCIpO1xuXG4gICAgICAvLyBEZWZpbmUgYWRkaXRpb25hbCB1dGlsaXR5IG1ldGhvZHMgaWYgdGhlIGBEYXRlYCBtZXRob2RzIGFyZSBidWdneS5cbiAgICAgIGlmICghaXNFeHRlbmRlZCkge1xuICAgICAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICAgICAgICAvLyBBIG1hcHBpbmcgYmV0d2VlbiB0aGUgbW9udGhzIG9mIHRoZSB5ZWFyIGFuZCB0aGUgbnVtYmVyIG9mIGRheXMgYmV0d2VlblxuICAgICAgICAvLyBKYW51YXJ5IDFzdCBhbmQgdGhlIGZpcnN0IG9mIHRoZSByZXNwZWN0aXZlIG1vbnRoLlxuICAgICAgICB2YXIgTW9udGhzID0gWzAsIDMxLCA1OSwgOTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0XTtcbiAgICAgICAgLy8gSW50ZXJuYWw6IENhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiBkYXlzIGJldHdlZW4gdGhlIFVuaXggZXBvY2ggYW5kIHRoZVxuICAgICAgICAvLyBmaXJzdCBkYXkgb2YgdGhlIGdpdmVuIG1vbnRoLlxuICAgICAgICB2YXIgZ2V0RGF5ID0gZnVuY3Rpb24gKHllYXIsIG1vbnRoKSB7XG4gICAgICAgICAgcmV0dXJuIE1vbnRoc1ttb250aF0gKyAzNjUgKiAoeWVhciAtIDE5NzApICsgZmxvb3IoKHllYXIgLSAxOTY5ICsgKG1vbnRoID0gKyhtb250aCA+IDEpKSkgLyA0KSAtIGZsb29yKCh5ZWFyIC0gMTkwMSArIG1vbnRoKSAvIDEwMCkgKyBmbG9vcigoeWVhciAtIDE2MDEgKyBtb250aCkgLyA0MDApO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBJbnRlcm5hbDogRGV0ZXJtaW5lcyBpZiBhIHByb3BlcnR5IGlzIGEgZGlyZWN0IHByb3BlcnR5IG9mIHRoZSBnaXZlblxuICAgICAgLy8gb2JqZWN0LiBEZWxlZ2F0ZXMgdG8gdGhlIG5hdGl2ZSBgT2JqZWN0I2hhc093blByb3BlcnR5YCBtZXRob2QuXG4gICAgICBpZiAoIShpc1Byb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHkpKSB7XG4gICAgICAgIGlzUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICB2YXIgbWVtYmVycyA9IHt9LCBjb25zdHJ1Y3RvcjtcbiAgICAgICAgICBpZiAoKG1lbWJlcnMuX19wcm90b19fID0gbnVsbCwgbWVtYmVycy5fX3Byb3RvX18gPSB7XG4gICAgICAgICAgICAvLyBUaGUgKnByb3RvKiBwcm9wZXJ0eSBjYW5ub3QgYmUgc2V0IG11bHRpcGxlIHRpbWVzIGluIHJlY2VudFxuICAgICAgICAgICAgLy8gdmVyc2lvbnMgb2YgRmlyZWZveCBhbmQgU2VhTW9ua2V5LlxuICAgICAgICAgICAgXCJ0b1N0cmluZ1wiOiAxXG4gICAgICAgICAgfSwgbWVtYmVycykudG9TdHJpbmcgIT0gZ2V0Q2xhc3MpIHtcbiAgICAgICAgICAgIC8vIFNhZmFyaSA8PSAyLjAuMyBkb2Vzbid0IGltcGxlbWVudCBgT2JqZWN0I2hhc093blByb3BlcnR5YCwgYnV0XG4gICAgICAgICAgICAvLyBzdXBwb3J0cyB0aGUgbXV0YWJsZSAqcHJvdG8qIHByb3BlcnR5LlxuICAgICAgICAgICAgaXNQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAvLyBDYXB0dXJlIGFuZCBicmVhayB0aGUgb2JqZWN0J3MgcHJvdG90eXBlIGNoYWluIChzZWUgc2VjdGlvbiA4LjYuMlxuICAgICAgICAgICAgICAvLyBvZiB0aGUgRVMgNS4xIHNwZWMpLiBUaGUgcGFyZW50aGVzaXplZCBleHByZXNzaW9uIHByZXZlbnRzIGFuXG4gICAgICAgICAgICAgIC8vIHVuc2FmZSB0cmFuc2Zvcm1hdGlvbiBieSB0aGUgQ2xvc3VyZSBDb21waWxlci5cbiAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsID0gdGhpcy5fX3Byb3RvX18sIHJlc3VsdCA9IHByb3BlcnR5IGluICh0aGlzLl9fcHJvdG9fXyA9IG51bGwsIHRoaXMpO1xuICAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBwcm90b3R5cGUgY2hhaW4uXG4gICAgICAgICAgICAgIHRoaXMuX19wcm90b19fID0gb3JpZ2luYWw7XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDYXB0dXJlIGEgcmVmZXJlbmNlIHRvIHRoZSB0b3AtbGV2ZWwgYE9iamVjdGAgY29uc3RydWN0b3IuXG4gICAgICAgICAgICBjb25zdHJ1Y3RvciA9IG1lbWJlcnMuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIGBjb25zdHJ1Y3RvcmAgcHJvcGVydHkgdG8gc2ltdWxhdGUgYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAgaW5cbiAgICAgICAgICAgIC8vIG90aGVyIGVudmlyb25tZW50cy5cbiAgICAgICAgICAgIGlzUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudCA9ICh0aGlzLmNvbnN0cnVjdG9yIHx8IGNvbnN0cnVjdG9yKS5wcm90b3R5cGU7XG4gICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eSBpbiB0aGlzICYmICEocHJvcGVydHkgaW4gcGFyZW50ICYmIHRoaXNbcHJvcGVydHldID09PSBwYXJlbnRbcHJvcGVydHldKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIG1lbWJlcnMgPSBudWxsO1xuICAgICAgICAgIHJldHVybiBpc1Byb3BlcnR5LmNhbGwodGhpcywgcHJvcGVydHkpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBJbnRlcm5hbDogTm9ybWFsaXplcyB0aGUgYGZvci4uLmluYCBpdGVyYXRpb24gYWxnb3JpdGhtIGFjcm9zc1xuICAgICAgLy8gZW52aXJvbm1lbnRzLiBFYWNoIGVudW1lcmF0ZWQga2V5IGlzIHlpZWxkZWQgdG8gYSBgY2FsbGJhY2tgIGZ1bmN0aW9uLlxuICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBzaXplID0gMCwgUHJvcGVydGllcywgbWVtYmVycywgcHJvcGVydHk7XG5cbiAgICAgICAgLy8gVGVzdHMgZm9yIGJ1Z3MgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQncyBgZm9yLi4uaW5gIGFsZ29yaXRobS4gVGhlXG4gICAgICAgIC8vIGB2YWx1ZU9mYCBwcm9wZXJ0eSBpbmhlcml0cyB0aGUgbm9uLWVudW1lcmFibGUgZmxhZyBmcm9tXG4gICAgICAgIC8vIGBPYmplY3QucHJvdG90eXBlYCBpbiBvbGRlciB2ZXJzaW9ucyBvZiBJRSwgTmV0c2NhcGUsIGFuZCBNb3ppbGxhLlxuICAgICAgICAoUHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlT2YgPSAwO1xuICAgICAgICB9KS5wcm90b3R5cGUudmFsdWVPZiA9IDA7XG5cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBgUHJvcGVydGllc2AgY2xhc3MuXG4gICAgICAgIG1lbWJlcnMgPSBuZXcgUHJvcGVydGllcygpO1xuICAgICAgICBmb3IgKHByb3BlcnR5IGluIG1lbWJlcnMpIHtcbiAgICAgICAgICAvLyBJZ25vcmUgYWxsIHByb3BlcnRpZXMgaW5oZXJpdGVkIGZyb20gYE9iamVjdC5wcm90b3R5cGVgLlxuICAgICAgICAgIGlmIChpc1Byb3BlcnR5LmNhbGwobWVtYmVycywgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICBzaXplKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFByb3BlcnRpZXMgPSBtZW1iZXJzID0gbnVsbDtcblxuICAgICAgICAvLyBOb3JtYWxpemUgdGhlIGl0ZXJhdGlvbiBhbGdvcml0aG0uXG4gICAgICAgIGlmICghc2l6ZSkge1xuICAgICAgICAgIC8vIEEgbGlzdCBvZiBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGluaGVyaXRlZCBmcm9tIGBPYmplY3QucHJvdG90eXBlYC5cbiAgICAgICAgICBtZW1iZXJzID0gW1widmFsdWVPZlwiLCBcInRvU3RyaW5nXCIsIFwidG9Mb2NhbGVTdHJpbmdcIiwgXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLCBcImlzUHJvdG90eXBlT2ZcIiwgXCJoYXNPd25Qcm9wZXJ0eVwiLCBcImNvbnN0cnVjdG9yXCJdO1xuICAgICAgICAgIC8vIElFIDw9IDgsIE1vemlsbGEgMS4wLCBhbmQgTmV0c2NhcGUgNi4yIGlnbm9yZSBzaGFkb3dlZCBub24tZW51bWVyYWJsZVxuICAgICAgICAgIC8vIHByb3BlcnRpZXMuXG4gICAgICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IGdldENsYXNzLmNhbGwob2JqZWN0KSA9PSBmdW5jdGlvbkNsYXNzLCBwcm9wZXJ0eSwgbGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGhhc1Byb3BlcnR5ID0gIWlzRnVuY3Rpb24gJiYgdHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciAhPSBcImZ1bmN0aW9uXCIgJiYgb2JqZWN0VHlwZXNbdHlwZW9mIG9iamVjdC5oYXNPd25Qcm9wZXJ0eV0gJiYgb2JqZWN0Lmhhc093blByb3BlcnR5IHx8IGlzUHJvcGVydHk7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAvLyBHZWNrbyA8PSAxLjAgZW51bWVyYXRlcyB0aGUgYHByb3RvdHlwZWAgcHJvcGVydHkgb2YgZnVuY3Rpb25zIHVuZGVyXG4gICAgICAgICAgICAgIC8vIGNlcnRhaW4gY29uZGl0aW9uczsgSUUgZG9lcyBub3QuXG4gICAgICAgICAgICAgIGlmICghKGlzRnVuY3Rpb24gJiYgcHJvcGVydHkgPT0gXCJwcm90b3R5cGVcIikgJiYgaGFzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTWFudWFsbHkgaW52b2tlIHRoZSBjYWxsYmFjayBmb3IgZWFjaCBub24tZW51bWVyYWJsZSBwcm9wZXJ0eS5cbiAgICAgICAgICAgIGZvciAobGVuZ3RoID0gbWVtYmVycy5sZW5ndGg7IHByb3BlcnR5ID0gbWVtYmVyc1stLWxlbmd0aF07IGhhc1Byb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkgJiYgY2FsbGJhY2socHJvcGVydHkpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHNpemUgPT0gMikge1xuICAgICAgICAgIC8vIFNhZmFyaSA8PSAyLjAuNCBlbnVtZXJhdGVzIHNoYWRvd2VkIHByb3BlcnRpZXMgdHdpY2UuXG4gICAgICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBzZXQgb2YgaXRlcmF0ZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgIHZhciBtZW1iZXJzID0ge30sIGlzRnVuY3Rpb24gPSBnZXRDbGFzcy5jYWxsKG9iamVjdCkgPT0gZnVuY3Rpb25DbGFzcywgcHJvcGVydHk7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAvLyBTdG9yZSBlYWNoIHByb3BlcnR5IG5hbWUgdG8gcHJldmVudCBkb3VibGUgZW51bWVyYXRpb24uIFRoZVxuICAgICAgICAgICAgICAvLyBgcHJvdG90eXBlYCBwcm9wZXJ0eSBvZiBmdW5jdGlvbnMgaXMgbm90IGVudW1lcmF0ZWQgZHVlIHRvIGNyb3NzLVxuICAgICAgICAgICAgICAvLyBlbnZpcm9ubWVudCBpbmNvbnNpc3RlbmNpZXMuXG4gICAgICAgICAgICAgIGlmICghKGlzRnVuY3Rpb24gJiYgcHJvcGVydHkgPT0gXCJwcm90b3R5cGVcIikgJiYgIWlzUHJvcGVydHkuY2FsbChtZW1iZXJzLCBwcm9wZXJ0eSkgJiYgKG1lbWJlcnNbcHJvcGVydHldID0gMSkgJiYgaXNQcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2socHJvcGVydHkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBObyBidWdzIGRldGVjdGVkOyB1c2UgdGhlIHN0YW5kYXJkIGBmb3IuLi5pbmAgYWxnb3JpdGhtLlxuICAgICAgICAgIGZvckVhY2ggPSBmdW5jdGlvbiAob2JqZWN0LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIGlzRnVuY3Rpb24gPSBnZXRDbGFzcy5jYWxsKG9iamVjdCkgPT0gZnVuY3Rpb25DbGFzcywgcHJvcGVydHksIGlzQ29uc3RydWN0b3I7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICBpZiAoIShpc0Z1bmN0aW9uICYmIHByb3BlcnR5ID09IFwicHJvdG90eXBlXCIpICYmIGlzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSAmJiAhKGlzQ29uc3RydWN0b3IgPSBwcm9wZXJ0eSA9PT0gXCJjb25zdHJ1Y3RvclwiKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTWFudWFsbHkgaW52b2tlIHRoZSBjYWxsYmFjayBmb3IgdGhlIGBjb25zdHJ1Y3RvcmAgcHJvcGVydHkgZHVlIHRvXG4gICAgICAgICAgICAvLyBjcm9zcy1lbnZpcm9ubWVudCBpbmNvbnNpc3RlbmNpZXMuXG4gICAgICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvciB8fCBpc1Byb3BlcnR5LmNhbGwob2JqZWN0LCAocHJvcGVydHkgPSBcImNvbnN0cnVjdG9yXCIpKSkge1xuICAgICAgICAgICAgICBjYWxsYmFjayhwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9yRWFjaChvYmplY3QsIGNhbGxiYWNrKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFB1YmxpYzogU2VyaWFsaXplcyBhIEphdmFTY3JpcHQgYHZhbHVlYCBhcyBhIEpTT04gc3RyaW5nLiBUaGUgb3B0aW9uYWxcbiAgICAgIC8vIGBmaWx0ZXJgIGFyZ3VtZW50IG1heSBzcGVjaWZ5IGVpdGhlciBhIGZ1bmN0aW9uIHRoYXQgYWx0ZXJzIGhvdyBvYmplY3QgYW5kXG4gICAgICAvLyBhcnJheSBtZW1iZXJzIGFyZSBzZXJpYWxpemVkLCBvciBhbiBhcnJheSBvZiBzdHJpbmdzIGFuZCBudW1iZXJzIHRoYXRcbiAgICAgIC8vIGluZGljYXRlcyB3aGljaCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBzZXJpYWxpemVkLiBUaGUgb3B0aW9uYWwgYHdpZHRoYFxuICAgICAgLy8gYXJndW1lbnQgbWF5IGJlIGVpdGhlciBhIHN0cmluZyBvciBudW1iZXIgdGhhdCBzcGVjaWZpZXMgdGhlIGluZGVudGF0aW9uXG4gICAgICAvLyBsZXZlbCBvZiB0aGUgb3V0cHV0LlxuICAgICAgaWYgKCFoYXMoXCJqc29uLXN0cmluZ2lmeVwiKSkge1xuICAgICAgICAvLyBJbnRlcm5hbDogQSBtYXAgb2YgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCB0aGVpciBlc2NhcGVkIGVxdWl2YWxlbnRzLlxuICAgICAgICB2YXIgRXNjYXBlcyA9IHtcbiAgICAgICAgICA5MjogXCJcXFxcXFxcXFwiLFxuICAgICAgICAgIDM0OiAnXFxcXFwiJyxcbiAgICAgICAgICA4OiBcIlxcXFxiXCIsXG4gICAgICAgICAgMTI6IFwiXFxcXGZcIixcbiAgICAgICAgICAxMDogXCJcXFxcblwiLFxuICAgICAgICAgIDEzOiBcIlxcXFxyXCIsXG4gICAgICAgICAgOTogXCJcXFxcdFwiXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IENvbnZlcnRzIGB2YWx1ZWAgaW50byBhIHplcm8tcGFkZGVkIHN0cmluZyBzdWNoIHRoYXQgaXRzXG4gICAgICAgIC8vIGxlbmd0aCBpcyBhdCBsZWFzdCBlcXVhbCB0byBgd2lkdGhgLiBUaGUgYHdpZHRoYCBtdXN0IGJlIDw9IDYuXG4gICAgICAgIHZhciBsZWFkaW5nWmVyb2VzID0gXCIwMDAwMDBcIjtcbiAgICAgICAgdmFyIHRvUGFkZGVkU3RyaW5nID0gZnVuY3Rpb24gKHdpZHRoLCB2YWx1ZSkge1xuICAgICAgICAgIC8vIFRoZSBgfHwgMGAgZXhwcmVzc2lvbiBpcyBuZWNlc3NhcnkgdG8gd29yayBhcm91bmQgYSBidWcgaW5cbiAgICAgICAgICAvLyBPcGVyYSA8PSA3LjU0dTIgd2hlcmUgYDAgPT0gLTBgLCBidXQgYFN0cmluZygtMCkgIT09IFwiMFwiYC5cbiAgICAgICAgICByZXR1cm4gKGxlYWRpbmdaZXJvZXMgKyAodmFsdWUgfHwgMCkpLnNsaWNlKC13aWR0aCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IERvdWJsZS1xdW90ZXMgYSBzdHJpbmcgYHZhbHVlYCwgcmVwbGFjaW5nIGFsbCBBU0NJSSBjb250cm9sXG4gICAgICAgIC8vIGNoYXJhY3RlcnMgKGNoYXJhY3RlcnMgd2l0aCBjb2RlIHVuaXQgdmFsdWVzIGJldHdlZW4gMCBhbmQgMzEpIHdpdGhcbiAgICAgICAgLy8gdGhlaXIgZXNjYXBlZCBlcXVpdmFsZW50cy4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGVcbiAgICAgICAgLy8gYFF1b3RlKHZhbHVlKWAgb3BlcmF0aW9uIGRlZmluZWQgaW4gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMy5cbiAgICAgICAgdmFyIHVuaWNvZGVQcmVmaXggPSBcIlxcXFx1MDBcIjtcbiAgICAgICAgdmFyIHF1b3RlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9ICdcIicsIGluZGV4ID0gMCwgbGVuZ3RoID0gdmFsdWUubGVuZ3RoLCB1c2VDaGFySW5kZXggPSAhY2hhckluZGV4QnVnZ3kgfHwgbGVuZ3RoID4gMTA7XG4gICAgICAgICAgdmFyIHN5bWJvbHMgPSB1c2VDaGFySW5kZXggJiYgKGNoYXJJbmRleEJ1Z2d5ID8gdmFsdWUuc3BsaXQoXCJcIikgOiB2YWx1ZSk7XG4gICAgICAgICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICB2YXIgY2hhckNvZGUgPSB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgaXMgYSBjb250cm9sIGNoYXJhY3RlciwgYXBwZW5kIGl0cyBVbmljb2RlIG9yXG4gICAgICAgICAgICAvLyBzaG9ydGhhbmQgZXNjYXBlIHNlcXVlbmNlOyBvdGhlcndpc2UsIGFwcGVuZCB0aGUgY2hhcmFjdGVyIGFzLWlzLlxuICAgICAgICAgICAgc3dpdGNoIChjaGFyQ29kZSkge1xuICAgICAgICAgICAgICBjYXNlIDg6IGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMjogY2FzZSAxMzogY2FzZSAzNDogY2FzZSA5MjpcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gRXNjYXBlc1tjaGFyQ29kZV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB1bmljb2RlUHJlZml4ICsgdG9QYWRkZWRTdHJpbmcoMiwgY2hhckNvZGUudG9TdHJpbmcoMTYpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gdXNlQ2hhckluZGV4ID8gc3ltYm9sc1tpbmRleF0gOiB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ1wiJztcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmVjdXJzaXZlbHkgc2VyaWFsaXplcyBhbiBvYmplY3QuIEltcGxlbWVudHMgdGhlXG4gICAgICAgIC8vIGBTdHIoa2V5LCBob2xkZXIpYCwgYEpPKHZhbHVlKWAsIGFuZCBgSkEodmFsdWUpYCBvcGVyYXRpb25zLlxuICAgICAgICB2YXIgc2VyaWFsaXplID0gZnVuY3Rpb24gKHByb3BlcnR5LCBvYmplY3QsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCB3aGl0ZXNwYWNlLCBpbmRlbnRhdGlvbiwgc3RhY2spIHtcbiAgICAgICAgICB2YXIgdmFsdWUsIGNsYXNzTmFtZSwgeWVhciwgbW9udGgsIGRhdGUsIHRpbWUsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIHJlc3VsdHMsIGVsZW1lbnQsIGluZGV4LCBsZW5ndGgsIHByZWZpeCwgcmVzdWx0O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBOZWNlc3NhcnkgZm9yIGhvc3Qgb2JqZWN0IHN1cHBvcnQuXG4gICAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lID0gZ2V0Q2xhc3MuY2FsbCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IGRhdGVDbGFzcyAmJiAhaXNQcm9wZXJ0eS5jYWxsKHZhbHVlLCBcInRvSlNPTlwiKSkge1xuICAgICAgICAgICAgICBpZiAodmFsdWUgPiAtMSAvIDAgJiYgdmFsdWUgPCAxIC8gMCkge1xuICAgICAgICAgICAgICAgIC8vIERhdGVzIGFyZSBzZXJpYWxpemVkIGFjY29yZGluZyB0byB0aGUgYERhdGUjdG9KU09OYCBtZXRob2RcbiAgICAgICAgICAgICAgICAvLyBzcGVjaWZpZWQgaW4gRVMgNS4xIHNlY3Rpb24gMTUuOS41LjQ0LiBTZWUgc2VjdGlvbiAxNS45LjEuMTVcbiAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIElTTyA4NjAxIGRhdGUgdGltZSBzdHJpbmcgZm9ybWF0LlxuICAgICAgICAgICAgICAgIGlmIChnZXREYXkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIE1hbnVhbGx5IGNvbXB1dGUgdGhlIHllYXIsIG1vbnRoLCBkYXRlLCBob3VycywgbWludXRlcyxcbiAgICAgICAgICAgICAgICAgIC8vIHNlY29uZHMsIGFuZCBtaWxsaXNlY29uZHMgaWYgdGhlIGBnZXRVVEMqYCBtZXRob2RzIGFyZVxuICAgICAgICAgICAgICAgICAgLy8gYnVnZ3kuIEFkYXB0ZWQgZnJvbSBAWWFmZmxlJ3MgYGRhdGUtc2hpbWAgcHJvamVjdC5cbiAgICAgICAgICAgICAgICAgIGRhdGUgPSBmbG9vcih2YWx1ZSAvIDg2NGU1KTtcbiAgICAgICAgICAgICAgICAgIGZvciAoeWVhciA9IGZsb29yKGRhdGUgLyAzNjUuMjQyNSkgKyAxOTcwIC0gMTsgZ2V0RGF5KHllYXIgKyAxLCAwKSA8PSBkYXRlOyB5ZWFyKyspO1xuICAgICAgICAgICAgICAgICAgZm9yIChtb250aCA9IGZsb29yKChkYXRlIC0gZ2V0RGF5KHllYXIsIDApKSAvIDMwLjQyKTsgZ2V0RGF5KHllYXIsIG1vbnRoICsgMSkgPD0gZGF0ZTsgbW9udGgrKyk7XG4gICAgICAgICAgICAgICAgICBkYXRlID0gMSArIGRhdGUgLSBnZXREYXkoeWVhciwgbW9udGgpO1xuICAgICAgICAgICAgICAgICAgLy8gVGhlIGB0aW1lYCB2YWx1ZSBzcGVjaWZpZXMgdGhlIHRpbWUgd2l0aGluIHRoZSBkYXkgKHNlZSBFU1xuICAgICAgICAgICAgICAgICAgLy8gNS4xIHNlY3Rpb24gMTUuOS4xLjIpLiBUaGUgZm9ybXVsYSBgKEEgJSBCICsgQikgJSBCYCBpcyB1c2VkXG4gICAgICAgICAgICAgICAgICAvLyB0byBjb21wdXRlIGBBIG1vZHVsbyBCYCwgYXMgdGhlIGAlYCBvcGVyYXRvciBkb2VzIG5vdFxuICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZCB0byB0aGUgYG1vZHVsb2Agb3BlcmF0aW9uIGZvciBuZWdhdGl2ZSBudW1iZXJzLlxuICAgICAgICAgICAgICAgICAgdGltZSA9ICh2YWx1ZSAlIDg2NGU1ICsgODY0ZTUpICUgODY0ZTU7XG4gICAgICAgICAgICAgICAgICAvLyBUaGUgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBtaWxsaXNlY29uZHMgYXJlIG9idGFpbmVkIGJ5XG4gICAgICAgICAgICAgICAgICAvLyBkZWNvbXBvc2luZyB0aGUgdGltZSB3aXRoaW4gdGhlIGRheS4gU2VlIHNlY3Rpb24gMTUuOS4xLjEwLlxuICAgICAgICAgICAgICAgICAgaG91cnMgPSBmbG9vcih0aW1lIC8gMzZlNSkgJSAyNDtcbiAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBmbG9vcih0aW1lIC8gNmU0KSAlIDYwO1xuICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IGZsb29yKHRpbWUgLyAxZTMpICUgNjA7XG4gICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aW1lICUgMWUzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB5ZWFyID0gdmFsdWUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICAgIG1vbnRoID0gdmFsdWUuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICAgICAgICAgIGRhdGUgPSB2YWx1ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgICAgICAgICAgICBob3VycyA9IHZhbHVlLmdldFVUQ0hvdXJzKCk7XG4gICAgICAgICAgICAgICAgICBtaW51dGVzID0gdmFsdWUuZ2V0VVRDTWludXRlcygpO1xuICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IHZhbHVlLmdldFVUQ1NlY29uZHMoKTtcbiAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IHZhbHVlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTZXJpYWxpemUgZXh0ZW5kZWQgeWVhcnMgY29ycmVjdGx5LlxuICAgICAgICAgICAgICAgIHZhbHVlID0gKHllYXIgPD0gMCB8fCB5ZWFyID49IDFlNCA/ICh5ZWFyIDwgMCA/IFwiLVwiIDogXCIrXCIpICsgdG9QYWRkZWRTdHJpbmcoNiwgeWVhciA8IDAgPyAteWVhciA6IHllYXIpIDogdG9QYWRkZWRTdHJpbmcoNCwgeWVhcikpICtcbiAgICAgICAgICAgICAgICAgIFwiLVwiICsgdG9QYWRkZWRTdHJpbmcoMiwgbW9udGggKyAxKSArIFwiLVwiICsgdG9QYWRkZWRTdHJpbmcoMiwgZGF0ZSkgK1xuICAgICAgICAgICAgICAgICAgLy8gTW9udGhzLCBkYXRlcywgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzIHNob3VsZCBoYXZlIHR3b1xuICAgICAgICAgICAgICAgICAgLy8gZGlnaXRzOyBtaWxsaXNlY29uZHMgc2hvdWxkIGhhdmUgdGhyZWUuXG4gICAgICAgICAgICAgICAgICBcIlRcIiArIHRvUGFkZGVkU3RyaW5nKDIsIGhvdXJzKSArIFwiOlwiICsgdG9QYWRkZWRTdHJpbmcoMiwgbWludXRlcykgKyBcIjpcIiArIHRvUGFkZGVkU3RyaW5nKDIsIHNlY29uZHMpICtcbiAgICAgICAgICAgICAgICAgIC8vIE1pbGxpc2Vjb25kcyBhcmUgb3B0aW9uYWwgaW4gRVMgNS4wLCBidXQgcmVxdWlyZWQgaW4gNS4xLlxuICAgICAgICAgICAgICAgICAgXCIuXCIgKyB0b1BhZGRlZFN0cmluZygzLCBtaWxsaXNlY29uZHMpICsgXCJaXCI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZS50b0pTT04gPT0gXCJmdW5jdGlvblwiICYmICgoY2xhc3NOYW1lICE9IG51bWJlckNsYXNzICYmIGNsYXNzTmFtZSAhPSBzdHJpbmdDbGFzcyAmJiBjbGFzc05hbWUgIT0gYXJyYXlDbGFzcykgfHwgaXNQcm9wZXJ0eS5jYWxsKHZhbHVlLCBcInRvSlNPTlwiKSkpIHtcbiAgICAgICAgICAgICAgLy8gUHJvdG90eXBlIDw9IDEuNi4xIGFkZHMgbm9uLXN0YW5kYXJkIGB0b0pTT05gIG1ldGhvZHMgdG8gdGhlXG4gICAgICAgICAgICAgIC8vIGBOdW1iZXJgLCBgU3RyaW5nYCwgYERhdGVgLCBhbmQgYEFycmF5YCBwcm90b3R5cGVzLiBKU09OIDNcbiAgICAgICAgICAgICAgLy8gaWdub3JlcyBhbGwgYHRvSlNPTmAgbWV0aG9kcyBvbiB0aGVzZSBvYmplY3RzIHVubGVzcyB0aGV5IGFyZVxuICAgICAgICAgICAgICAvLyBkZWZpbmVkIGRpcmVjdGx5IG9uIGFuIGluc3RhbmNlLlxuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gSWYgYSByZXBsYWNlbWVudCBmdW5jdGlvbiB3YXMgcHJvdmlkZWQsIGNhbGwgaXQgdG8gb2J0YWluIHRoZSB2YWx1ZVxuICAgICAgICAgICAgLy8gZm9yIHNlcmlhbGl6YXRpb24uXG4gICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrLmNhbGwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2xhc3NOYW1lID0gZ2V0Q2xhc3MuY2FsbCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBib29sZWFuQ2xhc3MpIHtcbiAgICAgICAgICAgIC8vIEJvb2xlYW5zIGFyZSByZXByZXNlbnRlZCBsaXRlcmFsbHkuXG4gICAgICAgICAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IG51bWJlckNsYXNzKSB7XG4gICAgICAgICAgICAvLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5pdGUuIGBJbmZpbml0eWAgYW5kIGBOYU5gIGFyZSBzZXJpYWxpemVkIGFzXG4gICAgICAgICAgICAvLyBgXCJudWxsXCJgLlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID4gLTEgLyAwICYmIHZhbHVlIDwgMSAvIDAgPyBcIlwiICsgdmFsdWUgOiBcIm51bGxcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSA9PSBzdHJpbmdDbGFzcykge1xuICAgICAgICAgICAgLy8gU3RyaW5ncyBhcmUgZG91YmxlLXF1b3RlZCBhbmQgZXNjYXBlZC5cbiAgICAgICAgICAgIHJldHVybiBxdW90ZShcIlwiICsgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXJpYWxpemUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGlzIGlzIGEgbGluZWFyIHNlYXJjaDsgcGVyZm9ybWFuY2VcbiAgICAgICAgICAgIC8vIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiB1bmlxdWUgbmVzdGVkIG9iamVjdHMuXG4gICAgICAgICAgICBmb3IgKGxlbmd0aCA9IHN0YWNrLmxlbmd0aDsgbGVuZ3RoLS07KSB7XG4gICAgICAgICAgICAgIGlmIChzdGFja1tsZW5ndGhdID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIEN5Y2xpYyBzdHJ1Y3R1cmVzIGNhbm5vdCBiZSBzZXJpYWxpemVkIGJ5IGBKU09OLnN0cmluZ2lmeWAuXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAgICAgICAgIHN0YWNrLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgY3VycmVudCBpbmRlbnRhdGlvbiBsZXZlbCBhbmQgaW5kZW50IG9uZSBhZGRpdGlvbmFsIGxldmVsLlxuICAgICAgICAgICAgcHJlZml4ID0gaW5kZW50YXRpb247XG4gICAgICAgICAgICBpbmRlbnRhdGlvbiArPSB3aGl0ZXNwYWNlO1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBhcnJheUNsYXNzKSB7XG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNlcmlhbGl6ZSBhcnJheSBlbGVtZW50cy5cbiAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gc2VyaWFsaXplKGluZGV4LCB2YWx1ZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIGluZGVudGF0aW9uLCBzdGFjayk7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVsZW1lbnQgPT09IHVuZGVmID8gXCJudWxsXCIgOiBlbGVtZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRzLmxlbmd0aCA/ICh3aGl0ZXNwYWNlID8gXCJbXFxuXCIgKyBpbmRlbnRhdGlvbiArIHJlc3VsdHMuam9pbihcIixcXG5cIiArIGluZGVudGF0aW9uKSArIFwiXFxuXCIgKyBwcmVmaXggKyBcIl1cIiA6IChcIltcIiArIHJlc3VsdHMuam9pbihcIixcIikgKyBcIl1cIikpIDogXCJbXVwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgc2VyaWFsaXplIG9iamVjdCBtZW1iZXJzLiBNZW1iZXJzIGFyZSBzZWxlY3RlZCBmcm9tXG4gICAgICAgICAgICAgIC8vIGVpdGhlciBhIHVzZXItc3BlY2lmaWVkIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMsIG9yIHRoZSBvYmplY3RcbiAgICAgICAgICAgICAgLy8gaXRzZWxmLlxuICAgICAgICAgICAgICBmb3JFYWNoKHByb3BlcnRpZXMgfHwgdmFsdWUsIGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gc2VyaWFsaXplKHByb3BlcnR5LCB2YWx1ZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIGluZGVudGF0aW9uLCBzdGFjayk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT09IHVuZGVmKSB7XG4gICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMzogXCJJZiBgZ2FwYCB7d2hpdGVzcGFjZX1cbiAgICAgICAgICAgICAgICAgIC8vIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgYG1lbWJlcmAge3F1b3RlKHByb3BlcnR5KSArIFwiOlwifVxuICAgICAgICAgICAgICAgICAgLy8gYmUgdGhlIGNvbmNhdGVuYXRpb24gb2YgYG1lbWJlcmAgYW5kIHRoZSBgc3BhY2VgIGNoYXJhY3Rlci5cIlxuICAgICAgICAgICAgICAgICAgLy8gVGhlIFwiYHNwYWNlYCBjaGFyYWN0ZXJcIiByZWZlcnMgdG8gdGhlIGxpdGVyYWwgc3BhY2VcbiAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3Rlciwgbm90IHRoZSBgc3BhY2VgIHt3aWR0aH0gYXJndW1lbnQgcHJvdmlkZWQgdG9cbiAgICAgICAgICAgICAgICAgIC8vIGBKU09OLnN0cmluZ2lmeWAuXG4gICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocXVvdGUocHJvcGVydHkpICsgXCI6XCIgKyAod2hpdGVzcGFjZSA/IFwiIFwiIDogXCJcIikgKyBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRzLmxlbmd0aCA/ICh3aGl0ZXNwYWNlID8gXCJ7XFxuXCIgKyBpbmRlbnRhdGlvbiArIHJlc3VsdHMuam9pbihcIixcXG5cIiArIGluZGVudGF0aW9uKSArIFwiXFxuXCIgKyBwcmVmaXggKyBcIn1cIiA6IChcIntcIiArIHJlc3VsdHMuam9pbihcIixcIikgKyBcIn1cIikpIDogXCJ7fVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGUgdHJhdmVyc2VkIG9iamVjdCBzdGFjay5cbiAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUHVibGljOiBgSlNPTi5zdHJpbmdpZnlgLiBTZWUgRVMgNS4xIHNlY3Rpb24gMTUuMTIuMy5cbiAgICAgICAgZXhwb3J0cy5zdHJpbmdpZnkgPSBmdW5jdGlvbiAoc291cmNlLCBmaWx0ZXIsIHdpZHRoKSB7XG4gICAgICAgICAgdmFyIHdoaXRlc3BhY2UsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCBjbGFzc05hbWU7XG4gICAgICAgICAgaWYgKG9iamVjdFR5cGVzW3R5cGVvZiBmaWx0ZXJdICYmIGZpbHRlcikge1xuICAgICAgICAgICAgaWYgKChjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKGZpbHRlcikpID09IGZ1bmN0aW9uQ2xhc3MpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmaWx0ZXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSA9PSBhcnJheUNsYXNzKSB7XG4gICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVzIGFycmF5IGludG8gYSBtYWtlc2hpZnQgc2V0LlxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0gZmlsdGVyLmxlbmd0aCwgdmFsdWU7IGluZGV4IDwgbGVuZ3RoOyB2YWx1ZSA9IGZpbHRlcltpbmRleCsrXSwgKChjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKHZhbHVlKSksIGNsYXNzTmFtZSA9PSBzdHJpbmdDbGFzcyB8fCBjbGFzc05hbWUgPT0gbnVtYmVyQ2xhc3MpICYmIChwcm9wZXJ0aWVzW3ZhbHVlXSA9IDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHdpZHRoKSB7XG4gICAgICAgICAgICBpZiAoKGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwod2lkdGgpKSA9PSBudW1iZXJDbGFzcykge1xuICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBgd2lkdGhgIHRvIGFuIGludGVnZXIgYW5kIGNyZWF0ZSBhIHN0cmluZyBjb250YWluaW5nXG4gICAgICAgICAgICAgIC8vIGB3aWR0aGAgbnVtYmVyIG9mIHNwYWNlIGNoYXJhY3RlcnMuXG4gICAgICAgICAgICAgIGlmICgod2lkdGggLT0gd2lkdGggJSAxKSA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKHdoaXRlc3BhY2UgPSBcIlwiLCB3aWR0aCA+IDEwICYmICh3aWR0aCA9IDEwKTsgd2hpdGVzcGFjZS5sZW5ndGggPCB3aWR0aDsgd2hpdGVzcGFjZSArPSBcIiBcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IHN0cmluZ0NsYXNzKSB7XG4gICAgICAgICAgICAgIHdoaXRlc3BhY2UgPSB3aWR0aC5sZW5ndGggPD0gMTAgPyB3aWR0aCA6IHdpZHRoLnNsaWNlKDAsIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gT3BlcmEgPD0gNy41NHUyIGRpc2NhcmRzIHRoZSB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGVtcHR5IHN0cmluZyBrZXlzXG4gICAgICAgICAgLy8gKGBcIlwiYCkgb25seSBpZiB0aGV5IGFyZSB1c2VkIGRpcmVjdGx5IHdpdGhpbiBhbiBvYmplY3QgbWVtYmVyIGxpc3RcbiAgICAgICAgICAvLyAoZS5nLiwgYCEoXCJcIiBpbiB7IFwiXCI6IDF9KWApLlxuICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoXCJcIiwgKHZhbHVlID0ge30sIHZhbHVlW1wiXCJdID0gc291cmNlLCB2YWx1ZSksIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCB3aGl0ZXNwYWNlLCBcIlwiLCBbXSk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFB1YmxpYzogUGFyc2VzIGEgSlNPTiBzb3VyY2Ugc3RyaW5nLlxuICAgICAgaWYgKCFoYXMoXCJqc29uLXBhcnNlXCIpKSB7XG4gICAgICAgIHZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXG4gICAgICAgIC8vIEludGVybmFsOiBBIG1hcCBvZiBlc2NhcGVkIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgdGhlaXIgdW5lc2NhcGVkXG4gICAgICAgIC8vIGVxdWl2YWxlbnRzLlxuICAgICAgICB2YXIgVW5lc2NhcGVzID0ge1xuICAgICAgICAgIDkyOiBcIlxcXFxcIixcbiAgICAgICAgICAzNDogJ1wiJyxcbiAgICAgICAgICA0NzogXCIvXCIsXG4gICAgICAgICAgOTg6IFwiXFxiXCIsXG4gICAgICAgICAgMTE2OiBcIlxcdFwiLFxuICAgICAgICAgIDExMDogXCJcXG5cIixcbiAgICAgICAgICAxMDI6IFwiXFxmXCIsXG4gICAgICAgICAgMTE0OiBcIlxcclwiXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFN0b3JlcyB0aGUgcGFyc2VyIHN0YXRlLlxuICAgICAgICB2YXIgSW5kZXgsIFNvdXJjZTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmVzZXRzIHRoZSBwYXJzZXIgc3RhdGUgYW5kIHRocm93cyBhIGBTeW50YXhFcnJvcmAuXG4gICAgICAgIHZhciBhYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBJbmRleCA9IFNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgdGhyb3cgU3ludGF4RXJyb3IoKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmV0dXJucyB0aGUgbmV4dCB0b2tlbiwgb3IgYFwiJFwiYCBpZiB0aGUgcGFyc2VyIGhhcyByZWFjaGVkXG4gICAgICAgIC8vIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBzdHJpbmcuIEEgdG9rZW4gbWF5IGJlIGEgc3RyaW5nLCBudW1iZXIsIGBudWxsYFxuICAgICAgICAvLyBsaXRlcmFsLCBvciBCb29sZWFuIGxpdGVyYWwuXG4gICAgICAgIHZhciBsZXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIHNvdXJjZSA9IFNvdXJjZSwgbGVuZ3RoID0gc291cmNlLmxlbmd0aCwgdmFsdWUsIGJlZ2luLCBwb3NpdGlvbiwgaXNTaWduZWQsIGNoYXJDb2RlO1xuICAgICAgICAgIHdoaWxlIChJbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7XG4gICAgICAgICAgICAgIGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHdoaXRlc3BhY2UgdG9rZW5zLCBpbmNsdWRpbmcgdGFicywgY2FycmlhZ2UgcmV0dXJucywgbGluZVxuICAgICAgICAgICAgICAgIC8vIGZlZWRzLCBhbmQgc3BhY2UgY2hhcmFjdGVycy5cbiAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDEyMzogY2FzZSAxMjU6IGNhc2UgOTE6IGNhc2UgOTM6IGNhc2UgNTg6IGNhc2UgNDQ6XG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgYSBwdW5jdHVhdG9yIHRva2VuIChge2AsIGB9YCwgYFtgLCBgXWAsIGA6YCwgb3IgYCxgKSBhdFxuICAgICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuICAgICAgICAgICAgICAgIHZhbHVlID0gY2hhckluZGV4QnVnZ3kgPyBzb3VyY2UuY2hhckF0KEluZGV4KSA6IHNvdXJjZVtJbmRleF07XG4gICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICAgICAgLy8gYFwiYCBkZWxpbWl0cyBhIEpTT04gc3RyaW5nOyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNoYXJhY3RlciBhbmRcbiAgICAgICAgICAgICAgICAvLyBiZWdpbiBwYXJzaW5nIHRoZSBzdHJpbmcuIFN0cmluZyB0b2tlbnMgYXJlIHByZWZpeGVkIHdpdGggdGhlXG4gICAgICAgICAgICAgICAgLy8gc2VudGluZWwgYEBgIGNoYXJhY3RlciB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20gcHVuY3R1YXRvcnMgYW5kXG4gICAgICAgICAgICAgICAgLy8gZW5kLW9mLXN0cmluZyB0b2tlbnMuXG4gICAgICAgICAgICAgICAgZm9yICh2YWx1ZSA9IFwiQFwiLCBJbmRleCsrOyBJbmRleCA8IGxlbmd0aDspIHtcbiAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVW5lc2NhcGVkIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycyAodGhvc2Ugd2l0aCBhIGNvZGUgdW5pdFxuICAgICAgICAgICAgICAgICAgICAvLyBsZXNzIHRoYW4gdGhlIHNwYWNlIGNoYXJhY3RlcikgYXJlIG5vdCBwZXJtaXR0ZWQuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYXJDb2RlID09IDkyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgcmV2ZXJzZSBzb2xpZHVzIChgXFxgKSBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIGFuIGVzY2FwZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbCBjaGFyYWN0ZXIgKGluY2x1ZGluZyBgXCJgLCBgXFxgLCBhbmQgYC9gKSBvciBVbmljb2RlXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaGFyQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTI6IGNhc2UgMzQ6IGNhc2UgNDc6IGNhc2UgOTg6IGNhc2UgMTE2OiBjYXNlIDExMDogY2FzZSAxMDI6IGNhc2UgMTE0OlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2aXZlIGVzY2FwZWQgY29udHJvbCBjaGFyYWN0ZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gVW5lc2NhcGVzW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDExNzpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGBcXHVgIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYSBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgdmFsaWRhdGUgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VyLWRpZ2l0IGNvZGUgcG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiA9ICsrSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHBvc2l0aW9uID0gSW5kZXggKyA0OyBJbmRleCA8IHBvc2l0aW9uOyBJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHZhbGlkIHNlcXVlbmNlIGNvbXByaXNlcyBmb3VyIGhleGRpZ2l0cyAoY2FzZS1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5zZW5zaXRpdmUpIHRoYXQgZm9ybSBhIHNpbmdsZSBoZXhhZGVjaW1hbCB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcgfHwgY2hhckNvZGUgPj0gOTcgJiYgY2hhckNvZGUgPD0gMTAyIHx8IGNoYXJDb2RlID49IDY1ICYmIGNoYXJDb2RlIDw9IDcwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludmFsaWQgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2aXZlIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGZyb21DaGFyQ29kZShcIjB4XCIgKyBzb3VyY2Uuc2xpY2UoYmVnaW4sIEluZGV4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UuXG4gICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gMzQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBBbiB1bmVzY2FwZWQgZG91YmxlLXF1b3RlIGNoYXJhY3RlciBtYXJrcyB0aGUgZW5kIG9mIHRoZVxuICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cmluZy5cbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW4gPSBJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgLy8gT3B0aW1pemUgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBhIHN0cmluZyBpcyB2YWxpZC5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJDb2RlID49IDMyICYmIGNoYXJDb2RlICE9IDkyICYmIGNoYXJDb2RlICE9IDM0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIHN0cmluZyBhcy1pcy5cbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gc291cmNlLnNsaWNlKGJlZ2luLCBJbmRleCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChJbmRleCkgPT0gMzQpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgY2hhcmFjdGVyIGFuZCByZXR1cm4gdGhlIHJldml2ZWQgc3RyaW5nLlxuICAgICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVW50ZXJtaW5hdGVkIHN0cmluZy5cbiAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIC8vIFBhcnNlIG51bWJlcnMgYW5kIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIGJlZ2luID0gSW5kZXg7XG4gICAgICAgICAgICAgICAgLy8gQWR2YW5jZSBwYXN0IHRoZSBuZWdhdGl2ZSBzaWduLCBpZiBvbmUgaXMgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSA0NSkge1xuICAgICAgICAgICAgICAgICAgaXNTaWduZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgYW4gaW50ZWdlciBvciBmbG9hdGluZy1wb2ludCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpIHtcbiAgICAgICAgICAgICAgICAgIC8vIExlYWRpbmcgemVyb2VzIGFyZSBpbnRlcnByZXRlZCBhcyBvY3RhbCBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSA0OCAmJiAoKGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXggKyAxKSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsIG9jdGFsIGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpc1NpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGhlIGludGVnZXIgY29tcG9uZW50LlxuICAgICAgICAgICAgICAgICAgZm9yICg7IEluZGV4IDwgbGVuZ3RoICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCkpLCBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nyk7IEluZGV4KyspO1xuICAgICAgICAgICAgICAgICAgLy8gRmxvYXRzIGNhbm5vdCBjb250YWluIGEgbGVhZGluZyBkZWNpbWFsIHBvaW50OyBob3dldmVyLCB0aGlzXG4gICAgICAgICAgICAgICAgICAvLyBjYXNlIGlzIGFscmVhZHkgYWNjb3VudGVkIGZvciBieSB0aGUgcGFyc2VyLlxuICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KSA9PSA0Nikge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9ICsrSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIHRoZSBkZWNpbWFsIGNvbXBvbmVudC5cbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IHBvc2l0aW9uIDwgbGVuZ3RoICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChwb3NpdGlvbikpLCBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nyk7IHBvc2l0aW9uKyspO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsIHRyYWlsaW5nIGRlY2ltYWwuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBJbmRleCA9IHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgZXhwb25lbnRzLiBUaGUgYGVgIGRlbm90aW5nIHRoZSBleHBvbmVudCBpc1xuICAgICAgICAgICAgICAgICAgLy8gY2FzZS1pbnNlbnNpdGl2ZS5cbiAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDEwMSB8fCBjaGFyQ29kZSA9PSA2OSkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIHBhc3QgdGhlIHNpZ24gZm9sbG93aW5nIHRoZSBleHBvbmVudCwgaWYgb25lIGlzXG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDQzIHx8IGNoYXJDb2RlID09IDQ1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBQYXJzZSB0aGUgZXhwb25lbnRpYWwgY29tcG9uZW50LlxuICAgICAgICAgICAgICAgICAgICBmb3IgKHBvc2l0aW9uID0gSW5kZXg7IHBvc2l0aW9uIDwgbGVuZ3RoICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChwb3NpdGlvbikpLCBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nyk7IHBvc2l0aW9uKyspO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsIGVtcHR5IGV4cG9uZW50LlxuICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgSW5kZXggPSBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIENvZXJjZSB0aGUgcGFyc2VkIHZhbHVlIHRvIGEgSmF2YVNjcmlwdCBudW1iZXIuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gK3NvdXJjZS5zbGljZShiZWdpbiwgSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBIG5lZ2F0aXZlIHNpZ24gbWF5IG9ubHkgcHJlY2VkZSBudW1iZXJzLlxuICAgICAgICAgICAgICAgIGlmIChpc1NpZ25lZCkge1xuICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYHRydWVgLCBgZmFsc2VgLCBhbmQgYG51bGxgIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uuc2xpY2UoSW5kZXgsIEluZGV4ICsgNCkgPT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgIEluZGV4ICs9IDQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZS5zbGljZShJbmRleCwgSW5kZXggKyA1KSA9PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgICAgICAgIEluZGV4ICs9IDU7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2Uuc2xpY2UoSW5kZXgsIEluZGV4ICsgNCkgPT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgICAgIEluZGV4ICs9IDQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVW5yZWNvZ25pemVkIHRva2VuLlxuICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJldHVybiB0aGUgc2VudGluZWwgYCRgIGNoYXJhY3RlciBpZiB0aGUgcGFyc2VyIGhhcyByZWFjaGVkIHRoZSBlbmRcbiAgICAgICAgICAvLyBvZiB0aGUgc291cmNlIHN0cmluZy5cbiAgICAgICAgICByZXR1cm4gXCIkXCI7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFBhcnNlcyBhIEpTT04gYHZhbHVlYCB0b2tlbi5cbiAgICAgICAgdmFyIGdldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHZhciByZXN1bHRzLCBoYXNNZW1iZXJzO1xuICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIiRcIikge1xuICAgICAgICAgICAgLy8gVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQuXG4gICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGlmICgoY2hhckluZGV4QnVnZ3kgPyB2YWx1ZS5jaGFyQXQoMCkgOiB2YWx1ZVswXSkgPT0gXCJAXCIpIHtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzZW50aW5lbCBgQGAgY2hhcmFjdGVyLlxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuc2xpY2UoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBQYXJzZSBvYmplY3QgYW5kIGFycmF5IGxpdGVyYWxzLlxuICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiW1wiKSB7XG4gICAgICAgICAgICAgIC8vIFBhcnNlcyBhIEpTT04gYXJyYXksIHJldHVybmluZyBhIG5ldyBKYXZhU2NyaXB0IGFycmF5LlxuICAgICAgICAgICAgICByZXN1bHRzID0gW107XG4gICAgICAgICAgICAgIGZvciAoOzsgaGFzTWVtYmVycyB8fCAoaGFzTWVtYmVycyA9IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAvLyBBIGNsb3Npbmcgc3F1YXJlIGJyYWNrZXQgbWFya3MgdGhlIGVuZCBvZiB0aGUgYXJyYXkgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJdXCIpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYXJyYXkgbGl0ZXJhbCBjb250YWlucyBlbGVtZW50cywgdGhlIGN1cnJlbnQgdG9rZW5cbiAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUgYSBjb21tYSBzZXBhcmF0aW5nIHRoZSBwcmV2aW91cyBlbGVtZW50IGZyb20gdGhlXG4gICAgICAgICAgICAgICAgLy8gbmV4dC5cbiAgICAgICAgICAgICAgICBpZiAoaGFzTWVtYmVycykge1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiLFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIl1cIikge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdHJhaWxpbmcgYCxgIGluIGFycmF5IGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBgLGAgbXVzdCBzZXBhcmF0ZSBlYWNoIGFycmF5IGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEVsaXNpb25zIGFuZCBsZWFkaW5nIGNvbW1hcyBhcmUgbm90IHBlcm1pdHRlZC5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChnZXQodmFsdWUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gXCJ7XCIpIHtcbiAgICAgICAgICAgICAgLy8gUGFyc2VzIGEgSlNPTiBvYmplY3QsIHJldHVybmluZyBhIG5ldyBKYXZhU2NyaXB0IG9iamVjdC5cbiAgICAgICAgICAgICAgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICBmb3IgKDs7IGhhc01lbWJlcnMgfHwgKGhhc01lbWJlcnMgPSB0cnVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgLy8gQSBjbG9zaW5nIGN1cmx5IGJyYWNlIG1hcmtzIHRoZSBlbmQgb2YgdGhlIG9iamVjdCBsaXRlcmFsLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIn1cIikge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgbGl0ZXJhbCBjb250YWlucyBtZW1iZXJzLCB0aGUgY3VycmVudCB0b2tlblxuICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBhIGNvbW1hIHNlcGFyYXRvci5cbiAgICAgICAgICAgICAgICBpZiAoaGFzTWVtYmVycykge1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiLFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIn1cIikge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdHJhaWxpbmcgYCxgIGluIG9iamVjdCBsaXRlcmFsLlxuICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgYCxgIG11c3Qgc2VwYXJhdGUgZWFjaCBvYmplY3QgbWVtYmVyLlxuICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBMZWFkaW5nIGNvbW1hcyBhcmUgbm90IHBlcm1pdHRlZCwgb2JqZWN0IHByb3BlcnR5IG5hbWVzIG11c3QgYmVcbiAgICAgICAgICAgICAgICAvLyBkb3VibGUtcXVvdGVkIHN0cmluZ3MsIGFuZCBhIGA6YCBtdXN0IHNlcGFyYXRlIGVhY2ggcHJvcGVydHlcbiAgICAgICAgICAgICAgICAvLyBuYW1lIGFuZCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIgfHwgdHlwZW9mIHZhbHVlICE9IFwic3RyaW5nXCIgfHwgKGNoYXJJbmRleEJ1Z2d5ID8gdmFsdWUuY2hhckF0KDApIDogdmFsdWVbMF0pICE9IFwiQFwiIHx8IGxleCgpICE9IFwiOlwiKSB7XG4gICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW3ZhbHVlLnNsaWNlKDEpXSA9IGdldChsZXgoKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBVbmV4cGVjdGVkIHRva2VuIGVuY291bnRlcmVkLlxuICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBVcGRhdGVzIGEgdHJhdmVyc2VkIG9iamVjdCBtZW1iZXIuXG4gICAgICAgIHZhciB1cGRhdGUgPSBmdW5jdGlvbiAoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgZWxlbWVudCA9IHdhbGsoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spO1xuICAgICAgICAgIGlmIChlbGVtZW50ID09PSB1bmRlZikge1xuICAgICAgICAgICAgZGVsZXRlIHNvdXJjZVtwcm9wZXJ0eV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNvdXJjZVtwcm9wZXJ0eV0gPSBlbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmVjdXJzaXZlbHkgdHJhdmVyc2VzIGEgcGFyc2VkIEpTT04gb2JqZWN0LCBpbnZva2luZyB0aGVcbiAgICAgICAgLy8gYGNhbGxiYWNrYCBmdW5jdGlvbiBmb3IgZWFjaCB2YWx1ZS4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGVcbiAgICAgICAgLy8gYFdhbGsoaG9sZGVyLCBuYW1lKWAgb3BlcmF0aW9uIGRlZmluZWQgaW4gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMi5cbiAgICAgICAgdmFyIHdhbGsgPSBmdW5jdGlvbiAoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBzb3VyY2VbcHJvcGVydHldLCBsZW5ndGg7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAvLyBgZm9yRWFjaGAgY2FuJ3QgYmUgdXNlZCB0byB0cmF2ZXJzZSBhbiBhcnJheSBpbiBPcGVyYSA8PSA4LjU0XG4gICAgICAgICAgICAvLyBiZWNhdXNlIGl0cyBgT2JqZWN0I2hhc093blByb3BlcnR5YCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGBmYWxzZWBcbiAgICAgICAgICAgIC8vIGZvciBhcnJheSBpbmRpY2VzIChlLmcuLCBgIVsxLCAyLCAzXS5oYXNPd25Qcm9wZXJ0eShcIjBcIilgKS5cbiAgICAgICAgICAgIGlmIChnZXRDbGFzcy5jYWxsKHZhbHVlKSA9PSBhcnJheUNsYXNzKSB7XG4gICAgICAgICAgICAgIGZvciAobGVuZ3RoID0gdmFsdWUubGVuZ3RoOyBsZW5ndGgtLTspIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUodmFsdWUsIGxlbmd0aCwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUodmFsdWUsIHByb3BlcnR5LCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChzb3VyY2UsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUHVibGljOiBgSlNPTi5wYXJzZWAuIFNlZSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4yLlxuICAgICAgICBleHBvcnRzLnBhcnNlID0gZnVuY3Rpb24gKHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgcmVzdWx0LCB2YWx1ZTtcbiAgICAgICAgICBJbmRleCA9IDA7XG4gICAgICAgICAgU291cmNlID0gXCJcIiArIHNvdXJjZTtcbiAgICAgICAgICByZXN1bHQgPSBnZXQobGV4KCkpO1xuICAgICAgICAgIC8vIElmIGEgSlNPTiBzdHJpbmcgY29udGFpbnMgbXVsdGlwbGUgdG9rZW5zLCBpdCBpcyBpbnZhbGlkLlxuICAgICAgICAgIGlmIChsZXgoKSAhPSBcIiRcIikge1xuICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmVzZXQgdGhlIHBhcnNlciBzdGF0ZS5cbiAgICAgICAgICBJbmRleCA9IFNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrICYmIGdldENsYXNzLmNhbGwoY2FsbGJhY2spID09IGZ1bmN0aW9uQ2xhc3MgPyB3YWxrKCh2YWx1ZSA9IHt9LCB2YWx1ZVtcIlwiXSA9IHJlc3VsdCwgdmFsdWUpLCBcIlwiLCBjYWxsYmFjaykgOiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0c1tcInJ1bkluQ29udGV4dFwiXSA9IHJ1bkluQ29udGV4dDtcbiAgICByZXR1cm4gZXhwb3J0cztcbiAgfVxuXG4gIGlmIChmcmVlRXhwb3J0cyAmJiAhaXNMb2FkZXIpIHtcbiAgICAvLyBFeHBvcnQgZm9yIENvbW1vbkpTIGVudmlyb25tZW50cy5cbiAgICBydW5JbkNvbnRleHQocm9vdCwgZnJlZUV4cG9ydHMpO1xuICB9IGVsc2Uge1xuICAgIC8vIEV4cG9ydCBmb3Igd2ViIGJyb3dzZXJzIGFuZCBKYXZhU2NyaXB0IGVuZ2luZXMuXG4gICAgdmFyIG5hdGl2ZUpTT04gPSByb290LkpTT04sXG4gICAgICAgIHByZXZpb3VzSlNPTiA9IHJvb3RbXCJKU09OM1wiXSxcbiAgICAgICAgaXNSZXN0b3JlZCA9IGZhbHNlO1xuXG4gICAgdmFyIEpTT04zID0gcnVuSW5Db250ZXh0KHJvb3QsIChyb290W1wiSlNPTjNcIl0gPSB7XG4gICAgICAvLyBQdWJsaWM6IFJlc3RvcmVzIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgZ2xvYmFsIGBKU09OYCBvYmplY3QgYW5kXG4gICAgICAvLyByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBgSlNPTjNgIG9iamVjdC5cbiAgICAgIFwibm9Db25mbGljdFwiOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghaXNSZXN0b3JlZCkge1xuICAgICAgICAgIGlzUmVzdG9yZWQgPSB0cnVlO1xuICAgICAgICAgIHJvb3QuSlNPTiA9IG5hdGl2ZUpTT047XG4gICAgICAgICAgcm9vdFtcIkpTT04zXCJdID0gcHJldmlvdXNKU09OO1xuICAgICAgICAgIG5hdGl2ZUpTT04gPSBwcmV2aW91c0pTT04gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OMztcbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgICByb290LkpTT04gPSB7XG4gICAgICBcInBhcnNlXCI6IEpTT04zLnBhcnNlLFxuICAgICAgXCJzdHJpbmdpZnlcIjogSlNPTjMuc3RyaW5naWZ5XG4gICAgfTtcbiAgfVxuXG4gIC8vIEV4cG9ydCBmb3IgYXN5bmNocm9ub3VzIG1vZHVsZSBsb2FkZXJzLlxuICBpZiAoaXNMb2FkZXIpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEpTT04zO1xuICAgIH0pO1xuICB9XG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggaXMgYSBjb21iaW5hdGlvbiBvZiBhbiBhcnJheSBhbmQgYSBzZXQuIEFkZGluZyBhIG5ld1xuICogbWVtYmVyIGlzIE8oMSksIHRlc3RpbmcgZm9yIG1lbWJlcnNoaXAgaXMgTygxKSwgYW5kIGZpbmRpbmcgdGhlIGluZGV4IG9mIGFuXG4gKiBlbGVtZW50IGlzIE8oMSkuIFJlbW92aW5nIGVsZW1lbnRzIGZyb20gdGhlIHNldCBpcyBub3Qgc3VwcG9ydGVkLiBPbmx5XG4gKiBzdHJpbmdzIGFyZSBzdXBwb3J0ZWQgZm9yIG1lbWJlcnNoaXAuXG4gKi9cbmZ1bmN0aW9uIEFycmF5U2V0KCkge1xuICB0aGlzLl9hcnJheSA9IFtdO1xuICB0aGlzLl9zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xufVxuXG4vKipcbiAqIFN0YXRpYyBtZXRob2QgZm9yIGNyZWF0aW5nIEFycmF5U2V0IGluc3RhbmNlcyBmcm9tIGFuIGV4aXN0aW5nIGFycmF5LlxuICovXG5BcnJheVNldC5mcm9tQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF9mcm9tQXJyYXkoYUFycmF5LCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzZXQgPSBuZXcgQXJyYXlTZXQoKTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFBcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHNldC5hZGQoYUFycmF5W2ldLCBhQWxsb3dEdXBsaWNhdGVzKTtcbiAgfVxuICByZXR1cm4gc2V0O1xufTtcblxuLyoqXG4gKiBSZXR1cm4gaG93IG1hbnkgdW5pcXVlIGl0ZW1zIGFyZSBpbiB0aGlzIEFycmF5U2V0LiBJZiBkdXBsaWNhdGVzIGhhdmUgYmVlblxuICogYWRkZWQsIHRoYW4gdGhvc2UgZG8gbm90IGNvdW50IHRvd2FyZHMgdGhlIHNpemUuXG4gKlxuICogQHJldHVybnMgTnVtYmVyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gQXJyYXlTZXRfc2l6ZSgpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3NldCkubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGlzIHNldC5cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgdmFyIGlzRHVwbGljYXRlID0gaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgdmFyIGlkeCA9IHRoaXMuX2FycmF5Lmxlbmd0aDtcbiAgaWYgKCFpc0R1cGxpY2F0ZSB8fCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgfVxuICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgdGhpcy5fc2V0W3NTdHJdID0gaWR4O1xuICB9XG59O1xuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBzdHJpbmcgYSBtZW1iZXIgb2YgdGhpcyBzZXQ/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBBcnJheVNldF9oYXMoYVN0cikge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHJldHVybiBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xufTtcblxuLyoqXG4gKiBXaGF0IGlzIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gc3RyaW5nIGluIHRoZSBhcnJheT9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBBcnJheVNldF9pbmRleE9mKGFTdHIpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICBpZiAoaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKSkge1xuICAgIHJldHVybiB0aGlzLl9zZXRbc1N0cl07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU3RyICsgJ1wiIGlzIG5vdCBpbiB0aGUgc2V0LicpO1xufTtcblxuLyoqXG4gKiBXaGF0IGlzIHRoZSBlbGVtZW50IGF0IHRoZSBnaXZlbiBpbmRleD9cbiAqXG4gKiBAcGFyYW0gTnVtYmVyIGFJZHhcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gQXJyYXlTZXRfYXQoYUlkeCkge1xuICBpZiAoYUlkeCA+PSAwICYmIGFJZHggPCB0aGlzLl9hcnJheS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJyYXlbYUlkeF07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBlbGVtZW50IGluZGV4ZWQgYnkgJyArIGFJZHgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhcnJheSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNldCAod2hpY2ggaGFzIHRoZSBwcm9wZXIgaW5kaWNlc1xuICogaW5kaWNhdGVkIGJ5IGluZGV4T2YpLiBOb3RlIHRoYXQgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIGludGVybmFsIGFycmF5IHVzZWRcbiAqIGZvciBzdG9yaW5nIHRoZSBtZW1iZXJzIHNvIHRoYXQgbm8gb25lIGNhbiBtZXNzIHdpdGggaW50ZXJuYWwgc3RhdGUuXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfdG9BcnJheSgpIHtcbiAgcmV0dXJuIHRoaXMuX2FycmF5LnNsaWNlKCk7XG59O1xuXG5leHBvcnRzLkFycmF5U2V0ID0gQXJyYXlTZXQ7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICpcbiAqIEJhc2VkIG9uIHRoZSBCYXNlIDY0IFZMUSBpbXBsZW1lbnRhdGlvbiBpbiBDbG9zdXJlIENvbXBpbGVyOlxuICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jbG9zdXJlLWNvbXBpbGVyL3NvdXJjZS9icm93c2UvdHJ1bmsvc3JjL2NvbS9nb29nbGUvZGVidWdnaW5nL3NvdXJjZW1hcC9CYXNlNjRWTFEuamF2YVxuICpcbiAqIENvcHlyaWdodCAyMDExIFRoZSBDbG9zdXJlIENvbXBpbGVyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbiAqIG1ldDpcbiAqXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxuICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcbiAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZFxuICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICogICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkXG4gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuICogXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCcuL2Jhc2U2NCcpO1xuXG4vLyBBIHNpbmdsZSBiYXNlIDY0IGRpZ2l0IGNhbiBjb250YWluIDYgYml0cyBvZiBkYXRhLiBGb3IgdGhlIGJhc2UgNjQgdmFyaWFibGVcbi8vIGxlbmd0aCBxdWFudGl0aWVzIHdlIHVzZSBpbiB0aGUgc291cmNlIG1hcCBzcGVjLCB0aGUgZmlyc3QgYml0IGlzIHRoZSBzaWduLFxuLy8gdGhlIG5leHQgZm91ciBiaXRzIGFyZSB0aGUgYWN0dWFsIHZhbHVlLCBhbmQgdGhlIDZ0aCBiaXQgaXMgdGhlXG4vLyBjb250aW51YXRpb24gYml0LiBUaGUgY29udGludWF0aW9uIGJpdCB0ZWxscyB1cyB3aGV0aGVyIHRoZXJlIGFyZSBtb3JlXG4vLyBkaWdpdHMgaW4gdGhpcyB2YWx1ZSBmb2xsb3dpbmcgdGhpcyBkaWdpdC5cbi8vXG4vLyAgIENvbnRpbnVhdGlvblxuLy8gICB8ICAgIFNpZ25cbi8vICAgfCAgICB8XG4vLyAgIFYgICAgVlxuLy8gICAxMDEwMTFcblxudmFyIFZMUV9CQVNFX1NISUZUID0gNTtcblxuLy8gYmluYXJ5OiAxMDAwMDBcbnZhciBWTFFfQkFTRSA9IDEgPDwgVkxRX0JBU0VfU0hJRlQ7XG5cbi8vIGJpbmFyeTogMDExMTExXG52YXIgVkxRX0JBU0VfTUFTSyA9IFZMUV9CQVNFIC0gMTtcblxuLy8gYmluYXJ5OiAxMDAwMDBcbnZhciBWTFFfQ09OVElOVUFUSU9OX0JJVCA9IFZMUV9CQVNFO1xuXG4vKipcbiAqIENvbnZlcnRzIGZyb20gYSB0d28tY29tcGxlbWVudCB2YWx1ZSB0byBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gKiAgIDEgYmVjb21lcyAyICgxMCBiaW5hcnkpLCAtMSBiZWNvbWVzIDMgKDExIGJpbmFyeSlcbiAqICAgMiBiZWNvbWVzIDQgKDEwMCBiaW5hcnkpLCAtMiBiZWNvbWVzIDUgKDEwMSBiaW5hcnkpXG4gKi9cbmZ1bmN0aW9uIHRvVkxRU2lnbmVkKGFWYWx1ZSkge1xuICByZXR1cm4gYVZhbHVlIDwgMFxuICAgID8gKCgtYVZhbHVlKSA8PCAxKSArIDFcbiAgICA6IChhVmFsdWUgPDwgMSkgKyAwO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRvIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgZnJvbSBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gKiAgIDIgKDEwIGJpbmFyeSkgYmVjb21lcyAxLCAzICgxMSBiaW5hcnkpIGJlY29tZXMgLTFcbiAqICAgNCAoMTAwIGJpbmFyeSkgYmVjb21lcyAyLCA1ICgxMDEgYmluYXJ5KSBiZWNvbWVzIC0yXG4gKi9cbmZ1bmN0aW9uIGZyb21WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHZhciBpc05lZ2F0aXZlID0gKGFWYWx1ZSAmIDEpID09PSAxO1xuICB2YXIgc2hpZnRlZCA9IGFWYWx1ZSA+PiAxO1xuICByZXR1cm4gaXNOZWdhdGl2ZVxuICAgID8gLXNoaWZ0ZWRcbiAgICA6IHNoaWZ0ZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmFzZSA2NCBWTFEgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZW5jb2RlKGFWYWx1ZSkge1xuICB2YXIgZW5jb2RlZCA9IFwiXCI7XG4gIHZhciBkaWdpdDtcblxuICB2YXIgdmxxID0gdG9WTFFTaWduZWQoYVZhbHVlKTtcblxuICBkbyB7XG4gICAgZGlnaXQgPSB2bHEgJiBWTFFfQkFTRV9NQVNLO1xuICAgIHZscSA+Pj49IFZMUV9CQVNFX1NISUZUO1xuICAgIGlmICh2bHEgPiAwKSB7XG4gICAgICAvLyBUaGVyZSBhcmUgc3RpbGwgbW9yZSBkaWdpdHMgaW4gdGhpcyB2YWx1ZSwgc28gd2UgbXVzdCBtYWtlIHN1cmUgdGhlXG4gICAgICAvLyBjb250aW51YXRpb24gYml0IGlzIG1hcmtlZC5cbiAgICAgIGRpZ2l0IHw9IFZMUV9DT05USU5VQVRJT05fQklUO1xuICAgIH1cbiAgICBlbmNvZGVkICs9IGJhc2U2NC5lbmNvZGUoZGlnaXQpO1xuICB9IHdoaWxlICh2bHEgPiAwKTtcblxuICByZXR1cm4gZW5jb2RlZDtcbn07XG5cbi8qKlxuICogRGVjb2RlcyB0aGUgbmV4dCBiYXNlIDY0IFZMUSB2YWx1ZSBmcm9tIHRoZSBnaXZlbiBzdHJpbmcgYW5kIHJldHVybnMgdGhlXG4gKiB2YWx1ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyB2aWEgdGhlIG91dCBwYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gYmFzZTY0VkxRX2RlY29kZShhU3RyLCBhSW5kZXgsIGFPdXRQYXJhbSkge1xuICB2YXIgc3RyTGVuID0gYVN0ci5sZW5ndGg7XG4gIHZhciByZXN1bHQgPSAwO1xuICB2YXIgc2hpZnQgPSAwO1xuICB2YXIgY29udGludWF0aW9uLCBkaWdpdDtcblxuICBkbyB7XG4gICAgaWYgKGFJbmRleCA+PSBzdHJMZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG1vcmUgZGlnaXRzIGluIGJhc2UgNjQgVkxRIHZhbHVlLlwiKTtcbiAgICB9XG5cbiAgICBkaWdpdCA9IGJhc2U2NC5kZWNvZGUoYVN0ci5jaGFyQ29kZUF0KGFJbmRleCsrKSk7XG4gICAgaWYgKGRpZ2l0ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiYXNlNjQgZGlnaXQ6IFwiICsgYVN0ci5jaGFyQXQoYUluZGV4IC0gMSkpO1xuICAgIH1cblxuICAgIGNvbnRpbnVhdGlvbiA9ICEhKGRpZ2l0ICYgVkxRX0NPTlRJTlVBVElPTl9CSVQpO1xuICAgIGRpZ2l0ICY9IFZMUV9CQVNFX01BU0s7XG4gICAgcmVzdWx0ID0gcmVzdWx0ICsgKGRpZ2l0IDw8IHNoaWZ0KTtcbiAgICBzaGlmdCArPSBWTFFfQkFTRV9TSElGVDtcbiAgfSB3aGlsZSAoY29udGludWF0aW9uKTtcblxuICBhT3V0UGFyYW0udmFsdWUgPSBmcm9tVkxRU2lnbmVkKHJlc3VsdCk7XG4gIGFPdXRQYXJhbS5yZXN0ID0gYUluZGV4O1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIGludFRvQ2hhck1hcCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJy5zcGxpdCgnJyk7XG5cbi8qKlxuICogRW5jb2RlIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIG9mIDAgdG8gNjMgdG8gYSBzaW5nbGUgYmFzZSA2NCBkaWdpdC5cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiAobnVtYmVyKSB7XG4gIGlmICgwIDw9IG51bWJlciAmJiBudW1iZXIgPCBpbnRUb0NoYXJNYXAubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGludFRvQ2hhck1hcFtudW1iZXJdO1xuICB9XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGJldHdlZW4gMCBhbmQgNjM6IFwiICsgbnVtYmVyKTtcbn07XG5cbi8qKlxuICogRGVjb2RlIGEgc2luZ2xlIGJhc2UgNjQgY2hhcmFjdGVyIGNvZGUgZGlnaXQgdG8gYW4gaW50ZWdlci4gUmV0dXJucyAtMSBvblxuICogZmFpbHVyZS5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiAoY2hhckNvZGUpIHtcbiAgdmFyIGJpZ0EgPSA2NTsgICAgIC8vICdBJ1xuICB2YXIgYmlnWiA9IDkwOyAgICAgLy8gJ1onXG5cbiAgdmFyIGxpdHRsZUEgPSA5NzsgIC8vICdhJ1xuICB2YXIgbGl0dGxlWiA9IDEyMjsgLy8gJ3onXG5cbiAgdmFyIHplcm8gPSA0ODsgICAgIC8vICcwJ1xuICB2YXIgbmluZSA9IDU3OyAgICAgLy8gJzknXG5cbiAgdmFyIHBsdXMgPSA0MzsgICAgIC8vICcrJ1xuICB2YXIgc2xhc2ggPSA0NzsgICAgLy8gJy8nXG5cbiAgdmFyIGxpdHRsZU9mZnNldCA9IDI2O1xuICB2YXIgbnVtYmVyT2Zmc2V0ID0gNTI7XG5cbiAgLy8gMCAtIDI1OiBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlxuICBpZiAoYmlnQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBiaWdaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGJpZ0EpO1xuICB9XG5cbiAgLy8gMjYgLSA1MTogYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcbiAgaWYgKGxpdHRsZUEgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gbGl0dGxlWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBsaXR0bGVBICsgbGl0dGxlT2Zmc2V0KTtcbiAgfVxuXG4gIC8vIDUyIC0gNjE6IDAxMjM0NTY3ODlcbiAgaWYgKHplcm8gPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gbmluZSkge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSB6ZXJvICsgbnVtYmVyT2Zmc2V0KTtcbiAgfVxuXG4gIC8vIDYyOiArXG4gIGlmIChjaGFyQ29kZSA9PSBwbHVzKSB7XG4gICAgcmV0dXJuIDYyO1xuICB9XG5cbiAgLy8gNjM6IC9cbiAgaWYgKGNoYXJDb2RlID09IHNsYXNoKSB7XG4gICAgcmV0dXJuIDYzO1xuICB9XG5cbiAgLy8gSW52YWxpZCBiYXNlNjQgZGlnaXQuXG4gIHJldHVybiAtMTtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbmV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogUmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2guXG4gKlxuICogQHBhcmFtIGFMb3cgSW5kaWNlcyBoZXJlIGFuZCBsb3dlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFIaWdoIEluZGljZXMgaGVyZSBhbmQgaGlnaGVyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBub24tZW1wdHkgYXJyYXkgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgRnVuY3Rpb24gd2hpY2ggdGFrZXMgdHdvIGVsZW1lbnRzIGFuZCByZXR1cm5zIC0xLCAwLCBvciAxLlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiByZWN1cnNpdmVTZWFyY2goYUxvdywgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gIC8vXG4gIC8vICAgMS4gV2UgZmluZCB0aGUgZXhhY3QgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gIC8vXG4gIC8vICAgMi4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBidXQgd2UgY2FuIHJldHVybiB0aGUgaW5kZXggb2ZcbiAgLy8gICAgICB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQuXG4gIC8vXG4gIC8vICAgMy4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBhbmQgdGhlcmUgaXMgbm8gbmV4dC1jbG9zZXN0XG4gIC8vICAgICAgZWxlbWVudCB0aGFuIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IsIHNvIHdlIHJldHVybiAtMS5cbiAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gIHZhciBjbXAgPSBhQ29tcGFyZShhTmVlZGxlLCBhSGF5c3RhY2tbbWlkXSwgdHJ1ZSk7XG4gIGlmIChjbXAgPT09IDApIHtcbiAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgcmV0dXJuIG1pZDtcbiAgfVxuICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBncmVhdGVyIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKGFIaWdoIC0gbWlkID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKG1pZCwgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gYUhpZ2ggPCBhSGF5c3RhY2subGVuZ3RoID8gYUhpZ2ggOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBsZXNzIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKG1pZCAtIGFMb3cgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgbG93ZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFMb3cgPCAwID8gLTEgOiBhTG93O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCB3aGljaCB3aWxsIGFsd2F5cyB0cnkgYW5kIHJldHVyblxuICogdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGVsZW1lbnQgaWYgdGhlcmUgaXMgbm8gZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2VcbiAqIG1hcHBpbmdzIGJldHdlZW4gb3JpZ2luYWwgYW5kIGdlbmVyYXRlZCBsaW5lL2NvbCBwYWlycyBhcmUgc2luZ2xlIHBvaW50cyxcbiAqIGFuZCB0aGVyZSBpcyBhbiBpbXBsaWNpdCByZWdpb24gYmV0d2VlbiBlYWNoIG9mIHRoZW0sIHNvIGEgbWlzcyBqdXN0IG1lYW5zXG4gKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQgb2YgYSByZWdpb24uXG4gKlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgeW91IGFyZSBsb29raW5nIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgbmVlZGxlIGFuZCBhbiBlbGVtZW50IGluIHRoZVxuICogICAgIGFycmF5IGFuZCByZXR1cm5zIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuZWVkbGUgaXMgbGVzc1xuICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqL1xuZXhwb3J0cy5zZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgaWYgKGFIYXlzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaW5kZXggPSByZWN1cnNpdmVTZWFyY2goLTEsIGFIYXlzdGFjay5sZW5ndGgsIGFOZWVkbGUsIGFIYXlzdGFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21wYXJlLCBhQmlhcyB8fCBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIFdlIGhhdmUgZm91bmQgZWl0aGVyIHRoZSBleGFjdCBlbGVtZW50LCBvciB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQgdGhhblxuICAvLyB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLiBIb3dldmVyLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBzdWNoXG4gIC8vIGVsZW1lbnQuIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGVzZS5cbiAgd2hpbGUgKGluZGV4IC0gMSA+PSAwKSB7XG4gICAgaWYgKGFDb21wYXJlKGFIYXlzdGFja1tpbmRleF0sIGFIYXlzdGFja1tpbmRleCAtIDFdLCB0cnVlKSAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC0taW5kZXg7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG4vLyBJdCB0dXJucyBvdXQgdGhhdCBzb21lIChtb3N0PykgSmF2YVNjcmlwdCBlbmdpbmVzIGRvbid0IHNlbGYtaG9zdFxuLy8gYEFycmF5LnByb3RvdHlwZS5zb3J0YC4gVGhpcyBtYWtlcyBzZW5zZSBiZWNhdXNlIEMrKyB3aWxsIGxpa2VseSByZW1haW5cbi8vIGZhc3RlciB0aGFuIEpTIHdoZW4gZG9pbmcgcmF3IENQVS1pbnRlbnNpdmUgc29ydGluZy4gSG93ZXZlciwgd2hlbiB1c2luZyBhXG4vLyBjdXN0b20gY29tcGFyYXRvciBmdW5jdGlvbiwgY2FsbGluZyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZSBWTSdzIEMrKyBhbmRcbi8vIEpJVCdkIEpTIGlzIHJhdGhlciBzbG93ICphbmQqIGxvc2VzIEpJVCB0eXBlIGluZm9ybWF0aW9uLCByZXN1bHRpbmcgaW5cbi8vIHdvcnNlIGdlbmVyYXRlZCBjb2RlIGZvciB0aGUgY29tcGFyYXRvciBmdW5jdGlvbiB0aGFuIHdvdWxkIGJlIG9wdGltYWwuIEluXG4vLyBmYWN0LCB3aGVuIHNvcnRpbmcgd2l0aCBhIGNvbXBhcmF0b3IsIHRoZXNlIGNvc3RzIG91dHdlaWdoIHRoZSBiZW5lZml0cyBvZlxuLy8gc29ydGluZyBpbiBDKysuIEJ5IHVzaW5nIG91ciBvd24gSlMtaW1wbGVtZW50ZWQgUXVpY2sgU29ydCAoYmVsb3cpLCB3ZSBnZXRcbi8vIGEgfjM1MDBtcyBtZWFuIHNwZWVkLXVwIGluIGBiZW5jaC9iZW5jaC5odG1sYC5cblxuLyoqXG4gKiBTd2FwIHRoZSBlbGVtZW50cyBpbmRleGVkIGJ5IGB4YCBhbmQgYHlgIGluIHRoZSBhcnJheSBgYXJ5YC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBUaGUgYXJyYXkuXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogICAgICAgIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgaXRlbS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgaXRlbS5cbiAqL1xuZnVuY3Rpb24gc3dhcChhcnksIHgsIHkpIHtcbiAgdmFyIHRlbXAgPSBhcnlbeF07XG4gIGFyeVt4XSA9IGFyeVt5XTtcbiAgYXJ5W3ldID0gdGVtcDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgd2l0aGluIHRoZSByYW5nZSBgbG93IC4uIGhpZ2hgIGluY2x1c2l2ZS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbG93XG4gKiAgICAgICAgVGhlIGxvd2VyIGJvdW5kIG9uIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7TnVtYmVyfSBoaWdoXG4gKiAgICAgICAgVGhlIHVwcGVyIGJvdW5kIG9uIHRoZSByYW5nZS5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tSW50SW5SYW5nZShsb3csIGhpZ2gpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQobG93ICsgKE1hdGgucmFuZG9tKCkgKiAoaGlnaCAtIGxvdykpKTtcbn1cblxuLyoqXG4gKiBUaGUgUXVpY2sgU29ydCBhbGdvcml0aG0uXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gKiAgICAgICAgQW4gYXJyYXkgdG8gc29ydC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXBhcmF0b3JcbiAqICAgICAgICBGdW5jdGlvbiB0byB1c2UgdG8gY29tcGFyZSB0d28gaXRlbXMuXG4gKiBAcGFyYW0ge051bWJlcn0gcFxuICogICAgICAgIFN0YXJ0IGluZGV4IG9mIHRoZSBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9IHJcbiAqICAgICAgICBFbmQgaW5kZXggb2YgdGhlIGFycmF5XG4gKi9cbmZ1bmN0aW9uIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcCwgcikge1xuICAvLyBJZiBvdXIgbG93ZXIgYm91bmQgaXMgbGVzcyB0aGFuIG91ciB1cHBlciBib3VuZCwgd2UgKDEpIHBhcnRpdGlvbiB0aGVcbiAgLy8gYXJyYXkgaW50byB0d28gcGllY2VzIGFuZCAoMikgcmVjdXJzZSBvbiBlYWNoIGhhbGYuIElmIGl0IGlzIG5vdCwgdGhpcyBpc1xuICAvLyB0aGUgZW1wdHkgYXJyYXkgYW5kIG91ciBiYXNlIGNhc2UuXG5cbiAgaWYgKHAgPCByKSB7XG4gICAgLy8gKDEpIFBhcnRpdGlvbmluZy5cbiAgICAvL1xuICAgIC8vIFRoZSBwYXJ0aXRpb25pbmcgY2hvb3NlcyBhIHBpdm90IGJldHdlZW4gYHBgIGFuZCBgcmAgYW5kIG1vdmVzIGFsbFxuICAgIC8vIGVsZW1lbnRzIHRoYXQgYXJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcGl2b3QgdG8gdGhlIGJlZm9yZSBpdCwgYW5kXG4gICAgLy8gYWxsIHRoZSBlbGVtZW50cyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gaXQgYWZ0ZXIgaXQuIFRoZSBlZmZlY3QgaXMgdGhhdFxuICAgIC8vIG9uY2UgcGFydGl0aW9uIGlzIGRvbmUsIHRoZSBwaXZvdCBpcyBpbiB0aGUgZXhhY3QgcGxhY2UgaXQgd2lsbCBiZSB3aGVuXG4gICAgLy8gdGhlIGFycmF5IGlzIHB1dCBpbiBzb3J0ZWQgb3JkZXIsIGFuZCBpdCB3aWxsIG5vdCBuZWVkIHRvIGJlIG1vdmVkXG4gICAgLy8gYWdhaW4uIFRoaXMgcnVucyBpbiBPKG4pIHRpbWUuXG5cbiAgICAvLyBBbHdheXMgY2hvb3NlIGEgcmFuZG9tIHBpdm90IHNvIHRoYXQgYW4gaW5wdXQgYXJyYXkgd2hpY2ggaXMgcmV2ZXJzZVxuICAgIC8vIHNvcnRlZCBkb2VzIG5vdCBjYXVzZSBPKG5eMikgcnVubmluZyB0aW1lLlxuICAgIHZhciBwaXZvdEluZGV4ID0gcmFuZG9tSW50SW5SYW5nZShwLCByKTtcbiAgICB2YXIgaSA9IHAgLSAxO1xuXG4gICAgc3dhcChhcnksIHBpdm90SW5kZXgsIHIpO1xuICAgIHZhciBwaXZvdCA9IGFyeVtyXTtcblxuICAgIC8vIEltbWVkaWF0ZWx5IGFmdGVyIGBqYCBpcyBpbmNyZW1lbnRlZCBpbiB0aGlzIGxvb3AsIHRoZSBmb2xsb3dpbmcgaG9sZFxuICAgIC8vIHRydWU6XG4gICAgLy9cbiAgICAvLyAgICogRXZlcnkgZWxlbWVudCBpbiBgYXJ5W3AgLi4gaV1gIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcGl2b3QuXG4gICAgLy9cbiAgICAvLyAgICogRXZlcnkgZWxlbWVudCBpbiBgYXJ5W2krMSAuLiBqLTFdYCBpcyBncmVhdGVyIHRoYW4gdGhlIHBpdm90LlxuICAgIGZvciAodmFyIGogPSBwOyBqIDwgcjsgaisrKSB7XG4gICAgICBpZiAoY29tcGFyYXRvcihhcnlbal0sIHBpdm90KSA8PSAwKSB7XG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgc3dhcChhcnksIGksIGopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3YXAoYXJ5LCBpICsgMSwgaik7XG4gICAgdmFyIHEgPSBpICsgMTtcblxuICAgIC8vICgyKSBSZWN1cnNlIG9uIGVhY2ggaGFsZi5cblxuICAgIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcCwgcSAtIDEpO1xuICAgIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcSArIDEsIHIpO1xuICB9XG59XG5cbi8qKlxuICogU29ydCB0aGUgZ2l2ZW4gYXJyYXkgaW4tcGxhY2Ugd2l0aCB0aGUgZ2l2ZW4gY29tcGFyYXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqL1xuZXhwb3J0cy5xdWlja1NvcnQgPSBmdW5jdGlvbiAoYXJ5LCBjb21wYXJhdG9yKSB7XG4gIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgMCwgYXJ5Lmxlbmd0aCAtIDEpO1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBiaW5hcnlTZWFyY2ggPSByZXF1aXJlKCcuL2JpbmFyeS1zZWFyY2gnKTtcbnZhciBBcnJheVNldCA9IHJlcXVpcmUoJy4vYXJyYXktc2V0JykuQXJyYXlTZXQ7XG52YXIgYmFzZTY0VkxRID0gcmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7XG52YXIgcXVpY2tTb3J0ID0gcmVxdWlyZSgnLi9xdWljay1zb3J0JykucXVpY2tTb3J0O1xuXG5mdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgfVxuXG4gIHJldHVybiBzb3VyY2VNYXAuc2VjdGlvbnMgIT0gbnVsbFxuICAgID8gbmV3IEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXApXG4gICAgOiBuZXcgQmFzaWNTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXApO1xufVxuXG5Tb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID0gZnVuY3Rpb24oYVNvdXJjZU1hcCkge1xuICByZXR1cm4gQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwKGFTb3VyY2VNYXApO1xufVxuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLy8gYF9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZCBgX19vcmlnaW5hbE1hcHBpbmdzYCBhcmUgYXJyYXlzIHRoYXQgaG9sZCB0aGVcbi8vIHBhcnNlZCBtYXBwaW5nIGNvb3JkaW5hdGVzIGZyb20gdGhlIHNvdXJjZSBtYXAncyBcIm1hcHBpbmdzXCIgYXR0cmlidXRlLiBUaGV5XG4vLyBhcmUgbGF6aWx5IGluc3RhbnRpYXRlZCwgYWNjZXNzZWQgdmlhIHRoZSBgX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbi8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgZ2V0dGVycyByZXNwZWN0aXZlbHksIGFuZCB3ZSBvbmx5IHBhcnNlIHRoZSBtYXBwaW5nc1xuLy8gYW5kIGNyZWF0ZSB0aGVzZSBhcnJheXMgb25jZSBxdWVyaWVkIGZvciBhIHNvdXJjZSBsb2NhdGlvbi4gV2UganVtcCB0aHJvdWdoXG4vLyB0aGVzZSBob29wcyBiZWNhdXNlIHRoZXJlIGNhbiBiZSBtYW55IHRob3VzYW5kcyBvZiBtYXBwaW5ncywgYW5kIHBhcnNpbmdcbi8vIHRoZW0gaXMgZXhwZW5zaXZlLCBzbyB3ZSBvbmx5IHdhbnQgdG8gZG8gaXQgaWYgd2UgbXVzdC5cbi8vXG4vLyBFYWNoIG9iamVjdCBpbiB0aGUgYXJyYXlzIGlzIG9mIHRoZSBmb3JtOlxuLy9cbi8vICAgICB7XG4vLyAgICAgICBnZW5lcmF0ZWRMaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBzb3VyY2U6IFRoZSBwYXRoIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSB0aGF0IGdlbmVyYXRlZCB0aGlzXG4vLyAgICAgICAgICAgICAgIGNodW5rIG9mIGNvZGUsXG4vLyAgICAgICBvcmlnaW5hbExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRoYXRcbi8vICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsQ29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRoYXRcbi8vICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgbmFtZTogVGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIHN5bWJvbCB3aGljaCBnZW5lcmF0ZWQgdGhpcyBjaHVuayBvZlxuLy8gICAgICAgICAgICAgY29kZS5cbi8vICAgICB9XG4vL1xuLy8gQWxsIHByb3BlcnRpZXMgZXhjZXB0IGZvciBgZ2VuZXJhdGVkTGluZWAgYW5kIGBnZW5lcmF0ZWRDb2x1bW5gIGNhbiBiZVxuLy8gYG51bGxgLlxuLy9cbi8vIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMuXG4vL1xuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMuXG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX2dlbmVyYXRlZE1hcHBpbmdzID0gbnVsbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfZ2VuZXJhdGVkTWFwcGluZ3MnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gIH1cbn0pO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19vcmlnaW5hbE1hcHBpbmdzID0gbnVsbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfb3JpZ2luYWxNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncykge1xuICAgICAgdGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncywgdGhpcy5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fX29yaWdpbmFsTWFwcGluZ3M7XG4gIH1cbn0pO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGluZGV4KSB7XG4gICAgdmFyIGMgPSBhU3RyLmNoYXJBdChpbmRleCk7XG4gICAgcmV0dXJuIGMgPT09IFwiO1wiIHx8IGMgPT09IFwiLFwiO1xuICB9O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgX3BhcnNlTWFwcGluZ3NcIik7XG4gIH07XG5cblNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUiA9IDE7XG5Tb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUiA9IDI7XG5cblNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgZWFjaCBtYXBwaW5nIGJldHdlZW4gYW4gb3JpZ2luYWwgc291cmNlL2xpbmUvY29sdW1uIGFuZCBhXG4gKiBnZW5lcmF0ZWQgbGluZS9jb2x1bW4gaW4gdGhpcyBzb3VyY2UgbWFwLlxuICpcbiAqIEBwYXJhbSBGdW5jdGlvbiBhQ2FsbGJhY2tcbiAqICAgICAgICBUaGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBlYWNoIG1hcHBpbmcuXG4gKiBAcGFyYW0gT2JqZWN0IGFDb250ZXh0XG4gKiAgICAgICAgT3B0aW9uYWwuIElmIHNwZWNpZmllZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSB0aGUgdmFsdWUgb2YgYHRoaXNgIGV2ZXJ5XG4gKiAgICAgICAgdGltZSB0aGF0IGBhQ2FsbGJhY2tgIGlzIGNhbGxlZC5cbiAqIEBwYXJhbSBhT3JkZXJcbiAqICAgICAgICBFaXRoZXIgYFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUmAgb3JcbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVJgLiBTcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCB0b1xuICogICAgICAgIGl0ZXJhdGUgb3ZlciB0aGUgbWFwcGluZ3Mgc29ydGVkIGJ5IHRoZSBnZW5lcmF0ZWQgZmlsZSdzIGxpbmUvY29sdW1uXG4gKiAgICAgICAgb3JkZXIgb3IgdGhlIG9yaWdpbmFsJ3Mgc291cmNlL2xpbmUvY29sdW1uIG9yZGVyLCByZXNwZWN0aXZlbHkuIERlZmF1bHRzIHRvXG4gKiAgICAgICAgYFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUmAuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5lYWNoTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2VhY2hNYXBwaW5nKGFDYWxsYmFjaywgYUNvbnRleHQsIGFPcmRlcikge1xuICAgIHZhciBjb250ZXh0ID0gYUNvbnRleHQgfHwgbnVsbDtcbiAgICB2YXIgb3JkZXIgPSBhT3JkZXIgfHwgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSO1xuXG4gICAgdmFyIG1hcHBpbmdzO1xuICAgIHN3aXRjaCAob3JkZXIpIHtcbiAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUjpcbiAgICAgIG1hcHBpbmdzID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gb3JkZXIgb2YgaXRlcmF0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlUm9vdCA9IHRoaXMuc291cmNlUm9vdDtcbiAgICBtYXBwaW5ncy5tYXAoZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBtYXBwaW5nLnNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCAmJiBzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uLFxuICAgICAgICBvcmlnaW5hbExpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgbmFtZTogbWFwcGluZy5uYW1lID09PSBudWxsID8gbnVsbCA6IHRoaXMuX25hbWVzLmF0KG1hcHBpbmcubmFtZSlcbiAgICAgIH07XG4gICAgfSwgdGhpcykuZm9yRWFjaChhQ2FsbGJhY2ssIGNvbnRleHQpO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgYWxsIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHByb3ZpZGVkLiBJZiBubyBjb2x1bW4gaXMgcHJvdmlkZWQsIHJldHVybnMgYWxsIG1hcHBpbmdzXG4gKiBjb3JyZXNwb25kaW5nIHRvIGEgZWl0aGVyIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yIG9yIHRoZSBuZXh0XG4gKiBjbG9zZXN0IGxpbmUgdGhhdCBoYXMgYW55IG1hcHBpbmdzLiBPdGhlcndpc2UsIHJldHVybnMgYWxsIG1hcHBpbmdzXG4gKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBsaW5lIGFuZCBlaXRoZXIgdGhlIGNvbHVtbiB3ZSBhcmUgc2VhcmNoaW5nIGZvclxuICogb3IgdGhlIG5leHQgY2xvc2VzdCBjb2x1bW4gdGhhdCBoYXMgYW55IG9mZnNldHMuXG4gKlxuICogVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGNvbHVtbjogT3B0aW9uYWwuIHRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKlxuICogYW5kIGFuIGFycmF5IG9mIG9iamVjdHMgaXMgcmV0dXJuZWQsIGVhY2ggd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yKGFBcmdzKSB7XG4gICAgdmFyIGxpbmUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKTtcblxuICAgIC8vIFdoZW4gdGhlcmUgaXMgbm8gZXhhY3QgbWF0Y2gsIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kTWFwcGluZ1xuICAgIC8vIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IG1hcHBpbmcgbGVzcyB0aGFuIHRoZSBuZWVkbGUuIEJ5XG4gICAgLy8gc2V0dGluZyBuZWVkbGUub3JpZ2luYWxDb2x1bW4gdG8gMCwgd2UgdGh1cyBmaW5kIHRoZSBsYXN0IG1hcHBpbmcgZm9yXG4gICAgLy8gdGhlIGdpdmVuIGxpbmUsIHByb3ZpZGVkIHN1Y2ggYSBtYXBwaW5nIGV4aXN0cy5cbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgc291cmNlOiB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpLFxuICAgICAgb3JpZ2luYWxMaW5lOiBsaW5lLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJywgMClcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBuZWVkbGUuc291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIG5lZWRsZS5zb3VyY2UpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3NvdXJjZXMuaGFzKG5lZWRsZS5zb3VyY2UpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIG5lZWRsZS5zb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2YobmVlZGxlLnNvdXJjZSk7XG5cbiAgICB2YXIgbWFwcGluZ3MgPSBbXTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKG5lZWRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKGFBcmdzLmNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZTtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIGZvdW5kLiBTaW5jZVxuICAgICAgICAvLyBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGZvdW5kLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gb3JpZ2luYWxMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIHdlcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgLy8gU2luY2UgbWFwcGluZ3MgYXJlIHNvcnRlZCwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG1hcHBpbmdzIGZvclxuICAgICAgICAvLyB0aGUgbGluZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgd2hpbGUgKG1hcHBpbmcgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBsaW5lICYmXG4gICAgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID09IG9yaWdpbmFsQ29sdW1uKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5ncztcbiAgfTtcblxuZXhwb3J0cy5Tb3VyY2VNYXBDb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2ggd2UgY2FuXG4gKiBxdWVyeSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGZpbGUgcG9zaXRpb25zIGJ5IGdpdmluZyBpdCBhIGZpbGVcbiAqIHBvc2l0aW9uIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyB0aGUgcmF3IHNvdXJjZSBtYXAgKGVpdGhlciBhcyBhIEpTT04gc3RyaW5nLCBvclxuICogYWxyZWFkeSBwYXJzZWQgdG8gYW4gb2JqZWN0KS4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzb3VyY2UgbWFwcyBoYXZlIHRoZVxuICogZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gc291cmNlczogQW4gYXJyYXkgb2YgVVJMcyB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG5hbWVzOiBBbiBhcnJheSBvZiBpZGVudGlmaWVycyB3aGljaCBjYW4gYmUgcmVmZXJyZW5jZWQgYnkgaW5kaXZpZHVhbCBtYXBwaW5ncy5cbiAqICAgLSBzb3VyY2VSb290OiBPcHRpb25hbC4gVGhlIFVSTCByb290IGZyb20gd2hpY2ggYWxsIHNvdXJjZXMgYXJlIHJlbGF0aXZlLlxuICogICAtIHNvdXJjZXNDb250ZW50OiBPcHRpb25hbC4gQW4gYXJyYXkgb2YgY29udGVudHMgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAqICAgLSBtYXBwaW5nczogQSBzdHJpbmcgb2YgYmFzZTY0IFZMUXMgd2hpY2ggY29udGFpbiB0aGUgYWN0dWFsIG1hcHBpbmdzLlxuICogICAtIGZpbGU6IE9wdGlvbmFsLiBUaGUgZ2VuZXJhdGVkIGZpbGUgdGhpcyBzb3VyY2UgbWFwIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAqXG4gKiBIZXJlIGlzIGFuIGV4YW1wbGUgc291cmNlIG1hcCwgdGFrZW4gZnJvbSB0aGUgc291cmNlIG1hcCBzcGVjWzBdOlxuICpcbiAqICAgICB7XG4gKiAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgIGZpbGU6IFwib3V0LmpzXCIsXG4gKiAgICAgICBzb3VyY2VSb290IDogXCJcIixcbiAqICAgICAgIHNvdXJjZXM6IFtcImZvby5qc1wiLCBcImJhci5qc1wiXSxcbiAqICAgICAgIG5hbWVzOiBbXCJzcmNcIiwgXCJtYXBzXCIsIFwiYXJlXCIsIFwiZnVuXCJdLFxuICogICAgICAgbWFwcGluZ3M6IFwiQUEsQUI7O0FCQ0RFO1wiXG4gKiAgICAgfVxuICpcbiAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0P3BsaT0xI1xuICovXG5mdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgdmFyIHZlcnNpb24gPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICd2ZXJzaW9uJyk7XG4gIHZhciBzb3VyY2VzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlcycpO1xuICAvLyBTYXNzIDMuMyBsZWF2ZXMgb3V0IHRoZSAnbmFtZXMnIGFycmF5LCBzbyB3ZSBkZXZpYXRlIGZyb20gdGhlIHNwZWMgKHdoaWNoXG4gIC8vIHJlcXVpcmVzIHRoZSBhcnJheSkgdG8gcGxheSBuaWNlIGhlcmUuXG4gIHZhciBuYW1lcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ25hbWVzJywgW10pO1xuICB2YXIgc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZVJvb3QnLCBudWxsKTtcbiAgdmFyIHNvdXJjZXNDb250ZW50ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlc0NvbnRlbnQnLCBudWxsKTtcbiAgdmFyIG1hcHBpbmdzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbWFwcGluZ3MnKTtcbiAgdmFyIGZpbGUgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdmaWxlJywgbnVsbCk7XG5cbiAgLy8gT25jZSBhZ2FpbiwgU2FzcyBkZXZpYXRlcyBmcm9tIHRoZSBzcGVjIGFuZCBzdXBwbGllcyB0aGUgdmVyc2lvbiBhcyBhXG4gIC8vIHN0cmluZyByYXRoZXIgdGhhbiBhIG51bWJlciwgc28gd2UgdXNlIGxvb3NlIGVxdWFsaXR5IGNoZWNraW5nIGhlcmUuXG4gIGlmICh2ZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgfVxuXG4gIHNvdXJjZXMgPSBzb3VyY2VzXG4gICAgLm1hcChTdHJpbmcpXG4gICAgLy8gU29tZSBzb3VyY2UgbWFwcyBwcm9kdWNlIHJlbGF0aXZlIHNvdXJjZSBwYXRocyBsaWtlIFwiLi9mb28uanNcIiBpbnN0ZWFkIG9mXG4gICAgLy8gXCJmb28uanNcIi4gIE5vcm1hbGl6ZSB0aGVzZSBmaXJzdCBzbyB0aGF0IGZ1dHVyZSBjb21wYXJpc29ucyB3aWxsIHN1Y2NlZWQuXG4gICAgLy8gU2VlIGJ1Z3ppbC5sYS8xMDkwNzY4LlxuICAgIC5tYXAodXRpbC5ub3JtYWxpemUpXG4gICAgLy8gQWx3YXlzIGVuc3VyZSB0aGF0IGFic29sdXRlIHNvdXJjZXMgYXJlIGludGVybmFsbHkgc3RvcmVkIHJlbGF0aXZlIHRvXG4gICAgLy8gdGhlIHNvdXJjZSByb290LCBpZiB0aGUgc291cmNlIHJvb3QgaXMgYWJzb2x1dGUuIE5vdCBkb2luZyB0aGlzIHdvdWxkXG4gICAgLy8gYmUgcGFydGljdWxhcmx5IHByb2JsZW1hdGljIHdoZW4gdGhlIHNvdXJjZSByb290IGlzIGEgcHJlZml4IG9mIHRoZVxuICAgIC8vIHNvdXJjZSAodmFsaWQsIGJ1dCB3aHk/PykuIFNlZSBnaXRodWIgaXNzdWUgIzE5OSBhbmQgYnVnemlsLmxhLzExODg5ODIuXG4gICAgLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gc291cmNlUm9vdCAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlUm9vdCkgJiYgdXRpbC5pc0Fic29sdXRlKHNvdXJjZSlcbiAgICAgICAgPyB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZSlcbiAgICAgICAgOiBzb3VyY2U7XG4gICAgfSk7XG5cbiAgLy8gUGFzcyBgdHJ1ZWAgYmVsb3cgdG8gYWxsb3cgZHVwbGljYXRlIG5hbWVzIGFuZCBzb3VyY2VzLiBXaGlsZSBzb3VyY2UgbWFwc1xuICAvLyBhcmUgaW50ZW5kZWQgdG8gYmUgY29tcHJlc3NlZCBhbmQgZGVkdXBsaWNhdGVkLCB0aGUgVHlwZVNjcmlwdCBjb21waWxlclxuICAvLyBzb21ldGltZXMgZ2VuZXJhdGVzIHNvdXJjZSBtYXBzIHdpdGggZHVwbGljYXRlcyBpbiB0aGVtLiBTZWUgR2l0aHViIGlzc3VlXG4gIC8vICM3MiBhbmQgYnVnemlsLmxhLzg4OTQ5Mi5cbiAgdGhpcy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkobmFtZXMubWFwKFN0cmluZyksIHRydWUpO1xuICB0aGlzLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KHNvdXJjZXMsIHRydWUpO1xuXG4gIHRoaXMuc291cmNlUm9vdCA9IHNvdXJjZVJvb3Q7XG4gIHRoaXMuc291cmNlc0NvbnRlbnQgPSBzb3VyY2VzQ29udGVudDtcbiAgdGhpcy5fbWFwcGluZ3MgPSBtYXBwaW5ncztcbiAgdGhpcy5maWxlID0gZmlsZTtcbn1cblxuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIENyZWF0ZSBhIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgZnJvbSBhIFNvdXJjZU1hcEdlbmVyYXRvci5cbiAqXG4gKiBAcGFyYW0gU291cmNlTWFwR2VuZXJhdG9yIGFTb3VyY2VNYXBcbiAqICAgICAgICBUaGUgc291cmNlIG1hcCB0aGF0IHdpbGwgYmUgY29uc3VtZWQuXG4gKiBAcmV0dXJucyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2Zyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCkge1xuICAgIHZhciBzbWMgPSBPYmplY3QuY3JlYXRlKEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcblxuICAgIHZhciBuYW1lcyA9IHNtYy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fbmFtZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICB2YXIgc291cmNlcyA9IHNtYy5fc291cmNlcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9zb3VyY2VzLnRvQXJyYXkoKSwgdHJ1ZSk7XG4gICAgc21jLnNvdXJjZVJvb3QgPSBhU291cmNlTWFwLl9zb3VyY2VSb290O1xuICAgIHNtYy5zb3VyY2VzQ29udGVudCA9IGFTb3VyY2VNYXAuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQoc21jLl9zb3VyY2VzLnRvQXJyYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYy5zb3VyY2VSb290KTtcbiAgICBzbWMuZmlsZSA9IGFTb3VyY2VNYXAuX2ZpbGU7XG5cbiAgICAvLyBCZWNhdXNlIHdlIGFyZSBtb2RpZnlpbmcgdGhlIGVudHJpZXMgKGJ5IGNvbnZlcnRpbmcgc3RyaW5nIHNvdXJjZXMgYW5kXG4gICAgLy8gbmFtZXMgdG8gaW5kaWNlcyBpbnRvIHRoZSBzb3VyY2VzIGFuZCBuYW1lcyBBcnJheVNldHMpLCB3ZSBoYXZlIHRvIG1ha2VcbiAgICAvLyBhIGNvcHkgb2YgdGhlIGVudHJ5IG9yIGVsc2UgYmFkIHRoaW5ncyBoYXBwZW4uIFNoYXJlZCBtdXRhYmxlIHN0YXRlXG4gICAgLy8gc3RyaWtlcyBhZ2FpbiEgU2VlIGdpdGh1YiBpc3N1ZSAjMTkxLlxuXG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gYVNvdXJjZU1hcC5fbWFwcGluZ3MudG9BcnJheSgpLnNsaWNlKCk7XG4gICAgdmFyIGRlc3RHZW5lcmF0ZWRNYXBwaW5ncyA9IHNtYy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIGRlc3RPcmlnaW5hbE1hcHBpbmdzID0gc21jLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc3JjTWFwcGluZyA9IGdlbmVyYXRlZE1hcHBpbmdzW2ldO1xuICAgICAgdmFyIGRlc3RNYXBwaW5nID0gbmV3IE1hcHBpbmc7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gc3JjTWFwcGluZy5nZW5lcmF0ZWRMaW5lO1xuICAgICAgZGVzdE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uID0gc3JjTWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG5cbiAgICAgIGlmIChzcmNNYXBwaW5nLnNvdXJjZSkge1xuICAgICAgICBkZXN0TWFwcGluZy5zb3VyY2UgPSBzb3VyY2VzLmluZGV4T2Yoc3JjTWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbExpbmUgPSBzcmNNYXBwaW5nLm9yaWdpbmFsTGluZTtcbiAgICAgICAgZGVzdE1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBzcmNNYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIGlmIChzcmNNYXBwaW5nLm5hbWUpIHtcbiAgICAgICAgICBkZXN0TWFwcGluZy5uYW1lID0gbmFtZXMuaW5kZXhPZihzcmNNYXBwaW5nLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVzdE9yaWdpbmFsTWFwcGluZ3MucHVzaChkZXN0TWFwcGluZyk7XG4gICAgICB9XG5cbiAgICAgIGRlc3RHZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICB9XG5cbiAgICBxdWlja1NvcnQoc21jLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG5cbiAgICByZXR1cm4gc21jO1xuICB9O1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vKipcbiAqIFRoZSBsaXN0IG9mIG9yaWdpbmFsIHNvdXJjZXMuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ3NvdXJjZXMnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCA/IHV0aWwuam9pbih0aGlzLnNvdXJjZVJvb3QsIHMpIDogcztcbiAgICB9LCB0aGlzKTtcbiAgfVxufSk7XG5cbi8qKlxuICogUHJvdmlkZSB0aGUgSklUIHdpdGggYSBuaWNlIHNoYXBlIC8gaGlkZGVuIGNsYXNzLlxuICovXG5mdW5jdGlvbiBNYXBwaW5nKCkge1xuICB0aGlzLmdlbmVyYXRlZExpbmUgPSAwO1xuICB0aGlzLmdlbmVyYXRlZENvbHVtbiA9IDA7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5vcmlnaW5hbExpbmUgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsQ29sdW1uID0gbnVsbDtcbiAgdGhpcy5uYW1lID0gbnVsbDtcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHZhciBnZW5lcmF0ZWRMaW5lID0gMTtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsTGluZSA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgdmFyIHByZXZpb3VzTmFtZSA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFTdHIubGVuZ3RoO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNhY2hlZFNlZ21lbnRzID0ge307XG4gICAgdmFyIHRlbXAgPSB7fTtcbiAgICB2YXIgb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBnZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBtYXBwaW5nLCBzdHIsIHNlZ21lbnQsIGVuZCwgdmFsdWU7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChhU3RyLmNoYXJBdChpbmRleCkgPT09ICc7Jykge1xuICAgICAgICBnZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJywnKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbWFwcGluZyA9IG5ldyBNYXBwaW5nKCk7XG4gICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9IGdlbmVyYXRlZExpbmU7XG5cbiAgICAgICAgLy8gQmVjYXVzZSBlYWNoIG9mZnNldCBpcyBlbmNvZGVkIHJlbGF0aXZlIHRvIHRoZSBwcmV2aW91cyBvbmUsXG4gICAgICAgIC8vIG1hbnkgc2VnbWVudHMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBlbmNvZGluZy4gV2UgY2FuIGV4cGxvaXQgdGhpc1xuICAgICAgICAvLyBmYWN0IGJ5IGNhY2hpbmcgdGhlIHBhcnNlZCB2YXJpYWJsZSBsZW5ndGggZmllbGRzIG9mIGVhY2ggc2VnbWVudCxcbiAgICAgICAgLy8gYWxsb3dpbmcgdXMgdG8gYXZvaWQgYSBzZWNvbmQgcGFyc2UgaWYgd2UgZW5jb3VudGVyIHRoZSBzYW1lXG4gICAgICAgIC8vIHNlZ21lbnQgYWdhaW4uXG4gICAgICAgIGZvciAoZW5kID0gaW5kZXg7IGVuZCA8IGxlbmd0aDsgZW5kKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhcklzTWFwcGluZ1NlcGFyYXRvcihhU3RyLCBlbmQpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RyID0gYVN0ci5zbGljZShpbmRleCwgZW5kKTtcblxuICAgICAgICBzZWdtZW50ID0gY2FjaGVkU2VnbWVudHNbc3RyXTtcbiAgICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgICBpbmRleCArPSBzdHIubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlZ21lbnQgPSBbXTtcbiAgICAgICAgICB3aGlsZSAoaW5kZXggPCBlbmQpIHtcbiAgICAgICAgICAgIGJhc2U2NFZMUS5kZWNvZGUoYVN0ciwgaW5kZXgsIHRlbXApO1xuICAgICAgICAgICAgdmFsdWUgPSB0ZW1wLnZhbHVlO1xuICAgICAgICAgICAgaW5kZXggPSB0ZW1wLnJlc3Q7XG4gICAgICAgICAgICBzZWdtZW50LnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCBhIHNvdXJjZSwgYnV0IG5vIGxpbmUgYW5kIGNvbHVtbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCBhIHNvdXJjZSBhbmQgbGluZSwgYnV0IG5vIGNvbHVtbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhY2hlZFNlZ21lbnRzW3N0cl0gPSBzZWdtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2VuZXJhdGVkIGNvbHVtbi5cbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiArIHNlZ21lbnRbMF07XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG5cbiAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gMSkge1xuICAgICAgICAgIC8vIE9yaWdpbmFsIHNvdXJjZS5cbiAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHByZXZpb3VzU291cmNlICsgc2VnbWVudFsxXTtcbiAgICAgICAgICBwcmV2aW91c1NvdXJjZSArPSBzZWdtZW50WzFdO1xuXG4gICAgICAgICAgLy8gT3JpZ2luYWwgbGluZS5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IHByZXZpb3VzT3JpZ2luYWxMaW5lICsgc2VnbWVudFsyXTtcbiAgICAgICAgICBwcmV2aW91c09yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICAgIC8vIExpbmVzIGFyZSBzdG9yZWQgMC1iYXNlZFxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lICs9IDE7XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBjb2x1bW4uXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gKyBzZWdtZW50WzNdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gNCkge1xuICAgICAgICAgICAgLy8gT3JpZ2luYWwgbmFtZS5cbiAgICAgICAgICAgIG1hcHBpbmcubmFtZSA9IHByZXZpb3VzTmFtZSArIHNlZ21lbnRbNF07XG4gICAgICAgICAgICBwcmV2aW91c05hbWUgKz0gc2VnbWVudFs0XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICBpZiAodHlwZW9mIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG9yaWdpbmFsTWFwcGluZ3MucHVzaChtYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydChnZW5lcmF0ZWRNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCk7XG4gICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gZ2VuZXJhdGVkTWFwcGluZ3M7XG5cbiAgICBxdWlja1NvcnQob3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBvcmlnaW5hbE1hcHBpbmdzO1xuICB9O1xuXG4vKipcbiAqIEZpbmQgdGhlIG1hcHBpbmcgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGh5cG90aGV0aWNhbCBcIm5lZWRsZVwiIG1hcHBpbmcgdGhhdFxuICogd2UgYXJlIHNlYXJjaGluZyBmb3IgaW4gdGhlIGdpdmVuIFwiaGF5c3RhY2tcIiBvZiBtYXBwaW5ncy5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZmluZE1hcHBpbmcoYU5lZWRsZSwgYU1hcHBpbmdzLCBhTGluZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb2x1bW5OYW1lLCBhQ29tcGFyYXRvciwgYUJpYXMpIHtcbiAgICAvLyBUbyByZXR1cm4gdGhlIHBvc2l0aW9uIHdlIGFyZSBzZWFyY2hpbmcgZm9yLCB3ZSBtdXN0IGZpcnN0IGZpbmQgdGhlXG4gICAgLy8gbWFwcGluZyBmb3IgdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCB0aGVuIHJldHVybiB0aGUgb3Bwb3NpdGUgcG9zaXRpb24gaXRcbiAgICAvLyBwb2ludHMgdG8uIEJlY2F1c2UgdGhlIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHdlIGNhbiB1c2UgYmluYXJ5IHNlYXJjaCB0b1xuICAgIC8vIGZpbmQgdGhlIGJlc3QgbWFwcGluZy5cblxuICAgIGlmIChhTmVlZGxlW2FMaW5lTmFtZV0gPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTGluZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLCBnb3QgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICArIGFOZWVkbGVbYUxpbmVOYW1lXSk7XG4gICAgfVxuICAgIGlmIChhTmVlZGxlW2FDb2x1bW5OYW1lXSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbHVtbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLCBnb3QgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICArIGFOZWVkbGVbYUNvbHVtbk5hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmluYXJ5U2VhcmNoLnNlYXJjaChhTmVlZGxlLCBhTWFwcGluZ3MsIGFDb21wYXJhdG9yLCBhQmlhcyk7XG4gIH07XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgbGFzdCBjb2x1bW4gZm9yIGVhY2ggZ2VuZXJhdGVkIG1hcHBpbmcuIFRoZSBsYXN0IGNvbHVtbiBpc1xuICogaW5jbHVzaXZlLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb21wdXRlQ29sdW1uU3BhbnMgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9jb21wdXRlQ29sdW1uU3BhbnMoKSB7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aDsgKytpbmRleCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIC8vIE1hcHBpbmdzIGRvIG5vdCBjb250YWluIGEgZmllbGQgZm9yIHRoZSBsYXN0IGdlbmVyYXRlZCBjb2x1bW50LiBXZVxuICAgICAgLy8gY2FuIGNvbWUgdXAgd2l0aCBhbiBvcHRpbWlzdGljIGVzdGltYXRlLCBob3dldmVyLCBieSBhc3N1bWluZyB0aGF0XG4gICAgICAvLyBtYXBwaW5ncyBhcmUgY29udGlndW91cyAoaS5lLiBnaXZlbiB0d28gY29uc2VjdXRpdmUgbWFwcGluZ3MsIHRoZVxuICAgICAgLy8gZmlyc3QgbWFwcGluZyBlbmRzIHdoZXJlIHRoZSBzZWNvbmQgb25lIHN0YXJ0cykuXG4gICAgICBpZiAoaW5kZXggKyAxIDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoKSB7XG4gICAgICAgIHZhciBuZXh0TWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4ICsgMV07XG5cbiAgICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9PT0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIG1hcHBpbmcubGFzdEdlbmVyYXRlZENvbHVtbiA9IG5leHRNYXBwaW5nLmdlbmVyYXRlZENvbHVtbiAtIDE7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGxhc3QgbWFwcGluZyBmb3IgZWFjaCBsaW5lIHNwYW5zIHRoZSBlbnRpcmUgbGluZS5cbiAgICAgIG1hcHBpbmcubGFzdEdlbmVyYXRlZENvbHVtbiA9IEluZmluaXR5O1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICBuZWVkbGUsXG4gICAgICB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncyxcbiAgICAgIFwiZ2VuZXJhdGVkTGluZVwiLFxuICAgICAgXCJnZW5lcmF0ZWRDb2x1bW5cIixcbiAgICAgIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQsXG4gICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZWVkbGUuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcobWFwcGluZywgJ3NvdXJjZScsIG51bGwpO1xuICAgICAgICBpZiAoc291cmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5hdChzb3VyY2UpO1xuICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbmFtZScsIG51bGwpO1xuICAgICAgICBpZiAobmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5hdChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbExpbmUnLCBudWxsKSxcbiAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc291cmNlOiBudWxsLFxuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIG5hbWU6IG51bGxcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgdGhlIHNvdXJjZSBjb250ZW50IGZvciBldmVyeSBzb3VyY2UgaW4gdGhlIHNvdXJjZVxuICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnQubGVuZ3RoID49IHRoaXMuX3NvdXJjZXMuc2l6ZSgpICYmXG4gICAgICAhdGhpcy5zb3VyY2VzQ29udGVudC5zb21lKGZ1bmN0aW9uIChzYykgeyByZXR1cm4gc2MgPT0gbnVsbDsgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgYVNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBhU291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc291cmNlcy5oYXMoYVNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihhU291cmNlKV07XG4gICAgfVxuXG4gICAgdmFyIHVybDtcbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGxcbiAgICAgICAgJiYgKHVybCA9IHV0aWwudXJsUGFyc2UodGhpcy5zb3VyY2VSb290KSkpIHtcbiAgICAgIC8vIFhYWDogZmlsZTovLyBVUklzIGFuZCBhYnNvbHV0ZSBwYXRocyBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZm9yXG4gICAgICAvLyBtYW55IHVzZXJzLiBXZSBjYW4gaGVscCB0aGVtIG91dCB3aGVuIHRoZXkgZXhwZWN0IGZpbGU6Ly8gVVJJcyB0b1xuICAgICAgLy8gYmVoYXZlIGxpa2UgaXQgd291bGQgaWYgdGhleSB3ZXJlIHJ1bm5pbmcgYSBsb2NhbCBIVFRQIHNlcnZlci4gU2VlXG4gICAgICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD04ODU1OTcuXG4gICAgICB2YXIgZmlsZVVyaUFic1BhdGggPSBhU291cmNlLnJlcGxhY2UoL15maWxlOlxcL1xcLy8sIFwiXCIpO1xuICAgICAgaWYgKHVybC5zY2hlbWUgPT0gXCJmaWxlXCJcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhmaWxlVXJpQWJzUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGZpbGVVcmlBYnNQYXRoKV1cbiAgICAgIH1cblxuICAgICAgaWYgKCghdXJsLnBhdGggfHwgdXJsLnBhdGggPT0gXCIvXCIpXG4gICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoXCIvXCIgKyBhU291cmNlKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoXCIvXCIgKyBhU291cmNlKV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHJlY3Vyc2l2ZWx5IGZyb21cbiAgICAvLyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IuIEluIHRoYXQgY2FzZSwgd2VcbiAgICAvLyBkb24ndCB3YW50IHRvIHRocm93IGlmIHdlIGNhbid0IGZpbmQgdGhlIHNvdXJjZSAtIHdlIGp1c3Qgd2FudCB0b1xuICAgIC8vIHJldHVybiBudWxsLCBzbyB3ZSBwcm92aWRlIGEgZmxhZyB0byBleGl0IGdyYWNlZnVsbHkuXG4gICAgaWYgKG51bGxPbk1pc3NpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aFxuICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBiaWFzOiBFaXRoZXIgJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdTb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgc291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBsYXN0Q29sdW1uOiBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICBcIm9yaWdpbmFsTGluZVwiLFxuICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKG1hcHBpbmcuc291cmNlID09PSBuZWVkbGUuc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGwsXG4gICAgICBsYXN0Q29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuZXhwb3J0cy5CYXNpY1NvdXJjZU1hcENvbnN1bWVyID0gQmFzaWNTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBBbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBhcnNlZCBzb3VyY2UgbWFwIHdoaWNoXG4gKiB3ZSBjYW4gcXVlcnkgZm9yIGluZm9ybWF0aW9uLiBJdCBkaWZmZXJzIGZyb20gQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpblxuICogdGhhdCBpdCB0YWtlcyBcImluZGV4ZWRcIiBzb3VyY2UgbWFwcyAoaS5lLiBvbmVzIHdpdGggYSBcInNlY3Rpb25zXCIgZmllbGQpIGFzXG4gKiBpbnB1dC5cbiAqXG4gKiBUaGUgb25seSBwYXJhbWV0ZXIgaXMgYSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yIGFscmVhZHlcbiAqIHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgZm9yIGluZGV4ZWQgc291cmNlIG1hcHMsIHRoZXlcbiAqIGhhdmUgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICpcbiAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICogICAtIGZpbGU6IE9wdGlvbmFsLiBUaGUgZ2VuZXJhdGVkIGZpbGUgdGhpcyBzb3VyY2UgbWFwIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAqICAgLSBzZWN0aW9uczogQSBsaXN0IG9mIHNlY3Rpb24gZGVmaW5pdGlvbnMuXG4gKlxuICogRWFjaCB2YWx1ZSB1bmRlciB0aGUgXCJzZWN0aW9uc1wiIGZpZWxkIGhhcyB0d28gZmllbGRzOlxuICogICAtIG9mZnNldDogVGhlIG9mZnNldCBpbnRvIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgYXQgd2hpY2ggdGhpcyBzZWN0aW9uXG4gKiAgICAgICBiZWdpbnMgdG8gYXBwbHksIGRlZmluZWQgYXMgYW4gb2JqZWN0IHdpdGggYSBcImxpbmVcIiBhbmQgXCJjb2x1bW5cIlxuICogICAgICAgZmllbGQuXG4gKiAgIC0gbWFwOiBBIHNvdXJjZSBtYXAgZGVmaW5pdGlvbi4gVGhpcyBzb3VyY2UgbWFwIGNvdWxkIGFsc28gYmUgaW5kZXhlZCxcbiAqICAgICAgIGJ1dCBkb2Vzbid0IGhhdmUgdG8gYmUuXG4gKlxuICogSW5zdGVhZCBvZiB0aGUgXCJtYXBcIiBmaWVsZCwgaXQncyBhbHNvIHBvc3NpYmxlIHRvIGhhdmUgYSBcInVybFwiIGZpZWxkXG4gKiBzcGVjaWZ5aW5nIGEgVVJMIHRvIHJldHJpZXZlIGEgc291cmNlIG1hcCBmcm9tLCBidXQgdGhhdCdzIGN1cnJlbnRseVxuICogdW5zdXBwb3J0ZWQuXG4gKlxuICogSGVyZSdzIGFuIGV4YW1wbGUgc291cmNlIG1hcCwgdGFrZW4gZnJvbSB0aGUgc291cmNlIG1hcCBzcGVjWzBdLCBidXRcbiAqIG1vZGlmaWVkIHRvIG9taXQgYSBzZWN0aW9uIHdoaWNoIHVzZXMgdGhlIFwidXJsXCIgZmllbGQuXG4gKlxuICogIHtcbiAqICAgIHZlcnNpb24gOiAzLFxuICogICAgZmlsZTogXCJhcHAuanNcIixcbiAqICAgIHNlY3Rpb25zOiBbe1xuICogICAgICBvZmZzZXQ6IHtsaW5lOjEwMCwgY29sdW1uOjEwfSxcbiAqICAgICAgbWFwOiB7XG4gKiAgICAgICAgdmVyc2lvbiA6IDMsXG4gKiAgICAgICAgZmlsZTogXCJzZWN0aW9uLmpzXCIsXG4gKiAgICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgIG5hbWVzOiBbXCJzcmNcIiwgXCJtYXBzXCIsIFwiYXJlXCIsIFwiZnVuXCJdLFxuICogICAgICAgIG1hcHBpbmdzOiBcIkFBQUEsRTs7QUJDREU7XCJcbiAqICAgICAgfVxuICogICAgfV0sXG4gKiAgfVxuICpcbiAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0I2hlYWRpbmc9aC41MzVlczN4ZXByZ3RcbiAqL1xuZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgdmFyIHZlcnNpb24gPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICd2ZXJzaW9uJyk7XG4gIHZhciBzZWN0aW9ucyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NlY3Rpb25zJyk7XG5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgdGhpcy5fc291cmNlcyA9IG5ldyBBcnJheVNldCgpO1xuICB0aGlzLl9uYW1lcyA9IG5ldyBBcnJheVNldCgpO1xuXG4gIHZhciBsYXN0T2Zmc2V0ID0ge1xuICAgIGxpbmU6IC0xLFxuICAgIGNvbHVtbjogMFxuICB9O1xuICB0aGlzLl9zZWN0aW9ucyA9IHNlY3Rpb25zLm1hcChmdW5jdGlvbiAocykge1xuICAgIGlmIChzLnVybCkge1xuICAgICAgLy8gVGhlIHVybCBmaWVsZCB3aWxsIHJlcXVpcmUgc3VwcG9ydCBmb3IgYXN5bmNocm9uaWNpdHkuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9pc3N1ZXMvMTZcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VwcG9ydCBmb3IgdXJsIGZpZWxkIGluIHNlY3Rpb25zIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgICB9XG4gICAgdmFyIG9mZnNldCA9IHV0aWwuZ2V0QXJnKHMsICdvZmZzZXQnKTtcbiAgICB2YXIgb2Zmc2V0TGluZSA9IHV0aWwuZ2V0QXJnKG9mZnNldCwgJ2xpbmUnKTtcbiAgICB2YXIgb2Zmc2V0Q29sdW1uID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnY29sdW1uJyk7XG5cbiAgICBpZiAob2Zmc2V0TGluZSA8IGxhc3RPZmZzZXQubGluZSB8fFxuICAgICAgICAob2Zmc2V0TGluZSA9PT0gbGFzdE9mZnNldC5saW5lICYmIG9mZnNldENvbHVtbiA8IGxhc3RPZmZzZXQuY29sdW1uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWN0aW9uIG9mZnNldHMgbXVzdCBiZSBvcmRlcmVkIGFuZCBub24tb3ZlcmxhcHBpbmcuJyk7XG4gICAgfVxuICAgIGxhc3RPZmZzZXQgPSBvZmZzZXQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2VuZXJhdGVkT2Zmc2V0OiB7XG4gICAgICAgIC8vIFRoZSBvZmZzZXQgZmllbGRzIGFyZSAwLWJhc2VkLCBidXQgd2UgdXNlIDEtYmFzZWQgaW5kaWNlcyB3aGVuXG4gICAgICAgIC8vIGVuY29kaW5nL2RlY29kaW5nIGZyb20gVkxRLlxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBvZmZzZXRMaW5lICsgMSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBvZmZzZXRDb2x1bW4gKyAxXG4gICAgICB9LFxuICAgICAgY29uc3VtZXI6IG5ldyBTb3VyY2VNYXBDb25zdW1lcih1dGlsLmdldEFyZyhzLCAnbWFwJykpXG4gICAgfVxuICB9KTtcbn1cblxuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vKipcbiAqIFRoZSBsaXN0IG9mIG9yaWdpbmFsIHNvdXJjZXMuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3NlY3Rpb25zW2ldLmNvbnN1bWVyLnNvdXJjZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgc291cmNlcy5wdXNoKHRoaXMuX3NlY3Rpb25zW2ldLmNvbnN1bWVyLnNvdXJjZXNbal0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc291cmNlcztcbiAgfVxufSk7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkXG4gKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgb3IgbnVsbC5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9vcmlnaW5hbFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIGdlbmVyYXRlZExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgZ2VuZXJhdGVkQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIC8vIEZpbmQgdGhlIHNlY3Rpb24gY29udGFpbmluZyB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9uIHdlJ3JlIHRyeWluZyB0byBtYXBcbiAgICAvLyB0byBhbiBvcmlnaW5hbCBwb3NpdGlvbi5cbiAgICB2YXIgc2VjdGlvbkluZGV4ID0gYmluYXJ5U2VhcmNoLnNlYXJjaChuZWVkbGUsIHRoaXMuX3NlY3Rpb25zLFxuICAgICAgZnVuY3Rpb24obmVlZGxlLCBzZWN0aW9uKSB7XG4gICAgICAgIHZhciBjbXAgPSBuZWVkbGUuZ2VuZXJhdGVkTGluZSAtIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU7XG4gICAgICAgIGlmIChjbXApIHtcbiAgICAgICAgICByZXR1cm4gY21wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgfSk7XG4gICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xuXG4gICAgaWYgKCFzZWN0aW9uKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbmFtZTogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VjdGlvbi5jb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHtcbiAgICAgIGxpbmU6IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgIGNvbHVtbjogbmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBuZWVkbGUuZ2VuZXJhdGVkTGluZVxuICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICA6IDApLFxuICAgICAgYmlhczogYUFyZ3MuYmlhc1xuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgdGhlIHNvdXJjZSBjb250ZW50IGZvciBldmVyeSBzb3VyY2UgaW4gdGhlIHNvdXJjZVxuICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlY3Rpb25zLmV2ZXJ5KGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gcy5jb25zdW1lci5oYXNDb250ZW50c09mQWxsU291cmNlcygpO1xuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICogb3JpZ2luYWwgc291cmNlIGZpbGUuIFJldHVybnMgbnVsbCBpZiBubyBvcmlnaW5hbCBzb3VyY2UgY29udGVudCBpc1xuICogYXZhaWxhYmxlLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfc291cmNlQ29udGVudEZvcihhU291cmNlLCBudWxsT25NaXNzaW5nKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgdmFyIGNvbnRlbnQgPSBzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgdHJ1ZSk7XG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG51bGxPbk1pc3NpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aFxuICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG5cbiAgICAgIC8vIE9ubHkgY29uc2lkZXIgdGhpcyBzZWN0aW9uIGlmIHRoZSByZXF1ZXN0ZWQgc291cmNlIGlzIGluIHRoZSBsaXN0IG9mXG4gICAgICAvLyBzb3VyY2VzIG9mIHRoZSBjb25zdW1lci5cbiAgICAgIGlmIChzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZXMuaW5kZXhPZih1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpKSA9PT0gLTEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgZ2VuZXJhdGVkUG9zaXRpb24gPSBzZWN0aW9uLmNvbnN1bWVyLmdlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKTtcbiAgICAgIGlmIChnZW5lcmF0ZWRQb3NpdGlvbikge1xuICAgICAgICB2YXIgcmV0ID0ge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZFBvc2l0aW9uLmxpbmUgK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZFBvc2l0aW9uLmNvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gZ2VuZXJhdGVkUG9zaXRpb24ubGluZVxuICAgICAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgICAgIDogMClcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG4gICAgICB2YXIgc2VjdGlvbk1hcHBpbmdzID0gc2VjdGlvbi5jb25zdW1lci5fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlY3Rpb25NYXBwaW5ncy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgbWFwcGluZyA9IHNlY3Rpb25NYXBwaW5nc1tqXTtcblxuICAgICAgICB2YXIgc291cmNlID0gc2VjdGlvbi5jb25zdW1lci5fc291cmNlcy5hdChtYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGlmIChzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc2VjdGlvbi5jb25zdW1lci5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgICAgIHZhciBuYW1lID0gc2VjdGlvbi5jb25zdW1lci5fbmFtZXMuYXQobWFwcGluZy5uYW1lKTtcbiAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgICBuYW1lID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcblxuICAgICAgICAvLyBUaGUgbWFwcGluZ3MgY29taW5nIGZyb20gdGhlIGNvbnN1bWVyIGZvciB0aGUgc2VjdGlvbiBoYXZlXG4gICAgICAgIC8vIGdlbmVyYXRlZCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzZWN0aW9uLCBzbyB3ZVxuICAgICAgICAvLyBuZWVkIHRvIG9mZnNldCB0aGVtIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY29uY2F0ZW5hdGVkXG4gICAgICAgIC8vIGdlbmVyYXRlZCBmaWxlLlxuICAgICAgICB2YXIgYWRqdXN0ZWRNYXBwaW5nID0ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG1hcHBpbmcuZ2VuZXJhdGVkTGluZVxuICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICA6IDApLFxuICAgICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgb3JpZ2luYWxDb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKGFkanVzdGVkTWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgYWRqdXN0ZWRNYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncy5wdXNoKGFkanVzdGVkTWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBxdWlja1NvcnQodGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICBxdWlja1NvcnQodGhpcy5fX29yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuICB9O1xuXG5leHBvcnRzLkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciA9IEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcjtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIHBhcmFtZXRlci9vcHRpb25zXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBhcmdzIFRoZSBvYmplY3Qgd2UgYXJlIGV4dHJhY3RpbmcgdmFsdWVzIGZyb21cbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgQW4gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nXG4gKiBmcm9tIHRoZSBvYmplY3QuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmcsIGFuXG4gKiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gZ2V0QXJnKGFBcmdzLCBhTmFtZSwgYURlZmF1bHRWYWx1ZSkge1xuICBpZiAoYU5hbWUgaW4gYUFyZ3MpIHtcbiAgICByZXR1cm4gYUFyZ3NbYU5hbWVdO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYURlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFOYW1lICsgJ1wiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuJyk7XG4gIH1cbn1cbmV4cG9ydHMuZ2V0QXJnID0gZ2V0QXJnO1xuXG52YXIgdXJsUmVnZXhwID0gL14oPzooW1xcdytcXC0uXSspOik/XFwvXFwvKD86KFxcdys6XFx3KylAKT8oW1xcdy5dKikoPzo6KFxcZCspKT8oXFxTKikkLztcbnZhciBkYXRhVXJsUmVnZXhwID0gL15kYXRhOi4rXFwsLiskLztcblxuZnVuY3Rpb24gdXJsUGFyc2UoYVVybCkge1xuICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjaGVtZTogbWF0Y2hbMV0sXG4gICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgaG9zdDogbWF0Y2hbM10sXG4gICAgcG9ydDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV1cbiAgfTtcbn1cbmV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuZnVuY3Rpb24gdXJsR2VuZXJhdGUoYVBhcnNlZFVybCkge1xuICB2YXIgdXJsID0gJyc7XG4gIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnNjaGVtZSArICc6JztcbiAgfVxuICB1cmwgKz0gJy8vJztcbiAgaWYgKGFQYXJzZWRVcmwuYXV0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmF1dGggKyAnQCc7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwuaG9zdCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucG9ydCkge1xuICAgIHVybCArPSBcIjpcIiArIGFQYXJzZWRVcmwucG9ydFxuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBhdGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5wYXRoO1xuICB9XG4gIHJldHVybiB1cmw7XG59XG5leHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gKlxuICogLSBSZXBsYWNlcyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggb25lIHNsYXNoLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICpcbiAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciB1cmwgdG8gbm9ybWFsaXplLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgdmFyIHBhdGggPSBhUGF0aDtcbiAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgaWYgKHVybCkge1xuICAgIGlmICghdXJsLnBhdGgpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG4gICAgcGF0aCA9IHVybC5wYXRoO1xuICB9XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoL1xcLysvKTtcbiAgZm9yICh2YXIgcGFydCwgdXAgPSAwLCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwID4gMCkge1xuICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJ0IGlzIGJsYW5rIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLiBUcnlpbmcgdG8gZ29cbiAgICAgICAgLy8gYWJvdmUgdGhlIHJvb3QgaXMgYSBuby1vcC4gVGhlcmVmb3JlIHdlIGNhbiByZW1vdmUgYWxsICcuLicgcGFydHNcbiAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgIHBhcnRzLnNwbGljZShpICsgMSwgdXApO1xuICAgICAgICB1cCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMik7XG4gICAgICAgIHVwLS07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKHBhdGggPT09ICcnKSB7XG4gICAgcGF0aCA9IGlzQWJzb2x1dGUgPyAnLycgOiAnLic7XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgdXJsLnBhdGggPSBwYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5cbi8qKlxuICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAqXG4gKiAtIElmIGFQYXRoIGlzIGEgVVJMIG9yIGEgZGF0YSBVUkksIGFQYXRoIGlzIHJldHVybmVkLCB1bmxlc3MgYVBhdGggaXMgYVxuICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gKiAgIGZpcnN0LlxuICogLSBPdGhlcndpc2UgYVBhdGggaXMgYSBwYXRoLiBJZiBhUm9vdCBpcyBhIFVSTCwgdGhlbiBpdHMgcGF0aCBwb3J0aW9uXG4gKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAqICAgaXMgcmV0dXJuZWQuXG4gKiAgIC0gSWYgYVBhdGggaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaXMgYVBhdGguXG4gKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gKiAtIEpvaW5pbmcgZm9yIGV4YW1wbGUgJ2h0dHA6Ly8nIGFuZCAnd3d3LmV4YW1wbGUuY29tJyBpcyBhbHNvIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuICBpZiAoYVBhdGggPT09IFwiXCIpIHtcbiAgICBhUGF0aCA9IFwiLlwiO1xuICB9XG4gIHZhciBhUGF0aFVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgdmFyIGFSb290VXJsID0gdXJsUGFyc2UoYVJvb3QpO1xuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdCA9IGFSb290VXJsLnBhdGggfHwgJy8nO1xuICB9XG5cbiAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgaWYgKGFQYXRoVXJsICYmICFhUGF0aFVybC5zY2hlbWUpIHtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFQYXRoVXJsKTtcbiAgfVxuXG4gIGlmIChhUGF0aFVybCB8fCBhUGF0aC5tYXRjaChkYXRhVXJsUmVnZXhwKSkge1xuICAgIHJldHVybiBhUGF0aDtcbiAgfVxuXG4gIC8vIGBqb2luKCdodHRwOi8vJywgJ3d3dy5leGFtcGxlLmNvbScpYFxuICBpZiAoYVJvb3RVcmwgJiYgIWFSb290VXJsLmhvc3QgJiYgIWFSb290VXJsLnBhdGgpIHtcbiAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuXG4gIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgID8gYVBhdGhcbiAgICA6IG5vcm1hbGl6ZShhUm9vdC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIGFQYXRoKTtcblxuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdFVybC5wYXRoID0gam9pbmVkO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cbiAgcmV0dXJuIGpvaW5lZDtcbn1cbmV4cG9ydHMuam9pbiA9IGpvaW47XG5cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uIChhUGF0aCkge1xuICByZXR1cm4gYVBhdGguY2hhckF0KDApID09PSAnLycgfHwgISFhUGF0aC5tYXRjaCh1cmxSZWdleHApO1xufTtcblxuLyoqXG4gKiBNYWtlIGEgcGF0aCByZWxhdGl2ZSB0byBhIFVSTCBvciBhbm90aGVyIHBhdGguXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBtYWRlIHJlbGF0aXZlIHRvIGFSb290LlxuICovXG5mdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuXG4gIGFSb290ID0gYVJvb3QucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gIC8vIGNoZWNraW5nIHdoZXRoZXIgdGhlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlIHBhdGggd29uJ3Qgd29yay4gSW5zdGVhZCwgd2VcbiAgLy8gbmVlZCB0byByZW1vdmUgY29tcG9uZW50cyBmcm9tIHRoZSByb290IG9uZSBieSBvbmUsIHVudGlsIGVpdGhlciB3ZSBmaW5kXG4gIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgdmFyIGxldmVsID0gMDtcbiAgd2hpbGUgKGFQYXRoLmluZGV4T2YoYVJvb3QgKyAnLycpICE9PSAwKSB7XG4gICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb25seSBwYXJ0IG9mIHRoZSByb290IHRoYXQgaXMgbGVmdCBpcyB0aGUgc2NoZW1lIChpLmUuIGh0dHA6Ly8sXG4gICAgLy8gZmlsZTovLy8sIGV0Yy4pLCBvbmUgb3IgbW9yZSBzbGFzaGVzICgvKSwgb3Igc2ltcGx5IG5vdGhpbmcgYXQgYWxsLCB3ZVxuICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgYVJvb3QgPSBhUm9vdC5zbGljZSgwLCBpbmRleCk7XG4gICAgaWYgKGFSb290Lm1hdGNoKC9eKFteXFwvXSs6XFwvKT9cXC8qJC8pKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgKytsZXZlbDtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhZGQgYSBcIi4uL1wiIGZvciBlYWNoIGNvbXBvbmVudCB3ZSByZW1vdmVkIGZyb20gdGhlIHJvb3QuXG4gIHJldHVybiBBcnJheShsZXZlbCArIDEpLmpvaW4oXCIuLi9cIikgKyBhUGF0aC5zdWJzdHIoYVJvb3QubGVuZ3RoICsgMSk7XG59XG5leHBvcnRzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG5cbnZhciBzdXBwb3J0c051bGxQcm90byA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gISgnX19wcm90b19fJyBpbiBvYmopO1xufSgpKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkgKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICogaGF2ZSB0byBwcmVmaXggYWxsIHRoZSBzdHJpbmdzIGluIG91ciBzZXQgd2l0aCBhbiBhcmJpdHJhcnkgY2hhcmFjdGVyLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8zMFxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5mdW5jdGlvbiB0b1NldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuICckJyArIGFTdHI7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMudG9TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogdG9TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGZyb21TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiBhU3RyLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLmZyb21TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogZnJvbVNldFN0cmluZztcblxuZnVuY3Rpb24gaXNQcm90b1N0cmluZyhzKSB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBzLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOSAvKiBcIl9fcHJvdG9fX1wiLmxlbmd0aCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMSkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAyKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDMpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNCkgIT09IDExNiAvKiAndCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA1KSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDYpICE9PSAxMTQgLyogJ3InICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNykgIT09IDExMiAvKiAncCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA4KSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDkpICE9PSA5NSAgLyogJ18nICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IGxlbmd0aCAtIDEwOyBpID49IDA7IGktLSkge1xuICAgIGlmIChzLmNoYXJDb2RlQXQoaSkgIT09IDM2IC8qICckJyAqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2hlcmUgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4sIGJ1dCBkaWZmZXJlbnQgZ2VuZXJhdGVkXG4gKiBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXBwaW5nIHdpdGggYVxuICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyA9IGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zO1xuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBkZWZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgaW5kaWNlcyB3aGVyZVxuICogdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiwgYnV0IGRpZmZlcmVudFxuICogc291cmNlL25hbWUvb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGFcbiAqIG1hcHBpbmcgd2l0aCBhIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkO1xuXG5mdW5jdGlvbiBzdHJjbXAoYVN0cjEsIGFTdHIyKSB7XG4gIGlmIChhU3RyMSA9PT0gYVN0cjIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZDtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrLWdlbmVyYXRvcicsIFsnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc3RhY2tmcmFtZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrR2VuZXJhdG9yID0gZmFjdG9yeShyb290LlN0YWNrRnJhbWUpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24oU3RhY2tGcmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGJhY2t0cmFjZTogZnVuY3Rpb24gU3RhY2tHZW5lcmF0b3IkJGJhY2t0cmFjZShvcHRzKSB7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICAgICAgICAgIHZhciBtYXhTdGFja1NpemUgPSAxMDtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3B0cy5tYXhTdGFja1NpemUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgbWF4U3RhY2tTaXplID0gb3B0cy5tYXhTdGFja1NpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjdXJyID0gYXJndW1lbnRzLmNhbGxlZTtcbiAgICAgICAgICAgIHdoaWxlIChjdXJyICYmIHN0YWNrLmxlbmd0aCA8IG1heFN0YWNrU2l6ZSkge1xuICAgICAgICAgICAgICAgIC8vIEFsbG93IFY4IG9wdGltaXphdGlvbnNcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShjdXJyWydhcmd1bWVudHMnXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gY3VyclsnYXJndW1lbnRzJ11baV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgvZnVuY3Rpb24oPzpcXHMrKFtcXHckXSspKStcXHMqXFwoLy50ZXN0KGN1cnIudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh7ZnVuY3Rpb25OYW1lOiBSZWdFeHAuJDEgfHwgdW5kZWZpbmVkLCBhcmdzOiBhcmdzfSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3IFN0YWNrRnJhbWUoe2FyZ3M6IGFyZ3N9KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIuY2FsbGVyO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0YWNrO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrZnJhbWUnLCBbXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja0ZyYW1lID0gZmFjdG9yeSgpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24oKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIGZ1bmN0aW9uIF9pc051bWJlcihuKSB7XG4gICAgICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2NhcGl0YWxpemUoc3RyKSB7XG4gICAgICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9nZXR0ZXIocCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1twXTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgYm9vbGVhblByb3BzID0gWydpc0NvbnN0cnVjdG9yJywgJ2lzRXZhbCcsICdpc05hdGl2ZScsICdpc1RvcGxldmVsJ107XG4gICAgdmFyIG51bWVyaWNQcm9wcyA9IFsnY29sdW1uTnVtYmVyJywgJ2xpbmVOdW1iZXInXTtcbiAgICB2YXIgc3RyaW5nUHJvcHMgPSBbJ2ZpbGVOYW1lJywgJ2Z1bmN0aW9uTmFtZScsICdzb3VyY2UnXTtcbiAgICB2YXIgYXJyYXlQcm9wcyA9IFsnYXJncyddO1xuXG4gICAgdmFyIHByb3BzID0gYm9vbGVhblByb3BzLmNvbmNhdChudW1lcmljUHJvcHMsIHN0cmluZ1Byb3BzLCBhcnJheVByb3BzKTtcblxuICAgIGZ1bmN0aW9uIFN0YWNrRnJhbWUob2JqKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3BzW2ldKSAmJiBvYmpbcHJvcHNbaV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snc2V0JyArIF9jYXBpdGFsaXplKHByb3BzW2ldKV0ob2JqW3Byb3BzW2ldXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgU3RhY2tGcmFtZS5wcm90b3R5cGUgPSB7XG4gICAgICAgIGdldEFyZ3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJncztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0QXJnczogZnVuY3Rpb24odikge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSAhPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3MgbXVzdCBiZSBhbiBBcnJheScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcmdzID0gdjtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRFdmFsT3JpZ2luOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2YWxPcmlnaW47XG4gICAgICAgIH0sXG4gICAgICAgIHNldEV2YWxPcmlnaW46IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgU3RhY2tGcmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZhbE9yaWdpbiA9IHY7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2YWxPcmlnaW4gPSBuZXcgU3RhY2tGcmFtZSh2KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXZhbCBPcmlnaW4gbXVzdCBiZSBhbiBPYmplY3Qgb3IgU3RhY2tGcmFtZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0aGlzLmdldEZ1bmN0aW9uTmFtZSgpIHx8ICd7YW5vbnltb3VzfSc7XG4gICAgICAgICAgICB2YXIgYXJncyA9ICcoJyArICh0aGlzLmdldEFyZ3MoKSB8fCBbXSkuam9pbignLCcpICsgJyknO1xuICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gdGhpcy5nZXRGaWxlTmFtZSgpID8gKCdAJyArIHRoaXMuZ2V0RmlsZU5hbWUoKSkgOiAnJztcbiAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gX2lzTnVtYmVyKHRoaXMuZ2V0TGluZU51bWJlcigpKSA/ICgnOicgKyB0aGlzLmdldExpbmVOdW1iZXIoKSkgOiAnJztcbiAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSBfaXNOdW1iZXIodGhpcy5nZXRDb2x1bW5OdW1iZXIoKSkgPyAoJzonICsgdGhpcy5nZXRDb2x1bW5OdW1iZXIoKSkgOiAnJztcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbk5hbWUgKyBhcmdzICsgZmlsZU5hbWUgKyBsaW5lTnVtYmVyICsgY29sdW1uTnVtYmVyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9vbGVhblByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUoYm9vbGVhblByb3BzW2ldKV0gPSBfZ2V0dGVyKGJvb2xlYW5Qcm9wc1tpXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUoYm9vbGVhblByb3BzW2ldKV0gPSAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gQm9vbGVhbih2KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKGJvb2xlYW5Qcm9wc1tpXSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1lcmljUHJvcHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShudW1lcmljUHJvcHNbal0pXSA9IF9nZXR0ZXIobnVtZXJpY1Byb3BzW2pdKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShudW1lcmljUHJvcHNbal0pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIGlmICghX2lzTnVtYmVyKHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IocCArICcgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gTnVtYmVyKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkobnVtZXJpY1Byb3BzW2pdKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IHN0cmluZ1Byb3BzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUoc3RyaW5nUHJvcHNba10pXSA9IF9nZXR0ZXIoc3RyaW5nUHJvcHNba10pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKHN0cmluZ1Byb3BzW2tdKV0gPSAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gU3RyaW5nKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoc3RyaW5nUHJvcHNba10pO1xuICAgIH1cblxuICAgIHJldHVybiBTdGFja0ZyYW1lO1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZS1ncHMnLCBbJ3NvdXJjZS1tYXAnLCAnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc291cmNlLW1hcC9saWIvc291cmNlLW1hcC1jb25zdW1lcicpLCByZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tUcmFjZUdQUyA9IGZhY3Rvcnkocm9vdC5Tb3VyY2VNYXAgfHwgcm9vdC5zb3VyY2VNYXAsIHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTb3VyY2VNYXAsIFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBNYWtlIGEgWC1Eb21haW4gcmVxdWVzdCB0byB1cmwgYW5kIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB3aXRoIHJlc3BvbnNlIHRleHQgaWYgZnVsZmlsbGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gX3hkcih1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgcmVxLm9wZW4oJ2dldCcsIHVybCk7XG4gICAgICAgICAgICByZXEub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocmVxLnN0YXR1cyA+PSAyMDAgJiYgcmVxLnN0YXR1cyA8IDMwMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICh1cmwuc3Vic3RyKDAsIDcpID09PSAnZmlsZTovLycgJiYgcmVxLnJlc3BvbnNlVGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVxLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdIVFRQIHN0YXR1czogJyArIHJlcS5zdGF0dXMgKyAnIHJldHJpZXZpbmcgJyArIHVybCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcS5zZW5kKCk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIEJhc2U2NC1lbmNvZGVkIHN0cmluZyBpbnRvIGl0cyBvcmlnaW5hbCByZXByZXNlbnRhdGlvbi5cbiAgICAgKiBVc2VkIGZvciBpbmxpbmUgc291cmNlbWFwcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiNjRzdHIgQmFzZS02NCBlbmNvZGVkIHN0cmluZ1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gX2F0b2IoYjY0c3RyKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuYXRvYikge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5hdG9iKGI2NHN0cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciB3aW5kb3cuYXRvYiBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcGFyc2VKc29uKHN0cmluZykge1xuICAgICAgICBpZiAodHlwZW9mIEpTT04gIT09ICd1bmRlZmluZWQnICYmIEpTT04ucGFyc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciBKU09OLnBhcnNlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlci8qLCBjb2x1bW5OdW1iZXIqLykge1xuICAgICAgICB2YXIgc3ludGF4ZXMgPSBbXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSBmdW5jdGlvbiAoe2FyZ3N9KSBUT0RPIGFyZ3MgY2FwdHVyZVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqZnVuY3Rpb25cXGIvLFxuICAgICAgICAgICAgLy8gZnVuY3Rpb24ge25hbWV9KHthcmdzfSkgbVsxXT1uYW1lIG1bMl09YXJnc1xuICAgICAgICAgICAgL2Z1bmN0aW9uXFxzKyhbXignXCJgXSo/KVxccypcXCgoW14pXSopXFwpLyxcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGV2YWwoKVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqKD86ZXZhbHxuZXcgRnVuY3Rpb24pXFxiLyxcbiAgICAgICAgICAgIC8vIGZuX25hbWUoKSB7XG4gICAgICAgICAgICAvXFxiKD8hKD86aWZ8Zm9yfHN3aXRjaHx3aGlsZXx3aXRofGNhdGNoKVxcYikoPzooPzpzdGF0aWMpXFxzKyk/KFxcUyspXFxzKlxcKC4qP1xcKVxccypcXHsvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gKCkgPT4ge1xuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqXFwoLio/XFwpXFxzKj0+L1xuICAgICAgICBdO1xuICAgICAgICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoJ1xcbicpO1xuXG4gICAgICAgIC8vIFdhbGsgYmFja3dhcmRzIGluIHRoZSBzb3VyY2UgbGluZXMgdW50aWwgd2UgZmluZCB0aGUgbGluZSB3aGljaCBtYXRjaGVzIG9uZSBvZiB0aGUgcGF0dGVybnMgYWJvdmVcbiAgICAgICAgdmFyIGNvZGUgPSAnJztcbiAgICAgICAgdmFyIG1heExpbmVzID0gTWF0aC5taW4obGluZU51bWJlciwgMjApO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heExpbmVzOyArK2kpIHtcbiAgICAgICAgICAgIC8vIGxpbmVObyBpcyAxLWJhc2VkLCBzb3VyY2VbXSBpcyAwLWJhc2VkXG4gICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVzW2xpbmVOdW1iZXIgLSBpIC0gMV07XG4gICAgICAgICAgICB2YXIgY29tbWVudFBvcyA9IGxpbmUuaW5kZXhPZignLy8nKTtcbiAgICAgICAgICAgIGlmIChjb21tZW50UG9zID49IDApIHtcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHIoMCwgY29tbWVudFBvcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgY29kZSA9IGxpbmUgKyBjb2RlO1xuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBzeW50YXhlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHN5bnRheGVzW2luZGV4XS5leGVjKGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5jcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNvbnN1bWUgc291cmNlIG1hcHMgaW4gb2xkZXIgYnJvd3NlcnMnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhY2tmcmFtZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIFN0YWNrRnJhbWUgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmZpbGVOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gZmlsZSBuYW1lIGlzIG5vdCBhIFN0cmluZycpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBsaW5lIG51bWJlciBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICUgMSAhPT0gMCB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBjb2x1bW4gbnVtYmVyIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kU291cmNlTWFwcGluZ1VSTChzb3VyY2UpIHtcbiAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmdVcmxSZWdFeHAgPSAvXFwvXFwvWyNAXSA/c291cmNlTWFwcGluZ1VSTD0oW15cXHMnXCJdKylcXHMqJC9tZztcbiAgICAgICAgdmFyIGxhc3RTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB2YXIgbWF0Y2hTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB3aGlsZSAobWF0Y2hTb3VyY2VNYXBwaW5nVXJsID0gc291cmNlTWFwcGluZ1VybFJlZ0V4cC5leGVjKHNvdXJjZSkpIHsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgICAgICBsYXN0U291cmNlTWFwcGluZ1VybCA9IG1hdGNoU291cmNlTWFwcGluZ1VybFsxXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGFzdFNvdXJjZU1hcHBpbmdVcmwpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0U291cmNlTWFwcGluZ1VybDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc291cmNlTWFwcGluZ1VSTCBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9leHRyYWN0TG9jYXRpb25JbmZvRnJvbVNvdXJjZU1hcFNvdXJjZShzdGFja2ZyYW1lLCBzb3VyY2VNYXBDb25zdW1lciwgc291cmNlQ2FjaGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIGxvYyA9IHNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgICAgICAgIGxpbmU6IHN0YWNrZnJhbWUubGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGxvYy5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWNoZSBtYXBwZWQgc291cmNlc1xuICAgICAgICAgICAgICAgIHZhciBtYXBwZWRTb3VyY2UgPSBzb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGxvYy5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIGlmIChtYXBwZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlQ2FjaGVbbG9jLnNvdXJjZV0gPSBtYXBwZWRTb3VyY2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2l2ZW4gc3RhY2tmcmFtZSBhbmQgc291cmNlIGxvY2F0aW9uLCB1cGRhdGUgc3RhY2tmcmFtZVxuICAgICAgICAgICAgICAgICAgICBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGxvYy5uYW1lIHx8IHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogc3RhY2tmcmFtZS5hcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvYy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2MubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jLmNvbHVtblxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgb3JpZ2luYWwgc291cmNlIGZvciBnaXZlbiBzdGFja2ZyYW1lIGFuZCBzb3VyY2UgbWFwJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAqICAgICAgb3B0cy5zb3VyY2VDYWNoZSA9IHt1cmw6IFwiU291cmNlIFN0cmluZ1wifSA9PiBwcmVsb2FkIHNvdXJjZSBjYWNoZVxuICAgICAqICAgICAgb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gey9wYXRoL2ZpbGUuanMubWFwOiBTb3VyY2VNYXBDb25zdW1lcn1cbiAgICAgKiAgICAgIG9wdHMub2ZmbGluZSA9IFRydWUgdG8gcHJldmVudCBuZXR3b3JrIHJlcXVlc3RzLlxuICAgICAqICAgICAgICAgICAgICBCZXN0IGVmZm9ydCB3aXRob3V0IHNvdXJjZXMgb3Igc291cmNlIG1hcHMuXG4gICAgICogICAgICBvcHRzLmFqYXggPSBQcm9taXNlIHJldHVybmluZyBmdW5jdGlvbiB0byBtYWtlIFgtRG9tYWluIHJlcXVlc3RzXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMob3B0cykge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3RhY2tUcmFjZUdQUykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlID0gb3B0cy5zb3VyY2VDYWNoZSB8fCB7fTtcbiAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuYWpheCA9IG9wdHMuYWpheCB8fCBfeGRyO1xuXG4gICAgICAgIHRoaXMuX2F0b2IgPSBvcHRzLmF0b2IgfHwgX2F0b2I7XG5cbiAgICAgICAgdGhpcy5fZ2V0ID0gZnVuY3Rpb24gX2dldChsb2NhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBsb2NhdGlvbi5zdWJzdHIoMCwgNSkgPT09ICdkYXRhOic7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0cy5vZmZsaW5lICYmICFpc0RhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ2Fubm90IG1ha2UgbmV0d29yayByZXF1ZXN0cyBpbiBvZmZsaW5lIG1vZGUnKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF0YSBVUkxzIGNhbiBoYXZlIHBhcmFtZXRlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM5N1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1cHBvcnRlZEVuY29kaW5nUmVnZXhwID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXmRhdGE6YXBwbGljYXRpb25cXC9qc29uOyhbXFx3PTpcIi1dKzspKmJhc2U2NCwvO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbG9jYXRpb24ubWF0Y2goc3VwcG9ydGVkRW5jb2RpbmdSZWdleHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcFN0YXJ0ID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGVkU291cmNlID0gbG9jYXRpb24uc3Vic3RyKHNvdXJjZU1hcFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fYXRvYihlbmNvZGVkU291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSA9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RoZSBlbmNvZGluZyBvZiB0aGUgaW5saW5lIHNvdXJjZW1hcCBpcyBub3Qgc3VwcG9ydGVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhoclByb21pc2UgPSB0aGlzLmFqYXgobG9jYXRpb24sIHttZXRob2Q6ICdnZXQnfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZSB0aGUgUHJvbWlzZSB0byBwcmV2ZW50IGR1cGxpY2F0ZSBpbi1mbGlnaHQgcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0geGhyUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclByb21pc2UudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRpbmcgU291cmNlTWFwQ29uc3VtZXJzIGlzIGV4cGVuc2l2ZSwgc28gdGhpcyB3cmFwcyB0aGUgY3JlYXRpb24gb2YgYVxuICAgICAgICAgKiBTb3VyY2VNYXBDb25zdW1lciBpbiBhIHBlci1pbnN0YW5jZSBjYWNoZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZU1hcHBpbmdVUkwgPSBVUkwgdG8gZmV0Y2ggc291cmNlIG1hcCBmcm9tXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBkZWZhdWx0U291cmNlUm9vdCA9IERlZmF1bHQgc291cmNlIHJvb3QgZm9yIHNvdXJjZSBtYXAgaWYgdW5kZWZpbmVkXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIGEgU291cmNlTWFwQ29uc3VtZXJcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyID0gZnVuY3Rpb24gX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldChzb3VyY2VNYXBwaW5nVVJMKS50aGVuKGZ1bmN0aW9uKHNvdXJjZU1hcFNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlTWFwU291cmNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBTb3VyY2UgPSBfcGFyc2VKc29uKHNvdXJjZU1hcFNvdXJjZS5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlTWFwU291cmNlLnNvdXJjZVJvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcFNvdXJjZS5zb3VyY2VSb290ID0gZGVmYXVsdFNvdXJjZVJvb3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU291cmNlTWFwLlNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcFNvdXJjZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdID0gc291cmNlTWFwQ29uc3VtZXJQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBlbmhhbmNlIGZ1bmN0aW9uIG5hbWUgYW5kIHVzZSBzb3VyY2UgbWFwcyBmb3IgYVxuICAgICAgICAgKiBiZXR0ZXIgU3RhY2tGcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lIG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHdpdGggc291cmNlLW1hcHBlZCBTdGFja0ZyYW1lXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBpbnBvaW50ID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkcGlucG9pbnQoc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkudGhlbihmdW5jdGlvbihtYXBwZWRTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVNYXBwZWRTdGFja0ZyYW1lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtYXBwZWRTdGFja0ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZEZ1bmN0aW9uTmFtZShtYXBwZWRTdGFja0ZyYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSwgcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ2NhdGNoJ10ocmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgZ3Vlc3MgZnVuY3Rpb24gbmFtZSBmcm9tIGxvY2F0aW9uIGluZm9ybWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWVcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBlbmhhbmNlZCBTdGFja0ZyYW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZmluZEZ1bmN0aW9uTmFtZShzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChzdGFja2ZyYW1lLmZpbGVOYW1lKS50aGVuKGZ1bmN0aW9uIGdldFNvdXJjZUNhbGxiYWNrKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHN0YWNrZnJhbWUubGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ3Vlc3NlZEZ1bmN0aW9uTmFtZSA9IF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZXBsYWNlIGZ1bmN0aW9uTmFtZSBpZiB3ZSBmb3VuZCBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICAgICAgaWYgKGd1ZXNzZWRGdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZ3Vlc3NlZEZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBzdGFja2ZyYW1lLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IHN0YWNrZnJhbWUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgc2VlayBzb3VyY2UtbWFwcGVkIGxvY2F0aW9uIGFuZCByZXR1cm4gbmV3IGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdldE1hcHBlZExvY2F0aW9uID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKTtcblxuICAgICAgICAgICAgICAgIHZhciBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGU7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gc3RhY2tmcmFtZS5maWxlTmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXQoZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VNYXBwaW5nVVJMID0gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBzb3VyY2VNYXBwaW5nVVJMLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRTb3VyY2VSb290ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlTWFwcGluZ1VSTFswXSAhPT0gJy8nICYmICFpc0RhdGFVcmwgJiYgISgvXmh0dHBzPzpcXC9cXC98XlxcL1xcLy9pKS50ZXN0KHNvdXJjZU1hcHBpbmdVUkwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBwaW5nVVJMID0gZGVmYXVsdFNvdXJjZVJvb3QgKyBzb3VyY2VNYXBwaW5nVVJMO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oc291cmNlTWFwQ29uc3VtZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwU291cmNlKHN0YWNrZnJhbWUsIHNvdXJjZU1hcENvbnN1bWVyLCBzb3VyY2VDYWNoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSlbJ2NhdGNoJ10oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbn0pKTtcbiIsIi8vIFBvbHlmaWxsIGZvciBvbGQgYnJvd3NlcnNcbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5XG5pZiAoIUFycmF5LmlzQXJyYXkpIHtcbiAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xufVxuXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgRVM2UHJvbWlzZS5wb2x5ZmlsbCgpO1xufVxuXG4vLyBFUzUgUG9seWZpbGxzXG4vLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRnVuY3Rpb24vYmluZFxuaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkge1xuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24ob1RoaXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCAtIHdoYXQgaXMgdHJ5aW5nIHRvIGJlIGJvdW5kIGlzIG5vdCBjYWxsYWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgdmFyIGZUb0JpbmQgPSB0aGlzO1xuICAgICAgICB2YXIgTm9PcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZkJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gZlRvQmluZC5hcHBseSh0aGlzIGluc3RhbmNlb2YgTm9PcCAmJiBvVGhpcyA/IHRoaXMgOiBvVGhpcyxcbiAgICAgICAgICAgICAgICBhQXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIE5vT3AucHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG4gICAgICAgIGZCb3VuZC5wcm90b3R5cGUgPSBuZXcgTm9PcCgpO1xuXG4gICAgICAgIHJldHVybiBmQm91bmQ7XG4gICAgfTtcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L21hcFxuaWYgKCFBcnJheS5wcm90b3R5cGUubWFwKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgIGlmICh0aGlzID09PSB2b2lkIDAgfHwgdGhpcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIE8gPSBPYmplY3QodGhpcyk7XG4gICAgICAgIHZhciBsZW4gPSBPLmxlbmd0aCA+Pj4gMDtcbiAgICAgICAgdmFyIFQ7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBUID0gdGhpc0FyZztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBBID0gbmV3IEFycmF5KGxlbik7XG4gICAgICAgIHZhciBrID0gMDtcblxuICAgICAgICB3aGlsZSAoayA8IGxlbikge1xuICAgICAgICAgICAgdmFyIGtWYWx1ZTtcbiAgICAgICAgICAgIHZhciBtYXBwZWRWYWx1ZTtcbiAgICAgICAgICAgIGlmIChrIGluIE8pIHtcbiAgICAgICAgICAgICAgICBrVmFsdWUgPSBPW2tdO1xuICAgICAgICAgICAgICAgIG1hcHBlZFZhbHVlID0gY2FsbGJhY2suY2FsbChULCBrVmFsdWUsIGssIE8pO1xuICAgICAgICAgICAgICAgIEFba10gPSBtYXBwZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBBO1xuICAgIH07XG59XG5cbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9maWx0ZXJcbmlmICghQXJyYXkucHJvdG90eXBlLmZpbHRlcikge1xuICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbihjYWxsYmFjay8qLCB0aGlzQXJnKi8pIHtcbiAgICAgICAgaWYgKHRoaXMgPT09IHZvaWQgMCB8fCB0aGlzID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0aGlzIGlzIG51bGwgb3Igbm90IGRlZmluZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpO1xuICAgICAgICB2YXIgbGVuID0gdC5sZW5ndGggPj4+IDA7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyID8gYXJndW1lbnRzWzFdIDogdm9pZCAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSBpbiB0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRbaV07XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2ZvckVhY2hcbmlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgIHZhciBUO1xuICAgICAgICB2YXIgaztcbiAgICAgICAgaWYgKHRoaXMgPT09IG51bGwgfHwgdGhpcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcgdGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgTyA9IE9iamVjdCh0aGlzKTtcbiAgICAgICAgdmFyIGxlbiA9IE8ubGVuZ3RoID4+PiAwO1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBUID0gdGhpc0FyZztcbiAgICAgICAgfVxuICAgICAgICBrID0gMDtcbiAgICAgICAgd2hpbGUgKGsgPCBsZW4pIHtcbiAgICAgICAgICAgIHZhciBrVmFsdWU7XG4gICAgICAgICAgICBpZiAoayBpbiBPKSB7XG4gICAgICAgICAgICAgICAga1ZhbHVlID0gT1trXTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKFQsIGtWYWx1ZSwgaywgTyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrKys7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZScsIFsnZXJyb3Itc3RhY2stcGFyc2VyJywgJ3N0YWNrLWdlbmVyYXRvcicsICdzdGFja3RyYWNlLWdwcyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnZXJyb3Itc3RhY2stcGFyc2VyJyksIHJlcXVpcmUoJ3N0YWNrLWdlbmVyYXRvcicpLCByZXF1aXJlKCdzdGFja3RyYWNlLWdwcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2UgPSBmYWN0b3J5KHJvb3QuRXJyb3JTdGFja1BhcnNlciwgcm9vdC5TdGFja0dlbmVyYXRvciwgcm9vdC5TdGFja1RyYWNlR1BTKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIFN0YWNrVHJhY2UoRXJyb3JTdGFja1BhcnNlciwgU3RhY2tHZW5lcmF0b3IsIFN0YWNrVHJhY2VHUFMpIHtcbiAgICB2YXIgX29wdGlvbnMgPSB7XG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBzdGFja2ZyYW1lcyBmb3IgdGhpcyBsaWJyYXJ5IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2UkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignRXJyb3JTdGFja1BhcnNlciQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlR1BTJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrR2VuZXJhdG9yJCQnKSA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZUNhY2hlOiB7fVxuICAgIH07XG5cbiAgICB2YXIgX2dlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRHZW5lcmF0ZUVycm9yKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRXJyb3IgbXVzdCBiZSB0aHJvd24gdG8gZ2V0IHN0YWNrIGluIElFXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdlIDIgZ2l2ZW4gT2JqZWN0cy4gSWYgYSBjb25mbGljdCBvY2N1cnMgdGhlIHNlY29uZCBvYmplY3Qgd2lucy5cbiAgICAgKiBEb2VzIG5vdCBkbyBkZWVwIG1lcmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaXJzdCBiYXNlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWNvbmQgb3ZlcnJpZGVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gbWVyZ2VkIGZpcnN0IGFuZCBzZWNvbmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tZXJnZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcblxuICAgICAgICBbZmlyc3QsIHNlY29uZF0uZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVyci5zdGFjayB8fCBlcnJbJ29wZXJhI3NvdXJjZWxvYyddO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXJlZChzdGFja2ZyYW1lcywgZmlsdGVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXMuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrZnJhbWVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0KG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikgPyB0aGlzLmZyb21FcnJvcihlcnIsIG9wdHMpIDogdGhpcy5nZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgYmFja3RyYWNlIGZyb20gaW52b2NhdGlvbiBwb2ludC5cbiAgICAgICAgICogSU1QT1JUQU5UOiBEb2VzIG5vdCBoYW5kbGUgc291cmNlIG1hcHMgb3IgZ3Vlc3MgZnVuY3Rpb24gbmFtZXMhXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0U3luYzogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0U3luYyhvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyKSA6IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyZWQoc3RhY2ssIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3Igb2JqZWN0LCBwYXJzZSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmb3IgQXJyYXlbU3RhY2tGcmFtZX1cbiAgICAgICAgICovXG4gICAgICAgIGZyb21FcnJvcjogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZnJvbUVycm9yKGVycm9yLCBvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBncHMgPSBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrZnJhbWVzID0gX2ZpbHRlcmVkKEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyb3IpLCBvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShQcm9taXNlLmFsbChzdGFja2ZyYW1lcy5tYXAoZnVuY3Rpb24oc2YpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVPcmlnaW5hbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ3BzLnBpbnBvaW50KHNmKS50aGVuKHJlc29sdmUsIHJlc29sdmVPcmlnaW5hbClbJ2NhdGNoJ10ocmVzb2x2ZU9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBTdGFja0dlbmVyYXRvciB0byBnZW5lcmF0ZSBhIGJhY2t0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IG9mIEFycmF5W1N0YWNrRnJhbWVdXG4gICAgICAgICAqL1xuICAgICAgICBnZW5lcmF0ZUFydGlmaWNpYWxseTogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2VuZXJhdGVBcnRpZmljaWFsbHkob3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgc3RhY2tGcmFtZXMgPSBTdGFja0dlbmVyYXRvci5iYWNrdHJhY2Uob3B0cyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgc3RhY2tGcmFtZXMgPSBzdGFja0ZyYW1lcy5maWx0ZXIob3B0cy5maWx0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGFja0ZyYW1lcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24sIHdyYXAgaXQgc3VjaCB0aGF0IGludm9jYXRpb25zIHRyaWdnZXIgYSBjYWxsYmFjayB0aGF0XG4gICAgICAgICAqIGlzIGNhbGxlZCB3aXRoIGEgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGluc3RydW1lbnRlZFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdpdGggYSBzdGFjayB0cmFjZSBvbiBpbnZvY2F0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVycmJhY2sgb3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGVycm9yIGlmIHVuYWJsZSB0byBnZXQgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIG9wdGlvbmFsIGNvbnRleHQgb2JqZWN0IChlLmcuIHdpbmRvdylcbiAgICAgICAgICovXG4gICAgICAgIGluc3RydW1lbnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnQoZm4sIGNhbGxiYWNrLCBlcnJiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBpbnN0cnVtZW50ZWQsIHJldHVybiBnaXZlbiBGdW5jdGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGluc3RydW1lbnRlZCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnRlZCgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCgpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZyB8fCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb21FcnJvcihlKS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrKVsnY2F0Y2gnXShlcnJiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGluc3RydW1lbnRlZC5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID0gZm47XG5cbiAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50ZWQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBpbnN0cnVtZW50ZWQsXG4gICAgICAgICAqIHJldmVydCB0aGUgZnVuY3Rpb24gdG8gaXQncyBvcmlnaW5hbCAobm9uLWluc3RydW1lbnRlZCkgc3RhdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGRlLWluc3RydW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGRlaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZGVpbnN0cnVtZW50KGZuKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGUtaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIG5vdCBpbnN0cnVtZW50ZWQsIHJldHVybiBvcmlnaW5hbFxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3IgbWVzc2FnZSBhbmQgQXJyYXkgb2YgU3RhY2tGcmFtZXMsIHNlcmlhbGl6ZSBhbmQgUE9TVCB0byBnaXZlbiBVUkwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrZnJhbWVzXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVycm9yTXNnXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0T3B0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgcmVwb3J0OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRyZXBvcnQoc3RhY2tmcmFtZXMsIHVybCwgZXJyb3JNc2csIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPj0gMjAwICYmIHJlcS5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdQT1NUIHRvICcgKyB1cmwgKyAnIGZhaWxlZCB3aXRoIHN0YXR1czogJyArIHJlcS5zdGF0dXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVxLm9wZW4oJ3Bvc3QnLCB1cmwpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHJlcXVlc3QgaGVhZGVyc1xuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucyAmJiB0eXBlb2YgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgaGVhZGVyc1toZWFkZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZXBvcnRQYXlsb2FkID0ge3N0YWNrOiBzdGFja2ZyYW1lc307XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQgJiYgZXJyb3JNc2cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0UGF5bG9hZC5tZXNzYWdlID0gZXJyb3JNc2c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVwb3J0UGF5bG9hZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIl19 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9lczYtcHJvbWlzZS9kaXN0L2VzNi1wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2pzb24zL2xpYi9qc29uMy5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc3RhY2stZ2VuZXJhdG9yL3N0YWNrLWdlbmVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja2ZyYW1lL3N0YWNrZnJhbWUuanMiLCJub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1ncHMvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2FycmF5LXNldC5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja3RyYWNlLWdwcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LXZscS5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja3RyYWNlLWdwcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iaW5hcnktc2VhcmNoLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9xdWljay1zb3J0LmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi91dGlsLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL3N0YWNrdHJhY2UtZ3BzLmpzIiwicG9seWZpbGxzLmpzIiwic3RhY2t0cmFjZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNoTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNqb0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3Q0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWpDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ2Vycm9yLXN0YWNrLXBhcnNlcicsIFsnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc3RhY2tmcmFtZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LkVycm9yU3RhY2tQYXJzZXIgPSBmYWN0b3J5KHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyKFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgRklSRUZPWF9TQUZBUklfU1RBQ0tfUkVHRVhQID0gLyhefEApXFxTK1xcOlxcZCsvO1xuICAgIHZhciBDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQID0gL15cXHMqYXQgLiooXFxTK1xcOlxcZCt8XFwobmF0aXZlXFwpKS9tO1xuICAgIHZhciBTQUZBUklfTkFUSVZFX0NPREVfUkVHRVhQID0gL14oZXZhbEApPyhcXFtuYXRpdmUgY29kZVxcXSk/JC87XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gRXJyb3Igb2JqZWN0LCBleHRyYWN0IHRoZSBtb3N0IGluZm9ybWF0aW9uIGZyb20gaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gb2YgU3RhY2tGcmFtZXNcbiAgICAgICAgICovXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZShlcnJvcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlcnJvci5zdGFja3RyYWNlICE9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZXJyb3JbJ29wZXJhI3NvdXJjZWxvYyddICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmEoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGFjayAmJiBlcnJvci5zdGFjay5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlVjhPcklFKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUZGT3JTYWZhcmkoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXJzZSBnaXZlbiBFcnJvciBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvLyBTZXBhcmF0ZSBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycyBmcm9tIGEgc3RyaW5nIG9mIHRoZSBmb3JtOiAoVVJJOkxpbmU6Q29sdW1uKVxuICAgICAgICBleHRyYWN0TG9jYXRpb246IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJGV4dHJhY3RMb2NhdGlvbih1cmxMaWtlKSB7XG4gICAgICAgICAgICAvLyBGYWlsLWZhc3QgYnV0IHJldHVybiBsb2NhdGlvbnMgbGlrZSBcIihuYXRpdmUpXCJcbiAgICAgICAgICAgIGlmICh1cmxMaWtlLmluZGV4T2YoJzonKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3VybExpa2VdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcmVnRXhwID0gLyguKz8pKD86XFw6KFxcZCspKT8oPzpcXDooXFxkKykpPyQvO1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gcmVnRXhwLmV4ZWModXJsTGlrZS5yZXBsYWNlKC9bXFwoXFwpXS9nLCAnJykpO1xuICAgICAgICAgICAgcmV0dXJuIFtwYXJ0c1sxXSwgcGFydHNbMl0gfHwgdW5kZWZpbmVkLCBwYXJ0c1szXSB8fCB1bmRlZmluZWRdO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlVjhPcklFOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZVY4T3JJRShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCcoZXZhbCAnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgZXZhbCBpbmZvcm1hdGlvbiB1bnRpbCB3ZSBpbXBsZW1lbnQgc3RhY2t0cmFjZS5qcy9zdGFja2ZyYW1lIzhcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvZXZhbCBjb2RlL2csICdldmFsJykucmVwbGFjZSgvKFxcKGV2YWwgYXQgW15cXCgpXSopfChcXClcXCwuKiQpL2csICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGxpbmUucmVwbGFjZSgvXlxccysvLCAnJykucmVwbGFjZSgvXFwoZXZhbCBjb2RlL2csICcoJykuc3BsaXQoL1xccysvKS5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRva2Vucy5qb2luKCcgJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IFsnZXZhbCcsICc8YW5vbnltb3VzPiddLmluZGV4T2YobG9jYXRpb25QYXJ0c1swXSkgPiAtMSA/IHVuZGVmaW5lZCA6IGxvY2F0aW9uUGFydHNbMF07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VGRk9yU2FmYXJpOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZUZGT3JTYWZhcmkoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhbGluZS5tYXRjaChTQUZBUklfTkFUSVZFX0NPREVfUkVHRVhQKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IGV2YWwgaW5mb3JtYXRpb24gdW50aWwgd2UgaW1wbGVtZW50IHN0YWNrdHJhY2UuanMvc3RhY2tmcmFtZSM4XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignID4gZXZhbCcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvIGxpbmUgKFxcZCspKD86ID4gZXZhbCBsaW5lIFxcZCspKiA+IGV2YWxcXDpcXGQrXFw6XFxkKy9nLCAnOiQxJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignQCcpID09PSAtMSAmJiBsaW5lLmluZGV4T2YoJzonKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIGV2YWwgZnJhbWVzIG9ubHkgaGF2ZSBmdW5jdGlvbiBuYW1lcyBhbmQgbm90aGluZyBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGxpbmVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZVJlZ2V4ID0gLygoLipcIi4rXCJbXkBdKik/W15AXSopKD86QCkvO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IGxpbmUubWF0Y2goZnVuY3Rpb25OYW1lUmVnZXgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gbWF0Y2hlcyAmJiBtYXRjaGVzWzFdID8gbWF0Y2hlc1sxXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbihsaW5lLnJlcGxhY2UoZnVuY3Rpb25OYW1lUmVnZXgsICcnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmEoZSkge1xuICAgICAgICAgICAgaWYgKCFlLnN0YWNrdHJhY2UgfHwgKGUubWVzc2FnZS5pbmRleE9mKCdcXG4nKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlLnNwbGl0KCdcXG4nKS5sZW5ndGggPiBlLnN0YWNrdHJhY2Uuc3BsaXQoJ1xcbicpLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhOShlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWUuc3RhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTAoZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmExMShlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhOTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTkoZSkge1xuICAgICAgICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspL2k7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBlLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMiwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lUkUuZXhlYyhsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lc1tpXVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmExMDogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTEwKGUpIHtcbiAgICAgICAgICAgIHZhciBsaW5lUkUgPSAvTGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKSg/OjogSW4gZnVuY3Rpb24gKFxcUyspKT8kL2k7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBlLnN0YWNrdHJhY2Uuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lUkUuZXhlYyhsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbWF0Y2hbM10gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVzW2ldXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBPcGVyYSAxMC42NSsgRXJyb3Iuc3RhY2sgdmVyeSBzaW1pbGFyIHRvIEZGL1NhZmFyaVxuICAgICAgICBwYXJzZU9wZXJhMTE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFApICYmICFsaW5lLm1hdGNoKC9eRXJyb3IgY3JlYXRlZCBhdC8pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBsaW5lLnNwbGl0KCdAJyk7XG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbih0b2tlbnMucG9wKCkpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbkNhbGwgPSAodG9rZW5zLnNoaWZ0KCkgfHwgJycpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbkNhbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88YW5vbnltb3VzIGZ1bmN0aW9uKDogKFxcdyspKT8+LywgJyQyJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXChbXlxcKV0qXFwpL2csICcnKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3NSYXc7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uQ2FsbC5tYXRjaCgvXFwoKFteXFwpXSopXFwpLykpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1JhdyA9IGZ1bmN0aW9uQ2FsbC5yZXBsYWNlKC9eW15cXChdK1xcKChbXlxcKV0qKVxcKSQvLCAnJDEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSAoYXJnc1JhdyA9PT0gdW5kZWZpbmVkIHx8IGFyZ3NSYXcgPT09ICdbYXJndW1lbnRzIG5vdCBhdmFpbGFibGVdJykgP1xuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgOiBhcmdzUmF3LnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG59KSk7XG4iLCIvKiFcbiAqIEBvdmVydmlldyBlczYtcHJvbWlzZSAtIGEgdGlueSBpbXBsZW1lbnRhdGlvbiBvZiBQcm9taXNlcy9BKy5cbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE0IFllaHVkYSBLYXR6LCBUb20gRGFsZSwgU3RlZmFuIFBlbm5lciBhbmQgY29udHJpYnV0b3JzIChDb252ZXJzaW9uIHRvIEVTNiBBUEkgYnkgSmFrZSBBcmNoaWJhbGQpXG4gKiBAbGljZW5zZSAgIExpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlXG4gKiAgICAgICAgICAgIFNlZSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc3RlZmFucGVubmVyL2VzNi1wcm9taXNlL21hc3Rlci9MSUNFTlNFXG4gKiBAdmVyc2lvbiAgIDMuMy4xXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsLkVTNlByb21pc2UgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG9iamVjdE9yRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG59XG5cbnZhciBfaXNBcnJheSA9IHVuZGVmaW5lZDtcbmlmICghQXJyYXkuaXNBcnJheSkge1xuICBfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcbn0gZWxzZSB7XG4gIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbn1cblxudmFyIGlzQXJyYXkgPSBfaXNBcnJheTtcblxudmFyIGxlbiA9IDA7XG52YXIgdmVydHhOZXh0ID0gdW5kZWZpbmVkO1xudmFyIGN1c3RvbVNjaGVkdWxlckZuID0gdW5kZWZpbmVkO1xuXG52YXIgYXNhcCA9IGZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGFyZykge1xuICBxdWV1ZVtsZW5dID0gY2FsbGJhY2s7XG4gIHF1ZXVlW2xlbiArIDFdID0gYXJnO1xuICBsZW4gKz0gMjtcbiAgaWYgKGxlbiA9PT0gMikge1xuICAgIC8vIElmIGxlbiBpcyAyLCB0aGF0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBhc3luYyBmbHVzaC5cbiAgICAvLyBJZiBhZGRpdGlvbmFsIGNhbGxiYWNrcyBhcmUgcXVldWVkIGJlZm9yZSB0aGUgcXVldWUgaXMgZmx1c2hlZCwgdGhleVxuICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgZmx1c2ggdGhhdCB3ZSBhcmUgc2NoZWR1bGluZy5cbiAgICBpZiAoY3VzdG9tU2NoZWR1bGVyRm4pIHtcbiAgICAgIGN1c3RvbVNjaGVkdWxlckZuKGZsdXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZWR1bGVGbHVzaCgpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gc2V0U2NoZWR1bGVyKHNjaGVkdWxlRm4pIHtcbiAgY3VzdG9tU2NoZWR1bGVyRm4gPSBzY2hlZHVsZUZuO1xufVxuXG5mdW5jdGlvbiBzZXRBc2FwKGFzYXBGbikge1xuICBhc2FwID0gYXNhcEZuO1xufVxuXG52YXIgYnJvd3NlcldpbmRvdyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdW5kZWZpbmVkO1xudmFyIGJyb3dzZXJHbG9iYWwgPSBicm93c2VyV2luZG93IHx8IHt9O1xudmFyIEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID0gYnJvd3Nlckdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGJyb3dzZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBpc05vZGUgPSB0eXBlb2Ygc2VsZiA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICh7fSkudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nO1xuXG4vLyB0ZXN0IGZvciB3ZWIgd29ya2VyIGJ1dCBub3QgaW4gSUUxMFxudmFyIGlzV29ya2VyID0gdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJztcblxuLy8gbm9kZVxuZnVuY3Rpb24gdXNlTmV4dFRpY2soKSB7XG4gIC8vIG5vZGUgdmVyc2lvbiAwLjEwLnggZGlzcGxheXMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gbmV4dFRpY2sgaXMgdXNlZCByZWN1cnNpdmVseVxuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2N1am9qcy93aGVuL2lzc3Vlcy80MTAgZm9yIGRldGFpbHNcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gIH07XG59XG5cbi8vIHZlcnR4XG5mdW5jdGlvbiB1c2VWZXJ0eFRpbWVyKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZlcnR4TmV4dChmbHVzaCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZU11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gIHZhciBpdGVyYXRpb25zID0gMDtcbiAgdmFyIG9ic2VydmVyID0gbmV3IEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKGZsdXNoKTtcbiAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gIG9ic2VydmVyLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgbm9kZS5kYXRhID0gaXRlcmF0aW9ucyA9ICsraXRlcmF0aW9ucyAlIDI7XG4gIH07XG59XG5cbi8vIHdlYiB3b3JrZXJcbmZ1bmN0aW9uIHVzZU1lc3NhZ2VDaGFubmVsKCkge1xuICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZsdXNoO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKDApO1xuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VTZXRUaW1lb3V0KCkge1xuICAvLyBTdG9yZSBzZXRUaW1lb3V0IHJlZmVyZW5jZSBzbyBlczYtcHJvbWlzZSB3aWxsIGJlIHVuYWZmZWN0ZWQgYnlcbiAgLy8gb3RoZXIgY29kZSBtb2RpZnlpbmcgc2V0VGltZW91dCAobGlrZSBzaW5vbi51c2VGYWtlVGltZXJzKCkpXG4gIHZhciBnbG9iYWxTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2xvYmFsU2V0VGltZW91dChmbHVzaCwgMSk7XG4gIH07XG59XG5cbnZhciBxdWV1ZSA9IG5ldyBBcnJheSgxMDAwKTtcbmZ1bmN0aW9uIGZsdXNoKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gcXVldWVbaV07XG4gICAgdmFyIGFyZyA9IHF1ZXVlW2kgKyAxXTtcblxuICAgIGNhbGxiYWNrKGFyZyk7XG5cbiAgICBxdWV1ZVtpXSA9IHVuZGVmaW5lZDtcbiAgICBxdWV1ZVtpICsgMV0gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBsZW4gPSAwO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0VmVydHgoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHIgPSByZXF1aXJlO1xuICAgIHZhciB2ZXJ0eCA9IHIoJ3ZlcnR4Jyk7XG4gICAgdmVydHhOZXh0ID0gdmVydHgucnVuT25Mb29wIHx8IHZlcnR4LnJ1bk9uQ29udGV4dDtcbiAgICByZXR1cm4gdXNlVmVydHhUaW1lcigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHVzZVNldFRpbWVvdXQoKTtcbiAgfVxufVxuXG52YXIgc2NoZWR1bGVGbHVzaCA9IHVuZGVmaW5lZDtcbi8vIERlY2lkZSB3aGF0IGFzeW5jIG1ldGhvZCB0byB1c2UgdG8gdHJpZ2dlcmluZyBwcm9jZXNzaW5nIG9mIHF1ZXVlZCBjYWxsYmFja3M6XG5pZiAoaXNOb2RlKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VOZXh0VGljaygpO1xufSBlbHNlIGlmIChCcm93c2VyTXV0YXRpb25PYnNlcnZlcikge1xuICBzY2hlZHVsZUZsdXNoID0gdXNlTXV0YXRpb25PYnNlcnZlcigpO1xufSBlbHNlIGlmIChpc1dvcmtlcikge1xuICBzY2hlZHVsZUZsdXNoID0gdXNlTWVzc2FnZUNoYW5uZWwoKTtcbn0gZWxzZSBpZiAoYnJvd3NlcldpbmRvdyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSBhdHRlbXB0VmVydHgoKTtcbn0gZWxzZSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VTZXRUaW1lb3V0KCk7XG59XG5cbmZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgdmFyIF9hcmd1bWVudHMgPSBhcmd1bWVudHM7XG5cbiAgdmFyIHBhcmVudCA9IHRoaXM7XG5cbiAgdmFyIGNoaWxkID0gbmV3IHRoaXMuY29uc3RydWN0b3Iobm9vcCk7XG5cbiAgaWYgKGNoaWxkW1BST01JU0VfSURdID09PSB1bmRlZmluZWQpIHtcbiAgICBtYWtlUHJvbWlzZShjaGlsZCk7XG4gIH1cblxuICB2YXIgX3N0YXRlID0gcGFyZW50Ll9zdGF0ZTtcblxuICBpZiAoX3N0YXRlKSB7XG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjYWxsYmFjayA9IF9hcmd1bWVudHNbX3N0YXRlIC0gMV07XG4gICAgICBhc2FwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrKF9zdGF0ZSwgY2hpbGQsIGNhbGxiYWNrLCBwYXJlbnQuX3Jlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbik7XG4gIH1cblxuICByZXR1cm4gY2hpbGQ7XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yZXNvbHZlYCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdpbGwgYmVjb21lIHJlc29sdmVkIHdpdGggdGhlXG4gIHBhc3NlZCBgdmFsdWVgLiBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgcmVzb2x2ZSgxKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyB2YWx1ZSA9PT0gMVxuICB9KTtcbiAgYGBgXG5cbiAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoMSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyB2YWx1ZSA9PT0gMVxuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCByZXNvbHZlXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBbnl9IHZhbHVlIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCB3aXRoXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgZnVsZmlsbGVkIHdpdGggdGhlIGdpdmVuXG4gIGB2YWx1ZWBcbiovXG5mdW5jdGlvbiByZXNvbHZlKG9iamVjdCkge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuXG4gIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0LmNvbnN0cnVjdG9yID09PSBDb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcbiAgX3Jlc29sdmUocHJvbWlzZSwgb2JqZWN0KTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbnZhciBQUk9NSVNFX0lEID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDE2KTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnZhciBQRU5ESU5HID0gdm9pZCAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xuXG52YXIgR0VUX1RIRU5fRVJST1IgPSBuZXcgRXJyb3JPYmplY3QoKTtcblxuZnVuY3Rpb24gc2VsZkZ1bGZpbGxtZW50KCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIik7XG59XG5cbmZ1bmN0aW9uIGNhbm5vdFJldHVybk93bigpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGhlbihwcm9taXNlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHByb21pc2UudGhlbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBHRVRfVEhFTl9FUlJPUi5lcnJvciA9IGVycm9yO1xuICAgIHJldHVybiBHRVRfVEhFTl9FUlJPUjtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlUaGVuKHRoZW4sIHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpIHtcbiAgdHJ5IHtcbiAgICB0aGVuLmNhbGwodmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUsIHRoZW4pIHtcbiAgYXNhcChmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgIHZhciBzZWFsZWQgPSBmYWxzZTtcbiAgICB2YXIgZXJyb3IgPSB0cnlUaGVuKHRoZW4sIHRoZW5hYmxlLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChzZWFsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2VhbGVkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGVuYWJsZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuXG4gICAgICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSwgJ1NldHRsZTogJyArIChwcm9taXNlLl9sYWJlbCB8fCAnIHVua25vd24gcHJvbWlzZScpKTtcblxuICAgIGlmICghc2VhbGVkICYmIGVycm9yKSB7XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgX3JlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgfVxuICB9LCBwcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUpIHtcbiAgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gRlVMRklMTEVEKSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgfSBlbHNlIGlmICh0aGVuYWJsZS5fc3RhdGUgPT09IFJFSkVDVEVEKSB7XG4gICAgX3JlamVjdChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgfSBlbHNlIHtcbiAgICBzdWJzY3JpYmUodGhlbmFibGUsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuJCQpIHtcbiAgaWYgKG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IgPT09IHByb21pc2UuY29uc3RydWN0b3IgJiYgdGhlbiQkID09PSB0aGVuICYmIG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IucmVzb2x2ZSA9PT0gcmVzb2x2ZSkge1xuICAgIGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICB9IGVsc2Uge1xuICAgIGlmICh0aGVuJCQgPT09IEdFVF9USEVOX0VSUk9SKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIEdFVF9USEVOX0VSUk9SLmVycm9yKTtcbiAgICB9IGVsc2UgaWYgKHRoZW4kJCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbih0aGVuJCQpKSB7XG4gICAgICBoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSwgdGhlbiQkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCBtYXliZVRoZW5hYmxlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpIHtcbiAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgX3JlamVjdChwcm9taXNlLCBzZWxmRnVsZmlsbG1lbnQoKSk7XG4gIH0gZWxzZSBpZiAob2JqZWN0T3JGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIHZhbHVlLCBnZXRUaGVuKHZhbHVlKSk7XG4gIH0gZWxzZSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaFJlamVjdGlvbihwcm9taXNlKSB7XG4gIGlmIChwcm9taXNlLl9vbmVycm9yKSB7XG4gICAgcHJvbWlzZS5fb25lcnJvcihwcm9taXNlLl9yZXN1bHQpO1xuICB9XG5cbiAgcHVibGlzaChwcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gZnVsZmlsbChwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwcm9taXNlLl9yZXN1bHQgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fc3RhdGUgPSBGVUxGSUxMRUQ7XG5cbiAgaWYgKHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIGFzYXAocHVibGlzaCwgcHJvbWlzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3JlamVjdChwcm9taXNlLCByZWFzb24pIHtcbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByb21pc2UuX3N0YXRlID0gUkVKRUNURUQ7XG4gIHByb21pc2UuX3Jlc3VsdCA9IHJlYXNvbjtcblxuICBhc2FwKHB1Ymxpc2hSZWplY3Rpb24sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBzdWJzY3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgdmFyIF9zdWJzY3JpYmVycyA9IHBhcmVudC5fc3Vic2NyaWJlcnM7XG4gIHZhciBsZW5ndGggPSBfc3Vic2NyaWJlcnMubGVuZ3RoO1xuXG4gIHBhcmVudC5fb25lcnJvciA9IG51bGw7XG5cbiAgX3N1YnNjcmliZXJzW2xlbmd0aF0gPSBjaGlsZDtcbiAgX3N1YnNjcmliZXJzW2xlbmd0aCArIEZVTEZJTExFRF0gPSBvbkZ1bGZpbGxtZW50O1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgUkVKRUNURURdID0gb25SZWplY3Rpb247XG5cbiAgaWYgKGxlbmd0aCA9PT0gMCAmJiBwYXJlbnQuX3N0YXRlKSB7XG4gICAgYXNhcChwdWJsaXNoLCBwYXJlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1Ymxpc2gocHJvbWlzZSkge1xuICB2YXIgc3Vic2NyaWJlcnMgPSBwcm9taXNlLl9zdWJzY3JpYmVycztcbiAgdmFyIHNldHRsZWQgPSBwcm9taXNlLl9zdGF0ZTtcblxuICBpZiAoc3Vic2NyaWJlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGNoaWxkID0gdW5kZWZpbmVkLFxuICAgICAgY2FsbGJhY2sgPSB1bmRlZmluZWQsXG4gICAgICBkZXRhaWwgPSBwcm9taXNlLl9yZXN1bHQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJzY3JpYmVycy5sZW5ndGg7IGkgKz0gMykge1xuICAgIGNoaWxkID0gc3Vic2NyaWJlcnNbaV07XG4gICAgY2FsbGJhY2sgPSBzdWJzY3JpYmVyc1tpICsgc2V0dGxlZF07XG5cbiAgICBpZiAoY2hpbGQpIHtcbiAgICAgIGludm9rZUNhbGxiYWNrKHNldHRsZWQsIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soZGV0YWlsKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlLl9zdWJzY3JpYmVycy5sZW5ndGggPSAwO1xufVxuXG5mdW5jdGlvbiBFcnJvck9iamVjdCgpIHtcbiAgdGhpcy5lcnJvciA9IG51bGw7XG59XG5cbnZhciBUUllfQ0FUQ0hfRVJST1IgPSBuZXcgRXJyb3JPYmplY3QoKTtcblxuZnVuY3Rpb24gdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCkge1xuICB0cnkge1xuICAgIHJldHVybiBjYWxsYmFjayhkZXRhaWwpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgVFJZX0NBVENIX0VSUk9SLmVycm9yID0gZTtcbiAgICByZXR1cm4gVFJZX0NBVENIX0VSUk9SO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZUNhbGxiYWNrKHNldHRsZWQsIHByb21pc2UsIGNhbGxiYWNrLCBkZXRhaWwpIHtcbiAgdmFyIGhhc0NhbGxiYWNrID0gaXNGdW5jdGlvbihjYWxsYmFjayksXG4gICAgICB2YWx1ZSA9IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yID0gdW5kZWZpbmVkLFxuICAgICAgc3VjY2VlZGVkID0gdW5kZWZpbmVkLFxuICAgICAgZmFpbGVkID0gdW5kZWZpbmVkO1xuXG4gIGlmIChoYXNDYWxsYmFjaykge1xuICAgIHZhbHVlID0gdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCk7XG5cbiAgICBpZiAodmFsdWUgPT09IFRSWV9DQVRDSF9FUlJPUikge1xuICAgICAgZmFpbGVkID0gdHJ1ZTtcbiAgICAgIGVycm9yID0gdmFsdWUuZXJyb3I7XG4gICAgICB2YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1Y2NlZWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGNhbm5vdFJldHVybk93bigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBkZXRhaWw7XG4gICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIC8vIG5vb3BcbiAgfSBlbHNlIGlmIChoYXNDYWxsYmFjayAmJiBzdWNjZWVkZWQpIHtcbiAgICAgIF9yZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGZhaWxlZCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBGVUxGSUxMRUQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gUkVKRUNURUQpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVByb21pc2UocHJvbWlzZSwgcmVzb2x2ZXIpIHtcbiAgdHJ5IHtcbiAgICByZXNvbHZlcihmdW5jdGlvbiByZXNvbHZlUHJvbWlzZSh2YWx1ZSkge1xuICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIHJlamVjdFByb21pc2UocmVhc29uKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIGUpO1xuICB9XG59XG5cbnZhciBpZCA9IDA7XG5mdW5jdGlvbiBuZXh0SWQoKSB7XG4gIHJldHVybiBpZCsrO1xufVxuXG5mdW5jdGlvbiBtYWtlUHJvbWlzZShwcm9taXNlKSB7XG4gIHByb21pc2VbUFJPTUlTRV9JRF0gPSBpZCsrO1xuICBwcm9taXNlLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9zdWJzY3JpYmVycyA9IFtdO1xufVxuXG5mdW5jdGlvbiBFbnVtZXJhdG9yKENvbnN0cnVjdG9yLCBpbnB1dCkge1xuICB0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcblxuICBpZiAoIXRoaXMucHJvbWlzZVtQUk9NSVNFX0lEXSkge1xuICAgIG1ha2VQcm9taXNlKHRoaXMucHJvbWlzZSk7XG4gIH1cblxuICBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMubGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgIHRoaXMuX3JlbWFpbmluZyA9IGlucHV0Lmxlbmd0aDtcblxuICAgIHRoaXMuX3Jlc3VsdCA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGZ1bGZpbGwodGhpcy5wcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoIHx8IDA7XG4gICAgICB0aGlzLl9lbnVtZXJhdGUoKTtcbiAgICAgIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIF9yZWplY3QodGhpcy5wcm9taXNlLCB2YWxpZGF0aW9uRXJyb3IoKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGlvbkVycm9yKCkge1xuICByZXR1cm4gbmV3IEVycm9yKCdBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXknKTtcbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl9lbnVtZXJhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgdmFyIF9pbnB1dCA9IHRoaXMuX2lucHV0O1xuXG4gIGZvciAodmFyIGkgPSAwOyB0aGlzLl9zdGF0ZSA9PT0gUEVORElORyAmJiBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLl9lYWNoRW50cnkoX2lucHV0W2ldLCBpKTtcbiAgfVxufTtcblxuRW51bWVyYXRvci5wcm90b3R5cGUuX2VhY2hFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSwgaSkge1xuICB2YXIgYyA9IHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I7XG4gIHZhciByZXNvbHZlJCQgPSBjLnJlc29sdmU7XG5cbiAgaWYgKHJlc29sdmUkJCA9PT0gcmVzb2x2ZSkge1xuICAgIHZhciBfdGhlbiA9IGdldFRoZW4oZW50cnkpO1xuXG4gICAgaWYgKF90aGVuID09PSB0aGVuICYmIGVudHJ5Ll9zdGF0ZSAhPT0gUEVORElORykge1xuICAgICAgdGhpcy5fc2V0dGxlZEF0KGVudHJ5Ll9zdGF0ZSwgaSwgZW50cnkuX3Jlc3VsdCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgX3RoZW4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuICAgICAgdGhpcy5fcmVzdWx0W2ldID0gZW50cnk7XG4gICAgfSBlbHNlIGlmIChjID09PSBQcm9taXNlKSB7XG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBjKG5vb3ApO1xuICAgICAgaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBlbnRyeSwgX3RoZW4pO1xuICAgICAgdGhpcy5fd2lsbFNldHRsZUF0KHByb21pc2UsIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQobmV3IGMoZnVuY3Rpb24gKHJlc29sdmUkJCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSQkKGVudHJ5KTtcbiAgICAgIH0pLCBpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fd2lsbFNldHRsZUF0KHJlc29sdmUkJChlbnRyeSksIGkpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fc2V0dGxlZEF0ID0gZnVuY3Rpb24gKHN0YXRlLCBpLCB2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTtcblxuICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IFBFTkRJTkcpIHtcbiAgICB0aGlzLl9yZW1haW5pbmctLTtcblxuICAgIGlmIChzdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXN1bHRbaV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5fcmVtYWluaW5nID09PSAwKSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0ID0gZnVuY3Rpb24gKHByb21pc2UsIGkpIHtcbiAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuXG4gIHN1YnNjcmliZShwcm9taXNlLCB1bmRlZmluZWQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoRlVMRklMTEVELCBpLCB2YWx1ZSk7XG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICByZXR1cm4gZW51bWVyYXRvci5fc2V0dGxlZEF0KFJFSkVDVEVELCBpLCByZWFzb24pO1xuICB9KTtcbn07XG5cbi8qKlxuICBgUHJvbWlzZS5hbGxgIGFjY2VwdHMgYW4gYXJyYXkgb2YgcHJvbWlzZXMsIGFuZCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2hcbiAgaXMgZnVsZmlsbGVkIHdpdGggYW4gYXJyYXkgb2YgZnVsZmlsbG1lbnQgdmFsdWVzIGZvciB0aGUgcGFzc2VkIHByb21pc2VzLCBvclxuICByZWplY3RlZCB3aXRoIHRoZSByZWFzb24gb2YgdGhlIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIGJlIHJlamVjdGVkLiBJdCBjYXN0cyBhbGxcbiAgZWxlbWVudHMgb2YgdGhlIHBhc3NlZCBpdGVyYWJsZSB0byBwcm9taXNlcyBhcyBpdCBydW5zIHRoaXMgYWxnb3JpdGhtLlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSByZXNvbHZlKDEpO1xuICBsZXQgcHJvbWlzZTIgPSByZXNvbHZlKDIpO1xuICBsZXQgcHJvbWlzZTMgPSByZXNvbHZlKDMpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gVGhlIGFycmF5IGhlcmUgd291bGQgYmUgWyAxLCAyLCAzIF07XG4gIH0pO1xuICBgYGBcblxuICBJZiBhbnkgb2YgdGhlIGBwcm9taXNlc2AgZ2l2ZW4gdG8gYGFsbGAgYXJlIHJlamVjdGVkLCB0aGUgZmlyc3QgcHJvbWlzZVxuICB0aGF0IGlzIHJlamVjdGVkIHdpbGwgYmUgZ2l2ZW4gYXMgYW4gYXJndW1lbnQgdG8gdGhlIHJldHVybmVkIHByb21pc2VzJ3NcbiAgcmVqZWN0aW9uIGhhbmRsZXIuIEZvciBleGFtcGxlOlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSByZXNvbHZlKDEpO1xuICBsZXQgcHJvbWlzZTIgPSByZWplY3QobmV3IEVycm9yKFwiMlwiKSk7XG4gIGxldCBwcm9taXNlMyA9IHJlamVjdChuZXcgRXJyb3IoXCIzXCIpKTtcbiAgbGV0IHByb21pc2VzID0gWyBwcm9taXNlMSwgcHJvbWlzZTIsIHByb21pc2UzIF07XG5cbiAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oYXJyYXkpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zIGJlY2F1c2UgdGhlcmUgYXJlIHJlamVjdGVkIHByb21pc2VzIVxuICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgIC8vIGVycm9yLm1lc3NhZ2UgPT09IFwiMlwiXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIGFsbFxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IGVudHJpZXMgYXJyYXkgb2YgcHJvbWlzZXNcbiAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgbGFiZWxpbmcgdGhlIHByb21pc2UuXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIGFsbCBgcHJvbWlzZXNgIGhhdmUgYmVlblxuICBmdWxmaWxsZWQsIG9yIHJlamVjdGVkIGlmIGFueSBvZiB0aGVtIGJlY29tZSByZWplY3RlZC5cbiAgQHN0YXRpY1xuKi9cbmZ1bmN0aW9uIGFsbChlbnRyaWVzKSB7XG4gIHJldHVybiBuZXcgRW51bWVyYXRvcih0aGlzLCBlbnRyaWVzKS5wcm9taXNlO1xufVxuXG4vKipcbiAgYFByb21pc2UucmFjZWAgcmV0dXJucyBhIG5ldyBwcm9taXNlIHdoaWNoIGlzIHNldHRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZVxuICBmaXJzdCBwYXNzZWQgcHJvbWlzZSB0byBzZXR0bGUuXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVzb2x2ZSgncHJvbWlzZSAxJyk7XG4gICAgfSwgMjAwKTtcbiAgfSk7XG5cbiAgbGV0IHByb21pc2UyID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDInKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyByZXN1bHQgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgaXQgd2FzIHJlc29sdmVkIGJlZm9yZSBwcm9taXNlMVxuICAgIC8vIHdhcyByZXNvbHZlZC5cbiAgfSk7XG4gIGBgYFxuXG4gIGBQcm9taXNlLnJhY2VgIGlzIGRldGVybWluaXN0aWMgaW4gdGhhdCBvbmx5IHRoZSBzdGF0ZSBvZiB0aGUgZmlyc3RcbiAgc2V0dGxlZCBwcm9taXNlIG1hdHRlcnMuIEZvciBleGFtcGxlLCBldmVuIGlmIG90aGVyIHByb21pc2VzIGdpdmVuIHRvIHRoZVxuICBgcHJvbWlzZXNgIGFycmF5IGFyZ3VtZW50IGFyZSByZXNvbHZlZCwgYnV0IHRoZSBmaXJzdCBzZXR0bGVkIHByb21pc2UgaGFzXG4gIGJlY29tZSByZWplY3RlZCBiZWZvcmUgdGhlIG90aGVyIHByb21pc2VzIGJlY2FtZSBmdWxmaWxsZWQsIHRoZSByZXR1cm5lZFxuICBwcm9taXNlIHdpbGwgYmVjb21lIHJlamVjdGVkOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoJ3Byb21pc2UgMicpKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyBDb2RlIGhlcmUgbmV2ZXIgcnVuc1xuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAncHJvbWlzZSAyJyBiZWNhdXNlIHByb21pc2UgMiBiZWNhbWUgcmVqZWN0ZWQgYmVmb3JlXG4gICAgLy8gcHJvbWlzZSAxIGJlY2FtZSBmdWxmaWxsZWRcbiAgfSk7XG4gIGBgYFxuXG4gIEFuIGV4YW1wbGUgcmVhbC13b3JsZCB1c2UgY2FzZSBpcyBpbXBsZW1lbnRpbmcgdGltZW91dHM6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBQcm9taXNlLnJhY2UoW2FqYXgoJ2Zvby5qc29uJyksIHRpbWVvdXQoNTAwMCldKVxuICBgYGBcblxuICBAbWV0aG9kIHJhY2VcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FycmF5fSBwcm9taXNlcyBhcnJheSBvZiBwcm9taXNlcyB0byBvYnNlcnZlXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHdoaWNoIHNldHRsZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBmaXJzdCBwYXNzZWRcbiAgcHJvbWlzZSB0byBzZXR0bGUuXG4qL1xuZnVuY3Rpb24gcmFjZShlbnRyaWVzKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKCFpc0FycmF5KGVudHJpZXMpKSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAoXywgcmVqZWN0KSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1lvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4nKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gZW50cmllcy5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLnJlc29sdmUoZW50cmllc1tpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yZWplY3RgIHJldHVybnMgYSBwcm9taXNlIHJlamVjdGVkIHdpdGggdGhlIHBhc3NlZCBgcmVhc29uYC5cbiAgSXQgaXMgc2hvcnRoYW5kIGZvciB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCFcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUydcbiAgfSk7XG4gIGBgYFxuXG4gIEluc3RlYWQgb2Ygd3JpdGluZyB0aGUgYWJvdmUsIHlvdXIgY29kZSBub3cgc2ltcGx5IGJlY29tZXMgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdXSE9PUFMnKSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCFcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUydcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgcmVqZWN0XG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBbnl9IHJlYXNvbiB2YWx1ZSB0aGF0IHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aC5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgZ2l2ZW4gYHJlYXNvbmAuXG4qL1xuZnVuY3Rpb24gcmVqZWN0KHJlYXNvbikge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcbiAgX3JlamVjdChwcm9taXNlLCByZWFzb24pO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gbmVlZHNSZXNvbHZlcigpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xufVxuXG5mdW5jdGlvbiBuZWVkc05ldygpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbn1cblxuLyoqXG4gIFByb21pc2Ugb2JqZWN0cyByZXByZXNlbnQgdGhlIGV2ZW50dWFsIHJlc3VsdCBvZiBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uLiBUaGVcbiAgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCwgd2hpY2hcbiAgcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGUgcmVhc29uXG4gIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuXG4gIFRlcm1pbm9sb2d5XG4gIC0tLS0tLS0tLS0tXG5cbiAgLSBgcHJvbWlzZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHdpdGggYSBgdGhlbmAgbWV0aG9kIHdob3NlIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoaXMgc3BlY2lmaWNhdGlvbi5cbiAgLSBgdGhlbmFibGVgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB0aGF0IGRlZmluZXMgYSBgdGhlbmAgbWV0aG9kLlxuICAtIGB2YWx1ZWAgaXMgYW55IGxlZ2FsIEphdmFTY3JpcHQgdmFsdWUgKGluY2x1ZGluZyB1bmRlZmluZWQsIGEgdGhlbmFibGUsIG9yIGEgcHJvbWlzZSkuXG4gIC0gYGV4Y2VwdGlvbmAgaXMgYSB2YWx1ZSB0aGF0IGlzIHRocm93biB1c2luZyB0aGUgdGhyb3cgc3RhdGVtZW50LlxuICAtIGByZWFzb25gIGlzIGEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2h5IGEgcHJvbWlzZSB3YXMgcmVqZWN0ZWQuXG4gIC0gYHNldHRsZWRgIHRoZSBmaW5hbCByZXN0aW5nIHN0YXRlIG9mIGEgcHJvbWlzZSwgZnVsZmlsbGVkIG9yIHJlamVjdGVkLlxuXG4gIEEgcHJvbWlzZSBjYW4gYmUgaW4gb25lIG9mIHRocmVlIHN0YXRlczogcGVuZGluZywgZnVsZmlsbGVkLCBvciByZWplY3RlZC5cblxuICBQcm9taXNlcyB0aGF0IGFyZSBmdWxmaWxsZWQgaGF2ZSBhIGZ1bGZpbGxtZW50IHZhbHVlIGFuZCBhcmUgaW4gdGhlIGZ1bGZpbGxlZFxuICBzdGF0ZS4gIFByb21pc2VzIHRoYXQgYXJlIHJlamVjdGVkIGhhdmUgYSByZWplY3Rpb24gcmVhc29uIGFuZCBhcmUgaW4gdGhlXG4gIHJlamVjdGVkIHN0YXRlLiAgQSBmdWxmaWxsbWVudCB2YWx1ZSBpcyBuZXZlciBhIHRoZW5hYmxlLlxuXG4gIFByb21pc2VzIGNhbiBhbHNvIGJlIHNhaWQgdG8gKnJlc29sdmUqIGEgdmFsdWUuICBJZiB0aGlzIHZhbHVlIGlzIGFsc28gYVxuICBwcm9taXNlLCB0aGVuIHRoZSBvcmlnaW5hbCBwcm9taXNlJ3Mgc2V0dGxlZCBzdGF0ZSB3aWxsIG1hdGNoIHRoZSB2YWx1ZSdzXG4gIHNldHRsZWQgc3RhdGUuICBTbyBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgd2lsbFxuICBpdHNlbGYgcmVqZWN0LCBhbmQgYSBwcm9taXNlIHRoYXQgKnJlc29sdmVzKiBhIHByb21pc2UgdGhhdCBmdWxmaWxscyB3aWxsXG4gIGl0c2VsZiBmdWxmaWxsLlxuXG5cbiAgQmFzaWMgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLVxuXG4gIGBgYGpzXG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgLy8gb24gc3VjY2Vzc1xuICAgIHJlc29sdmUodmFsdWUpO1xuXG4gICAgLy8gb24gZmFpbHVyZVxuICAgIHJlamVjdChyZWFzb24pO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAvLyBvbiBmdWxmaWxsbWVudFxuICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAvLyBvbiByZWplY3Rpb25cbiAgfSk7XG4gIGBgYFxuXG4gIEFkdmFuY2VkIFVzYWdlOlxuICAtLS0tLS0tLS0tLS0tLS1cblxuICBQcm9taXNlcyBzaGluZSB3aGVuIGFic3RyYWN0aW5nIGF3YXkgYXN5bmNocm9ub3VzIGludGVyYWN0aW9ucyBzdWNoIGFzXG4gIGBYTUxIdHRwUmVxdWVzdGBzLlxuXG4gIGBgYGpzXG4gIGZ1bmN0aW9uIGdldEpTT04odXJsKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwpO1xuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2pzb24nO1xuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICB4aHIuc2VuZCgpO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSB0aGlzLkRPTkUpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignZ2V0SlNPTjogYCcgKyB1cmwgKyAnYCBmYWlsZWQgd2l0aCBzdGF0dXM6IFsnICsgdGhpcy5zdGF0dXMgKyAnXScpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRKU09OKCcvcG9zdHMuanNvbicpLnRoZW4oZnVuY3Rpb24oanNvbikge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgVW5saWtlIGNhbGxiYWNrcywgcHJvbWlzZXMgYXJlIGdyZWF0IGNvbXBvc2FibGUgcHJpbWl0aXZlcy5cblxuICBgYGBqc1xuICBQcm9taXNlLmFsbChbXG4gICAgZ2V0SlNPTignL3Bvc3RzJyksXG4gICAgZ2V0SlNPTignL2NvbW1lbnRzJylcbiAgXSkudGhlbihmdW5jdGlvbih2YWx1ZXMpe1xuICAgIHZhbHVlc1swXSAvLyA9PiBwb3N0c0pTT05cbiAgICB2YWx1ZXNbMV0gLy8gPT4gY29tbWVudHNKU09OXG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9KTtcbiAgYGBgXG5cbiAgQGNsYXNzIFByb21pc2VcbiAgQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZXJcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAY29uc3RydWN0b3JcbiovXG5mdW5jdGlvbiBQcm9taXNlKHJlc29sdmVyKSB7XG4gIHRoaXNbUFJPTUlTRV9JRF0gPSBuZXh0SWQoKTtcbiAgdGhpcy5fcmVzdWx0ID0gdGhpcy5fc3RhdGUgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG5cbiAgaWYgKG5vb3AgIT09IHJlc29sdmVyKSB7XG4gICAgdHlwZW9mIHJlc29sdmVyICE9PSAnZnVuY3Rpb24nICYmIG5lZWRzUmVzb2x2ZXIoKTtcbiAgICB0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSA/IGluaXRpYWxpemVQcm9taXNlKHRoaXMsIHJlc29sdmVyKSA6IG5lZWRzTmV3KCk7XG4gIH1cbn1cblxuUHJvbWlzZS5hbGwgPSBhbGw7XG5Qcm9taXNlLnJhY2UgPSByYWNlO1xuUHJvbWlzZS5yZXNvbHZlID0gcmVzb2x2ZTtcblByb21pc2UucmVqZWN0ID0gcmVqZWN0O1xuUHJvbWlzZS5fc2V0U2NoZWR1bGVyID0gc2V0U2NoZWR1bGVyO1xuUHJvbWlzZS5fc2V0QXNhcCA9IHNldEFzYXA7XG5Qcm9taXNlLl9hc2FwID0gYXNhcDtcblxuUHJvbWlzZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBQcm9taXNlLFxuXG4gIC8qKlxuICAgIFRoZSBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLFxuICAgIHdoaWNoIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlJ3MgZXZlbnR1YWwgdmFsdWUgb3IgdGhlXG4gICAgcmVhc29uIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbih1c2VyKXtcbiAgICAgIC8vIHVzZXIgaXMgYXZhaWxhYmxlXG4gICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIHVzZXIgaXMgdW5hdmFpbGFibGUsIGFuZCB5b3UgYXJlIGdpdmVuIHRoZSByZWFzb24gd2h5XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIENoYWluaW5nXG4gICAgLS0tLS0tLS1cbiAgXG4gICAgVGhlIHJldHVybiB2YWx1ZSBvZiBgdGhlbmAgaXMgaXRzZWxmIGEgcHJvbWlzZS4gIFRoaXMgc2Vjb25kLCAnZG93bnN0cmVhbSdcbiAgICBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZmlyc3QgcHJvbWlzZSdzIGZ1bGZpbGxtZW50XG4gICAgb3IgcmVqZWN0aW9uIGhhbmRsZXIsIG9yIHJlamVjdGVkIGlmIHRoZSBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24uXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICByZXR1cm4gdXNlci5uYW1lO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiAnZGVmYXVsdCBuYW1lJztcbiAgICB9KS50aGVuKGZ1bmN0aW9uICh1c2VyTmFtZSkge1xuICAgICAgLy8gSWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGB1c2VyTmFtZWAgd2lsbCBiZSB0aGUgdXNlcidzIG5hbWUsIG90aGVyd2lzZSBpdFxuICAgICAgLy8gd2lsbCBiZSBgJ2RlZmF1bHQgbmFtZSdgXG4gICAgfSk7XG4gIFxuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCB1c2VyLCBidXQgc3RpbGwgdW5oYXBweScpO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgLy8gaWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGByZWFzb25gIHdpbGwgYmUgJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jy5cbiAgICAgIC8vIElmIGBmaW5kVXNlcmAgcmVqZWN0ZWQsIGByZWFzb25gIHdpbGwgYmUgJ2BmaW5kVXNlcmAgcmVqZWN0ZWQgYW5kIHdlJ3JlIHVuaGFwcHknLlxuICAgIH0pO1xuICAgIGBgYFxuICAgIElmIHRoZSBkb3duc3RyZWFtIHByb21pc2UgZG9lcyBub3Qgc3BlY2lmeSBhIHJlamVjdGlvbiBoYW5kbGVyLCByZWplY3Rpb24gcmVhc29ucyB3aWxsIGJlIHByb3BhZ2F0ZWQgZnVydGhlciBkb3duc3RyZWFtLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgdGhyb3cgbmV3IFBlZGFnb2dpY2FsRXhjZXB0aW9uKCdVcHN0cmVhbSBlcnJvcicpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAvLyBUaGUgYFBlZGdhZ29jaWFsRXhjZXB0aW9uYCBpcyBwcm9wYWdhdGVkIGFsbCB0aGUgd2F5IGRvd24gdG8gaGVyZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBBc3NpbWlsYXRpb25cbiAgICAtLS0tLS0tLS0tLS1cbiAgXG4gICAgU29tZXRpbWVzIHRoZSB2YWx1ZSB5b3Ugd2FudCB0byBwcm9wYWdhdGUgdG8gYSBkb3duc3RyZWFtIHByb21pc2UgY2FuIG9ubHkgYmVcbiAgICByZXRyaWV2ZWQgYXN5bmNocm9ub3VzbHkuIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHJldHVybmluZyBhIHByb21pc2UgaW4gdGhlXG4gICAgZnVsZmlsbG1lbnQgb3IgcmVqZWN0aW9uIGhhbmRsZXIuIFRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCB0aGVuIGJlIHBlbmRpbmdcbiAgICB1bnRpbCB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBzZXR0bGVkLiBUaGlzIGlzIGNhbGxlZCAqYXNzaW1pbGF0aW9uKi5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgICAgLy8gVGhlIHVzZXIncyBjb21tZW50cyBhcmUgbm93IGF2YWlsYWJsZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBJZiB0aGUgYXNzaW1saWF0ZWQgcHJvbWlzZSByZWplY3RzLCB0aGVuIHRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCBhbHNvIHJlamVjdC5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCBmdWxmaWxscywgd2UnbGwgaGF2ZSB0aGUgdmFsdWUgaGVyZVxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIElmIGBmaW5kQ29tbWVudHNCeUF1dGhvcmAgcmVqZWN0cywgd2UnbGwgaGF2ZSB0aGUgcmVhc29uIGhlcmVcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgU2ltcGxlIEV4YW1wbGVcbiAgICAtLS0tLS0tLS0tLS0tLVxuICBcbiAgICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBsZXQgcmVzdWx0O1xuICBcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gZmluZFJlc3VsdCgpO1xuICAgICAgLy8gc3VjY2Vzc1xuICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAvLyBmYWlsdXJlXG4gICAgfVxuICAgIGBgYFxuICBcbiAgICBFcnJiYWNrIEV4YW1wbGVcbiAgXG4gICAgYGBganNcbiAgICBmaW5kUmVzdWx0KGZ1bmN0aW9uKHJlc3VsdCwgZXJyKXtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgLy8gZmFpbHVyZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgfVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBQcm9taXNlIEV4YW1wbGU7XG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBmaW5kUmVzdWx0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgICAgLy8gc3VjY2Vzc1xuICAgIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAvLyBmYWlsdXJlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEFkdmFuY2VkIEV4YW1wbGVcbiAgICAtLS0tLS0tLS0tLS0tLVxuICBcbiAgICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBsZXQgYXV0aG9yLCBib29rcztcbiAgXG4gICAgdHJ5IHtcbiAgICAgIGF1dGhvciA9IGZpbmRBdXRob3IoKTtcbiAgICAgIGJvb2tzICA9IGZpbmRCb29rc0J5QXV0aG9yKGF1dGhvcik7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9XG4gICAgYGBgXG4gIFxuICAgIEVycmJhY2sgRXhhbXBsZVxuICBcbiAgICBgYGBqc1xuICBcbiAgICBmdW5jdGlvbiBmb3VuZEJvb2tzKGJvb2tzKSB7XG4gIFxuICAgIH1cbiAgXG4gICAgZnVuY3Rpb24gZmFpbHVyZShyZWFzb24pIHtcbiAgXG4gICAgfVxuICBcbiAgICBmaW5kQXV0aG9yKGZ1bmN0aW9uKGF1dGhvciwgZXJyKXtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZpbmRCb29va3NCeUF1dGhvcihhdXRob3IsIGZ1bmN0aW9uKGJvb2tzLCBlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3VuZEJvb2tzKGJvb2tzKTtcbiAgICAgICAgICAgICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICBmYWlsdXJlKHJlYXNvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIFByb21pc2UgRXhhbXBsZTtcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGZpbmRBdXRob3IoKS5cbiAgICAgIHRoZW4oZmluZEJvb2tzQnlBdXRob3IpLlxuICAgICAgdGhlbihmdW5jdGlvbihib29rcyl7XG4gICAgICAgIC8vIGZvdW5kIGJvb2tzXG4gICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEBtZXRob2QgdGhlblxuICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uRnVsZmlsbGVkXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3RlZFxuICAgIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgICBAcmV0dXJuIHtQcm9taXNlfVxuICAqL1xuICB0aGVuOiB0aGVuLFxuXG4gIC8qKlxuICAgIGBjYXRjaGAgaXMgc2ltcGx5IHN1Z2FyIGZvciBgdGhlbih1bmRlZmluZWQsIG9uUmVqZWN0aW9uKWAgd2hpY2ggbWFrZXMgaXQgdGhlIHNhbWVcbiAgICBhcyB0aGUgY2F0Y2ggYmxvY2sgb2YgYSB0cnkvY2F0Y2ggc3RhdGVtZW50LlxuICBcbiAgICBgYGBqc1xuICAgIGZ1bmN0aW9uIGZpbmRBdXRob3IoKXtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGRuJ3QgZmluZCB0aGF0IGF1dGhvcicpO1xuICAgIH1cbiAgXG4gICAgLy8gc3luY2hyb25vdXNcbiAgICB0cnkge1xuICAgICAgZmluZEF1dGhvcigpO1xuICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIH1cbiAgXG4gICAgLy8gYXN5bmMgd2l0aCBwcm9taXNlc1xuICAgIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQG1ldGhvZCBjYXRjaFxuICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVqZWN0aW9uXG4gICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG4gICdjYXRjaCc6IGZ1bmN0aW9uIF9jYXRjaChvblJlamVjdGlvbikge1xuICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3Rpb24pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBwb2x5ZmlsbCgpIHtcbiAgICB2YXIgbG9jYWwgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbG9jYWwgPSBnbG9iYWw7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbG9jYWwgPSBzZWxmO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2NhbCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgUCA9IGxvY2FsLlByb21pc2U7XG5cbiAgICBpZiAoUCkge1xuICAgICAgICB2YXIgcHJvbWlzZVRvU3RyaW5nID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb21pc2VUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChQLnJlc29sdmUoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIHNpbGVudGx5IGlnbm9yZWRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9taXNlVG9TdHJpbmcgPT09ICdbb2JqZWN0IFByb21pc2VdJyAmJiAhUC5jYXN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2NhbC5Qcm9taXNlID0gUHJvbWlzZTtcbn1cblxucG9seWZpbGwoKTtcbi8vIFN0cmFuZ2UgY29tcGF0Li5cblByb21pc2UucG9seWZpbGwgPSBwb2x5ZmlsbDtcblByb21pc2UuUHJvbWlzZSA9IFByb21pc2U7XG5cbnJldHVybiBQcm9taXNlO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXM2LXByb21pc2UubWFwIiwiLyohIEpTT04gdjMuMy4yIHwgaHR0cDovL2Jlc3RpZWpzLmdpdGh1Yi5pby9qc29uMyB8IENvcHlyaWdodCAyMDEyLTIwMTQsIEtpdCBDYW1icmlkZ2UgfCBodHRwOi8va2l0Lm1pdC1saWNlbnNlLm9yZyAqL1xuOyhmdW5jdGlvbiAoKSB7XG4gIC8vIERldGVjdCB0aGUgYGRlZmluZWAgZnVuY3Rpb24gZXhwb3NlZCBieSBhc3luY2hyb25vdXMgbW9kdWxlIGxvYWRlcnMuIFRoZVxuICAvLyBzdHJpY3QgYGRlZmluZWAgY2hlY2sgaXMgbmVjZXNzYXJ5IGZvciBjb21wYXRpYmlsaXR5IHdpdGggYHIuanNgLlxuICB2YXIgaXNMb2FkZXIgPSB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZDtcblxuICAvLyBBIHNldCBvZiB0eXBlcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIG9iamVjdHMgZnJvbSBwcmltaXRpdmVzLlxuICB2YXIgb2JqZWN0VHlwZXMgPSB7XG4gICAgXCJmdW5jdGlvblwiOiB0cnVlLFxuICAgIFwib2JqZWN0XCI6IHRydWVcbiAgfTtcblxuICAvLyBEZXRlY3QgdGhlIGBleHBvcnRzYCBvYmplY3QgZXhwb3NlZCBieSBDb21tb25KUyBpbXBsZW1lbnRhdGlvbnMuXG4gIHZhciBmcmVlRXhwb3J0cyA9IG9iamVjdFR5cGVzW3R5cGVvZiBleHBvcnRzXSAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbiAgLy8gVXNlIHRoZSBgZ2xvYmFsYCBvYmplY3QgZXhwb3NlZCBieSBOb2RlIChpbmNsdWRpbmcgQnJvd3NlcmlmeSB2aWFcbiAgLy8gYGluc2VydC1tb2R1bGUtZ2xvYmFsc2ApLCBOYXJ3aGFsLCBhbmQgUmluZ28gYXMgdGhlIGRlZmF1bHQgY29udGV4dCxcbiAgLy8gYW5kIHRoZSBgd2luZG93YCBvYmplY3QgaW4gYnJvd3NlcnMuIFJoaW5vIGV4cG9ydHMgYSBgZ2xvYmFsYCBmdW5jdGlvblxuICAvLyBpbnN0ZWFkLlxuICB2YXIgcm9vdCA9IG9iamVjdFR5cGVzW3R5cGVvZiB3aW5kb3ddICYmIHdpbmRvdyB8fCB0aGlzLFxuICAgICAgZnJlZUdsb2JhbCA9IGZyZWVFeHBvcnRzICYmIG9iamVjdFR5cGVzW3R5cGVvZiBtb2R1bGVdICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIHR5cGVvZiBnbG9iYWwgPT0gXCJvYmplY3RcIiAmJiBnbG9iYWw7XG5cbiAgaWYgKGZyZWVHbG9iYWwgJiYgKGZyZWVHbG9iYWxbXCJnbG9iYWxcIl0gPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbFtcIndpbmRvd1wiXSA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsW1wic2VsZlwiXSA9PT0gZnJlZUdsb2JhbCkpIHtcbiAgICByb290ID0gZnJlZUdsb2JhbDtcbiAgfVxuXG4gIC8vIFB1YmxpYzogSW5pdGlhbGl6ZXMgSlNPTiAzIHVzaW5nIHRoZSBnaXZlbiBgY29udGV4dGAgb2JqZWN0LCBhdHRhY2hpbmcgdGhlXG4gIC8vIGBzdHJpbmdpZnlgIGFuZCBgcGFyc2VgIGZ1bmN0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGBleHBvcnRzYCBvYmplY3QuXG4gIGZ1bmN0aW9uIHJ1bkluQ29udGV4dChjb250ZXh0LCBleHBvcnRzKSB7XG4gICAgY29udGV4dCB8fCAoY29udGV4dCA9IHJvb3RbXCJPYmplY3RcIl0oKSk7XG4gICAgZXhwb3J0cyB8fCAoZXhwb3J0cyA9IHJvb3RbXCJPYmplY3RcIl0oKSk7XG5cbiAgICAvLyBOYXRpdmUgY29uc3RydWN0b3IgYWxpYXNlcy5cbiAgICB2YXIgTnVtYmVyID0gY29udGV4dFtcIk51bWJlclwiXSB8fCByb290W1wiTnVtYmVyXCJdLFxuICAgICAgICBTdHJpbmcgPSBjb250ZXh0W1wiU3RyaW5nXCJdIHx8IHJvb3RbXCJTdHJpbmdcIl0sXG4gICAgICAgIE9iamVjdCA9IGNvbnRleHRbXCJPYmplY3RcIl0gfHwgcm9vdFtcIk9iamVjdFwiXSxcbiAgICAgICAgRGF0ZSA9IGNvbnRleHRbXCJEYXRlXCJdIHx8IHJvb3RbXCJEYXRlXCJdLFxuICAgICAgICBTeW50YXhFcnJvciA9IGNvbnRleHRbXCJTeW50YXhFcnJvclwiXSB8fCByb290W1wiU3ludGF4RXJyb3JcIl0sXG4gICAgICAgIFR5cGVFcnJvciA9IGNvbnRleHRbXCJUeXBlRXJyb3JcIl0gfHwgcm9vdFtcIlR5cGVFcnJvclwiXSxcbiAgICAgICAgTWF0aCA9IGNvbnRleHRbXCJNYXRoXCJdIHx8IHJvb3RbXCJNYXRoXCJdLFxuICAgICAgICBuYXRpdmVKU09OID0gY29udGV4dFtcIkpTT05cIl0gfHwgcm9vdFtcIkpTT05cIl07XG5cbiAgICAvLyBEZWxlZ2F0ZSB0byB0aGUgbmF0aXZlIGBzdHJpbmdpZnlgIGFuZCBgcGFyc2VgIGltcGxlbWVudGF0aW9ucy5cbiAgICBpZiAodHlwZW9mIG5hdGl2ZUpTT04gPT0gXCJvYmplY3RcIiAmJiBuYXRpdmVKU09OKSB7XG4gICAgICBleHBvcnRzLnN0cmluZ2lmeSA9IG5hdGl2ZUpTT04uc3RyaW5naWZ5O1xuICAgICAgZXhwb3J0cy5wYXJzZSA9IG5hdGl2ZUpTT04ucGFyc2U7XG4gICAgfVxuXG4gICAgLy8gQ29udmVuaWVuY2UgYWxpYXNlcy5cbiAgICB2YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlLFxuICAgICAgICBnZXRDbGFzcyA9IG9iamVjdFByb3RvLnRvU3RyaW5nLFxuICAgICAgICBpc1Byb3BlcnR5LCBmb3JFYWNoLCB1bmRlZjtcblxuICAgIC8vIFRlc3QgdGhlIGBEYXRlI2dldFVUQypgIG1ldGhvZHMuIEJhc2VkIG9uIHdvcmsgYnkgQFlhZmZsZS5cbiAgICB2YXIgaXNFeHRlbmRlZCA9IG5ldyBEYXRlKC0zNTA5ODI3MzM0NTczMjkyKTtcbiAgICB0cnkge1xuICAgICAgLy8gVGhlIGBnZXRVVENGdWxsWWVhcmAsIGBNb250aGAsIGFuZCBgRGF0ZWAgbWV0aG9kcyByZXR1cm4gbm9uc2Vuc2ljYWxcbiAgICAgIC8vIHJlc3VsdHMgZm9yIGNlcnRhaW4gZGF0ZXMgaW4gT3BlcmEgPj0gMTAuNTMuXG4gICAgICBpc0V4dGVuZGVkID0gaXNFeHRlbmRlZC5nZXRVVENGdWxsWWVhcigpID09IC0xMDkyNTIgJiYgaXNFeHRlbmRlZC5nZXRVVENNb250aCgpID09PSAwICYmIGlzRXh0ZW5kZWQuZ2V0VVRDRGF0ZSgpID09PSAxICYmXG4gICAgICAgIC8vIFNhZmFyaSA8IDIuMC4yIHN0b3JlcyB0aGUgaW50ZXJuYWwgbWlsbGlzZWNvbmQgdGltZSB2YWx1ZSBjb3JyZWN0bHksXG4gICAgICAgIC8vIGJ1dCBjbGlwcyB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBkYXRlIG1ldGhvZHMgdG8gdGhlIHJhbmdlIG9mXG4gICAgICAgIC8vIHNpZ25lZCAzMi1iaXQgaW50ZWdlcnMgKFstMiAqKiAzMSwgMiAqKiAzMSAtIDFdKS5cbiAgICAgICAgaXNFeHRlbmRlZC5nZXRVVENIb3VycygpID09IDEwICYmIGlzRXh0ZW5kZWQuZ2V0VVRDTWludXRlcygpID09IDM3ICYmIGlzRXh0ZW5kZWQuZ2V0VVRDU2Vjb25kcygpID09IDYgJiYgaXNFeHRlbmRlZC5nZXRVVENNaWxsaXNlY29uZHMoKSA9PSA3MDg7XG4gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuXG4gICAgLy8gSW50ZXJuYWw6IERldGVybWluZXMgd2hldGhlciB0aGUgbmF0aXZlIGBKU09OLnN0cmluZ2lmeWAgYW5kIGBwYXJzZWBcbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgYXJlIHNwZWMtY29tcGxpYW50LiBCYXNlZCBvbiB3b3JrIGJ5IEtlbiBTbnlkZXIuXG4gICAgZnVuY3Rpb24gaGFzKG5hbWUpIHtcbiAgICAgIGlmIChoYXNbbmFtZV0gIT09IHVuZGVmKSB7XG4gICAgICAgIC8vIFJldHVybiBjYWNoZWQgZmVhdHVyZSB0ZXN0IHJlc3VsdC5cbiAgICAgICAgcmV0dXJuIGhhc1tuYW1lXTtcbiAgICAgIH1cbiAgICAgIHZhciBpc1N1cHBvcnRlZDtcbiAgICAgIGlmIChuYW1lID09IFwiYnVnLXN0cmluZy1jaGFyLWluZGV4XCIpIHtcbiAgICAgICAgLy8gSUUgPD0gNyBkb2Vzbid0IHN1cHBvcnQgYWNjZXNzaW5nIHN0cmluZyBjaGFyYWN0ZXJzIHVzaW5nIHNxdWFyZVxuICAgICAgICAvLyBicmFja2V0IG5vdGF0aW9uLiBJRSA4IG9ubHkgc3VwcG9ydHMgdGhpcyBmb3IgcHJpbWl0aXZlcy5cbiAgICAgICAgaXNTdXBwb3J0ZWQgPSBcImFcIlswXSAhPSBcImFcIjtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBcImpzb25cIikge1xuICAgICAgICAvLyBJbmRpY2F0ZXMgd2hldGhlciBib3RoIGBKU09OLnN0cmluZ2lmeWAgYW5kIGBKU09OLnBhcnNlYCBhcmVcbiAgICAgICAgLy8gc3VwcG9ydGVkLlxuICAgICAgICBpc1N1cHBvcnRlZCA9IGhhcyhcImpzb24tc3RyaW5naWZ5XCIpICYmIGhhcyhcImpzb24tcGFyc2VcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdmFsdWUsIHNlcmlhbGl6ZWQgPSAne1wiYVwiOlsxLHRydWUsZmFsc2UsbnVsbCxcIlxcXFx1MDAwMFxcXFxiXFxcXG5cXFxcZlxcXFxyXFxcXHRcIl19JztcbiAgICAgICAgLy8gVGVzdCBgSlNPTi5zdHJpbmdpZnlgLlxuICAgICAgICBpZiAobmFtZSA9PSBcImpzb24tc3RyaW5naWZ5XCIpIHtcbiAgICAgICAgICB2YXIgc3RyaW5naWZ5ID0gZXhwb3J0cy5zdHJpbmdpZnksIHN0cmluZ2lmeVN1cHBvcnRlZCA9IHR5cGVvZiBzdHJpbmdpZnkgPT0gXCJmdW5jdGlvblwiICYmIGlzRXh0ZW5kZWQ7XG4gICAgICAgICAgaWYgKHN0cmluZ2lmeVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgLy8gQSB0ZXN0IGZ1bmN0aW9uIG9iamVjdCB3aXRoIGEgY3VzdG9tIGB0b0pTT05gIG1ldGhvZC5cbiAgICAgICAgICAgICh2YWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9KS50b0pTT04gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHN0cmluZ2lmeVN1cHBvcnRlZCA9XG4gICAgICAgICAgICAgICAgLy8gRmlyZWZveCAzLjFiMSBhbmQgYjIgc2VyaWFsaXplIHN0cmluZywgbnVtYmVyLCBhbmQgYm9vbGVhblxuICAgICAgICAgICAgICAgIC8vIHByaW1pdGl2ZXMgYXMgb2JqZWN0IGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSgwKSA9PT0gXCIwXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgYjIsIGFuZCBKU09OIDIgc2VyaWFsaXplIHdyYXBwZWQgcHJpbWl0aXZlcyBhcyBvYmplY3RcbiAgICAgICAgICAgICAgICAvLyBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IE51bWJlcigpKSA9PT0gXCIwXCIgJiZcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IFN0cmluZygpKSA9PSAnXCJcIicgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgMiB0aHJvdyBhbiBlcnJvciBpZiB0aGUgdmFsdWUgaXMgYG51bGxgLCBgdW5kZWZpbmVkYCwgb3JcbiAgICAgICAgICAgICAgICAvLyBkb2VzIG5vdCBkZWZpbmUgYSBjYW5vbmljYWwgSlNPTiByZXByZXNlbnRhdGlvbiAodGhpcyBhcHBsaWVzIHRvXG4gICAgICAgICAgICAgICAgLy8gb2JqZWN0cyB3aXRoIGB0b0pTT05gIHByb3BlcnRpZXMgYXMgd2VsbCwgKnVubGVzcyogdGhleSBhcmUgbmVzdGVkXG4gICAgICAgICAgICAgICAgLy8gd2l0aGluIGFuIG9iamVjdCBvciBhcnJheSkuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KGdldENsYXNzKSA9PT0gdW5kZWYgJiZcbiAgICAgICAgICAgICAgICAvLyBJRSA4IHNlcmlhbGl6ZXMgYHVuZGVmaW5lZGAgYXMgYFwidW5kZWZpbmVkXCJgLiBTYWZhcmkgPD0gNS4xLjcgYW5kXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjMgcGFzcyB0aGlzIHRlc3QuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KHVuZGVmKSA9PT0gdW5kZWYgJiZcbiAgICAgICAgICAgICAgICAvLyBTYWZhcmkgPD0gNS4xLjcgYW5kIEZGIDMuMWIzIHRocm93IGBFcnJvcmBzIGFuZCBgVHlwZUVycm9yYHMsXG4gICAgICAgICAgICAgICAgLy8gcmVzcGVjdGl2ZWx5LCBpZiB0aGUgdmFsdWUgaXMgb21pdHRlZCBlbnRpcmVseS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoKSA9PT0gdW5kZWYgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgMiB0aHJvdyBhbiBlcnJvciBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgbm90IGEgbnVtYmVyLFxuICAgICAgICAgICAgICAgIC8vIHN0cmluZywgYXJyYXksIG9iamVjdCwgQm9vbGVhbiwgb3IgYG51bGxgIGxpdGVyYWwuIFRoaXMgYXBwbGllcyB0b1xuICAgICAgICAgICAgICAgIC8vIG9iamVjdHMgd2l0aCBjdXN0b20gYHRvSlNPTmAgbWV0aG9kcyBhcyB3ZWxsLCB1bmxlc3MgdGhleSBhcmUgbmVzdGVkXG4gICAgICAgICAgICAgICAgLy8gaW5zaWRlIG9iamVjdCBvciBhcnJheSBsaXRlcmFscy4gWVVJIDMuMC4wYjEgaWdub3JlcyBjdXN0b20gYHRvSlNPTmBcbiAgICAgICAgICAgICAgICAvLyBtZXRob2RzIGVudGlyZWx5LlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSh2YWx1ZSkgPT09IFwiMVwiICYmXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KFt2YWx1ZV0pID09IFwiWzFdXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBQcm90b3R5cGUgPD0gMS42LjEgc2VyaWFsaXplcyBgW3VuZGVmaW5lZF1gIGFzIGBcIltdXCJgIGluc3RlYWQgb2ZcbiAgICAgICAgICAgICAgICAvLyBgXCJbbnVsbF1cImAuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KFt1bmRlZl0pID09IFwiW251bGxdXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBZVUkgMy4wLjBiMSBmYWlscyB0byBzZXJpYWxpemUgYG51bGxgIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShudWxsKSA9PSBcIm51bGxcIiAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCAyIGhhbHRzIHNlcmlhbGl6YXRpb24gaWYgYW4gYXJyYXkgY29udGFpbnMgYSBmdW5jdGlvbjpcbiAgICAgICAgICAgICAgICAvLyBgWzEsIHRydWUsIGdldENsYXNzLCAxXWAgc2VyaWFsaXplcyBhcyBcIlsxLHRydWUsXSxcIi4gRkYgMy4xYjNcbiAgICAgICAgICAgICAgICAvLyBlbGlkZXMgbm9uLUpTT04gdmFsdWVzIGZyb20gb2JqZWN0cyBhbmQgYXJyYXlzLCB1bmxlc3MgdGhleVxuICAgICAgICAgICAgICAgIC8vIGRlZmluZSBjdXN0b20gYHRvSlNPTmAgbWV0aG9kcy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoW3VuZGVmLCBnZXRDbGFzcywgbnVsbF0pID09IFwiW251bGwsbnVsbCxudWxsXVwiICYmXG4gICAgICAgICAgICAgICAgLy8gU2ltcGxlIHNlcmlhbGl6YXRpb24gdGVzdC4gRkYgMy4xYjEgdXNlcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZXNcbiAgICAgICAgICAgICAgICAvLyB3aGVyZSBjaGFyYWN0ZXIgZXNjYXBlIGNvZGVzIGFyZSBleHBlY3RlZCAoZS5nLiwgYFxcYmAgPT4gYFxcdTAwMDhgKS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoeyBcImFcIjogW3ZhbHVlLCB0cnVlLCBmYWxzZSwgbnVsbCwgXCJcXHgwMFxcYlxcblxcZlxcclxcdFwiXSB9KSA9PSBzZXJpYWxpemVkICYmXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjEgYW5kIGIyIGlnbm9yZSB0aGUgYGZpbHRlcmAgYW5kIGB3aWR0aGAgYXJndW1lbnRzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShudWxsLCB2YWx1ZSkgPT09IFwiMVwiICYmXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KFsxLCAyXSwgbnVsbCwgMSkgPT0gXCJbXFxuIDEsXFxuIDJcXG5dXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBKU09OIDIsIFByb3RvdHlwZSA8PSAxLjcsIGFuZCBvbGRlciBXZWJLaXQgYnVpbGRzIGluY29ycmVjdGx5XG4gICAgICAgICAgICAgICAgLy8gc2VyaWFsaXplIGV4dGVuZGVkIHllYXJzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgRGF0ZSgtOC42NGUxNSkpID09ICdcIi0yNzE4MjEtMDQtMjBUMDA6MDA6MDAuMDAwWlwiJyAmJlxuICAgICAgICAgICAgICAgIC8vIFRoZSBtaWxsaXNlY29uZHMgYXJlIG9wdGlvbmFsIGluIEVTIDUsIGJ1dCByZXF1aXJlZCBpbiA1LjEuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBEYXRlKDguNjRlMTUpKSA9PSAnXCIrMjc1NzYwLTA5LTEzVDAwOjAwOjAwLjAwMFpcIicgJiZcbiAgICAgICAgICAgICAgICAvLyBGaXJlZm94IDw9IDExLjAgaW5jb3JyZWN0bHkgc2VyaWFsaXplcyB5ZWFycyBwcmlvciB0byAwIGFzIG5lZ2F0aXZlXG4gICAgICAgICAgICAgICAgLy8gZm91ci1kaWdpdCB5ZWFycyBpbnN0ZWFkIG9mIHNpeC1kaWdpdCB5ZWFycy4gQ3JlZGl0czogQFlhZmZsZS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IERhdGUoLTYyMTk4NzU1MmU1KSkgPT0gJ1wiLTAwMDAwMS0wMS0wMVQwMDowMDowMC4wMDBaXCInICYmXG4gICAgICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDUuMS41IGFuZCBPcGVyYSA+PSAxMC41MyBpbmNvcnJlY3RseSBzZXJpYWxpemUgbWlsbGlzZWNvbmRcbiAgICAgICAgICAgICAgICAvLyB2YWx1ZXMgbGVzcyB0aGFuIDEwMDAuIENyZWRpdHM6IEBZYWZmbGUuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBEYXRlKC0xKSkgPT0gJ1wiMTk2OS0xMi0zMVQyMzo1OTo1OS45OTlaXCInO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgIHN0cmluZ2lmeVN1cHBvcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpc1N1cHBvcnRlZCA9IHN0cmluZ2lmeVN1cHBvcnRlZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUZXN0IGBKU09OLnBhcnNlYC5cbiAgICAgICAgaWYgKG5hbWUgPT0gXCJqc29uLXBhcnNlXCIpIHtcbiAgICAgICAgICB2YXIgcGFyc2UgPSBleHBvcnRzLnBhcnNlO1xuICAgICAgICAgIGlmICh0eXBlb2YgcGFyc2UgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgYjIgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYSBiYXJlIGxpdGVyYWwgaXMgcHJvdmlkZWQuXG4gICAgICAgICAgICAgIC8vIENvbmZvcm1pbmcgaW1wbGVtZW50YXRpb25zIHNob3VsZCBhbHNvIGNvZXJjZSB0aGUgaW5pdGlhbCBhcmd1bWVudCB0b1xuICAgICAgICAgICAgICAvLyBhIHN0cmluZyBwcmlvciB0byBwYXJzaW5nLlxuICAgICAgICAgICAgICBpZiAocGFyc2UoXCIwXCIpID09PSAwICYmICFwYXJzZShmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBTaW1wbGUgcGFyc2luZyB0ZXN0LlxuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2Uoc2VyaWFsaXplZCk7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlU3VwcG9ydGVkID0gdmFsdWVbXCJhXCJdLmxlbmd0aCA9PSA1ICYmIHZhbHVlW1wiYVwiXVswXSA9PT0gMTtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyaSA8PSA1LjEuMiBhbmQgRkYgMy4xYjEgYWxsb3cgdW5lc2NhcGVkIHRhYnMgaW4gc3RyaW5ncy5cbiAgICAgICAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSAhcGFyc2UoJ1wiXFx0XCInKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge31cbiAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEZGIDQuMCBhbmQgNC4wLjEgYWxsb3cgbGVhZGluZyBgK2Agc2lnbnMgYW5kIGxlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAvLyBkZWNpbWFsIHBvaW50cy4gRkYgNC4wLCA0LjAuMSwgYW5kIElFIDktMTAgYWxzbyBhbGxvd1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGNlcnRhaW4gb2N0YWwgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSBwYXJzZShcIjAxXCIpICE9PSAxO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAocGFyc2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBGRiA0LjAsIDQuMC4xLCBhbmQgUmhpbm8gMS43UjMtUjQgYWxsb3cgdHJhaWxpbmcgZGVjaW1hbFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHBvaW50cy4gVGhlc2UgZW52aXJvbm1lbnRzLCBhbG9uZyB3aXRoIEZGIDMuMWIxIGFuZCAyLFxuICAgICAgICAgICAgICAgICAgICAgIC8vIGFsc28gYWxsb3cgdHJhaWxpbmcgY29tbWFzIGluIEpTT04gb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3VwcG9ydGVkID0gcGFyc2UoXCIxLlwiKSAhPT0gMTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgIHBhcnNlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlzU3VwcG9ydGVkID0gcGFyc2VTdXBwb3J0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNbbmFtZV0gPSAhIWlzU3VwcG9ydGVkO1xuICAgIH1cblxuICAgIGlmICghaGFzKFwianNvblwiKSkge1xuICAgICAgLy8gQ29tbW9uIGBbW0NsYXNzXV1gIG5hbWUgYWxpYXNlcy5cbiAgICAgIHZhciBmdW5jdGlvbkNsYXNzID0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiLFxuICAgICAgICAgIGRhdGVDbGFzcyA9IFwiW29iamVjdCBEYXRlXVwiLFxuICAgICAgICAgIG51bWJlckNsYXNzID0gXCJbb2JqZWN0IE51bWJlcl1cIixcbiAgICAgICAgICBzdHJpbmdDbGFzcyA9IFwiW29iamVjdCBTdHJpbmddXCIsXG4gICAgICAgICAgYXJyYXlDbGFzcyA9IFwiW29iamVjdCBBcnJheV1cIixcbiAgICAgICAgICBib29sZWFuQ2xhc3MgPSBcIltvYmplY3QgQm9vbGVhbl1cIjtcblxuICAgICAgLy8gRGV0ZWN0IGluY29tcGxldGUgc3VwcG9ydCBmb3IgYWNjZXNzaW5nIHN0cmluZyBjaGFyYWN0ZXJzIGJ5IGluZGV4LlxuICAgICAgdmFyIGNoYXJJbmRleEJ1Z2d5ID0gaGFzKFwiYnVnLXN0cmluZy1jaGFyLWluZGV4XCIpO1xuXG4gICAgICAvLyBEZWZpbmUgYWRkaXRpb25hbCB1dGlsaXR5IG1ldGhvZHMgaWYgdGhlIGBEYXRlYCBtZXRob2RzIGFyZSBidWdneS5cbiAgICAgIGlmICghaXNFeHRlbmRlZCkge1xuICAgICAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICAgICAgICAvLyBBIG1hcHBpbmcgYmV0d2VlbiB0aGUgbW9udGhzIG9mIHRoZSB5ZWFyIGFuZCB0aGUgbnVtYmVyIG9mIGRheXMgYmV0d2VlblxuICAgICAgICAvLyBKYW51YXJ5IDFzdCBhbmQgdGhlIGZpcnN0IG9mIHRoZSByZXNwZWN0aXZlIG1vbnRoLlxuICAgICAgICB2YXIgTW9udGhzID0gWzAsIDMxLCA1OSwgOTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0XTtcbiAgICAgICAgLy8gSW50ZXJuYWw6IENhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiBkYXlzIGJldHdlZW4gdGhlIFVuaXggZXBvY2ggYW5kIHRoZVxuICAgICAgICAvLyBmaXJzdCBkYXkgb2YgdGhlIGdpdmVuIG1vbnRoLlxuICAgICAgICB2YXIgZ2V0RGF5ID0gZnVuY3Rpb24gKHllYXIsIG1vbnRoKSB7XG4gICAgICAgICAgcmV0dXJuIE1vbnRoc1ttb250aF0gKyAzNjUgKiAoeWVhciAtIDE5NzApICsgZmxvb3IoKHllYXIgLSAxOTY5ICsgKG1vbnRoID0gKyhtb250aCA+IDEpKSkgLyA0KSAtIGZsb29yKCh5ZWFyIC0gMTkwMSArIG1vbnRoKSAvIDEwMCkgKyBmbG9vcigoeWVhciAtIDE2MDEgKyBtb250aCkgLyA0MDApO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBJbnRlcm5hbDogRGV0ZXJtaW5lcyBpZiBhIHByb3BlcnR5IGlzIGEgZGlyZWN0IHByb3BlcnR5IG9mIHRoZSBnaXZlblxuICAgICAgLy8gb2JqZWN0LiBEZWxlZ2F0ZXMgdG8gdGhlIG5hdGl2ZSBgT2JqZWN0I2hhc093blByb3BlcnR5YCBtZXRob2QuXG4gICAgICBpZiAoIShpc1Byb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHkpKSB7XG4gICAgICAgIGlzUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICB2YXIgbWVtYmVycyA9IHt9LCBjb25zdHJ1Y3RvcjtcbiAgICAgICAgICBpZiAoKG1lbWJlcnMuX19wcm90b19fID0gbnVsbCwgbWVtYmVycy5fX3Byb3RvX18gPSB7XG4gICAgICAgICAgICAvLyBUaGUgKnByb3RvKiBwcm9wZXJ0eSBjYW5ub3QgYmUgc2V0IG11bHRpcGxlIHRpbWVzIGluIHJlY2VudFxuICAgICAgICAgICAgLy8gdmVyc2lvbnMgb2YgRmlyZWZveCBhbmQgU2VhTW9ua2V5LlxuICAgICAgICAgICAgXCJ0b1N0cmluZ1wiOiAxXG4gICAgICAgICAgfSwgbWVtYmVycykudG9TdHJpbmcgIT0gZ2V0Q2xhc3MpIHtcbiAgICAgICAgICAgIC8vIFNhZmFyaSA8PSAyLjAuMyBkb2Vzbid0IGltcGxlbWVudCBgT2JqZWN0I2hhc093blByb3BlcnR5YCwgYnV0XG4gICAgICAgICAgICAvLyBzdXBwb3J0cyB0aGUgbXV0YWJsZSAqcHJvdG8qIHByb3BlcnR5LlxuICAgICAgICAgICAgaXNQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAvLyBDYXB0dXJlIGFuZCBicmVhayB0aGUgb2JqZWN0J3MgcHJvdG90eXBlIGNoYWluIChzZWUgc2VjdGlvbiA4LjYuMlxuICAgICAgICAgICAgICAvLyBvZiB0aGUgRVMgNS4xIHNwZWMpLiBUaGUgcGFyZW50aGVzaXplZCBleHByZXNzaW9uIHByZXZlbnRzIGFuXG4gICAgICAgICAgICAgIC8vIHVuc2FmZSB0cmFuc2Zvcm1hdGlvbiBieSB0aGUgQ2xvc3VyZSBDb21waWxlci5cbiAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsID0gdGhpcy5fX3Byb3RvX18sIHJlc3VsdCA9IHByb3BlcnR5IGluICh0aGlzLl9fcHJvdG9fXyA9IG51bGwsIHRoaXMpO1xuICAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBwcm90b3R5cGUgY2hhaW4uXG4gICAgICAgICAgICAgIHRoaXMuX19wcm90b19fID0gb3JpZ2luYWw7XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDYXB0dXJlIGEgcmVmZXJlbmNlIHRvIHRoZSB0b3AtbGV2ZWwgYE9iamVjdGAgY29uc3RydWN0b3IuXG4gICAgICAgICAgICBjb25zdHJ1Y3RvciA9IG1lbWJlcnMuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIGBjb25zdHJ1Y3RvcmAgcHJvcGVydHkgdG8gc2ltdWxhdGUgYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAgaW5cbiAgICAgICAgICAgIC8vIG90aGVyIGVudmlyb25tZW50cy5cbiAgICAgICAgICAgIGlzUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudCA9ICh0aGlzLmNvbnN0cnVjdG9yIHx8IGNvbnN0cnVjdG9yKS5wcm90b3R5cGU7XG4gICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eSBpbiB0aGlzICYmICEocHJvcGVydHkgaW4gcGFyZW50ICYmIHRoaXNbcHJvcGVydHldID09PSBwYXJlbnRbcHJvcGVydHldKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIG1lbWJlcnMgPSBudWxsO1xuICAgICAgICAgIHJldHVybiBpc1Byb3BlcnR5LmNhbGwodGhpcywgcHJvcGVydHkpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBJbnRlcm5hbDogTm9ybWFsaXplcyB0aGUgYGZvci4uLmluYCBpdGVyYXRpb24gYWxnb3JpdGhtIGFjcm9zc1xuICAgICAgLy8gZW52aXJvbm1lbnRzLiBFYWNoIGVudW1lcmF0ZWQga2V5IGlzIHlpZWxkZWQgdG8gYSBgY2FsbGJhY2tgIGZ1bmN0aW9uLlxuICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBzaXplID0gMCwgUHJvcGVydGllcywgbWVtYmVycywgcHJvcGVydHk7XG5cbiAgICAgICAgLy8gVGVzdHMgZm9yIGJ1Z3MgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQncyBgZm9yLi4uaW5gIGFsZ29yaXRobS4gVGhlXG4gICAgICAgIC8vIGB2YWx1ZU9mYCBwcm9wZXJ0eSBpbmhlcml0cyB0aGUgbm9uLWVudW1lcmFibGUgZmxhZyBmcm9tXG4gICAgICAgIC8vIGBPYmplY3QucHJvdG90eXBlYCBpbiBvbGRlciB2ZXJzaW9ucyBvZiBJRSwgTmV0c2NhcGUsIGFuZCBNb3ppbGxhLlxuICAgICAgICAoUHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlT2YgPSAwO1xuICAgICAgICB9KS5wcm90b3R5cGUudmFsdWVPZiA9IDA7XG5cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBgUHJvcGVydGllc2AgY2xhc3MuXG4gICAgICAgIG1lbWJlcnMgPSBuZXcgUHJvcGVydGllcygpO1xuICAgICAgICBmb3IgKHByb3BlcnR5IGluIG1lbWJlcnMpIHtcbiAgICAgICAgICAvLyBJZ25vcmUgYWxsIHByb3BlcnRpZXMgaW5oZXJpdGVkIGZyb20gYE9iamVjdC5wcm90b3R5cGVgLlxuICAgICAgICAgIGlmIChpc1Byb3BlcnR5LmNhbGwobWVtYmVycywgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICBzaXplKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFByb3BlcnRpZXMgPSBtZW1iZXJzID0gbnVsbDtcblxuICAgICAgICAvLyBOb3JtYWxpemUgdGhlIGl0ZXJhdGlvbiBhbGdvcml0aG0uXG4gICAgICAgIGlmICghc2l6ZSkge1xuICAgICAgICAgIC8vIEEgbGlzdCBvZiBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGluaGVyaXRlZCBmcm9tIGBPYmplY3QucHJvdG90eXBlYC5cbiAgICAgICAgICBtZW1iZXJzID0gW1widmFsdWVPZlwiLCBcInRvU3RyaW5nXCIsIFwidG9Mb2NhbGVTdHJpbmdcIiwgXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLCBcImlzUHJvdG90eXBlT2ZcIiwgXCJoYXNPd25Qcm9wZXJ0eVwiLCBcImNvbnN0cnVjdG9yXCJdO1xuICAgICAgICAgIC8vIElFIDw9IDgsIE1vemlsbGEgMS4wLCBhbmQgTmV0c2NhcGUgNi4yIGlnbm9yZSBzaGFkb3dlZCBub24tZW51bWVyYWJsZVxuICAgICAgICAgIC8vIHByb3BlcnRpZXMuXG4gICAgICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IGdldENsYXNzLmNhbGwob2JqZWN0KSA9PSBmdW5jdGlvbkNsYXNzLCBwcm9wZXJ0eSwgbGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGhhc1Byb3BlcnR5ID0gIWlzRnVuY3Rpb24gJiYgdHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciAhPSBcImZ1bmN0aW9uXCIgJiYgb2JqZWN0VHlwZXNbdHlwZW9mIG9iamVjdC5oYXNPd25Qcm9wZXJ0eV0gJiYgb2JqZWN0Lmhhc093blByb3BlcnR5IHx8IGlzUHJvcGVydHk7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAvLyBHZWNrbyA8PSAxLjAgZW51bWVyYXRlcyB0aGUgYHByb3RvdHlwZWAgcHJvcGVydHkgb2YgZnVuY3Rpb25zIHVuZGVyXG4gICAgICAgICAgICAgIC8vIGNlcnRhaW4gY29uZGl0aW9uczsgSUUgZG9lcyBub3QuXG4gICAgICAgICAgICAgIGlmICghKGlzRnVuY3Rpb24gJiYgcHJvcGVydHkgPT0gXCJwcm90b3R5cGVcIikgJiYgaGFzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTWFudWFsbHkgaW52b2tlIHRoZSBjYWxsYmFjayBmb3IgZWFjaCBub24tZW51bWVyYWJsZSBwcm9wZXJ0eS5cbiAgICAgICAgICAgIGZvciAobGVuZ3RoID0gbWVtYmVycy5sZW5ndGg7IHByb3BlcnR5ID0gbWVtYmVyc1stLWxlbmd0aF07IGhhc1Byb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkgJiYgY2FsbGJhY2socHJvcGVydHkpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHNpemUgPT0gMikge1xuICAgICAgICAgIC8vIFNhZmFyaSA8PSAyLjAuNCBlbnVtZXJhdGVzIHNoYWRvd2VkIHByb3BlcnRpZXMgdHdpY2UuXG4gICAgICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBzZXQgb2YgaXRlcmF0ZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgIHZhciBtZW1iZXJzID0ge30sIGlzRnVuY3Rpb24gPSBnZXRDbGFzcy5jYWxsKG9iamVjdCkgPT0gZnVuY3Rpb25DbGFzcywgcHJvcGVydHk7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAvLyBTdG9yZSBlYWNoIHByb3BlcnR5IG5hbWUgdG8gcHJldmVudCBkb3VibGUgZW51bWVyYXRpb24uIFRoZVxuICAgICAgICAgICAgICAvLyBgcHJvdG90eXBlYCBwcm9wZXJ0eSBvZiBmdW5jdGlvbnMgaXMgbm90IGVudW1lcmF0ZWQgZHVlIHRvIGNyb3NzLVxuICAgICAgICAgICAgICAvLyBlbnZpcm9ubWVudCBpbmNvbnNpc3RlbmNpZXMuXG4gICAgICAgICAgICAgIGlmICghKGlzRnVuY3Rpb24gJiYgcHJvcGVydHkgPT0gXCJwcm90b3R5cGVcIikgJiYgIWlzUHJvcGVydHkuY2FsbChtZW1iZXJzLCBwcm9wZXJ0eSkgJiYgKG1lbWJlcnNbcHJvcGVydHldID0gMSkgJiYgaXNQcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2socHJvcGVydHkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBObyBidWdzIGRldGVjdGVkOyB1c2UgdGhlIHN0YW5kYXJkIGBmb3IuLi5pbmAgYWxnb3JpdGhtLlxuICAgICAgICAgIGZvckVhY2ggPSBmdW5jdGlvbiAob2JqZWN0LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIGlzRnVuY3Rpb24gPSBnZXRDbGFzcy5jYWxsKG9iamVjdCkgPT0gZnVuY3Rpb25DbGFzcywgcHJvcGVydHksIGlzQ29uc3RydWN0b3I7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICBpZiAoIShpc0Z1bmN0aW9uICYmIHByb3BlcnR5ID09IFwicHJvdG90eXBlXCIpICYmIGlzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSAmJiAhKGlzQ29uc3RydWN0b3IgPSBwcm9wZXJ0eSA9PT0gXCJjb25zdHJ1Y3RvclwiKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTWFudWFsbHkgaW52b2tlIHRoZSBjYWxsYmFjayBmb3IgdGhlIGBjb25zdHJ1Y3RvcmAgcHJvcGVydHkgZHVlIHRvXG4gICAgICAgICAgICAvLyBjcm9zcy1lbnZpcm9ubWVudCBpbmNvbnNpc3RlbmNpZXMuXG4gICAgICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvciB8fCBpc1Byb3BlcnR5LmNhbGwob2JqZWN0LCAocHJvcGVydHkgPSBcImNvbnN0cnVjdG9yXCIpKSkge1xuICAgICAgICAgICAgICBjYWxsYmFjayhwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9yRWFjaChvYmplY3QsIGNhbGxiYWNrKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFB1YmxpYzogU2VyaWFsaXplcyBhIEphdmFTY3JpcHQgYHZhbHVlYCBhcyBhIEpTT04gc3RyaW5nLiBUaGUgb3B0aW9uYWxcbiAgICAgIC8vIGBmaWx0ZXJgIGFyZ3VtZW50IG1heSBzcGVjaWZ5IGVpdGhlciBhIGZ1bmN0aW9uIHRoYXQgYWx0ZXJzIGhvdyBvYmplY3QgYW5kXG4gICAgICAvLyBhcnJheSBtZW1iZXJzIGFyZSBzZXJpYWxpemVkLCBvciBhbiBhcnJheSBvZiBzdHJpbmdzIGFuZCBudW1iZXJzIHRoYXRcbiAgICAgIC8vIGluZGljYXRlcyB3aGljaCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBzZXJpYWxpemVkLiBUaGUgb3B0aW9uYWwgYHdpZHRoYFxuICAgICAgLy8gYXJndW1lbnQgbWF5IGJlIGVpdGhlciBhIHN0cmluZyBvciBudW1iZXIgdGhhdCBzcGVjaWZpZXMgdGhlIGluZGVudGF0aW9uXG4gICAgICAvLyBsZXZlbCBvZiB0aGUgb3V0cHV0LlxuICAgICAgaWYgKCFoYXMoXCJqc29uLXN0cmluZ2lmeVwiKSkge1xuICAgICAgICAvLyBJbnRlcm5hbDogQSBtYXAgb2YgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCB0aGVpciBlc2NhcGVkIGVxdWl2YWxlbnRzLlxuICAgICAgICB2YXIgRXNjYXBlcyA9IHtcbiAgICAgICAgICA5MjogXCJcXFxcXFxcXFwiLFxuICAgICAgICAgIDM0OiAnXFxcXFwiJyxcbiAgICAgICAgICA4OiBcIlxcXFxiXCIsXG4gICAgICAgICAgMTI6IFwiXFxcXGZcIixcbiAgICAgICAgICAxMDogXCJcXFxcblwiLFxuICAgICAgICAgIDEzOiBcIlxcXFxyXCIsXG4gICAgICAgICAgOTogXCJcXFxcdFwiXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IENvbnZlcnRzIGB2YWx1ZWAgaW50byBhIHplcm8tcGFkZGVkIHN0cmluZyBzdWNoIHRoYXQgaXRzXG4gICAgICAgIC8vIGxlbmd0aCBpcyBhdCBsZWFzdCBlcXVhbCB0byBgd2lkdGhgLiBUaGUgYHdpZHRoYCBtdXN0IGJlIDw9IDYuXG4gICAgICAgIHZhciBsZWFkaW5nWmVyb2VzID0gXCIwMDAwMDBcIjtcbiAgICAgICAgdmFyIHRvUGFkZGVkU3RyaW5nID0gZnVuY3Rpb24gKHdpZHRoLCB2YWx1ZSkge1xuICAgICAgICAgIC8vIFRoZSBgfHwgMGAgZXhwcmVzc2lvbiBpcyBuZWNlc3NhcnkgdG8gd29yayBhcm91bmQgYSBidWcgaW5cbiAgICAgICAgICAvLyBPcGVyYSA8PSA3LjU0dTIgd2hlcmUgYDAgPT0gLTBgLCBidXQgYFN0cmluZygtMCkgIT09IFwiMFwiYC5cbiAgICAgICAgICByZXR1cm4gKGxlYWRpbmdaZXJvZXMgKyAodmFsdWUgfHwgMCkpLnNsaWNlKC13aWR0aCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IERvdWJsZS1xdW90ZXMgYSBzdHJpbmcgYHZhbHVlYCwgcmVwbGFjaW5nIGFsbCBBU0NJSSBjb250cm9sXG4gICAgICAgIC8vIGNoYXJhY3RlcnMgKGNoYXJhY3RlcnMgd2l0aCBjb2RlIHVuaXQgdmFsdWVzIGJldHdlZW4gMCBhbmQgMzEpIHdpdGhcbiAgICAgICAgLy8gdGhlaXIgZXNjYXBlZCBlcXVpdmFsZW50cy4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGVcbiAgICAgICAgLy8gYFF1b3RlKHZhbHVlKWAgb3BlcmF0aW9uIGRlZmluZWQgaW4gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMy5cbiAgICAgICAgdmFyIHVuaWNvZGVQcmVmaXggPSBcIlxcXFx1MDBcIjtcbiAgICAgICAgdmFyIHF1b3RlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9ICdcIicsIGluZGV4ID0gMCwgbGVuZ3RoID0gdmFsdWUubGVuZ3RoLCB1c2VDaGFySW5kZXggPSAhY2hhckluZGV4QnVnZ3kgfHwgbGVuZ3RoID4gMTA7XG4gICAgICAgICAgdmFyIHN5bWJvbHMgPSB1c2VDaGFySW5kZXggJiYgKGNoYXJJbmRleEJ1Z2d5ID8gdmFsdWUuc3BsaXQoXCJcIikgOiB2YWx1ZSk7XG4gICAgICAgICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICB2YXIgY2hhckNvZGUgPSB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgaXMgYSBjb250cm9sIGNoYXJhY3RlciwgYXBwZW5kIGl0cyBVbmljb2RlIG9yXG4gICAgICAgICAgICAvLyBzaG9ydGhhbmQgZXNjYXBlIHNlcXVlbmNlOyBvdGhlcndpc2UsIGFwcGVuZCB0aGUgY2hhcmFjdGVyIGFzLWlzLlxuICAgICAgICAgICAgc3dpdGNoIChjaGFyQ29kZSkge1xuICAgICAgICAgICAgICBjYXNlIDg6IGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMjogY2FzZSAxMzogY2FzZSAzNDogY2FzZSA5MjpcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gRXNjYXBlc1tjaGFyQ29kZV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB1bmljb2RlUHJlZml4ICsgdG9QYWRkZWRTdHJpbmcoMiwgY2hhckNvZGUudG9TdHJpbmcoMTYpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gdXNlQ2hhckluZGV4ID8gc3ltYm9sc1tpbmRleF0gOiB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ1wiJztcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmVjdXJzaXZlbHkgc2VyaWFsaXplcyBhbiBvYmplY3QuIEltcGxlbWVudHMgdGhlXG4gICAgICAgIC8vIGBTdHIoa2V5LCBob2xkZXIpYCwgYEpPKHZhbHVlKWAsIGFuZCBgSkEodmFsdWUpYCBvcGVyYXRpb25zLlxuICAgICAgICB2YXIgc2VyaWFsaXplID0gZnVuY3Rpb24gKHByb3BlcnR5LCBvYmplY3QsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCB3aGl0ZXNwYWNlLCBpbmRlbnRhdGlvbiwgc3RhY2spIHtcbiAgICAgICAgICB2YXIgdmFsdWUsIGNsYXNzTmFtZSwgeWVhciwgbW9udGgsIGRhdGUsIHRpbWUsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIHJlc3VsdHMsIGVsZW1lbnQsIGluZGV4LCBsZW5ndGgsIHByZWZpeCwgcmVzdWx0O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBOZWNlc3NhcnkgZm9yIGhvc3Qgb2JqZWN0IHN1cHBvcnQuXG4gICAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lID0gZ2V0Q2xhc3MuY2FsbCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IGRhdGVDbGFzcyAmJiAhaXNQcm9wZXJ0eS5jYWxsKHZhbHVlLCBcInRvSlNPTlwiKSkge1xuICAgICAgICAgICAgICBpZiAodmFsdWUgPiAtMSAvIDAgJiYgdmFsdWUgPCAxIC8gMCkge1xuICAgICAgICAgICAgICAgIC8vIERhdGVzIGFyZSBzZXJpYWxpemVkIGFjY29yZGluZyB0byB0aGUgYERhdGUjdG9KU09OYCBtZXRob2RcbiAgICAgICAgICAgICAgICAvLyBzcGVjaWZpZWQgaW4gRVMgNS4xIHNlY3Rpb24gMTUuOS41LjQ0LiBTZWUgc2VjdGlvbiAxNS45LjEuMTVcbiAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIElTTyA4NjAxIGRhdGUgdGltZSBzdHJpbmcgZm9ybWF0LlxuICAgICAgICAgICAgICAgIGlmIChnZXREYXkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIE1hbnVhbGx5IGNvbXB1dGUgdGhlIHllYXIsIG1vbnRoLCBkYXRlLCBob3VycywgbWludXRlcyxcbiAgICAgICAgICAgICAgICAgIC8vIHNlY29uZHMsIGFuZCBtaWxsaXNlY29uZHMgaWYgdGhlIGBnZXRVVEMqYCBtZXRob2RzIGFyZVxuICAgICAgICAgICAgICAgICAgLy8gYnVnZ3kuIEFkYXB0ZWQgZnJvbSBAWWFmZmxlJ3MgYGRhdGUtc2hpbWAgcHJvamVjdC5cbiAgICAgICAgICAgICAgICAgIGRhdGUgPSBmbG9vcih2YWx1ZSAvIDg2NGU1KTtcbiAgICAgICAgICAgICAgICAgIGZvciAoeWVhciA9IGZsb29yKGRhdGUgLyAzNjUuMjQyNSkgKyAxOTcwIC0gMTsgZ2V0RGF5KHllYXIgKyAxLCAwKSA8PSBkYXRlOyB5ZWFyKyspO1xuICAgICAgICAgICAgICAgICAgZm9yIChtb250aCA9IGZsb29yKChkYXRlIC0gZ2V0RGF5KHllYXIsIDApKSAvIDMwLjQyKTsgZ2V0RGF5KHllYXIsIG1vbnRoICsgMSkgPD0gZGF0ZTsgbW9udGgrKyk7XG4gICAgICAgICAgICAgICAgICBkYXRlID0gMSArIGRhdGUgLSBnZXREYXkoeWVhciwgbW9udGgpO1xuICAgICAgICAgICAgICAgICAgLy8gVGhlIGB0aW1lYCB2YWx1ZSBzcGVjaWZpZXMgdGhlIHRpbWUgd2l0aGluIHRoZSBkYXkgKHNlZSBFU1xuICAgICAgICAgICAgICAgICAgLy8gNS4xIHNlY3Rpb24gMTUuOS4xLjIpLiBUaGUgZm9ybXVsYSBgKEEgJSBCICsgQikgJSBCYCBpcyB1c2VkXG4gICAgICAgICAgICAgICAgICAvLyB0byBjb21wdXRlIGBBIG1vZHVsbyBCYCwgYXMgdGhlIGAlYCBvcGVyYXRvciBkb2VzIG5vdFxuICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZCB0byB0aGUgYG1vZHVsb2Agb3BlcmF0aW9uIGZvciBuZWdhdGl2ZSBudW1iZXJzLlxuICAgICAgICAgICAgICAgICAgdGltZSA9ICh2YWx1ZSAlIDg2NGU1ICsgODY0ZTUpICUgODY0ZTU7XG4gICAgICAgICAgICAgICAgICAvLyBUaGUgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBtaWxsaXNlY29uZHMgYXJlIG9idGFpbmVkIGJ5XG4gICAgICAgICAgICAgICAgICAvLyBkZWNvbXBvc2luZyB0aGUgdGltZSB3aXRoaW4gdGhlIGRheS4gU2VlIHNlY3Rpb24gMTUuOS4xLjEwLlxuICAgICAgICAgICAgICAgICAgaG91cnMgPSBmbG9vcih0aW1lIC8gMzZlNSkgJSAyNDtcbiAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBmbG9vcih0aW1lIC8gNmU0KSAlIDYwO1xuICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IGZsb29yKHRpbWUgLyAxZTMpICUgNjA7XG4gICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aW1lICUgMWUzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB5ZWFyID0gdmFsdWUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICAgIG1vbnRoID0gdmFsdWUuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICAgICAgICAgIGRhdGUgPSB2YWx1ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgICAgICAgICAgICBob3VycyA9IHZhbHVlLmdldFVUQ0hvdXJzKCk7XG4gICAgICAgICAgICAgICAgICBtaW51dGVzID0gdmFsdWUuZ2V0VVRDTWludXRlcygpO1xuICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IHZhbHVlLmdldFVUQ1NlY29uZHMoKTtcbiAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IHZhbHVlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTZXJpYWxpemUgZXh0ZW5kZWQgeWVhcnMgY29ycmVjdGx5LlxuICAgICAgICAgICAgICAgIHZhbHVlID0gKHllYXIgPD0gMCB8fCB5ZWFyID49IDFlNCA/ICh5ZWFyIDwgMCA/IFwiLVwiIDogXCIrXCIpICsgdG9QYWRkZWRTdHJpbmcoNiwgeWVhciA8IDAgPyAteWVhciA6IHllYXIpIDogdG9QYWRkZWRTdHJpbmcoNCwgeWVhcikpICtcbiAgICAgICAgICAgICAgICAgIFwiLVwiICsgdG9QYWRkZWRTdHJpbmcoMiwgbW9udGggKyAxKSArIFwiLVwiICsgdG9QYWRkZWRTdHJpbmcoMiwgZGF0ZSkgK1xuICAgICAgICAgICAgICAgICAgLy8gTW9udGhzLCBkYXRlcywgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzIHNob3VsZCBoYXZlIHR3b1xuICAgICAgICAgICAgICAgICAgLy8gZGlnaXRzOyBtaWxsaXNlY29uZHMgc2hvdWxkIGhhdmUgdGhyZWUuXG4gICAgICAgICAgICAgICAgICBcIlRcIiArIHRvUGFkZGVkU3RyaW5nKDIsIGhvdXJzKSArIFwiOlwiICsgdG9QYWRkZWRTdHJpbmcoMiwgbWludXRlcykgKyBcIjpcIiArIHRvUGFkZGVkU3RyaW5nKDIsIHNlY29uZHMpICtcbiAgICAgICAgICAgICAgICAgIC8vIE1pbGxpc2Vjb25kcyBhcmUgb3B0aW9uYWwgaW4gRVMgNS4wLCBidXQgcmVxdWlyZWQgaW4gNS4xLlxuICAgICAgICAgICAgICAgICAgXCIuXCIgKyB0b1BhZGRlZFN0cmluZygzLCBtaWxsaXNlY29uZHMpICsgXCJaXCI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZS50b0pTT04gPT0gXCJmdW5jdGlvblwiICYmICgoY2xhc3NOYW1lICE9IG51bWJlckNsYXNzICYmIGNsYXNzTmFtZSAhPSBzdHJpbmdDbGFzcyAmJiBjbGFzc05hbWUgIT0gYXJyYXlDbGFzcykgfHwgaXNQcm9wZXJ0eS5jYWxsKHZhbHVlLCBcInRvSlNPTlwiKSkpIHtcbiAgICAgICAgICAgICAgLy8gUHJvdG90eXBlIDw9IDEuNi4xIGFkZHMgbm9uLXN0YW5kYXJkIGB0b0pTT05gIG1ldGhvZHMgdG8gdGhlXG4gICAgICAgICAgICAgIC8vIGBOdW1iZXJgLCBgU3RyaW5nYCwgYERhdGVgLCBhbmQgYEFycmF5YCBwcm90b3R5cGVzLiBKU09OIDNcbiAgICAgICAgICAgICAgLy8gaWdub3JlcyBhbGwgYHRvSlNPTmAgbWV0aG9kcyBvbiB0aGVzZSBvYmplY3RzIHVubGVzcyB0aGV5IGFyZVxuICAgICAgICAgICAgICAvLyBkZWZpbmVkIGRpcmVjdGx5IG9uIGFuIGluc3RhbmNlLlxuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gSWYgYSByZXBsYWNlbWVudCBmdW5jdGlvbiB3YXMgcHJvdmlkZWQsIGNhbGwgaXQgdG8gb2J0YWluIHRoZSB2YWx1ZVxuICAgICAgICAgICAgLy8gZm9yIHNlcmlhbGl6YXRpb24uXG4gICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrLmNhbGwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2xhc3NOYW1lID0gZ2V0Q2xhc3MuY2FsbCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBib29sZWFuQ2xhc3MpIHtcbiAgICAgICAgICAgIC8vIEJvb2xlYW5zIGFyZSByZXByZXNlbnRlZCBsaXRlcmFsbHkuXG4gICAgICAgICAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IG51bWJlckNsYXNzKSB7XG4gICAgICAgICAgICAvLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5pdGUuIGBJbmZpbml0eWAgYW5kIGBOYU5gIGFyZSBzZXJpYWxpemVkIGFzXG4gICAgICAgICAgICAvLyBgXCJudWxsXCJgLlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID4gLTEgLyAwICYmIHZhbHVlIDwgMSAvIDAgPyBcIlwiICsgdmFsdWUgOiBcIm51bGxcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSA9PSBzdHJpbmdDbGFzcykge1xuICAgICAgICAgICAgLy8gU3RyaW5ncyBhcmUgZG91YmxlLXF1b3RlZCBhbmQgZXNjYXBlZC5cbiAgICAgICAgICAgIHJldHVybiBxdW90ZShcIlwiICsgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXJpYWxpemUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGlzIGlzIGEgbGluZWFyIHNlYXJjaDsgcGVyZm9ybWFuY2VcbiAgICAgICAgICAgIC8vIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiB1bmlxdWUgbmVzdGVkIG9iamVjdHMuXG4gICAgICAgICAgICBmb3IgKGxlbmd0aCA9IHN0YWNrLmxlbmd0aDsgbGVuZ3RoLS07KSB7XG4gICAgICAgICAgICAgIGlmIChzdGFja1tsZW5ndGhdID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIEN5Y2xpYyBzdHJ1Y3R1cmVzIGNhbm5vdCBiZSBzZXJpYWxpemVkIGJ5IGBKU09OLnN0cmluZ2lmeWAuXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAgICAgICAgIHN0YWNrLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgY3VycmVudCBpbmRlbnRhdGlvbiBsZXZlbCBhbmQgaW5kZW50IG9uZSBhZGRpdGlvbmFsIGxldmVsLlxuICAgICAgICAgICAgcHJlZml4ID0gaW5kZW50YXRpb247XG4gICAgICAgICAgICBpbmRlbnRhdGlvbiArPSB3aGl0ZXNwYWNlO1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBhcnJheUNsYXNzKSB7XG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNlcmlhbGl6ZSBhcnJheSBlbGVtZW50cy5cbiAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gc2VyaWFsaXplKGluZGV4LCB2YWx1ZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIGluZGVudGF0aW9uLCBzdGFjayk7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVsZW1lbnQgPT09IHVuZGVmID8gXCJudWxsXCIgOiBlbGVtZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRzLmxlbmd0aCA/ICh3aGl0ZXNwYWNlID8gXCJbXFxuXCIgKyBpbmRlbnRhdGlvbiArIHJlc3VsdHMuam9pbihcIixcXG5cIiArIGluZGVudGF0aW9uKSArIFwiXFxuXCIgKyBwcmVmaXggKyBcIl1cIiA6IChcIltcIiArIHJlc3VsdHMuam9pbihcIixcIikgKyBcIl1cIikpIDogXCJbXVwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgc2VyaWFsaXplIG9iamVjdCBtZW1iZXJzLiBNZW1iZXJzIGFyZSBzZWxlY3RlZCBmcm9tXG4gICAgICAgICAgICAgIC8vIGVpdGhlciBhIHVzZXItc3BlY2lmaWVkIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMsIG9yIHRoZSBvYmplY3RcbiAgICAgICAgICAgICAgLy8gaXRzZWxmLlxuICAgICAgICAgICAgICBmb3JFYWNoKHByb3BlcnRpZXMgfHwgdmFsdWUsIGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gc2VyaWFsaXplKHByb3BlcnR5LCB2YWx1ZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIGluZGVudGF0aW9uLCBzdGFjayk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT09IHVuZGVmKSB7XG4gICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMzogXCJJZiBgZ2FwYCB7d2hpdGVzcGFjZX1cbiAgICAgICAgICAgICAgICAgIC8vIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgYG1lbWJlcmAge3F1b3RlKHByb3BlcnR5KSArIFwiOlwifVxuICAgICAgICAgICAgICAgICAgLy8gYmUgdGhlIGNvbmNhdGVuYXRpb24gb2YgYG1lbWJlcmAgYW5kIHRoZSBgc3BhY2VgIGNoYXJhY3Rlci5cIlxuICAgICAgICAgICAgICAgICAgLy8gVGhlIFwiYHNwYWNlYCBjaGFyYWN0ZXJcIiByZWZlcnMgdG8gdGhlIGxpdGVyYWwgc3BhY2VcbiAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3Rlciwgbm90IHRoZSBgc3BhY2VgIHt3aWR0aH0gYXJndW1lbnQgcHJvdmlkZWQgdG9cbiAgICAgICAgICAgICAgICAgIC8vIGBKU09OLnN0cmluZ2lmeWAuXG4gICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocXVvdGUocHJvcGVydHkpICsgXCI6XCIgKyAod2hpdGVzcGFjZSA/IFwiIFwiIDogXCJcIikgKyBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRzLmxlbmd0aCA/ICh3aGl0ZXNwYWNlID8gXCJ7XFxuXCIgKyBpbmRlbnRhdGlvbiArIHJlc3VsdHMuam9pbihcIixcXG5cIiArIGluZGVudGF0aW9uKSArIFwiXFxuXCIgKyBwcmVmaXggKyBcIn1cIiA6IChcIntcIiArIHJlc3VsdHMuam9pbihcIixcIikgKyBcIn1cIikpIDogXCJ7fVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGUgdHJhdmVyc2VkIG9iamVjdCBzdGFjay5cbiAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUHVibGljOiBgSlNPTi5zdHJpbmdpZnlgLiBTZWUgRVMgNS4xIHNlY3Rpb24gMTUuMTIuMy5cbiAgICAgICAgZXhwb3J0cy5zdHJpbmdpZnkgPSBmdW5jdGlvbiAoc291cmNlLCBmaWx0ZXIsIHdpZHRoKSB7XG4gICAgICAgICAgdmFyIHdoaXRlc3BhY2UsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCBjbGFzc05hbWU7XG4gICAgICAgICAgaWYgKG9iamVjdFR5cGVzW3R5cGVvZiBmaWx0ZXJdICYmIGZpbHRlcikge1xuICAgICAgICAgICAgaWYgKChjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKGZpbHRlcikpID09IGZ1bmN0aW9uQ2xhc3MpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmaWx0ZXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSA9PSBhcnJheUNsYXNzKSB7XG4gICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVzIGFycmF5IGludG8gYSBtYWtlc2hpZnQgc2V0LlxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0gZmlsdGVyLmxlbmd0aCwgdmFsdWU7IGluZGV4IDwgbGVuZ3RoOyB2YWx1ZSA9IGZpbHRlcltpbmRleCsrXSwgKChjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKHZhbHVlKSksIGNsYXNzTmFtZSA9PSBzdHJpbmdDbGFzcyB8fCBjbGFzc05hbWUgPT0gbnVtYmVyQ2xhc3MpICYmIChwcm9wZXJ0aWVzW3ZhbHVlXSA9IDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHdpZHRoKSB7XG4gICAgICAgICAgICBpZiAoKGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwod2lkdGgpKSA9PSBudW1iZXJDbGFzcykge1xuICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBgd2lkdGhgIHRvIGFuIGludGVnZXIgYW5kIGNyZWF0ZSBhIHN0cmluZyBjb250YWluaW5nXG4gICAgICAgICAgICAgIC8vIGB3aWR0aGAgbnVtYmVyIG9mIHNwYWNlIGNoYXJhY3RlcnMuXG4gICAgICAgICAgICAgIGlmICgod2lkdGggLT0gd2lkdGggJSAxKSA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKHdoaXRlc3BhY2UgPSBcIlwiLCB3aWR0aCA+IDEwICYmICh3aWR0aCA9IDEwKTsgd2hpdGVzcGFjZS5sZW5ndGggPCB3aWR0aDsgd2hpdGVzcGFjZSArPSBcIiBcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IHN0cmluZ0NsYXNzKSB7XG4gICAgICAgICAgICAgIHdoaXRlc3BhY2UgPSB3aWR0aC5sZW5ndGggPD0gMTAgPyB3aWR0aCA6IHdpZHRoLnNsaWNlKDAsIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gT3BlcmEgPD0gNy41NHUyIGRpc2NhcmRzIHRoZSB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGVtcHR5IHN0cmluZyBrZXlzXG4gICAgICAgICAgLy8gKGBcIlwiYCkgb25seSBpZiB0aGV5IGFyZSB1c2VkIGRpcmVjdGx5IHdpdGhpbiBhbiBvYmplY3QgbWVtYmVyIGxpc3RcbiAgICAgICAgICAvLyAoZS5nLiwgYCEoXCJcIiBpbiB7IFwiXCI6IDF9KWApLlxuICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoXCJcIiwgKHZhbHVlID0ge30sIHZhbHVlW1wiXCJdID0gc291cmNlLCB2YWx1ZSksIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCB3aGl0ZXNwYWNlLCBcIlwiLCBbXSk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFB1YmxpYzogUGFyc2VzIGEgSlNPTiBzb3VyY2Ugc3RyaW5nLlxuICAgICAgaWYgKCFoYXMoXCJqc29uLXBhcnNlXCIpKSB7XG4gICAgICAgIHZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXG4gICAgICAgIC8vIEludGVybmFsOiBBIG1hcCBvZiBlc2NhcGVkIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgdGhlaXIgdW5lc2NhcGVkXG4gICAgICAgIC8vIGVxdWl2YWxlbnRzLlxuICAgICAgICB2YXIgVW5lc2NhcGVzID0ge1xuICAgICAgICAgIDkyOiBcIlxcXFxcIixcbiAgICAgICAgICAzNDogJ1wiJyxcbiAgICAgICAgICA0NzogXCIvXCIsXG4gICAgICAgICAgOTg6IFwiXFxiXCIsXG4gICAgICAgICAgMTE2OiBcIlxcdFwiLFxuICAgICAgICAgIDExMDogXCJcXG5cIixcbiAgICAgICAgICAxMDI6IFwiXFxmXCIsXG4gICAgICAgICAgMTE0OiBcIlxcclwiXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFN0b3JlcyB0aGUgcGFyc2VyIHN0YXRlLlxuICAgICAgICB2YXIgSW5kZXgsIFNvdXJjZTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmVzZXRzIHRoZSBwYXJzZXIgc3RhdGUgYW5kIHRocm93cyBhIGBTeW50YXhFcnJvcmAuXG4gICAgICAgIHZhciBhYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBJbmRleCA9IFNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgdGhyb3cgU3ludGF4RXJyb3IoKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmV0dXJucyB0aGUgbmV4dCB0b2tlbiwgb3IgYFwiJFwiYCBpZiB0aGUgcGFyc2VyIGhhcyByZWFjaGVkXG4gICAgICAgIC8vIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBzdHJpbmcuIEEgdG9rZW4gbWF5IGJlIGEgc3RyaW5nLCBudW1iZXIsIGBudWxsYFxuICAgICAgICAvLyBsaXRlcmFsLCBvciBCb29sZWFuIGxpdGVyYWwuXG4gICAgICAgIHZhciBsZXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIHNvdXJjZSA9IFNvdXJjZSwgbGVuZ3RoID0gc291cmNlLmxlbmd0aCwgdmFsdWUsIGJlZ2luLCBwb3NpdGlvbiwgaXNTaWduZWQsIGNoYXJDb2RlO1xuICAgICAgICAgIHdoaWxlIChJbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7XG4gICAgICAgICAgICAgIGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHdoaXRlc3BhY2UgdG9rZW5zLCBpbmNsdWRpbmcgdGFicywgY2FycmlhZ2UgcmV0dXJucywgbGluZVxuICAgICAgICAgICAgICAgIC8vIGZlZWRzLCBhbmQgc3BhY2UgY2hhcmFjdGVycy5cbiAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDEyMzogY2FzZSAxMjU6IGNhc2UgOTE6IGNhc2UgOTM6IGNhc2UgNTg6IGNhc2UgNDQ6XG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgYSBwdW5jdHVhdG9yIHRva2VuIChge2AsIGB9YCwgYFtgLCBgXWAsIGA6YCwgb3IgYCxgKSBhdFxuICAgICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuICAgICAgICAgICAgICAgIHZhbHVlID0gY2hhckluZGV4QnVnZ3kgPyBzb3VyY2UuY2hhckF0KEluZGV4KSA6IHNvdXJjZVtJbmRleF07XG4gICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICAgICAgLy8gYFwiYCBkZWxpbWl0cyBhIEpTT04gc3RyaW5nOyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNoYXJhY3RlciBhbmRcbiAgICAgICAgICAgICAgICAvLyBiZWdpbiBwYXJzaW5nIHRoZSBzdHJpbmcuIFN0cmluZyB0b2tlbnMgYXJlIHByZWZpeGVkIHdpdGggdGhlXG4gICAgICAgICAgICAgICAgLy8gc2VudGluZWwgYEBgIGNoYXJhY3RlciB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20gcHVuY3R1YXRvcnMgYW5kXG4gICAgICAgICAgICAgICAgLy8gZW5kLW9mLXN0cmluZyB0b2tlbnMuXG4gICAgICAgICAgICAgICAgZm9yICh2YWx1ZSA9IFwiQFwiLCBJbmRleCsrOyBJbmRleCA8IGxlbmd0aDspIHtcbiAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVW5lc2NhcGVkIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycyAodGhvc2Ugd2l0aCBhIGNvZGUgdW5pdFxuICAgICAgICAgICAgICAgICAgICAvLyBsZXNzIHRoYW4gdGhlIHNwYWNlIGNoYXJhY3RlcikgYXJlIG5vdCBwZXJtaXR0ZWQuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYXJDb2RlID09IDkyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgcmV2ZXJzZSBzb2xpZHVzIChgXFxgKSBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIGFuIGVzY2FwZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbCBjaGFyYWN0ZXIgKGluY2x1ZGluZyBgXCJgLCBgXFxgLCBhbmQgYC9gKSBvciBVbmljb2RlXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaGFyQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTI6IGNhc2UgMzQ6IGNhc2UgNDc6IGNhc2UgOTg6IGNhc2UgMTE2OiBjYXNlIDExMDogY2FzZSAxMDI6IGNhc2UgMTE0OlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2aXZlIGVzY2FwZWQgY29udHJvbCBjaGFyYWN0ZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gVW5lc2NhcGVzW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDExNzpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGBcXHVgIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYSBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgdmFsaWRhdGUgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VyLWRpZ2l0IGNvZGUgcG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiA9ICsrSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHBvc2l0aW9uID0gSW5kZXggKyA0OyBJbmRleCA8IHBvc2l0aW9uOyBJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHZhbGlkIHNlcXVlbmNlIGNvbXByaXNlcyBmb3VyIGhleGRpZ2l0cyAoY2FzZS1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5zZW5zaXRpdmUpIHRoYXQgZm9ybSBhIHNpbmdsZSBoZXhhZGVjaW1hbCB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcgfHwgY2hhckNvZGUgPj0gOTcgJiYgY2hhckNvZGUgPD0gMTAyIHx8IGNoYXJDb2RlID49IDY1ICYmIGNoYXJDb2RlIDw9IDcwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludmFsaWQgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2aXZlIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGZyb21DaGFyQ29kZShcIjB4XCIgKyBzb3VyY2Uuc2xpY2UoYmVnaW4sIEluZGV4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UuXG4gICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gMzQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBBbiB1bmVzY2FwZWQgZG91YmxlLXF1b3RlIGNoYXJhY3RlciBtYXJrcyB0aGUgZW5kIG9mIHRoZVxuICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cmluZy5cbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW4gPSBJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgLy8gT3B0aW1pemUgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBhIHN0cmluZyBpcyB2YWxpZC5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJDb2RlID49IDMyICYmIGNoYXJDb2RlICE9IDkyICYmIGNoYXJDb2RlICE9IDM0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIHN0cmluZyBhcy1pcy5cbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gc291cmNlLnNsaWNlKGJlZ2luLCBJbmRleCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChJbmRleCkgPT0gMzQpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgY2hhcmFjdGVyIGFuZCByZXR1cm4gdGhlIHJldml2ZWQgc3RyaW5nLlxuICAgICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVW50ZXJtaW5hdGVkIHN0cmluZy5cbiAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIC8vIFBhcnNlIG51bWJlcnMgYW5kIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIGJlZ2luID0gSW5kZXg7XG4gICAgICAgICAgICAgICAgLy8gQWR2YW5jZSBwYXN0IHRoZSBuZWdhdGl2ZSBzaWduLCBpZiBvbmUgaXMgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSA0NSkge1xuICAgICAgICAgICAgICAgICAgaXNTaWduZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgYW4gaW50ZWdlciBvciBmbG9hdGluZy1wb2ludCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpIHtcbiAgICAgICAgICAgICAgICAgIC8vIExlYWRpbmcgemVyb2VzIGFyZSBpbnRlcnByZXRlZCBhcyBvY3RhbCBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSA0OCAmJiAoKGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXggKyAxKSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsIG9jdGFsIGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpc1NpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGhlIGludGVnZXIgY29tcG9uZW50LlxuICAgICAgICAgICAgICAgICAgZm9yICg7IEluZGV4IDwgbGVuZ3RoICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCkpLCBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nyk7IEluZGV4KyspO1xuICAgICAgICAgICAgICAgICAgLy8gRmxvYXRzIGNhbm5vdCBjb250YWluIGEgbGVhZGluZyBkZWNpbWFsIHBvaW50OyBob3dldmVyLCB0aGlzXG4gICAgICAgICAgICAgICAgICAvLyBjYXNlIGlzIGFscmVhZHkgYWNjb3VudGVkIGZvciBieSB0aGUgcGFyc2VyLlxuICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KSA9PSA0Nikge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9ICsrSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIHRoZSBkZWNpbWFsIGNvbXBvbmVudC5cbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IHBvc2l0aW9uIDwgbGVuZ3RoICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChwb3NpdGlvbikpLCBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nyk7IHBvc2l0aW9uKyspO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsIHRyYWlsaW5nIGRlY2ltYWwuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBJbmRleCA9IHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgZXhwb25lbnRzLiBUaGUgYGVgIGRlbm90aW5nIHRoZSBleHBvbmVudCBpc1xuICAgICAgICAgICAgICAgICAgLy8gY2FzZS1pbnNlbnNpdGl2ZS5cbiAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDEwMSB8fCBjaGFyQ29kZSA9PSA2OSkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIHBhc3QgdGhlIHNpZ24gZm9sbG93aW5nIHRoZSBleHBvbmVudCwgaWYgb25lIGlzXG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDQzIHx8IGNoYXJDb2RlID09IDQ1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBQYXJzZSB0aGUgZXhwb25lbnRpYWwgY29tcG9uZW50LlxuICAgICAgICAgICAgICAgICAgICBmb3IgKHBvc2l0aW9uID0gSW5kZXg7IHBvc2l0aW9uIDwgbGVuZ3RoICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChwb3NpdGlvbikpLCBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nyk7IHBvc2l0aW9uKyspO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsIGVtcHR5IGV4cG9uZW50LlxuICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgSW5kZXggPSBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIENvZXJjZSB0aGUgcGFyc2VkIHZhbHVlIHRvIGEgSmF2YVNjcmlwdCBudW1iZXIuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gK3NvdXJjZS5zbGljZShiZWdpbiwgSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBIG5lZ2F0aXZlIHNpZ24gbWF5IG9ubHkgcHJlY2VkZSBudW1iZXJzLlxuICAgICAgICAgICAgICAgIGlmIChpc1NpZ25lZCkge1xuICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYHRydWVgLCBgZmFsc2VgLCBhbmQgYG51bGxgIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uuc2xpY2UoSW5kZXgsIEluZGV4ICsgNCkgPT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgIEluZGV4ICs9IDQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZS5zbGljZShJbmRleCwgSW5kZXggKyA1KSA9PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgICAgICAgIEluZGV4ICs9IDU7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2Uuc2xpY2UoSW5kZXgsIEluZGV4ICsgNCkgPT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgICAgIEluZGV4ICs9IDQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVW5yZWNvZ25pemVkIHRva2VuLlxuICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJldHVybiB0aGUgc2VudGluZWwgYCRgIGNoYXJhY3RlciBpZiB0aGUgcGFyc2VyIGhhcyByZWFjaGVkIHRoZSBlbmRcbiAgICAgICAgICAvLyBvZiB0aGUgc291cmNlIHN0cmluZy5cbiAgICAgICAgICByZXR1cm4gXCIkXCI7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFBhcnNlcyBhIEpTT04gYHZhbHVlYCB0b2tlbi5cbiAgICAgICAgdmFyIGdldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHZhciByZXN1bHRzLCBoYXNNZW1iZXJzO1xuICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIiRcIikge1xuICAgICAgICAgICAgLy8gVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQuXG4gICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGlmICgoY2hhckluZGV4QnVnZ3kgPyB2YWx1ZS5jaGFyQXQoMCkgOiB2YWx1ZVswXSkgPT0gXCJAXCIpIHtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzZW50aW5lbCBgQGAgY2hhcmFjdGVyLlxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuc2xpY2UoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBQYXJzZSBvYmplY3QgYW5kIGFycmF5IGxpdGVyYWxzLlxuICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiW1wiKSB7XG4gICAgICAgICAgICAgIC8vIFBhcnNlcyBhIEpTT04gYXJyYXksIHJldHVybmluZyBhIG5ldyBKYXZhU2NyaXB0IGFycmF5LlxuICAgICAgICAgICAgICByZXN1bHRzID0gW107XG4gICAgICAgICAgICAgIGZvciAoOzsgaGFzTWVtYmVycyB8fCAoaGFzTWVtYmVycyA9IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAvLyBBIGNsb3Npbmcgc3F1YXJlIGJyYWNrZXQgbWFya3MgdGhlIGVuZCBvZiB0aGUgYXJyYXkgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJdXCIpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYXJyYXkgbGl0ZXJhbCBjb250YWlucyBlbGVtZW50cywgdGhlIGN1cnJlbnQgdG9rZW5cbiAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUgYSBjb21tYSBzZXBhcmF0aW5nIHRoZSBwcmV2aW91cyBlbGVtZW50IGZyb20gdGhlXG4gICAgICAgICAgICAgICAgLy8gbmV4dC5cbiAgICAgICAgICAgICAgICBpZiAoaGFzTWVtYmVycykge1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiLFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIl1cIikge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdHJhaWxpbmcgYCxgIGluIGFycmF5IGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBgLGAgbXVzdCBzZXBhcmF0ZSBlYWNoIGFycmF5IGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEVsaXNpb25zIGFuZCBsZWFkaW5nIGNvbW1hcyBhcmUgbm90IHBlcm1pdHRlZC5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChnZXQodmFsdWUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gXCJ7XCIpIHtcbiAgICAgICAgICAgICAgLy8gUGFyc2VzIGEgSlNPTiBvYmplY3QsIHJldHVybmluZyBhIG5ldyBKYXZhU2NyaXB0IG9iamVjdC5cbiAgICAgICAgICAgICAgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICBmb3IgKDs7IGhhc01lbWJlcnMgfHwgKGhhc01lbWJlcnMgPSB0cnVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgLy8gQSBjbG9zaW5nIGN1cmx5IGJyYWNlIG1hcmtzIHRoZSBlbmQgb2YgdGhlIG9iamVjdCBsaXRlcmFsLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIn1cIikge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgbGl0ZXJhbCBjb250YWlucyBtZW1iZXJzLCB0aGUgY3VycmVudCB0b2tlblxuICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBhIGNvbW1hIHNlcGFyYXRvci5cbiAgICAgICAgICAgICAgICBpZiAoaGFzTWVtYmVycykge1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiLFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIn1cIikge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdHJhaWxpbmcgYCxgIGluIG9iamVjdCBsaXRlcmFsLlxuICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgYCxgIG11c3Qgc2VwYXJhdGUgZWFjaCBvYmplY3QgbWVtYmVyLlxuICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBMZWFkaW5nIGNvbW1hcyBhcmUgbm90IHBlcm1pdHRlZCwgb2JqZWN0IHByb3BlcnR5IG5hbWVzIG11c3QgYmVcbiAgICAgICAgICAgICAgICAvLyBkb3VibGUtcXVvdGVkIHN0cmluZ3MsIGFuZCBhIGA6YCBtdXN0IHNlcGFyYXRlIGVhY2ggcHJvcGVydHlcbiAgICAgICAgICAgICAgICAvLyBuYW1lIGFuZCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIgfHwgdHlwZW9mIHZhbHVlICE9IFwic3RyaW5nXCIgfHwgKGNoYXJJbmRleEJ1Z2d5ID8gdmFsdWUuY2hhckF0KDApIDogdmFsdWVbMF0pICE9IFwiQFwiIHx8IGxleCgpICE9IFwiOlwiKSB7XG4gICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW3ZhbHVlLnNsaWNlKDEpXSA9IGdldChsZXgoKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBVbmV4cGVjdGVkIHRva2VuIGVuY291bnRlcmVkLlxuICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBVcGRhdGVzIGEgdHJhdmVyc2VkIG9iamVjdCBtZW1iZXIuXG4gICAgICAgIHZhciB1cGRhdGUgPSBmdW5jdGlvbiAoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgZWxlbWVudCA9IHdhbGsoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spO1xuICAgICAgICAgIGlmIChlbGVtZW50ID09PSB1bmRlZikge1xuICAgICAgICAgICAgZGVsZXRlIHNvdXJjZVtwcm9wZXJ0eV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNvdXJjZVtwcm9wZXJ0eV0gPSBlbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmVjdXJzaXZlbHkgdHJhdmVyc2VzIGEgcGFyc2VkIEpTT04gb2JqZWN0LCBpbnZva2luZyB0aGVcbiAgICAgICAgLy8gYGNhbGxiYWNrYCBmdW5jdGlvbiBmb3IgZWFjaCB2YWx1ZS4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGVcbiAgICAgICAgLy8gYFdhbGsoaG9sZGVyLCBuYW1lKWAgb3BlcmF0aW9uIGRlZmluZWQgaW4gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMi5cbiAgICAgICAgdmFyIHdhbGsgPSBmdW5jdGlvbiAoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBzb3VyY2VbcHJvcGVydHldLCBsZW5ndGg7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAvLyBgZm9yRWFjaGAgY2FuJ3QgYmUgdXNlZCB0byB0cmF2ZXJzZSBhbiBhcnJheSBpbiBPcGVyYSA8PSA4LjU0XG4gICAgICAgICAgICAvLyBiZWNhdXNlIGl0cyBgT2JqZWN0I2hhc093blByb3BlcnR5YCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGBmYWxzZWBcbiAgICAgICAgICAgIC8vIGZvciBhcnJheSBpbmRpY2VzIChlLmcuLCBgIVsxLCAyLCAzXS5oYXNPd25Qcm9wZXJ0eShcIjBcIilgKS5cbiAgICAgICAgICAgIGlmIChnZXRDbGFzcy5jYWxsKHZhbHVlKSA9PSBhcnJheUNsYXNzKSB7XG4gICAgICAgICAgICAgIGZvciAobGVuZ3RoID0gdmFsdWUubGVuZ3RoOyBsZW5ndGgtLTspIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUodmFsdWUsIGxlbmd0aCwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUodmFsdWUsIHByb3BlcnR5LCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChzb3VyY2UsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUHVibGljOiBgSlNPTi5wYXJzZWAuIFNlZSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4yLlxuICAgICAgICBleHBvcnRzLnBhcnNlID0gZnVuY3Rpb24gKHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgcmVzdWx0LCB2YWx1ZTtcbiAgICAgICAgICBJbmRleCA9IDA7XG4gICAgICAgICAgU291cmNlID0gXCJcIiArIHNvdXJjZTtcbiAgICAgICAgICByZXN1bHQgPSBnZXQobGV4KCkpO1xuICAgICAgICAgIC8vIElmIGEgSlNPTiBzdHJpbmcgY29udGFpbnMgbXVsdGlwbGUgdG9rZW5zLCBpdCBpcyBpbnZhbGlkLlxuICAgICAgICAgIGlmIChsZXgoKSAhPSBcIiRcIikge1xuICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmVzZXQgdGhlIHBhcnNlciBzdGF0ZS5cbiAgICAgICAgICBJbmRleCA9IFNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrICYmIGdldENsYXNzLmNhbGwoY2FsbGJhY2spID09IGZ1bmN0aW9uQ2xhc3MgPyB3YWxrKCh2YWx1ZSA9IHt9LCB2YWx1ZVtcIlwiXSA9IHJlc3VsdCwgdmFsdWUpLCBcIlwiLCBjYWxsYmFjaykgOiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0c1tcInJ1bkluQ29udGV4dFwiXSA9IHJ1bkluQ29udGV4dDtcbiAgICByZXR1cm4gZXhwb3J0cztcbiAgfVxuXG4gIGlmIChmcmVlRXhwb3J0cyAmJiAhaXNMb2FkZXIpIHtcbiAgICAvLyBFeHBvcnQgZm9yIENvbW1vbkpTIGVudmlyb25tZW50cy5cbiAgICBydW5JbkNvbnRleHQocm9vdCwgZnJlZUV4cG9ydHMpO1xuICB9IGVsc2Uge1xuICAgIC8vIEV4cG9ydCBmb3Igd2ViIGJyb3dzZXJzIGFuZCBKYXZhU2NyaXB0IGVuZ2luZXMuXG4gICAgdmFyIG5hdGl2ZUpTT04gPSByb290LkpTT04sXG4gICAgICAgIHByZXZpb3VzSlNPTiA9IHJvb3RbXCJKU09OM1wiXSxcbiAgICAgICAgaXNSZXN0b3JlZCA9IGZhbHNlO1xuXG4gICAgdmFyIEpTT04zID0gcnVuSW5Db250ZXh0KHJvb3QsIChyb290W1wiSlNPTjNcIl0gPSB7XG4gICAgICAvLyBQdWJsaWM6IFJlc3RvcmVzIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgZ2xvYmFsIGBKU09OYCBvYmplY3QgYW5kXG4gICAgICAvLyByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBgSlNPTjNgIG9iamVjdC5cbiAgICAgIFwibm9Db25mbGljdFwiOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghaXNSZXN0b3JlZCkge1xuICAgICAgICAgIGlzUmVzdG9yZWQgPSB0cnVlO1xuICAgICAgICAgIHJvb3QuSlNPTiA9IG5hdGl2ZUpTT047XG4gICAgICAgICAgcm9vdFtcIkpTT04zXCJdID0gcHJldmlvdXNKU09OO1xuICAgICAgICAgIG5hdGl2ZUpTT04gPSBwcmV2aW91c0pTT04gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OMztcbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgICByb290LkpTT04gPSB7XG4gICAgICBcInBhcnNlXCI6IEpTT04zLnBhcnNlLFxuICAgICAgXCJzdHJpbmdpZnlcIjogSlNPTjMuc3RyaW5naWZ5XG4gICAgfTtcbiAgfVxuXG4gIC8vIEV4cG9ydCBmb3IgYXN5bmNocm9ub3VzIG1vZHVsZSBsb2FkZXJzLlxuICBpZiAoaXNMb2FkZXIpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEpTT04zO1xuICAgIH0pO1xuICB9XG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrLWdlbmVyYXRvcicsIFsnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc3RhY2tmcmFtZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrR2VuZXJhdG9yID0gZmFjdG9yeShyb290LlN0YWNrRnJhbWUpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24oU3RhY2tGcmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGJhY2t0cmFjZTogZnVuY3Rpb24gU3RhY2tHZW5lcmF0b3IkJGJhY2t0cmFjZShvcHRzKSB7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICAgICAgICAgIHZhciBtYXhTdGFja1NpemUgPSAxMDtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3B0cy5tYXhTdGFja1NpemUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgbWF4U3RhY2tTaXplID0gb3B0cy5tYXhTdGFja1NpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjdXJyID0gYXJndW1lbnRzLmNhbGxlZTtcbiAgICAgICAgICAgIHdoaWxlIChjdXJyICYmIHN0YWNrLmxlbmd0aCA8IG1heFN0YWNrU2l6ZSAmJiBjdXJyWydhcmd1bWVudHMnXSkge1xuICAgICAgICAgICAgICAgIC8vIEFsbG93IFY4IG9wdGltaXphdGlvbnNcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShjdXJyWydhcmd1bWVudHMnXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gY3VyclsnYXJndW1lbnRzJ11baV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgvZnVuY3Rpb24oPzpcXHMrKFtcXHckXSspKStcXHMqXFwoLy50ZXN0KGN1cnIudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh7ZnVuY3Rpb25OYW1lOiBSZWdFeHAuJDEgfHwgdW5kZWZpbmVkLCBhcmdzOiBhcmdzfSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3IFN0YWNrRnJhbWUoe2FyZ3M6IGFyZ3N9KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIuY2FsbGVyO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0YWNrO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrZnJhbWUnLCBbXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja0ZyYW1lID0gZmFjdG9yeSgpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24oKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIGZ1bmN0aW9uIF9pc051bWJlcihuKSB7XG4gICAgICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2NhcGl0YWxpemUoc3RyKSB7XG4gICAgICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9nZXR0ZXIocCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1twXTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgYm9vbGVhblByb3BzID0gWydpc0NvbnN0cnVjdG9yJywgJ2lzRXZhbCcsICdpc05hdGl2ZScsICdpc1RvcGxldmVsJ107XG4gICAgdmFyIG51bWVyaWNQcm9wcyA9IFsnY29sdW1uTnVtYmVyJywgJ2xpbmVOdW1iZXInXTtcbiAgICB2YXIgc3RyaW5nUHJvcHMgPSBbJ2ZpbGVOYW1lJywgJ2Z1bmN0aW9uTmFtZScsICdzb3VyY2UnXTtcbiAgICB2YXIgYXJyYXlQcm9wcyA9IFsnYXJncyddO1xuXG4gICAgdmFyIHByb3BzID0gYm9vbGVhblByb3BzLmNvbmNhdChudW1lcmljUHJvcHMsIHN0cmluZ1Byb3BzLCBhcnJheVByb3BzKTtcblxuICAgIGZ1bmN0aW9uIFN0YWNrRnJhbWUob2JqKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3BzW2ldKSAmJiBvYmpbcHJvcHNbaV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snc2V0JyArIF9jYXBpdGFsaXplKHByb3BzW2ldKV0ob2JqW3Byb3BzW2ldXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgU3RhY2tGcmFtZS5wcm90b3R5cGUgPSB7XG4gICAgICAgIGdldEFyZ3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJncztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0QXJnczogZnVuY3Rpb24odikge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSAhPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3MgbXVzdCBiZSBhbiBBcnJheScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcmdzID0gdjtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRFdmFsT3JpZ2luOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2YWxPcmlnaW47XG4gICAgICAgIH0sXG4gICAgICAgIHNldEV2YWxPcmlnaW46IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgU3RhY2tGcmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZhbE9yaWdpbiA9IHY7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2YWxPcmlnaW4gPSBuZXcgU3RhY2tGcmFtZSh2KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXZhbCBPcmlnaW4gbXVzdCBiZSBhbiBPYmplY3Qgb3IgU3RhY2tGcmFtZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0aGlzLmdldEZ1bmN0aW9uTmFtZSgpIHx8ICd7YW5vbnltb3VzfSc7XG4gICAgICAgICAgICB2YXIgYXJncyA9ICcoJyArICh0aGlzLmdldEFyZ3MoKSB8fCBbXSkuam9pbignLCcpICsgJyknO1xuICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gdGhpcy5nZXRGaWxlTmFtZSgpID8gKCdAJyArIHRoaXMuZ2V0RmlsZU5hbWUoKSkgOiAnJztcbiAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gX2lzTnVtYmVyKHRoaXMuZ2V0TGluZU51bWJlcigpKSA/ICgnOicgKyB0aGlzLmdldExpbmVOdW1iZXIoKSkgOiAnJztcbiAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSBfaXNOdW1iZXIodGhpcy5nZXRDb2x1bW5OdW1iZXIoKSkgPyAoJzonICsgdGhpcy5nZXRDb2x1bW5OdW1iZXIoKSkgOiAnJztcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbk5hbWUgKyBhcmdzICsgZmlsZU5hbWUgKyBsaW5lTnVtYmVyICsgY29sdW1uTnVtYmVyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9vbGVhblByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUoYm9vbGVhblByb3BzW2ldKV0gPSBfZ2V0dGVyKGJvb2xlYW5Qcm9wc1tpXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUoYm9vbGVhblByb3BzW2ldKV0gPSAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gQm9vbGVhbih2KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKGJvb2xlYW5Qcm9wc1tpXSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1lcmljUHJvcHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShudW1lcmljUHJvcHNbal0pXSA9IF9nZXR0ZXIobnVtZXJpY1Byb3BzW2pdKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShudW1lcmljUHJvcHNbal0pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIGlmICghX2lzTnVtYmVyKHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IocCArICcgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gTnVtYmVyKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkobnVtZXJpY1Byb3BzW2pdKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IHN0cmluZ1Byb3BzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUoc3RyaW5nUHJvcHNba10pXSA9IF9nZXR0ZXIoc3RyaW5nUHJvcHNba10pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKHN0cmluZ1Byb3BzW2tdKV0gPSAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gU3RyaW5nKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoc3RyaW5nUHJvcHNba10pO1xuICAgIH1cblxuICAgIHJldHVybiBTdGFja0ZyYW1lO1xufSkpO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3XG4gKiBtZW1iZXIgaXMgTygxKSwgdGVzdGluZyBmb3IgbWVtYmVyc2hpcCBpcyBPKDEpLCBhbmQgZmluZGluZyB0aGUgaW5kZXggb2YgYW5cbiAqIGVsZW1lbnQgaXMgTygxKS4gUmVtb3ZpbmcgZWxlbWVudHMgZnJvbSB0aGUgc2V0IGlzIG5vdCBzdXBwb3J0ZWQuIE9ubHlcbiAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgbWVtYmVyc2hpcC5cbiAqL1xuZnVuY3Rpb24gQXJyYXlTZXQoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8qKlxuICogU3RhdGljIG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gKi9cbkFycmF5U2V0LmZyb21BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X2Zyb21BcnJheShhQXJyYXksIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYUFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgc2V0LmFkZChhQXJyYXlbaV0sIGFBbGxvd0R1cGxpY2F0ZXMpO1xuICB9XG4gIHJldHVybiBzZXQ7XG59O1xuXG4vKipcbiAqIFJldHVybiBob3cgbWFueSB1bmlxdWUgaXRlbXMgYXJlIGluIHRoaXMgQXJyYXlTZXQuIElmIGR1cGxpY2F0ZXMgaGF2ZSBiZWVuXG4gKiBhZGRlZCwgdGhhbiB0aG9zZSBkbyBub3QgY291bnQgdG93YXJkcyB0aGUgc2l6ZS5cbiAqXG4gKiBAcmV0dXJucyBOdW1iZXJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiBBcnJheVNldF9zaXplKCkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fc2V0KS5sZW5ndGg7XG59O1xuXG4vKipcbiAqIEFkZCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoaXMgc2V0LlxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gQXJyYXlTZXRfYWRkKGFTdHIsIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICB2YXIgaXNEdXBsaWNhdGUgPSBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB2YXIgaWR4ID0gdGhpcy5fYXJyYXkubGVuZ3RoO1xuICBpZiAoIWlzRHVwbGljYXRlIHx8IGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICB0aGlzLl9hcnJheS5wdXNoKGFTdHIpO1xuICB9XG4gIGlmICghaXNEdXBsaWNhdGUpIHtcbiAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gIH1cbn07XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIHN0cmluZyBhIG1lbWJlciBvZiB0aGlzIHNldD9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIEFycmF5U2V0X2hhcyhhU3RyKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgcmV0dXJuIGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIGlmIChoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgaW50VG9DaGFyTWFwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcblxuLyoqXG4gKiBFbmNvZGUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMCB0byA2MyB0byBhIHNpbmdsZSBiYXNlIDY0IGRpZ2l0LlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgaWYgKDAgPD0gbnVtYmVyICYmIG51bWJlciA8IGludFRvQ2hhck1hcC5sZW5ndGgpIHtcbiAgICByZXR1cm4gaW50VG9DaGFyTWFwW251bWJlcl07XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogXCIgKyBudW1iZXIpO1xufTtcblxuLyoqXG4gKiBEZWNvZGUgYSBzaW5nbGUgYmFzZSA2NCBjaGFyYWN0ZXIgY29kZSBkaWdpdCB0byBhbiBpbnRlZ2VyLiBSZXR1cm5zIC0xIG9uXG4gKiBmYWlsdXJlLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIChjaGFyQ29kZSkge1xuICB2YXIgYmlnQSA9IDY1OyAgICAgLy8gJ0EnXG4gIHZhciBiaWdaID0gOTA7ICAgICAvLyAnWidcblxuICB2YXIgbGl0dGxlQSA9IDk3OyAgLy8gJ2EnXG4gIHZhciBsaXR0bGVaID0gMTIyOyAvLyAneidcblxuICB2YXIgemVybyA9IDQ4OyAgICAgLy8gJzAnXG4gIHZhciBuaW5lID0gNTc7ICAgICAvLyAnOSdcblxuICB2YXIgcGx1cyA9IDQzOyAgICAgLy8gJysnXG4gIHZhciBzbGFzaCA9IDQ3OyAgICAvLyAnLydcblxuICB2YXIgbGl0dGxlT2Zmc2V0ID0gMjY7XG4gIHZhciBudW1iZXJPZmZzZXQgPSA1MjtcblxuICAvLyAwIC0gMjU6IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXG4gIGlmIChiaWdBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGJpZ1opIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gYmlnQSk7XG4gIH1cblxuICAvLyAyNiAtIDUxOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuICBpZiAobGl0dGxlQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBsaXR0bGVaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGxpdHRsZUEgKyBsaXR0bGVPZmZzZXQpO1xuICB9XG5cbiAgLy8gNTIgLSA2MTogMDEyMzQ1Njc4OVxuICBpZiAoemVybyA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBuaW5lKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIHplcm8gKyBudW1iZXJPZmZzZXQpO1xuICB9XG5cbiAgLy8gNjI6ICtcbiAgaWYgKGNoYXJDb2RlID09IHBsdXMpIHtcbiAgICByZXR1cm4gNjI7XG4gIH1cblxuICAvLyA2MzogL1xuICBpZiAoY2hhckNvZGUgPT0gc2xhc2gpIHtcbiAgICByZXR1cm4gNjM7XG4gIH1cblxuICAvLyBJbnZhbGlkIGJhc2U2NCBkaWdpdC5cbiAgcmV0dXJuIC0xO1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5leHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBSZWN1cnNpdmUgaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaC5cbiAqXG4gKiBAcGFyYW0gYUxvdyBJbmRpY2VzIGhlcmUgYW5kIGxvd2VyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYUhpZ2ggSW5kaWNlcyBoZXJlIGFuZCBoaWdoZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IGJlaW5nIHNlYXJjaGVkIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIG5vbi1lbXB0eSBhcnJheSBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBGdW5jdGlvbiB3aGljaCB0YWtlcyB0d28gZWxlbWVudHMgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgLy9cbiAgLy8gICAxLiBXZSBmaW5kIHRoZSBleGFjdCBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgLy9cbiAgLy8gICAyLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGJ1dCB3ZSBjYW4gcmV0dXJuIHRoZSBpbmRleCBvZlxuICAvLyAgICAgIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudC5cbiAgLy9cbiAgLy8gICAzLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGFuZCB0aGVyZSBpcyBubyBuZXh0LWNsb3Nlc3RcbiAgLy8gICAgICBlbGVtZW50IHRoYW4gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgc28gd2UgcmV0dXJuIC0xLlxuICB2YXIgbWlkID0gTWF0aC5mbG9vcigoYUhpZ2ggLSBhTG93KSAvIDIpICsgYUxvdztcbiAgdmFyIGNtcCA9IGFDb21wYXJlKGFOZWVkbGUsIGFIYXlzdGFja1ttaWRdLCB0cnVlKTtcbiAgaWYgKGNtcCA9PT0gMCkge1xuICAgIC8vIEZvdW5kIHRoZSBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgICByZXR1cm4gbWlkO1xuICB9XG4gIGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGdyZWF0ZXIgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAoYUhpZ2ggLSBtaWQgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgdXBwZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2gobWlkLCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIFRoZSBleGFjdCBuZWVkbGUgZWxlbWVudCB3YXMgbm90IGZvdW5kIGluIHRoaXMgaGF5c3RhY2suIERldGVybWluZSBpZlxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBhSGlnaCA8IGFIYXlzdGFjay5sZW5ndGggPyBhSGlnaCA6IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGxlc3MgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAobWlkIC0gYUxvdyA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSBsb3dlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBtaWQsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYUxvdyA8IDAgPyAtMSA6IGFMb3c7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoIHdoaWNoIHdpbGwgYWx3YXlzIHRyeSBhbmQgcmV0dXJuXG4gKiB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgZWxlbWVudCBpZiB0aGVyZSBpcyBubyBleGFjdCBoaXQuIFRoaXMgaXMgYmVjYXVzZVxuICogbWFwcGluZ3MgYmV0d2VlbiBvcmlnaW5hbCBhbmQgZ2VuZXJhdGVkIGxpbmUvY29sIHBhaXJzIGFyZSBzaW5nbGUgcG9pbnRzLFxuICogYW5kIHRoZXJlIGlzIGFuIGltcGxpY2l0IHJlZ2lvbiBiZXR3ZWVuIGVhY2ggb2YgdGhlbSwgc28gYSBtaXNzIGp1c3QgbWVhbnNcbiAqIHRoYXQgeW91IGFyZW4ndCBvbiB0aGUgdmVyeSBzdGFydCBvZiBhIHJlZ2lvbi5cbiAqXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCB5b3UgYXJlIGxvb2tpbmcgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgYXJyYXkgdGhhdCBpcyBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBuZWVkbGUgYW5kIGFuIGVsZW1lbnQgaW4gdGhlXG4gKiAgICAgYXJyYXkgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5lZWRsZSBpcyBsZXNzXG4gKiAgICAgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgZWxlbWVudCwgcmVzcGVjdGl2ZWx5LlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICovXG5leHBvcnRzLnNlYXJjaCA9IGZ1bmN0aW9uIHNlYXJjaChhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICBpZiAoYUhheXN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHJlY3Vyc2l2ZVNlYXJjaCgtMSwgYUhheXN0YWNrLmxlbmd0aCwgYU5lZWRsZSwgYUhheXN0YWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbXBhcmUsIGFCaWFzIHx8IGV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLy8gV2UgaGF2ZSBmb3VuZCBlaXRoZXIgdGhlIGV4YWN0IGVsZW1lbnQsIG9yIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudCB0aGFuXG4gIC8vIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIHN1Y2hcbiAgLy8gZWxlbWVudC4gTWFrZSBzdXJlIHdlIGFsd2F5cyByZXR1cm4gdGhlIHNtYWxsZXN0IG9mIHRoZXNlLlxuICB3aGlsZSAoaW5kZXggLSAxID49IDApIHtcbiAgICBpZiAoYUNvbXBhcmUoYUhheXN0YWNrW2luZGV4XSwgYUhheXN0YWNrW2luZGV4IC0gMV0sIHRydWUpICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLS1pbmRleDtcbiAgfVxuXG4gIHJldHVybiBpbmRleDtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGdldHRpbmcgdmFsdWVzIGZyb20gcGFyYW1ldGVyL29wdGlvbnNcbiAqIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGFyZ3MgVGhlIG9iamVjdCB3ZSBhcmUgZXh0cmFjdGluZyB2YWx1ZXMgZnJvbVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdlIGFyZSBnZXR0aW5nLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBBbiBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmdcbiAqIGZyb20gdGhlIG9iamVjdC4gSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkIGFuZCB0aGUgcHJvcGVydHkgaXMgbWlzc2luZywgYW5cbiAqIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICovXG5mdW5jdGlvbiBnZXRBcmcoYUFyZ3MsIGFOYW1lLCBhRGVmYXVsdFZhbHVlKSB7XG4gIGlmIChhTmFtZSBpbiBhQXJncykge1xuICAgIHJldHVybiBhQXJnc1thTmFtZV07XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBhRGVmYXVsdFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYU5hbWUgKyAnXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKTtcbiAgfVxufVxuZXhwb3J0cy5nZXRBcmcgPSBnZXRBcmc7XG5cbnZhciB1cmxSZWdleHAgPSAvXig/OihbXFx3K1xcLS5dKyk6KT9cXC9cXC8oPzooXFx3KzpcXHcrKUApPyhbXFx3Ll0qKSg/OjooXFxkKykpPyhcXFMqKSQvO1xudmFyIGRhdGFVcmxSZWdleHAgPSAvXmRhdGE6LitcXCwuKyQvO1xuXG5mdW5jdGlvbiB1cmxQYXJzZShhVXJsKSB7XG4gIHZhciBtYXRjaCA9IGFVcmwubWF0Y2godXJsUmVnZXhwKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NoZW1lOiBtYXRjaFsxXSxcbiAgICBhdXRoOiBtYXRjaFsyXSxcbiAgICBob3N0OiBtYXRjaFszXSxcbiAgICBwb3J0OiBtYXRjaFs0XSxcbiAgICBwYXRoOiBtYXRjaFs1XVxuICB9O1xufVxuZXhwb3J0cy51cmxQYXJzZSA9IHVybFBhcnNlO1xuXG5mdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFyc2VkVXJsKSB7XG4gIHZhciB1cmwgPSAnJztcbiAgaWYgKGFQYXJzZWRVcmwuc2NoZW1lKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuc2NoZW1lICsgJzonO1xuICB9XG4gIHVybCArPSAnLy8nO1xuICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuYXV0aCArICdAJztcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuaG9zdDtcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7XG4gICAgdXJsICs9IFwiOlwiICsgYVBhcnNlZFVybC5wb3J0XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucGF0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnBhdGg7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cbmV4cG9ydHMudXJsR2VuZXJhdGUgPSB1cmxHZW5lcmF0ZTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGF0aCwgb3IgdGhlIHBhdGggcG9ydGlvbiBvZiBhIFVSTDpcbiAqXG4gKiAtIFJlcGxhY2VzIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aCBvbmUgc2xhc2guXG4gKiAtIFJlbW92ZXMgdW5uZWNlc3NhcnkgJy4nIHBhcnRzLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICc8ZGlyPi8uLicgcGFydHMuXG4gKlxuICogQmFzZWQgb24gY29kZSBpbiB0aGUgTm9kZS5qcyAncGF0aCcgY29yZSBtb2R1bGUuXG4gKlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIHVybCB0byBub3JtYWxpemUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhUGF0aCkge1xuICB2YXIgcGF0aCA9IGFQYXRoO1xuICB2YXIgdXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICBpZiAodXJsKSB7XG4gICAgaWYgKCF1cmwucGF0aCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cbiAgICBwYXRoID0gdXJsLnBhdGg7XG4gIH1cbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCk7XG5cbiAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuICBmb3IgKHZhciBwYXJ0LCB1cCA9IDAsIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHBhcnQgPSBwYXJ0c1tpXTtcbiAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXAgPiAwKSB7XG4gICAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYmxhbmsgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuIFRyeWluZyB0byBnb1xuICAgICAgICAvLyBhYm92ZSB0aGUgcm9vdCBpcyBhIG5vLW9wLiBUaGVyZWZvcmUgd2UgY2FuIHJlbW92ZSBhbGwgJy4uJyBwYXJ0c1xuICAgICAgICAvLyBkaXJlY3RseSBhZnRlciB0aGUgcm9vdC5cbiAgICAgICAgcGFydHMuc3BsaWNlKGkgKyAxLCB1cCk7XG4gICAgICAgIHVwID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShpLCAyKTtcbiAgICAgICAgdXAtLTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcblxuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICBwYXRoID0gaXNBYnNvbHV0ZSA/ICcvJyA6ICcuJztcbiAgfVxuXG4gIGlmICh1cmwpIHtcbiAgICB1cmwucGF0aCA9IHBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKHVybCk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcblxuLyoqXG4gKiBKb2lucyB0d28gcGF0aHMvVVJMcy5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIGpvaW5lZCB3aXRoIHRoZSByb290LlxuICpcbiAqIC0gSWYgYVBhdGggaXMgYSBVUkwgb3IgYSBkYXRhIFVSSSwgYVBhdGggaXMgcmV0dXJuZWQsIHVubGVzcyBhUGF0aCBpcyBhXG4gKiAgIHNjaGVtZS1yZWxhdGl2ZSBVUkw6IFRoZW4gdGhlIHNjaGVtZSBvZiBhUm9vdCwgaWYgYW55LCBpcyBwcmVwZW5kZWRcbiAqICAgZmlyc3QuXG4gKiAtIE90aGVyd2lzZSBhUGF0aCBpcyBhIHBhdGguIElmIGFSb290IGlzIGEgVVJMLCB0aGVuIGl0cyBwYXRoIHBvcnRpb25cbiAqICAgaXMgdXBkYXRlZCB3aXRoIHRoZSByZXN1bHQgYW5kIGFSb290IGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhlIHJlc3VsdFxuICogICBpcyByZXR1cm5lZC5cbiAqICAgLSBJZiBhUGF0aCBpcyBhYnNvbHV0ZSwgdGhlIHJlc3VsdCBpcyBhUGF0aC5cbiAqICAgLSBPdGhlcndpc2UgdGhlIHR3byBwYXRocyBhcmUgam9pbmVkIHdpdGggYSBzbGFzaC5cbiAqIC0gSm9pbmluZyBmb3IgZXhhbXBsZSAnaHR0cDovLycgYW5kICd3d3cuZXhhbXBsZS5jb20nIGlzIGFsc28gc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBqb2luKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG4gIGlmIChhUGF0aCA9PT0gXCJcIikge1xuICAgIGFQYXRoID0gXCIuXCI7XG4gIH1cbiAgdmFyIGFQYXRoVXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICB2YXIgYVJvb3RVcmwgPSB1cmxQYXJzZShhUm9vdCk7XG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290ID0gYVJvb3RVcmwucGF0aCB8fCAnLyc7XG4gIH1cblxuICAvLyBgam9pbihmb28sICcvL3d3dy5leGFtcGxlLm9yZycpYFxuICBpZiAoYVBhdGhVcmwgJiYgIWFQYXRoVXJsLnNjaGVtZSkge1xuICAgIGlmIChhUm9vdFVybCkge1xuICAgICAgYVBhdGhVcmwuc2NoZW1lID0gYVJvb3RVcmwuc2NoZW1lO1xuICAgIH1cbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVBhdGhVcmwpO1xuICB9XG5cbiAgaWYgKGFQYXRoVXJsIHx8IGFQYXRoLm1hdGNoKGRhdGFVcmxSZWdleHApKSB7XG4gICAgcmV0dXJuIGFQYXRoO1xuICB9XG5cbiAgLy8gYGpvaW4oJ2h0dHA6Ly8nLCAnd3d3LmV4YW1wbGUuY29tJylgXG4gIGlmIChhUm9vdFVybCAmJiAhYVJvb3RVcmwuaG9zdCAmJiAhYVJvb3RVcmwucGF0aCkge1xuICAgIGFSb290VXJsLmhvc3QgPSBhUGF0aDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG5cbiAgdmFyIGpvaW5lZCA9IGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgPyBhUGF0aFxuICAgIDogbm9ybWFsaXplKGFSb290LnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgYVBhdGgpO1xuXG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290VXJsLnBhdGggPSBqb2luZWQ7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuICByZXR1cm4gam9pbmVkO1xufVxuZXhwb3J0cy5qb2luID0gam9pbjtcblxuZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24gKGFQYXRoKSB7XG4gIHJldHVybiBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJyB8fCAhIWFQYXRoLm1hdGNoKHVybFJlZ2V4cCk7XG59O1xuXG4vKipcbiAqIE1ha2UgYSBwYXRoIHJlbGF0aXZlIHRvIGEgVVJMIG9yIGFub3RoZXIgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIG1hZGUgcmVsYXRpdmUgdG8gYVJvb3QuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0aXZlKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG5cbiAgYVJvb3QgPSBhUm9vdC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgcGF0aCB0byBiZSBhYm92ZSB0aGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBzaW1wbHlcbiAgLy8gY2hlY2tpbmcgd2hldGhlciB0aGUgcm9vdCBpcyBhIHByZWZpeCBvZiB0aGUgcGF0aCB3b24ndCB3b3JrLiBJbnN0ZWFkLCB3ZVxuICAvLyBuZWVkIHRvIHJlbW92ZSBjb21wb25lbnRzIGZyb20gdGhlIHJvb3Qgb25lIGJ5IG9uZSwgdW50aWwgZWl0aGVyIHdlIGZpbmRcbiAgLy8gYSBwcmVmaXggdGhhdCBmaXRzLCBvciB3ZSBydW4gb3V0IG9mIGNvbXBvbmVudHMgdG8gcmVtb3ZlLlxuICB2YXIgbGV2ZWwgPSAwO1xuICB3aGlsZSAoYVBhdGguaW5kZXhPZihhUm9vdCArICcvJykgIT09IDApIHtcbiAgICB2YXIgaW5kZXggPSBhUm9vdC5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBvbmx5IHBhcnQgb2YgdGhlIHJvb3QgdGhhdCBpcyBsZWZ0IGlzIHRoZSBzY2hlbWUgKGkuZS4gaHR0cDovLyxcbiAgICAvLyBmaWxlOi8vLywgZXRjLiksIG9uZSBvciBtb3JlIHNsYXNoZXMgKC8pLCBvciBzaW1wbHkgbm90aGluZyBhdCBhbGwsIHdlXG4gICAgLy8gaGF2ZSBleGhhdXN0ZWQgYWxsIGNvbXBvbmVudHMsIHNvIHRoZSBwYXRoIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcm9vdC5cbiAgICBhUm9vdCA9IGFSb290LnNsaWNlKDAsIGluZGV4KTtcbiAgICBpZiAoYVJvb3QubWF0Y2goL14oW15cXC9dKzpcXC8pP1xcLyokLykpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICArK2xldmVsO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGFkZCBhIFwiLi4vXCIgZm9yIGVhY2ggY29tcG9uZW50IHdlIHJlbW92ZWQgZnJvbSB0aGUgcm9vdC5cbiAgcmV0dXJuIEFycmF5KGxldmVsICsgMSkuam9pbihcIi4uL1wiKSArIGFQYXRoLnN1YnN0cihhUm9vdC5sZW5ndGggKyAxKTtcbn1cbmV4cG9ydHMucmVsYXRpdmUgPSByZWxhdGl2ZTtcblxudmFyIHN1cHBvcnRzTnVsbFByb3RvID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAhKCdfX3Byb3RvX18nIGluIG9iaik7XG59KCkpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSAocykge1xuICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBCZWNhdXNlIGJlaGF2aW9yIGdvZXMgd2Fja3kgd2hlbiB5b3Ugc2V0IGBfX3Byb3RvX19gIG9uIG9iamVjdHMsIHdlXG4gKiBoYXZlIHRvIHByZWZpeCBhbGwgdGhlIHN0cmluZ3MgaW4gb3VyIHNldCB3aXRoIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXIuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvcHVsbC8zMSBhbmRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzMwXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbmZ1bmN0aW9uIHRvU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gJyQnICsgYVN0cjtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy50b1NldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiB0b1NldFN0cmluZztcblxuZnVuY3Rpb24gZnJvbVNldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuIGFTdHIuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMuZnJvbVNldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiBmcm9tU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBpc1Byb3RvU3RyaW5nKHMpIHtcbiAgaWYgKCFzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IHMubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPCA5IC8qIFwiX19wcm90b19fXCIubGVuZ3RoICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHMuY2hhckNvZGVBdChsZW5ndGggLSAxKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDIpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMykgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA0KSAhPT0gMTE2IC8qICd0JyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDUpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNikgIT09IDExNCAvKiAncicgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA3KSAhPT0gMTEyIC8qICdwJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDgpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOSkgIT09IDk1ICAvKiAnXycgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gbGVuZ3RoIC0gMTA7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHMuY2hhckNvZGVBdChpKSAhPT0gMzYgLyogJyQnICovKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiwgYnV0IGRpZmZlcmVudCBnZW5lcmF0ZWRcbiAqIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhIG1hcHBpbmcgd2l0aCBhXG4gKiBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyhtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGRlZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBpbmRpY2VzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICogbWFwcGluZyB3aXRoIGEgc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQ7XG5cbmZ1bmN0aW9uIHN0cmNtcChhU3RyMSwgYVN0cjIpIHtcbiAgaWYgKGFTdHIxID09PSBhU3RyMikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKGFTdHIxID4gYVN0cjIpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggaW5mbGF0ZWQgc291cmNlIGFuZCBuYW1lIHN0cmluZ3Mgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gc3RyY21wKG1hcHBpbmdBLnNvdXJjZSwgbWFwcGluZ0Iuc291cmNlKTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gc3RyY21wKG1hcHBpbmdBLm5hbWUsIG1hcHBpbmdCLm5hbWUpO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZS1ncHMnLCBbJ3NvdXJjZS1tYXAnLCAnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc291cmNlLW1hcC9saWIvc291cmNlLW1hcC1jb25zdW1lcicpLCByZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tUcmFjZUdQUyA9IGZhY3Rvcnkocm9vdC5Tb3VyY2VNYXAgfHwgcm9vdC5zb3VyY2VNYXAsIHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTb3VyY2VNYXAsIFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBNYWtlIGEgWC1Eb21haW4gcmVxdWVzdCB0byB1cmwgYW5kIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB3aXRoIHJlc3BvbnNlIHRleHQgaWYgZnVsZmlsbGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gX3hkcih1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgcmVxLm9wZW4oJ2dldCcsIHVybCk7XG4gICAgICAgICAgICByZXEub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocmVxLnN0YXR1cyA+PSAyMDAgJiYgcmVxLnN0YXR1cyA8IDMwMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICh1cmwuc3Vic3RyKDAsIDcpID09PSAnZmlsZTovLycgJiYgcmVxLnJlc3BvbnNlVGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVxLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdIVFRQIHN0YXR1czogJyArIHJlcS5zdGF0dXMgKyAnIHJldHJpZXZpbmcgJyArIHVybCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcS5zZW5kKCk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIEJhc2U2NC1lbmNvZGVkIHN0cmluZyBpbnRvIGl0cyBvcmlnaW5hbCByZXByZXNlbnRhdGlvbi5cbiAgICAgKiBVc2VkIGZvciBpbmxpbmUgc291cmNlbWFwcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiNjRzdHIgQmFzZS02NCBlbmNvZGVkIHN0cmluZ1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gX2F0b2IoYjY0c3RyKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuYXRvYikge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5hdG9iKGI2NHN0cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciB3aW5kb3cuYXRvYiBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcGFyc2VKc29uKHN0cmluZykge1xuICAgICAgICBpZiAodHlwZW9mIEpTT04gIT09ICd1bmRlZmluZWQnICYmIEpTT04ucGFyc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciBKU09OLnBhcnNlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlci8qLCBjb2x1bW5OdW1iZXIqLykge1xuICAgICAgICB2YXIgc3ludGF4ZXMgPSBbXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSBmdW5jdGlvbiAoe2FyZ3N9KSBUT0RPIGFyZ3MgY2FwdHVyZVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqZnVuY3Rpb25cXGIvLFxuICAgICAgICAgICAgLy8gZnVuY3Rpb24ge25hbWV9KHthcmdzfSkgbVsxXT1uYW1lIG1bMl09YXJnc1xuICAgICAgICAgICAgL2Z1bmN0aW9uXFxzKyhbXignXCJgXSo/KVxccypcXCgoW14pXSopXFwpLyxcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGV2YWwoKVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqKD86ZXZhbHxuZXcgRnVuY3Rpb24pXFxiLyxcbiAgICAgICAgICAgIC8vIGZuX25hbWUoKSB7XG4gICAgICAgICAgICAvXFxiKD8hKD86aWZ8Zm9yfHN3aXRjaHx3aGlsZXx3aXRofGNhdGNoKVxcYikoPzooPzpzdGF0aWMpXFxzKyk/KFxcUyspXFxzKlxcKC4qP1xcKVxccypcXHsvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gKCkgPT4ge1xuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqXFwoLio/XFwpXFxzKj0+L1xuICAgICAgICBdO1xuICAgICAgICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoJ1xcbicpO1xuXG4gICAgICAgIC8vIFdhbGsgYmFja3dhcmRzIGluIHRoZSBzb3VyY2UgbGluZXMgdW50aWwgd2UgZmluZCB0aGUgbGluZSB3aGljaCBtYXRjaGVzIG9uZSBvZiB0aGUgcGF0dGVybnMgYWJvdmVcbiAgICAgICAgdmFyIGNvZGUgPSAnJztcbiAgICAgICAgdmFyIG1heExpbmVzID0gTWF0aC5taW4obGluZU51bWJlciwgMjApO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heExpbmVzOyArK2kpIHtcbiAgICAgICAgICAgIC8vIGxpbmVObyBpcyAxLWJhc2VkLCBzb3VyY2VbXSBpcyAwLWJhc2VkXG4gICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVzW2xpbmVOdW1iZXIgLSBpIC0gMV07XG4gICAgICAgICAgICB2YXIgY29tbWVudFBvcyA9IGxpbmUuaW5kZXhPZignLy8nKTtcbiAgICAgICAgICAgIGlmIChjb21tZW50UG9zID49IDApIHtcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHIoMCwgY29tbWVudFBvcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgY29kZSA9IGxpbmUgKyBjb2RlO1xuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBzeW50YXhlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHN5bnRheGVzW2luZGV4XS5leGVjKGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5jcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNvbnN1bWUgc291cmNlIG1hcHMgaW4gb2xkZXIgYnJvd3NlcnMnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhY2tmcmFtZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIFN0YWNrRnJhbWUgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmZpbGVOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gZmlsZSBuYW1lIGlzIG5vdCBhIFN0cmluZycpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBsaW5lIG51bWJlciBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICUgMSAhPT0gMCB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBjb2x1bW4gbnVtYmVyIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kU291cmNlTWFwcGluZ1VSTChzb3VyY2UpIHtcbiAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmdVcmxSZWdFeHAgPSAvXFwvXFwvWyNAXSA/c291cmNlTWFwcGluZ1VSTD0oW15cXHMnXCJdKylcXHMqJC9tZztcbiAgICAgICAgdmFyIGxhc3RTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB2YXIgbWF0Y2hTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB3aGlsZSAobWF0Y2hTb3VyY2VNYXBwaW5nVXJsID0gc291cmNlTWFwcGluZ1VybFJlZ0V4cC5leGVjKHNvdXJjZSkpIHsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgICAgICBsYXN0U291cmNlTWFwcGluZ1VybCA9IG1hdGNoU291cmNlTWFwcGluZ1VybFsxXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGFzdFNvdXJjZU1hcHBpbmdVcmwpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0U291cmNlTWFwcGluZ1VybDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc291cmNlTWFwcGluZ1VSTCBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9leHRyYWN0TG9jYXRpb25JbmZvRnJvbVNvdXJjZU1hcFNvdXJjZShzdGFja2ZyYW1lLCBzb3VyY2VNYXBDb25zdW1lciwgc291cmNlQ2FjaGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIGxvYyA9IHNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgICAgICAgIGxpbmU6IHN0YWNrZnJhbWUubGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGxvYy5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWNoZSBtYXBwZWQgc291cmNlc1xuICAgICAgICAgICAgICAgIHZhciBtYXBwZWRTb3VyY2UgPSBzb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGxvYy5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIGlmIChtYXBwZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlQ2FjaGVbbG9jLnNvdXJjZV0gPSBtYXBwZWRTb3VyY2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2l2ZW4gc3RhY2tmcmFtZSBhbmQgc291cmNlIGxvY2F0aW9uLCB1cGRhdGUgc3RhY2tmcmFtZVxuICAgICAgICAgICAgICAgICAgICBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGxvYy5uYW1lIHx8IHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogc3RhY2tmcmFtZS5hcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvYy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2MubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jLmNvbHVtblxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgb3JpZ2luYWwgc291cmNlIGZvciBnaXZlbiBzdGFja2ZyYW1lIGFuZCBzb3VyY2UgbWFwJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAqICAgICAgb3B0cy5zb3VyY2VDYWNoZSA9IHt1cmw6IFwiU291cmNlIFN0cmluZ1wifSA9PiBwcmVsb2FkIHNvdXJjZSBjYWNoZVxuICAgICAqICAgICAgb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gey9wYXRoL2ZpbGUuanMubWFwOiBTb3VyY2VNYXBDb25zdW1lcn1cbiAgICAgKiAgICAgIG9wdHMub2ZmbGluZSA9IFRydWUgdG8gcHJldmVudCBuZXR3b3JrIHJlcXVlc3RzLlxuICAgICAqICAgICAgICAgICAgICBCZXN0IGVmZm9ydCB3aXRob3V0IHNvdXJjZXMgb3Igc291cmNlIG1hcHMuXG4gICAgICogICAgICBvcHRzLmFqYXggPSBQcm9taXNlIHJldHVybmluZyBmdW5jdGlvbiB0byBtYWtlIFgtRG9tYWluIHJlcXVlc3RzXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMob3B0cykge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3RhY2tUcmFjZUdQUykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlID0gb3B0cy5zb3VyY2VDYWNoZSB8fCB7fTtcbiAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuYWpheCA9IG9wdHMuYWpheCB8fCBfeGRyO1xuXG4gICAgICAgIHRoaXMuX2F0b2IgPSBvcHRzLmF0b2IgfHwgX2F0b2I7XG5cbiAgICAgICAgdGhpcy5fZ2V0ID0gZnVuY3Rpb24gX2dldChsb2NhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBsb2NhdGlvbi5zdWJzdHIoMCwgNSkgPT09ICdkYXRhOic7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0cy5vZmZsaW5lICYmICFpc0RhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ2Fubm90IG1ha2UgbmV0d29yayByZXF1ZXN0cyBpbiBvZmZsaW5lIG1vZGUnKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF0YSBVUkxzIGNhbiBoYXZlIHBhcmFtZXRlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM5N1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1cHBvcnRlZEVuY29kaW5nUmVnZXhwID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXmRhdGE6YXBwbGljYXRpb25cXC9qc29uOyhbXFx3PTpcIi1dKzspKmJhc2U2NCwvO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbG9jYXRpb24ubWF0Y2goc3VwcG9ydGVkRW5jb2RpbmdSZWdleHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcFN0YXJ0ID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGVkU291cmNlID0gbG9jYXRpb24uc3Vic3RyKHNvdXJjZU1hcFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fYXRvYihlbmNvZGVkU291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSA9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RoZSBlbmNvZGluZyBvZiB0aGUgaW5saW5lIHNvdXJjZW1hcCBpcyBub3Qgc3VwcG9ydGVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhoclByb21pc2UgPSB0aGlzLmFqYXgobG9jYXRpb24sIHttZXRob2Q6ICdnZXQnfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZSB0aGUgUHJvbWlzZSB0byBwcmV2ZW50IGR1cGxpY2F0ZSBpbi1mbGlnaHQgcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0geGhyUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclByb21pc2UudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRpbmcgU291cmNlTWFwQ29uc3VtZXJzIGlzIGV4cGVuc2l2ZSwgc28gdGhpcyB3cmFwcyB0aGUgY3JlYXRpb24gb2YgYVxuICAgICAgICAgKiBTb3VyY2VNYXBDb25zdW1lciBpbiBhIHBlci1pbnN0YW5jZSBjYWNoZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZU1hcHBpbmdVUkwgPSBVUkwgdG8gZmV0Y2ggc291cmNlIG1hcCBmcm9tXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBkZWZhdWx0U291cmNlUm9vdCA9IERlZmF1bHQgc291cmNlIHJvb3QgZm9yIHNvdXJjZSBtYXAgaWYgdW5kZWZpbmVkXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIGEgU291cmNlTWFwQ29uc3VtZXJcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyID0gZnVuY3Rpb24gX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldChzb3VyY2VNYXBwaW5nVVJMKS50aGVuKGZ1bmN0aW9uKHNvdXJjZU1hcFNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlTWFwU291cmNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBTb3VyY2UgPSBfcGFyc2VKc29uKHNvdXJjZU1hcFNvdXJjZS5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlTWFwU291cmNlLnNvdXJjZVJvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcFNvdXJjZS5zb3VyY2VSb290ID0gZGVmYXVsdFNvdXJjZVJvb3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU291cmNlTWFwLlNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcFNvdXJjZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdID0gc291cmNlTWFwQ29uc3VtZXJQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBlbmhhbmNlIGZ1bmN0aW9uIG5hbWUgYW5kIHVzZSBzb3VyY2UgbWFwcyBmb3IgYVxuICAgICAgICAgKiBiZXR0ZXIgU3RhY2tGcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lIG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHdpdGggc291cmNlLW1hcHBlZCBTdGFja0ZyYW1lXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBpbnBvaW50ID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkcGlucG9pbnQoc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkudGhlbihmdW5jdGlvbihtYXBwZWRTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVNYXBwZWRTdGFja0ZyYW1lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtYXBwZWRTdGFja0ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZEZ1bmN0aW9uTmFtZShtYXBwZWRTdGFja0ZyYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSwgcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ2NhdGNoJ10ocmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgZ3Vlc3MgZnVuY3Rpb24gbmFtZSBmcm9tIGxvY2F0aW9uIGluZm9ybWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWVcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBlbmhhbmNlZCBTdGFja0ZyYW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZmluZEZ1bmN0aW9uTmFtZShzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChzdGFja2ZyYW1lLmZpbGVOYW1lKS50aGVuKGZ1bmN0aW9uIGdldFNvdXJjZUNhbGxiYWNrKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHN0YWNrZnJhbWUubGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ3Vlc3NlZEZ1bmN0aW9uTmFtZSA9IF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZXBsYWNlIGZ1bmN0aW9uTmFtZSBpZiB3ZSBmb3VuZCBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICAgICAgaWYgKGd1ZXNzZWRGdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZ3Vlc3NlZEZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBzdGFja2ZyYW1lLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IHN0YWNrZnJhbWUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgc2VlayBzb3VyY2UtbWFwcGVkIGxvY2F0aW9uIGFuZCByZXR1cm4gbmV3IGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdldE1hcHBlZExvY2F0aW9uID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKTtcblxuICAgICAgICAgICAgICAgIHZhciBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGU7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gc3RhY2tmcmFtZS5maWxlTmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXQoZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VNYXBwaW5nVVJMID0gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBzb3VyY2VNYXBwaW5nVVJMLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRTb3VyY2VSb290ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlTWFwcGluZ1VSTFswXSAhPT0gJy8nICYmICFpc0RhdGFVcmwgJiYgISgvXmh0dHBzPzpcXC9cXC98XlxcL1xcLy9pKS50ZXN0KHNvdXJjZU1hcHBpbmdVUkwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBwaW5nVVJMID0gZGVmYXVsdFNvdXJjZVJvb3QgKyBzb3VyY2VNYXBwaW5nVVJMO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oc291cmNlTWFwQ29uc3VtZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwU291cmNlKHN0YWNrZnJhbWUsIHNvdXJjZU1hcENvbnN1bWVyLCBzb3VyY2VDYWNoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSlbJ2NhdGNoJ10oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbn0pKTtcbiIsIi8vIFBvbHlmaWxsIGZvciBvbGQgYnJvd3NlcnNcbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5XG5pZiAoIUFycmF5LmlzQXJyYXkpIHtcbiAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xufVxuXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgRVM2UHJvbWlzZS5wb2x5ZmlsbCgpO1xufVxuXG4vLyBFUzUgUG9seWZpbGxzXG4vLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRnVuY3Rpb24vYmluZFxuaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkge1xuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24ob1RoaXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCAtIHdoYXQgaXMgdHJ5aW5nIHRvIGJlIGJvdW5kIGlzIG5vdCBjYWxsYWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgdmFyIGZUb0JpbmQgPSB0aGlzO1xuICAgICAgICB2YXIgTm9PcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZkJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gZlRvQmluZC5hcHBseSh0aGlzIGluc3RhbmNlb2YgTm9PcCAmJiBvVGhpcyA/IHRoaXMgOiBvVGhpcyxcbiAgICAgICAgICAgICAgICBhQXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIE5vT3AucHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG4gICAgICAgIGZCb3VuZC5wcm90b3R5cGUgPSBuZXcgTm9PcCgpO1xuXG4gICAgICAgIHJldHVybiBmQm91bmQ7XG4gICAgfTtcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L21hcFxuaWYgKCFBcnJheS5wcm90b3R5cGUubWFwKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgIGlmICh0aGlzID09PSB2b2lkIDAgfHwgdGhpcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIE8gPSBPYmplY3QodGhpcyk7XG4gICAgICAgIHZhciBsZW4gPSBPLmxlbmd0aCA+Pj4gMDtcbiAgICAgICAgdmFyIFQ7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBUID0gdGhpc0FyZztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBBID0gbmV3IEFycmF5KGxlbik7XG4gICAgICAgIHZhciBrID0gMDtcblxuICAgICAgICB3aGlsZSAoayA8IGxlbikge1xuICAgICAgICAgICAgdmFyIGtWYWx1ZTtcbiAgICAgICAgICAgIHZhciBtYXBwZWRWYWx1ZTtcbiAgICAgICAgICAgIGlmIChrIGluIE8pIHtcbiAgICAgICAgICAgICAgICBrVmFsdWUgPSBPW2tdO1xuICAgICAgICAgICAgICAgIG1hcHBlZFZhbHVlID0gY2FsbGJhY2suY2FsbChULCBrVmFsdWUsIGssIE8pO1xuICAgICAgICAgICAgICAgIEFba10gPSBtYXBwZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBBO1xuICAgIH07XG59XG5cbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9maWx0ZXJcbmlmICghQXJyYXkucHJvdG90eXBlLmZpbHRlcikge1xuICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbihjYWxsYmFjay8qLCB0aGlzQXJnKi8pIHtcbiAgICAgICAgaWYgKHRoaXMgPT09IHZvaWQgMCB8fCB0aGlzID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0aGlzIGlzIG51bGwgb3Igbm90IGRlZmluZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpO1xuICAgICAgICB2YXIgbGVuID0gdC5sZW5ndGggPj4+IDA7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyID8gYXJndW1lbnRzWzFdIDogdm9pZCAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSBpbiB0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRbaV07XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2ZvckVhY2hcbmlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgIHZhciBUO1xuICAgICAgICB2YXIgaztcbiAgICAgICAgaWYgKHRoaXMgPT09IG51bGwgfHwgdGhpcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcgdGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgTyA9IE9iamVjdCh0aGlzKTtcbiAgICAgICAgdmFyIGxlbiA9IE8ubGVuZ3RoID4+PiAwO1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBUID0gdGhpc0FyZztcbiAgICAgICAgfVxuICAgICAgICBrID0gMDtcbiAgICAgICAgd2hpbGUgKGsgPCBsZW4pIHtcbiAgICAgICAgICAgIHZhciBrVmFsdWU7XG4gICAgICAgICAgICBpZiAoayBpbiBPKSB7XG4gICAgICAgICAgICAgICAga1ZhbHVlID0gT1trXTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKFQsIGtWYWx1ZSwgaywgTyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrKys7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZScsIFsnZXJyb3Itc3RhY2stcGFyc2VyJywgJ3N0YWNrLWdlbmVyYXRvcicsICdzdGFja3RyYWNlLWdwcyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnZXJyb3Itc3RhY2stcGFyc2VyJyksIHJlcXVpcmUoJ3N0YWNrLWdlbmVyYXRvcicpLCByZXF1aXJlKCdzdGFja3RyYWNlLWdwcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2UgPSBmYWN0b3J5KHJvb3QuRXJyb3JTdGFja1BhcnNlciwgcm9vdC5TdGFja0dlbmVyYXRvciwgcm9vdC5TdGFja1RyYWNlR1BTKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIFN0YWNrVHJhY2UoRXJyb3JTdGFja1BhcnNlciwgU3RhY2tHZW5lcmF0b3IsIFN0YWNrVHJhY2VHUFMpIHtcbiAgICB2YXIgX29wdGlvbnMgPSB7XG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBzdGFja2ZyYW1lcyBmb3IgdGhpcyBsaWJyYXJ5IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2UkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignRXJyb3JTdGFja1BhcnNlciQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlR1BTJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrR2VuZXJhdG9yJCQnKSA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZUNhY2hlOiB7fVxuICAgIH07XG5cbiAgICB2YXIgX2dlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRHZW5lcmF0ZUVycm9yKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRXJyb3IgbXVzdCBiZSB0aHJvd24gdG8gZ2V0IHN0YWNrIGluIElFXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdlIDIgZ2l2ZW4gT2JqZWN0cy4gSWYgYSBjb25mbGljdCBvY2N1cnMgdGhlIHNlY29uZCBvYmplY3Qgd2lucy5cbiAgICAgKiBEb2VzIG5vdCBkbyBkZWVwIG1lcmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaXJzdCBiYXNlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWNvbmQgb3ZlcnJpZGVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gbWVyZ2VkIGZpcnN0IGFuZCBzZWNvbmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tZXJnZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcblxuICAgICAgICBbZmlyc3QsIHNlY29uZF0uZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVyci5zdGFjayB8fCBlcnJbJ29wZXJhI3NvdXJjZWxvYyddO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXJlZChzdGFja2ZyYW1lcywgZmlsdGVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXMuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrZnJhbWVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0KG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikgPyB0aGlzLmZyb21FcnJvcihlcnIsIG9wdHMpIDogdGhpcy5nZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgYmFja3RyYWNlIGZyb20gaW52b2NhdGlvbiBwb2ludC5cbiAgICAgICAgICogSU1QT1JUQU5UOiBEb2VzIG5vdCBoYW5kbGUgc291cmNlIG1hcHMgb3IgZ3Vlc3MgZnVuY3Rpb24gbmFtZXMhXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0U3luYzogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0U3luYyhvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyKSA6IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyZWQoc3RhY2ssIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3Igb2JqZWN0LCBwYXJzZSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmb3IgQXJyYXlbU3RhY2tGcmFtZX1cbiAgICAgICAgICovXG4gICAgICAgIGZyb21FcnJvcjogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZnJvbUVycm9yKGVycm9yLCBvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBncHMgPSBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrZnJhbWVzID0gX2ZpbHRlcmVkKEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyb3IpLCBvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShQcm9taXNlLmFsbChzdGFja2ZyYW1lcy5tYXAoZnVuY3Rpb24oc2YpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVPcmlnaW5hbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ3BzLnBpbnBvaW50KHNmKS50aGVuKHJlc29sdmUsIHJlc29sdmVPcmlnaW5hbClbJ2NhdGNoJ10ocmVzb2x2ZU9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBTdGFja0dlbmVyYXRvciB0byBnZW5lcmF0ZSBhIGJhY2t0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IG9mIEFycmF5W1N0YWNrRnJhbWVdXG4gICAgICAgICAqL1xuICAgICAgICBnZW5lcmF0ZUFydGlmaWNpYWxseTogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2VuZXJhdGVBcnRpZmljaWFsbHkob3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgc3RhY2tGcmFtZXMgPSBTdGFja0dlbmVyYXRvci5iYWNrdHJhY2Uob3B0cyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgc3RhY2tGcmFtZXMgPSBzdGFja0ZyYW1lcy5maWx0ZXIob3B0cy5maWx0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGFja0ZyYW1lcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24sIHdyYXAgaXQgc3VjaCB0aGF0IGludm9jYXRpb25zIHRyaWdnZXIgYSBjYWxsYmFjayB0aGF0XG4gICAgICAgICAqIGlzIGNhbGxlZCB3aXRoIGEgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGluc3RydW1lbnRlZFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdpdGggYSBzdGFjayB0cmFjZSBvbiBpbnZvY2F0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVycmJhY2sgb3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGVycm9yIGlmIHVuYWJsZSB0byBnZXQgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIG9wdGlvbmFsIGNvbnRleHQgb2JqZWN0IChlLmcuIHdpbmRvdylcbiAgICAgICAgICovXG4gICAgICAgIGluc3RydW1lbnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnQoZm4sIGNhbGxiYWNrLCBlcnJiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBpbnN0cnVtZW50ZWQsIHJldHVybiBnaXZlbiBGdW5jdGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGluc3RydW1lbnRlZCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnRlZCgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCgpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZyB8fCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb21FcnJvcihlKS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrKVsnY2F0Y2gnXShlcnJiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGluc3RydW1lbnRlZC5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID0gZm47XG5cbiAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50ZWQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBpbnN0cnVtZW50ZWQsXG4gICAgICAgICAqIHJldmVydCB0aGUgZnVuY3Rpb24gdG8gaXQncyBvcmlnaW5hbCAobm9uLWluc3RydW1lbnRlZCkgc3RhdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGRlLWluc3RydW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGRlaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZGVpbnN0cnVtZW50KGZuKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGUtaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIG5vdCBpbnN0cnVtZW50ZWQsIHJldHVybiBvcmlnaW5hbFxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3IgbWVzc2FnZSBhbmQgQXJyYXkgb2YgU3RhY2tGcmFtZXMsIHNlcmlhbGl6ZSBhbmQgUE9TVCB0byBnaXZlbiBVUkwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrZnJhbWVzXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVycm9yTXNnXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0T3B0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgcmVwb3J0OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRyZXBvcnQoc3RhY2tmcmFtZXMsIHVybCwgZXJyb3JNc2csIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPj0gMjAwICYmIHJlcS5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdQT1NUIHRvICcgKyB1cmwgKyAnIGZhaWxlZCB3aXRoIHN0YXR1czogJyArIHJlcS5zdGF0dXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVxLm9wZW4oJ3Bvc3QnLCB1cmwpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHJlcXVlc3QgaGVhZGVyc1xuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucyAmJiB0eXBlb2YgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgaGVhZGVyc1toZWFkZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZXBvcnRQYXlsb2FkID0ge3N0YWNrOiBzdGFja2ZyYW1lc307XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQgJiYgZXJyb3JNc2cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0UGF5bG9hZC5tZXNzYWdlID0gZXJyb3JNc2c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVwb3J0UGF5bG9hZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIl19 diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index c584bd7..5596ab1 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i=["eval",""].indexOf(r[0])>-1?void 0:r[0];return new e({functionName:o,fileName:i,lineNumber:r[1],columnNumber:r[2],source:t})},this)},parseFFOrSafari:function(t){var n=t.stack.split("\n").filter(function(e){return!e.match(r)},this);return n.map(function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),t.indexOf("@")===-1&&t.indexOf(":")===-1)return new e({functionName:t});var n=t.split("@"),r=this.extractLocation(n.pop()),o=n.join("@")||void 0;return new e({functionName:o,fileName:r[0],lineNumber:r[1],columnNumber:r[2],source:t})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:t})},this)}}})},{stackframe:13}],2:[function(t,n,r){(function(o,i){!function(t,o){"object"==typeof r&&"undefined"!=typeof n?n.exports=o():"function"==typeof e&&e.amd?e(o):t.ES6Promise=o()}(this,function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function n(e){return"function"==typeof e}function r(e){W=e}function a(e){V=e}function s(){return function(){return o.nextTick(p)}}function u(){return function(){Y(p)}}function c(){var e=0,t=new Q(p),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function l(){var e=new MessageChannel;return e.port1.onmessage=p,function(){return e.port2.postMessage(0)}}function f(){var e=setTimeout;return function(){return e(p,1)}}function p(){for(var e=0;e1)))/4)-T((e-1901+t)/100)+T((e-1601+t)/400)};if((g=v.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=y?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?d=2==i?function(e,t){var n,r={},o=y.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=y.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var n,o,i=y.call(e)==b,s=!i&&"function"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&"prototype"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),d(e,t)},!n("json-stringify")){var j={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},k="000000",P=function(e,t){return(k+(t||0)).slice(-e)},x="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);n-1/0&&s<1/0){if(M){for(p=T(s/864e5),c=T(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=T((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,v=T(h/36e5)%24,_=T(h/6e4)%60,w=T(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),v=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(c<=0||c>=1e4?(c<0?"-":"+")+P(6,c<0?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,v)+":"+P(2,_)+":"+P(2,w)+"."+P(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=y.call(s),u==E)return""+s;if(u==A)return s>-1/0&&s<1/0?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),N=[],x=i,i+=o,u==S){for(j=0,k=s.length;j0)for(r="",n>10&&(n=10);r.length=48&&o<=57||o>=97&&o<=102||o>=65&&o<=70||B();e+=G("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&o<=57){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&o<=57)&&B(),r=!1;U=48&&o<=57);U++);if(46==i.charCodeAt(U)){for(n=++U;n=48&&o<=57);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),43!=o&&45!=o||U++,n=U;n=48&&o<=57);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),","!=e&&"string"==typeof e&&"@"==(N?e.charAt(0):e[0])&&":"==J()||B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(y.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,$=""+e,n=q(J()),"$"!=J()&&B(),U=$=null,t&&y.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return t.runInContext=o,t}var i="function"==typeof e&&e.amd,a={"function":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&"object"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,t,n){function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function a(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function s(){m&&g&&(m=!1,g.length?d=g.concat(d):v=-1,d.length&&u())}function u(){if(!m){var e=i(s);m=!0;for(var t=d.length;t;){for(g=d,d=[];++v1)for(var n=1;n=0&&e>1;return t?-n:n}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],9:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;p1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),C.push(n),"number"==typeof n.originalLine&&b.push(n)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=o(t),r=o(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(y))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,i(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function d(e,t){return e===t?0:e>t?1:-1}function m(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=d(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:d(e.name,t.name)))))}n.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},n.relative=u;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},{}],12:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof r?n.exports=i(t("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300||"file://"===e.substr(0,7)&&r.responseText?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],r=e.split("\n"),o="",i=Math.min(t,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=n.length,l=0;l>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;a>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;i>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;r=200&&a.status<400?o(a.responseText):i(new Error("POST to "+t+" failed with status: "+a.status)))},a.open("post",t),a.setRequestHeader("Content-Type","application/json"),r&&"object"==typeof r.headers){var s=r.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==n&&null!==n&&(c.message=n),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":12,"stacktrace-gps":14}]},{},[2,3,15,16])(16)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i=["eval",""].indexOf(r[0])>-1?void 0:r[0];return new e({functionName:o,fileName:i,lineNumber:r[1],columnNumber:r[2],source:t})},this)},parseFFOrSafari:function(t){var n=t.stack.split("\n").filter(function(e){return!e.match(r)},this);return n.map(function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),t.indexOf("@")===-1&&t.indexOf(":")===-1)return new e({functionName:t});var n=/((.*".+"[^@]*)?[^@]*)(?:@)/,r=t.match(n),o=r&&r[1]?r[1]:void 0,i=this.extractLocation(t.replace(n,""));return new e({functionName:o,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:t})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:t})},this)}}})},{stackframe:6}],2:[function(t,n,r){(function(o,i){!function(t,o){"object"==typeof r&&"undefined"!=typeof n?n.exports=o():"function"==typeof e&&e.amd?e(o):t.ES6Promise=o()}(this,function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function n(e){return"function"==typeof e}function r(e){W=e}function a(e){V=e}function s(){return function(){return o.nextTick(p)}}function u(){return function(){Y(p)}}function c(){var e=0,t=new Q(p),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function l(){var e=new MessageChannel;return e.port1.onmessage=p,function(){return e.port2.postMessage(0)}}function f(){var e=setTimeout;return function(){return e(p,1)}}function p(){for(var e=0;e1)))/4)-T((e-1901+t)/100)+T((e-1601+t)/400)};if((g=v.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=y?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?m=2==i?function(e,t){var n,r={},o=y.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=y.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var n,o,i=y.call(e)==b,s=!i&&"function"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&"prototype"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),m(e,t)},!n("json-stringify")){var j={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},k="000000",P=function(e,t){return(k+(t||0)).slice(-e)},x="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);n-1/0&&s<1/0){if(M){for(p=T(s/864e5),c=T(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=T((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,v=T(h/36e5)%24,_=T(h/6e4)%60,w=T(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),v=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(c<=0||c>=1e4?(c<0?"-":"+")+P(6,c<0?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,v)+":"+P(2,_)+":"+P(2,w)+"."+P(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=y.call(s),u==E)return""+s;if(u==A)return s>-1/0&&s<1/0?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),N=[],x=i,i+=o,u==S){for(j=0,k=s.length;j0)for(r="",n>10&&(n=10);r.length=48&&o<=57||o>=97&&o<=102||o>=65&&o<=70||B();e+=G("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&o<=57){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&o<=57)&&B(),r=!1;U=48&&o<=57);U++);if(46==i.charCodeAt(U)){for(n=++U;n=48&&o<=57);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),43!=o&&45!=o||U++,n=U;n=48&&o<=57);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),","!=e&&"string"==typeof e&&"@"==(N?e.charAt(0):e[0])&&":"==J()||B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(y.call(o)==S)for(r=o.length;r--;)I(o,r,n);else m(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,$=""+e,n=q(J()),"$"!=J()&&B(),U=$=null,t&&y.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return t.runInContext=o,t}var i="function"==typeof e&&e.amd,a={"function":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&"object"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,t,n){function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function a(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function s(){d&&g&&(d=!1,g.length?m=g.concat(m):v=-1,m.length&&u())}function u(){if(!d){var e=i(s);d=!0;for(var t=m.length;t;){for(g=m,m=[];++v1)for(var n=1;n=0&&e>1;return t?-n:n}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],11:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;p1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),C.push(n),"number"==typeof n.originalLine&&b.push(n)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null), +name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=o(t),r=o(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(y))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,i(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function m(e,t){return e===t?0:e>t?1:-1}function d(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=m(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:m(e.name,t.name)))))}n.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},n.relative=u;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=d},{}],14:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stacktrace-gps",["source-map","stackframe"],i):"object"==typeof r?n.exports=i(t("source-map/lib/source-map-consumer"),t("stackframe")):o.StackTraceGPS=i(o.SourceMap||o.sourceMap,o.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300||"file://"===e.substr(0,7)&&r.responseText?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],r=e.split("\n"),o="",i=Math.min(t,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=n.length,l=0;l>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;a>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;i>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;r=200&&a.status<400?o(a.responseText):i(new Error("POST to "+t+" failed with status: "+a.status)))},a.open("post",t),a.setRequestHeader("Content-Type","application/json"),r&&"object"==typeof r.headers){var s=r.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==n&&null!==n&&(c.message=n),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":5,"stacktrace-gps":14}]},{},[2,3,15,16])(16)}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace.js b/dist/stacktrace.js index 3375a70..05c1a5c 100644 --- a/dist/stacktrace.js +++ b/dist/stacktrace.js @@ -91,9 +91,10 @@ functionName: line }); } else { - var tokens = line.split('@'); - var locationParts = this.extractLocation(tokens.pop()); - var functionName = tokens.join('@') || undefined; + var functionNameRegex = /((.*".+"[^@]*)?[^@]*)(?:@)/; + var matches = line.match(functionNameRegex); + var functionName = matches && matches[1] ? matches[1] : undefined; + var locationParts = this.extractLocation(line.replace(functionNameRegex, '')); return new StackFrame({ functionName: functionName, @@ -191,7 +192,167 @@ }; })); -},{"stackframe":10}],2:[function(require,module,exports){ +},{"stackframe":3}],2:[function(require,module,exports){ +(function(root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stack-generator', ['stackframe'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('stackframe')); + } else { + root.StackGenerator = factory(root.StackFrame); + } +}(this, function(StackFrame) { + return { + backtrace: function StackGenerator$$backtrace(opts) { + var stack = []; + var maxStackSize = 10; + + if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') { + maxStackSize = opts.maxStackSize; + } + + var curr = arguments.callee; + while (curr && stack.length < maxStackSize && curr['arguments']) { + // Allow V8 optimizations + var args = new Array(curr['arguments'].length); + for (var i = 0; i < args.length; ++i) { + args[i] = curr['arguments'][i]; + } + if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { + stack.push(new StackFrame({functionName: RegExp.$1 || undefined, args: args})); + } else { + stack.push(new StackFrame({args: args})); + } + + try { + curr = curr.caller; + } catch (e) { + break; + } + } + return stack; + } + }; +})); + +},{"stackframe":3}],3:[function(require,module,exports){ +(function(root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stackframe', [], factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + root.StackFrame = factory(); + } +}(this, function() { + 'use strict'; + function _isNumber(n) { + return !isNaN(parseFloat(n)) && isFinite(n); + } + + function _capitalize(str) { + return str.charAt(0).toUpperCase() + str.substring(1); + } + + function _getter(p) { + return function() { + return this[p]; + }; + } + + var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel']; + var numericProps = ['columnNumber', 'lineNumber']; + var stringProps = ['fileName', 'functionName', 'source']; + var arrayProps = ['args']; + + var props = booleanProps.concat(numericProps, stringProps, arrayProps); + + function StackFrame(obj) { + if (obj instanceof Object) { + for (var i = 0; i < props.length; i++) { + if (obj.hasOwnProperty(props[i]) && obj[props[i]] !== undefined) { + this['set' + _capitalize(props[i])](obj[props[i]]); + } + } + } + } + + StackFrame.prototype = { + getArgs: function() { + return this.args; + }, + setArgs: function(v) { + if (Object.prototype.toString.call(v) !== '[object Array]') { + throw new TypeError('Args must be an Array'); + } + this.args = v; + }, + + getEvalOrigin: function() { + return this.evalOrigin; + }, + setEvalOrigin: function(v) { + if (v instanceof StackFrame) { + this.evalOrigin = v; + } else if (v instanceof Object) { + this.evalOrigin = new StackFrame(v); + } else { + throw new TypeError('Eval Origin must be an Object or StackFrame'); + } + }, + + toString: function() { + var functionName = this.getFunctionName() || '{anonymous}'; + var args = '(' + (this.getArgs() || []).join(',') + ')'; + var fileName = this.getFileName() ? ('@' + this.getFileName()) : ''; + var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : ''; + var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : ''; + return functionName + args + fileName + lineNumber + columnNumber; + } + }; + + for (var i = 0; i < booleanProps.length; i++) { + StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]); + StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) { + return function(v) { + this[p] = Boolean(v); + }; + })(booleanProps[i]); + } + + for (var j = 0; j < numericProps.length; j++) { + StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]); + StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) { + return function(v) { + if (!_isNumber(v)) { + throw new TypeError(p + ' must be a Number'); + } + this[p] = Number(v); + }; + })(numericProps[j]); + } + + for (var k = 0; k < stringProps.length; k++) { + StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]); + StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) { + return function(v) { + this[p] = String(v); + }; + })(stringProps[k]); + } + + return StackFrame; +})); + +},{}],4:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -297,7 +458,7 @@ ArraySet.prototype.toArray = function ArraySet_toArray() { exports.ArraySet = ArraySet; -},{"./util":8}],3:[function(require,module,exports){ +},{"./util":10}],5:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -439,7 +600,7 @@ exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { aOutParam.rest = aIndex; }; -},{"./base64":4}],4:[function(require,module,exports){ +},{"./base64":6}],6:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -508,7 +669,7 @@ exports.decode = function (charCode) { return -1; }; -},{}],5:[function(require,module,exports){ +},{}],7:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -621,7 +782,7 @@ exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { return index; }; -},{}],6:[function(require,module,exports){ +},{}],8:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -737,7 +898,7 @@ exports.quickSort = function (ary, comparator) { doQuickSort(ary, comparator, 0, ary.length - 1); }; -},{}],7:[function(require,module,exports){ +},{}],9:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -1821,7 +1982,7 @@ IndexedSourceMapConsumer.prototype._parseMappings = exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; -},{"./array-set":2,"./base64-vlq":3,"./binary-search":5,"./quick-sort":6,"./util":8}],8:[function(require,module,exports){ +},{"./array-set":4,"./base64-vlq":5,"./binary-search":7,"./quick-sort":8,"./util":10}],10:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -2240,166 +2401,6 @@ function compareByGeneratedPositionsInflated(mappingA, mappingB) { } exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; -},{}],9:[function(require,module,exports){ -(function(root, factory) { - 'use strict'; - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. - - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define('stack-generator', ['stackframe'], factory); - } else if (typeof exports === 'object') { - module.exports = factory(require('stackframe')); - } else { - root.StackGenerator = factory(root.StackFrame); - } -}(this, function(StackFrame) { - return { - backtrace: function StackGenerator$$backtrace(opts) { - var stack = []; - var maxStackSize = 10; - - if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') { - maxStackSize = opts.maxStackSize; - } - - var curr = arguments.callee; - while (curr && stack.length < maxStackSize) { - // Allow V8 optimizations - var args = new Array(curr['arguments'].length); - for (var i = 0; i < args.length; ++i) { - args[i] = curr['arguments'][i]; - } - if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { - stack.push(new StackFrame({functionName: RegExp.$1 || undefined, args: args})); - } else { - stack.push(new StackFrame({args: args})); - } - - try { - curr = curr.caller; - } catch (e) { - break; - } - } - return stack; - } - }; -})); - -},{"stackframe":10}],10:[function(require,module,exports){ -(function(root, factory) { - 'use strict'; - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. - - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define('stackframe', [], factory); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.StackFrame = factory(); - } -}(this, function() { - 'use strict'; - function _isNumber(n) { - return !isNaN(parseFloat(n)) && isFinite(n); - } - - function _capitalize(str) { - return str.charAt(0).toUpperCase() + str.substring(1); - } - - function _getter(p) { - return function() { - return this[p]; - }; - } - - var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel']; - var numericProps = ['columnNumber', 'lineNumber']; - var stringProps = ['fileName', 'functionName', 'source']; - var arrayProps = ['args']; - - var props = booleanProps.concat(numericProps, stringProps, arrayProps); - - function StackFrame(obj) { - if (obj instanceof Object) { - for (var i = 0; i < props.length; i++) { - if (obj.hasOwnProperty(props[i]) && obj[props[i]] !== undefined) { - this['set' + _capitalize(props[i])](obj[props[i]]); - } - } - } - } - - StackFrame.prototype = { - getArgs: function() { - return this.args; - }, - setArgs: function(v) { - if (Object.prototype.toString.call(v) !== '[object Array]') { - throw new TypeError('Args must be an Array'); - } - this.args = v; - }, - - getEvalOrigin: function() { - return this.evalOrigin; - }, - setEvalOrigin: function(v) { - if (v instanceof StackFrame) { - this.evalOrigin = v; - } else if (v instanceof Object) { - this.evalOrigin = new StackFrame(v); - } else { - throw new TypeError('Eval Origin must be an Object or StackFrame'); - } - }, - - toString: function() { - var functionName = this.getFunctionName() || '{anonymous}'; - var args = '(' + (this.getArgs() || []).join(',') + ')'; - var fileName = this.getFileName() ? ('@' + this.getFileName()) : ''; - var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : ''; - var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : ''; - return functionName + args + fileName + lineNumber + columnNumber; - } - }; - - for (var i = 0; i < booleanProps.length; i++) { - StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]); - StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) { - return function(v) { - this[p] = Boolean(v); - }; - })(booleanProps[i]); - } - - for (var j = 0; j < numericProps.length; j++) { - StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]); - StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) { - return function(v) { - if (!_isNumber(v)) { - throw new TypeError(p + ' must be a Number'); - } - this[p] = Number(v); - }; - })(numericProps[j]); - } - - for (var k = 0; k < stringProps.length; k++) { - StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]); - StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) { - return function(v) { - this[p] = String(v); - }; - })(stringProps[k]); - } - - return StackFrame; -})); - },{}],11:[function(require,module,exports){ (function(root, factory) { 'use strict'; @@ -2742,7 +2743,7 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate }; })); -},{"source-map/lib/source-map-consumer":7,"stackframe":10}],12:[function(require,module,exports){ +},{"source-map/lib/source-map-consumer":9,"stackframe":3}],12:[function(require,module,exports){ (function(root, factory) { 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. @@ -2971,6 +2972,6 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate }; })); -},{"error-stack-parser":1,"stack-generator":9,"stacktrace-gps":11}]},{},[12])(12) +},{"error-stack-parser":1,"stack-generator":2,"stacktrace-gps":11}]},{},[12])(12) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9hcnJheS1zZXQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LXZscS5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iYXNlNjQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9xdWljay1zb3J0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAtY29uc3VtZXIuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9zdGFjay1nZW5lcmF0b3Ivc3RhY2stZ2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrZnJhbWUvc3RhY2tmcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja3RyYWNlLWdwcy9zdGFja3RyYWNlLWdwcy5qcyIsInN0YWNrdHJhY2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2phQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcFZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdlcnJvci1zdGFjay1wYXJzZXInLCBbJ3N0YWNrZnJhbWUnXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ3N0YWNrZnJhbWUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5FcnJvclN0YWNrUGFyc2VyID0gZmFjdG9yeShyb290LlN0YWNrRnJhbWUpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlcihTdGFja0ZyYW1lKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIEZJUkVGT1hfU0FGQVJJX1NUQUNLX1JFR0VYUCA9IC8oXnxAKVxcUytcXDpcXGQrLztcbiAgICB2YXIgQ0hST01FX0lFX1NUQUNLX1JFR0VYUCA9IC9eXFxzKmF0IC4qKFxcUytcXDpcXGQrfFxcKG5hdGl2ZVxcKSkvbTtcbiAgICB2YXIgU0FGQVJJX05BVElWRV9DT0RFX1JFR0VYUCA9IC9eKGV2YWxAKT8oXFxbbmF0aXZlIGNvZGVcXF0pPyQvO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGFuIEVycm9yIG9iamVjdCwgZXh0cmFjdCB0aGUgbW9zdCBpbmZvcm1hdGlvbiBmcm9tIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IG9mIFN0YWNrRnJhbWVzXG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2UoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3Iuc3RhY2t0cmFjZSAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGVycm9yWydvcGVyYSNzb3VyY2Vsb2MnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhY2sgJiYgZXJyb3Iuc3RhY2subWF0Y2goQ0hST01FX0lFX1NUQUNLX1JFR0VYUCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVY4T3JJRShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VGRk9yU2FmYXJpKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGFyc2UgZ2l2ZW4gRXJyb3Igb2JqZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gU2VwYXJhdGUgbGluZSBhbmQgY29sdW1uIG51bWJlcnMgZnJvbSBhIHN0cmluZyBvZiB0aGUgZm9ybTogKFVSSTpMaW5lOkNvbHVtbilcbiAgICAgICAgZXh0cmFjdExvY2F0aW9uOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRleHRyYWN0TG9jYXRpb24odXJsTGlrZSkge1xuICAgICAgICAgICAgLy8gRmFpbC1mYXN0IGJ1dCByZXR1cm4gbG9jYXRpb25zIGxpa2UgXCIobmF0aXZlKVwiXG4gICAgICAgICAgICBpZiAodXJsTGlrZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt1cmxMaWtlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJlZ0V4cCA9IC8oLis/KSg/OlxcOihcXGQrKSk/KD86XFw6KFxcZCspKT8kLztcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IHJlZ0V4cC5leGVjKHVybExpa2UucmVwbGFjZSgvW1xcKFxcKV0vZywgJycpKTtcbiAgICAgICAgICAgIHJldHVybiBbcGFydHNbMV0sIHBhcnRzWzJdIHx8IHVuZGVmaW5lZCwgcGFydHNbM10gfHwgdW5kZWZpbmVkXTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZVY4T3JJRTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VWOE9ySUUoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIWxpbmUubWF0Y2goQ0hST01FX0lFX1NUQUNLX1JFR0VYUCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignKGV2YWwgJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IGV2YWwgaW5mb3JtYXRpb24gdW50aWwgd2UgaW1wbGVtZW50IHN0YWNrdHJhY2UuanMvc3RhY2tmcmFtZSM4XG4gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoL2V2YWwgY29kZS9nLCAnZXZhbCcpLnJlcGxhY2UoLyhcXChldmFsIGF0IFteXFwoKV0qKXwoXFwpXFwsLiokKS9nLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBsaW5lLnJlcGxhY2UoL15cXHMrLywgJycpLnJlcGxhY2UoL1xcKGV2YWwgY29kZS9nLCAnKCcpLnNwbGl0KC9cXHMrLykuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbih0b2tlbnMucG9wKCkpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0b2tlbnMuam9pbignICcpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBbJ2V2YWwnLCAnPGFub255bW91cz4nXS5pbmRleE9mKGxvY2F0aW9uUGFydHNbMF0pID4gLTEgPyB1bmRlZmluZWQgOiBsb2NhdGlvblBhcnRzWzBdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlRkZPclNhZmFyaTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VGRk9yU2FmYXJpKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIWxpbmUubWF0Y2goU0FGQVJJX05BVElWRV9DT0RFX1JFR0VYUCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSBldmFsIGluZm9ybWF0aW9uIHVudGlsIHdlIGltcGxlbWVudCBzdGFja3RyYWNlLmpzL3N0YWNrZnJhbWUjOFxuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJyA+IGV2YWwnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoLyBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsXFw6XFxkK1xcOlxcZCsvZywgJzokMScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJ0AnKSA9PT0gLTEgJiYgbGluZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyaSBldmFsIGZyYW1lcyBvbmx5IGhhdmUgZnVuY3Rpb24gbmFtZXMgYW5kIG5vdGhpbmcgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBsaW5lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBsaW5lLnNwbGl0KCdAJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRva2Vucy5qb2luKCdAJykgfHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhKGUpIHtcbiAgICAgICAgICAgIGlmICghZS5zdGFja3RyYWNlIHx8IChlLm1lc3NhZ2UuaW5kZXhPZignXFxuJykgPiAtMSAmJlxuICAgICAgICAgICAgICAgIGUubWVzc2FnZS5zcGxpdCgnXFxuJykubGVuZ3RoID4gZS5zdGFja3RyYWNlLnNwbGl0KCdcXG4nKS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTkoZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFlLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTEwKGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTEoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTk6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmE5KGUpIHtcbiAgICAgICAgICAgIHZhciBsaW5lUkUgPSAvTGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKS9pO1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gZS5tZXNzYWdlLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDIsIGxlbiA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZVJFLmV4ZWMobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZXNbaV1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhMTA6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMChlKSB7XG4gICAgICAgICAgICB2YXIgbGluZVJFID0gL0xpbmUgKFxcZCspLipzY3JpcHQgKD86aW4gKT8oXFxTKykoPzo6IEluIGZ1bmN0aW9uIChcXFMrKSk/JC9pO1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gZS5zdGFja3RyYWNlLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZVJFLmV4ZWMobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IG1hdGNoWzNdIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lc1tpXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gT3BlcmEgMTAuNjUrIEVycm9yLnN0YWNrIHZlcnkgc2ltaWxhciB0byBGRi9TYWZhcmlcbiAgICAgICAgcGFyc2VPcGVyYTExOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhMTEoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIWxpbmUubWF0Y2goRklSRUZPWF9TQUZBUklfU1RBQ0tfUkVHRVhQKSAmJiAhbGluZS5tYXRjaCgvXkVycm9yIGNyZWF0ZWQgYXQvKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5zcGxpdCgnQCcpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25DYWxsID0gKHRva2Vucy5zaGlmdCgpIHx8ICcnKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25DYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPGFub255bW91cyBmdW5jdGlvbig6IChcXHcrKSk/Pi8sICckMicpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwoW15cXCldKlxcKS9nLCAnJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzUmF3O1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkNhbGwubWF0Y2goL1xcKChbXlxcKV0qKVxcKS8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NSYXcgPSBmdW5jdGlvbkNhbGwucmVwbGFjZSgvXlteXFwoXStcXCgoW15cXCldKilcXCkkLywgJyQxJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gKGFyZ3NSYXcgPT09IHVuZGVmaW5lZCB8fCBhcmdzUmF3ID09PSAnW2FyZ3VtZW50cyBub3QgYXZhaWxhYmxlXScpID9cbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDogYXJnc1Jhdy5zcGxpdCgnLCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3XG4gKiBtZW1iZXIgaXMgTygxKSwgdGVzdGluZyBmb3IgbWVtYmVyc2hpcCBpcyBPKDEpLCBhbmQgZmluZGluZyB0aGUgaW5kZXggb2YgYW5cbiAqIGVsZW1lbnQgaXMgTygxKS4gUmVtb3ZpbmcgZWxlbWVudHMgZnJvbSB0aGUgc2V0IGlzIG5vdCBzdXBwb3J0ZWQuIE9ubHlcbiAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgbWVtYmVyc2hpcC5cbiAqL1xuZnVuY3Rpb24gQXJyYXlTZXQoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8qKlxuICogU3RhdGljIG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gKi9cbkFycmF5U2V0LmZyb21BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X2Zyb21BcnJheShhQXJyYXksIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYUFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgc2V0LmFkZChhQXJyYXlbaV0sIGFBbGxvd0R1cGxpY2F0ZXMpO1xuICB9XG4gIHJldHVybiBzZXQ7XG59O1xuXG4vKipcbiAqIFJldHVybiBob3cgbWFueSB1bmlxdWUgaXRlbXMgYXJlIGluIHRoaXMgQXJyYXlTZXQuIElmIGR1cGxpY2F0ZXMgaGF2ZSBiZWVuXG4gKiBhZGRlZCwgdGhhbiB0aG9zZSBkbyBub3QgY291bnQgdG93YXJkcyB0aGUgc2l6ZS5cbiAqXG4gKiBAcmV0dXJucyBOdW1iZXJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiBBcnJheVNldF9zaXplKCkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fc2V0KS5sZW5ndGg7XG59O1xuXG4vKipcbiAqIEFkZCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoaXMgc2V0LlxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gQXJyYXlTZXRfYWRkKGFTdHIsIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICB2YXIgaXNEdXBsaWNhdGUgPSBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB2YXIgaWR4ID0gdGhpcy5fYXJyYXkubGVuZ3RoO1xuICBpZiAoIWlzRHVwbGljYXRlIHx8IGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICB0aGlzLl9hcnJheS5wdXNoKGFTdHIpO1xuICB9XG4gIGlmICghaXNEdXBsaWNhdGUpIHtcbiAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gIH1cbn07XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIHN0cmluZyBhIG1lbWJlciBvZiB0aGlzIHNldD9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIEFycmF5U2V0X2hhcyhhU3RyKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgcmV0dXJuIGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIGlmIChoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgaW50VG9DaGFyTWFwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcblxuLyoqXG4gKiBFbmNvZGUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMCB0byA2MyB0byBhIHNpbmdsZSBiYXNlIDY0IGRpZ2l0LlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgaWYgKDAgPD0gbnVtYmVyICYmIG51bWJlciA8IGludFRvQ2hhck1hcC5sZW5ndGgpIHtcbiAgICByZXR1cm4gaW50VG9DaGFyTWFwW251bWJlcl07XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogXCIgKyBudW1iZXIpO1xufTtcblxuLyoqXG4gKiBEZWNvZGUgYSBzaW5nbGUgYmFzZSA2NCBjaGFyYWN0ZXIgY29kZSBkaWdpdCB0byBhbiBpbnRlZ2VyLiBSZXR1cm5zIC0xIG9uXG4gKiBmYWlsdXJlLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIChjaGFyQ29kZSkge1xuICB2YXIgYmlnQSA9IDY1OyAgICAgLy8gJ0EnXG4gIHZhciBiaWdaID0gOTA7ICAgICAvLyAnWidcblxuICB2YXIgbGl0dGxlQSA9IDk3OyAgLy8gJ2EnXG4gIHZhciBsaXR0bGVaID0gMTIyOyAvLyAneidcblxuICB2YXIgemVybyA9IDQ4OyAgICAgLy8gJzAnXG4gIHZhciBuaW5lID0gNTc7ICAgICAvLyAnOSdcblxuICB2YXIgcGx1cyA9IDQzOyAgICAgLy8gJysnXG4gIHZhciBzbGFzaCA9IDQ3OyAgICAvLyAnLydcblxuICB2YXIgbGl0dGxlT2Zmc2V0ID0gMjY7XG4gIHZhciBudW1iZXJPZmZzZXQgPSA1MjtcblxuICAvLyAwIC0gMjU6IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXG4gIGlmIChiaWdBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGJpZ1opIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gYmlnQSk7XG4gIH1cblxuICAvLyAyNiAtIDUxOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuICBpZiAobGl0dGxlQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBsaXR0bGVaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGxpdHRsZUEgKyBsaXR0bGVPZmZzZXQpO1xuICB9XG5cbiAgLy8gNTIgLSA2MTogMDEyMzQ1Njc4OVxuICBpZiAoemVybyA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBuaW5lKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIHplcm8gKyBudW1iZXJPZmZzZXQpO1xuICB9XG5cbiAgLy8gNjI6ICtcbiAgaWYgKGNoYXJDb2RlID09IHBsdXMpIHtcbiAgICByZXR1cm4gNjI7XG4gIH1cblxuICAvLyA2MzogL1xuICBpZiAoY2hhckNvZGUgPT0gc2xhc2gpIHtcbiAgICByZXR1cm4gNjM7XG4gIH1cblxuICAvLyBJbnZhbGlkIGJhc2U2NCBkaWdpdC5cbiAgcmV0dXJuIC0xO1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5leHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBSZWN1cnNpdmUgaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaC5cbiAqXG4gKiBAcGFyYW0gYUxvdyBJbmRpY2VzIGhlcmUgYW5kIGxvd2VyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYUhpZ2ggSW5kaWNlcyBoZXJlIGFuZCBoaWdoZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IGJlaW5nIHNlYXJjaGVkIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIG5vbi1lbXB0eSBhcnJheSBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBGdW5jdGlvbiB3aGljaCB0YWtlcyB0d28gZWxlbWVudHMgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgLy9cbiAgLy8gICAxLiBXZSBmaW5kIHRoZSBleGFjdCBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgLy9cbiAgLy8gICAyLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGJ1dCB3ZSBjYW4gcmV0dXJuIHRoZSBpbmRleCBvZlxuICAvLyAgICAgIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudC5cbiAgLy9cbiAgLy8gICAzLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGFuZCB0aGVyZSBpcyBubyBuZXh0LWNsb3Nlc3RcbiAgLy8gICAgICBlbGVtZW50IHRoYW4gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgc28gd2UgcmV0dXJuIC0xLlxuICB2YXIgbWlkID0gTWF0aC5mbG9vcigoYUhpZ2ggLSBhTG93KSAvIDIpICsgYUxvdztcbiAgdmFyIGNtcCA9IGFDb21wYXJlKGFOZWVkbGUsIGFIYXlzdGFja1ttaWRdLCB0cnVlKTtcbiAgaWYgKGNtcCA9PT0gMCkge1xuICAgIC8vIEZvdW5kIHRoZSBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgICByZXR1cm4gbWlkO1xuICB9XG4gIGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGdyZWF0ZXIgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAoYUhpZ2ggLSBtaWQgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgdXBwZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2gobWlkLCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIFRoZSBleGFjdCBuZWVkbGUgZWxlbWVudCB3YXMgbm90IGZvdW5kIGluIHRoaXMgaGF5c3RhY2suIERldGVybWluZSBpZlxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBhSGlnaCA8IGFIYXlzdGFjay5sZW5ndGggPyBhSGlnaCA6IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGxlc3MgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAobWlkIC0gYUxvdyA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSBsb3dlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBtaWQsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYUxvdyA8IDAgPyAtMSA6IGFMb3c7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoIHdoaWNoIHdpbGwgYWx3YXlzIHRyeSBhbmQgcmV0dXJuXG4gKiB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgZWxlbWVudCBpZiB0aGVyZSBpcyBubyBleGFjdCBoaXQuIFRoaXMgaXMgYmVjYXVzZVxuICogbWFwcGluZ3MgYmV0d2VlbiBvcmlnaW5hbCBhbmQgZ2VuZXJhdGVkIGxpbmUvY29sIHBhaXJzIGFyZSBzaW5nbGUgcG9pbnRzLFxuICogYW5kIHRoZXJlIGlzIGFuIGltcGxpY2l0IHJlZ2lvbiBiZXR3ZWVuIGVhY2ggb2YgdGhlbSwgc28gYSBtaXNzIGp1c3QgbWVhbnNcbiAqIHRoYXQgeW91IGFyZW4ndCBvbiB0aGUgdmVyeSBzdGFydCBvZiBhIHJlZ2lvbi5cbiAqXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCB5b3UgYXJlIGxvb2tpbmcgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgYXJyYXkgdGhhdCBpcyBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBuZWVkbGUgYW5kIGFuIGVsZW1lbnQgaW4gdGhlXG4gKiAgICAgYXJyYXkgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5lZWRsZSBpcyBsZXNzXG4gKiAgICAgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgZWxlbWVudCwgcmVzcGVjdGl2ZWx5LlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICovXG5leHBvcnRzLnNlYXJjaCA9IGZ1bmN0aW9uIHNlYXJjaChhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICBpZiAoYUhheXN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHJlY3Vyc2l2ZVNlYXJjaCgtMSwgYUhheXN0YWNrLmxlbmd0aCwgYU5lZWRsZSwgYUhheXN0YWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbXBhcmUsIGFCaWFzIHx8IGV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLy8gV2UgaGF2ZSBmb3VuZCBlaXRoZXIgdGhlIGV4YWN0IGVsZW1lbnQsIG9yIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudCB0aGFuXG4gIC8vIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIHN1Y2hcbiAgLy8gZWxlbWVudC4gTWFrZSBzdXJlIHdlIGFsd2F5cyByZXR1cm4gdGhlIHNtYWxsZXN0IG9mIHRoZXNlLlxuICB3aGlsZSAoaW5kZXggLSAxID49IDApIHtcbiAgICBpZiAoYUNvbXBhcmUoYUhheXN0YWNrW2luZGV4XSwgYUhheXN0YWNrW2luZGV4IC0gMV0sIHRydWUpICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLS1pbmRleDtcbiAgfVxuXG4gIHJldHVybiBpbmRleDtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGdldHRpbmcgdmFsdWVzIGZyb20gcGFyYW1ldGVyL29wdGlvbnNcbiAqIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGFyZ3MgVGhlIG9iamVjdCB3ZSBhcmUgZXh0cmFjdGluZyB2YWx1ZXMgZnJvbVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdlIGFyZSBnZXR0aW5nLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBBbiBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmdcbiAqIGZyb20gdGhlIG9iamVjdC4gSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkIGFuZCB0aGUgcHJvcGVydHkgaXMgbWlzc2luZywgYW5cbiAqIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICovXG5mdW5jdGlvbiBnZXRBcmcoYUFyZ3MsIGFOYW1lLCBhRGVmYXVsdFZhbHVlKSB7XG4gIGlmIChhTmFtZSBpbiBhQXJncykge1xuICAgIHJldHVybiBhQXJnc1thTmFtZV07XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBhRGVmYXVsdFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYU5hbWUgKyAnXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKTtcbiAgfVxufVxuZXhwb3J0cy5nZXRBcmcgPSBnZXRBcmc7XG5cbnZhciB1cmxSZWdleHAgPSAvXig/OihbXFx3K1xcLS5dKyk6KT9cXC9cXC8oPzooXFx3KzpcXHcrKUApPyhbXFx3Ll0qKSg/OjooXFxkKykpPyhcXFMqKSQvO1xudmFyIGRhdGFVcmxSZWdleHAgPSAvXmRhdGE6LitcXCwuKyQvO1xuXG5mdW5jdGlvbiB1cmxQYXJzZShhVXJsKSB7XG4gIHZhciBtYXRjaCA9IGFVcmwubWF0Y2godXJsUmVnZXhwKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NoZW1lOiBtYXRjaFsxXSxcbiAgICBhdXRoOiBtYXRjaFsyXSxcbiAgICBob3N0OiBtYXRjaFszXSxcbiAgICBwb3J0OiBtYXRjaFs0XSxcbiAgICBwYXRoOiBtYXRjaFs1XVxuICB9O1xufVxuZXhwb3J0cy51cmxQYXJzZSA9IHVybFBhcnNlO1xuXG5mdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFyc2VkVXJsKSB7XG4gIHZhciB1cmwgPSAnJztcbiAgaWYgKGFQYXJzZWRVcmwuc2NoZW1lKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuc2NoZW1lICsgJzonO1xuICB9XG4gIHVybCArPSAnLy8nO1xuICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuYXV0aCArICdAJztcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuaG9zdDtcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7XG4gICAgdXJsICs9IFwiOlwiICsgYVBhcnNlZFVybC5wb3J0XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucGF0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnBhdGg7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cbmV4cG9ydHMudXJsR2VuZXJhdGUgPSB1cmxHZW5lcmF0ZTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGF0aCwgb3IgdGhlIHBhdGggcG9ydGlvbiBvZiBhIFVSTDpcbiAqXG4gKiAtIFJlcGxhY2VzIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aCBvbmUgc2xhc2guXG4gKiAtIFJlbW92ZXMgdW5uZWNlc3NhcnkgJy4nIHBhcnRzLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICc8ZGlyPi8uLicgcGFydHMuXG4gKlxuICogQmFzZWQgb24gY29kZSBpbiB0aGUgTm9kZS5qcyAncGF0aCcgY29yZSBtb2R1bGUuXG4gKlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIHVybCB0byBub3JtYWxpemUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhUGF0aCkge1xuICB2YXIgcGF0aCA9IGFQYXRoO1xuICB2YXIgdXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICBpZiAodXJsKSB7XG4gICAgaWYgKCF1cmwucGF0aCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cbiAgICBwYXRoID0gdXJsLnBhdGg7XG4gIH1cbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCk7XG5cbiAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuICBmb3IgKHZhciBwYXJ0LCB1cCA9IDAsIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHBhcnQgPSBwYXJ0c1tpXTtcbiAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXAgPiAwKSB7XG4gICAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYmxhbmsgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuIFRyeWluZyB0byBnb1xuICAgICAgICAvLyBhYm92ZSB0aGUgcm9vdCBpcyBhIG5vLW9wLiBUaGVyZWZvcmUgd2UgY2FuIHJlbW92ZSBhbGwgJy4uJyBwYXJ0c1xuICAgICAgICAvLyBkaXJlY3RseSBhZnRlciB0aGUgcm9vdC5cbiAgICAgICAgcGFydHMuc3BsaWNlKGkgKyAxLCB1cCk7XG4gICAgICAgIHVwID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShpLCAyKTtcbiAgICAgICAgdXAtLTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcblxuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICBwYXRoID0gaXNBYnNvbHV0ZSA/ICcvJyA6ICcuJztcbiAgfVxuXG4gIGlmICh1cmwpIHtcbiAgICB1cmwucGF0aCA9IHBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKHVybCk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcblxuLyoqXG4gKiBKb2lucyB0d28gcGF0aHMvVVJMcy5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIGpvaW5lZCB3aXRoIHRoZSByb290LlxuICpcbiAqIC0gSWYgYVBhdGggaXMgYSBVUkwgb3IgYSBkYXRhIFVSSSwgYVBhdGggaXMgcmV0dXJuZWQsIHVubGVzcyBhUGF0aCBpcyBhXG4gKiAgIHNjaGVtZS1yZWxhdGl2ZSBVUkw6IFRoZW4gdGhlIHNjaGVtZSBvZiBhUm9vdCwgaWYgYW55LCBpcyBwcmVwZW5kZWRcbiAqICAgZmlyc3QuXG4gKiAtIE90aGVyd2lzZSBhUGF0aCBpcyBhIHBhdGguIElmIGFSb290IGlzIGEgVVJMLCB0aGVuIGl0cyBwYXRoIHBvcnRpb25cbiAqICAgaXMgdXBkYXRlZCB3aXRoIHRoZSByZXN1bHQgYW5kIGFSb290IGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhlIHJlc3VsdFxuICogICBpcyByZXR1cm5lZC5cbiAqICAgLSBJZiBhUGF0aCBpcyBhYnNvbHV0ZSwgdGhlIHJlc3VsdCBpcyBhUGF0aC5cbiAqICAgLSBPdGhlcndpc2UgdGhlIHR3byBwYXRocyBhcmUgam9pbmVkIHdpdGggYSBzbGFzaC5cbiAqIC0gSm9pbmluZyBmb3IgZXhhbXBsZSAnaHR0cDovLycgYW5kICd3d3cuZXhhbXBsZS5jb20nIGlzIGFsc28gc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBqb2luKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG4gIGlmIChhUGF0aCA9PT0gXCJcIikge1xuICAgIGFQYXRoID0gXCIuXCI7XG4gIH1cbiAgdmFyIGFQYXRoVXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICB2YXIgYVJvb3RVcmwgPSB1cmxQYXJzZShhUm9vdCk7XG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290ID0gYVJvb3RVcmwucGF0aCB8fCAnLyc7XG4gIH1cblxuICAvLyBgam9pbihmb28sICcvL3d3dy5leGFtcGxlLm9yZycpYFxuICBpZiAoYVBhdGhVcmwgJiYgIWFQYXRoVXJsLnNjaGVtZSkge1xuICAgIGlmIChhUm9vdFVybCkge1xuICAgICAgYVBhdGhVcmwuc2NoZW1lID0gYVJvb3RVcmwuc2NoZW1lO1xuICAgIH1cbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVBhdGhVcmwpO1xuICB9XG5cbiAgaWYgKGFQYXRoVXJsIHx8IGFQYXRoLm1hdGNoKGRhdGFVcmxSZWdleHApKSB7XG4gICAgcmV0dXJuIGFQYXRoO1xuICB9XG5cbiAgLy8gYGpvaW4oJ2h0dHA6Ly8nLCAnd3d3LmV4YW1wbGUuY29tJylgXG4gIGlmIChhUm9vdFVybCAmJiAhYVJvb3RVcmwuaG9zdCAmJiAhYVJvb3RVcmwucGF0aCkge1xuICAgIGFSb290VXJsLmhvc3QgPSBhUGF0aDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG5cbiAgdmFyIGpvaW5lZCA9IGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgPyBhUGF0aFxuICAgIDogbm9ybWFsaXplKGFSb290LnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgYVBhdGgpO1xuXG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290VXJsLnBhdGggPSBqb2luZWQ7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuICByZXR1cm4gam9pbmVkO1xufVxuZXhwb3J0cy5qb2luID0gam9pbjtcblxuZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24gKGFQYXRoKSB7XG4gIHJldHVybiBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJyB8fCAhIWFQYXRoLm1hdGNoKHVybFJlZ2V4cCk7XG59O1xuXG4vKipcbiAqIE1ha2UgYSBwYXRoIHJlbGF0aXZlIHRvIGEgVVJMIG9yIGFub3RoZXIgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIG1hZGUgcmVsYXRpdmUgdG8gYVJvb3QuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0aXZlKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG5cbiAgYVJvb3QgPSBhUm9vdC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgcGF0aCB0byBiZSBhYm92ZSB0aGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBzaW1wbHlcbiAgLy8gY2hlY2tpbmcgd2hldGhlciB0aGUgcm9vdCBpcyBhIHByZWZpeCBvZiB0aGUgcGF0aCB3b24ndCB3b3JrLiBJbnN0ZWFkLCB3ZVxuICAvLyBuZWVkIHRvIHJlbW92ZSBjb21wb25lbnRzIGZyb20gdGhlIHJvb3Qgb25lIGJ5IG9uZSwgdW50aWwgZWl0aGVyIHdlIGZpbmRcbiAgLy8gYSBwcmVmaXggdGhhdCBmaXRzLCBvciB3ZSBydW4gb3V0IG9mIGNvbXBvbmVudHMgdG8gcmVtb3ZlLlxuICB2YXIgbGV2ZWwgPSAwO1xuICB3aGlsZSAoYVBhdGguaW5kZXhPZihhUm9vdCArICcvJykgIT09IDApIHtcbiAgICB2YXIgaW5kZXggPSBhUm9vdC5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBvbmx5IHBhcnQgb2YgdGhlIHJvb3QgdGhhdCBpcyBsZWZ0IGlzIHRoZSBzY2hlbWUgKGkuZS4gaHR0cDovLyxcbiAgICAvLyBmaWxlOi8vLywgZXRjLiksIG9uZSBvciBtb3JlIHNsYXNoZXMgKC8pLCBvciBzaW1wbHkgbm90aGluZyBhdCBhbGwsIHdlXG4gICAgLy8gaGF2ZSBleGhhdXN0ZWQgYWxsIGNvbXBvbmVudHMsIHNvIHRoZSBwYXRoIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcm9vdC5cbiAgICBhUm9vdCA9IGFSb290LnNsaWNlKDAsIGluZGV4KTtcbiAgICBpZiAoYVJvb3QubWF0Y2goL14oW15cXC9dKzpcXC8pP1xcLyokLykpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICArK2xldmVsO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGFkZCBhIFwiLi4vXCIgZm9yIGVhY2ggY29tcG9uZW50IHdlIHJlbW92ZWQgZnJvbSB0aGUgcm9vdC5cbiAgcmV0dXJuIEFycmF5KGxldmVsICsgMSkuam9pbihcIi4uL1wiKSArIGFQYXRoLnN1YnN0cihhUm9vdC5sZW5ndGggKyAxKTtcbn1cbmV4cG9ydHMucmVsYXRpdmUgPSByZWxhdGl2ZTtcblxudmFyIHN1cHBvcnRzTnVsbFByb3RvID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAhKCdfX3Byb3RvX18nIGluIG9iaik7XG59KCkpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSAocykge1xuICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBCZWNhdXNlIGJlaGF2aW9yIGdvZXMgd2Fja3kgd2hlbiB5b3Ugc2V0IGBfX3Byb3RvX19gIG9uIG9iamVjdHMsIHdlXG4gKiBoYXZlIHRvIHByZWZpeCBhbGwgdGhlIHN0cmluZ3MgaW4gb3VyIHNldCB3aXRoIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXIuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvcHVsbC8zMSBhbmRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzMwXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbmZ1bmN0aW9uIHRvU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gJyQnICsgYVN0cjtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy50b1NldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiB0b1NldFN0cmluZztcblxuZnVuY3Rpb24gZnJvbVNldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuIGFTdHIuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMuZnJvbVNldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiBmcm9tU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBpc1Byb3RvU3RyaW5nKHMpIHtcbiAgaWYgKCFzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IHMubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPCA5IC8qIFwiX19wcm90b19fXCIubGVuZ3RoICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHMuY2hhckNvZGVBdChsZW5ndGggLSAxKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDIpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMykgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA0KSAhPT0gMTE2IC8qICd0JyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDUpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNikgIT09IDExNCAvKiAncicgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA3KSAhPT0gMTEyIC8qICdwJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDgpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOSkgIT09IDk1ICAvKiAnXycgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gbGVuZ3RoIC0gMTA7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHMuY2hhckNvZGVBdChpKSAhPT0gMzYgLyogJyQnICovKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiwgYnV0IGRpZmZlcmVudCBnZW5lcmF0ZWRcbiAqIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhIG1hcHBpbmcgd2l0aCBhXG4gKiBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyhtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGRlZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBpbmRpY2VzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICogbWFwcGluZyB3aXRoIGEgc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQ7XG5cbmZ1bmN0aW9uIHN0cmNtcChhU3RyMSwgYVN0cjIpIHtcbiAgaWYgKGFTdHIxID09PSBhU3RyMikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKGFTdHIxID4gYVN0cjIpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggaW5mbGF0ZWQgc291cmNlIGFuZCBuYW1lIHN0cmluZ3Mgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gc3RyY21wKG1hcHBpbmdBLnNvdXJjZSwgbWFwcGluZ0Iuc291cmNlKTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gc3RyY21wKG1hcHBpbmdBLm5hbWUsIG1hcHBpbmdCLm5hbWUpO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2stZ2VuZXJhdG9yJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tHZW5lcmF0b3IgPSBmYWN0b3J5KHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTdGFja0ZyYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFja3RyYWNlOiBmdW5jdGlvbiBTdGFja0dlbmVyYXRvciQkYmFja3RyYWNlKG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICAgICAgdmFyIG1heFN0YWNrU2l6ZSA9IDEwO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcHRzLm1heFN0YWNrU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBtYXhTdGFja1NpemUgPSBvcHRzLm1heFN0YWNrU2l6ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGN1cnIgPSBhcmd1bWVudHMuY2FsbGVlO1xuICAgICAgICAgICAgd2hpbGUgKGN1cnIgJiYgc3RhY2subGVuZ3RoIDwgbWF4U3RhY2tTaXplKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxsb3cgVjggb3B0aW1pemF0aW9uc1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGN1cnJbJ2FyZ3VtZW50cyddLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBjdXJyWydhcmd1bWVudHMnXVtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKC9mdW5jdGlvbig/OlxccysoW1xcdyRdKykpK1xccypcXCgvLnRlc3QoY3Vyci50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ldyBTdGFja0ZyYW1lKHtmdW5jdGlvbk5hbWU6IFJlZ0V4cC4kMSB8fCB1bmRlZmluZWQsIGFyZ3M6IGFyZ3N9KSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh7YXJnczogYXJnc30pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci5jYWxsZXI7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2tmcmFtZScsIFtdLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrRnJhbWUgPSBmYWN0b3J5KCk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbigpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgZnVuY3Rpb24gX2lzTnVtYmVyKG4pIHtcbiAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfY2FwaXRhbGl6ZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2dldHRlcihwKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3BdO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBib29sZWFuUHJvcHMgPSBbJ2lzQ29uc3RydWN0b3InLCAnaXNFdmFsJywgJ2lzTmF0aXZlJywgJ2lzVG9wbGV2ZWwnXTtcbiAgICB2YXIgbnVtZXJpY1Byb3BzID0gWydjb2x1bW5OdW1iZXInLCAnbGluZU51bWJlciddO1xuICAgIHZhciBzdHJpbmdQcm9wcyA9IFsnZmlsZU5hbWUnLCAnZnVuY3Rpb25OYW1lJywgJ3NvdXJjZSddO1xuICAgIHZhciBhcnJheVByb3BzID0gWydhcmdzJ107XG5cbiAgICB2YXIgcHJvcHMgPSBib29sZWFuUHJvcHMuY29uY2F0KG51bWVyaWNQcm9wcywgc3RyaW5nUHJvcHMsIGFycmF5UHJvcHMpO1xuXG4gICAgZnVuY3Rpb24gU3RhY2tGcmFtZShvYmopIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcHNbaV0pICYmIG9ialtwcm9wc1tpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzWydzZXQnICsgX2NhcGl0YWxpemUocHJvcHNbaV0pXShvYmpbcHJvcHNbaV1dKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBTdGFja0ZyYW1lLnByb3RvdHlwZSA9IHtcbiAgICAgICAgZ2V0QXJnczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmdzO1xuICAgICAgICB9LFxuICAgICAgICBzZXRBcmdzOiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJncyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFyZ3MgPSB2O1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldEV2YWxPcmlnaW46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZhbE9yaWdpbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0RXZhbE9yaWdpbjogZnVuY3Rpb24odikge1xuICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsT3JpZ2luID0gdjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZhbE9yaWdpbiA9IG5ldyBTdGFja0ZyYW1lKHYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFdmFsIE9yaWdpbiBtdXN0IGJlIGFuIE9iamVjdCBvciBTdGFja0ZyYW1lJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2V0RnVuY3Rpb25OYW1lKCkgfHwgJ3thbm9ueW1vdXN9JztcbiAgICAgICAgICAgIHZhciBhcmdzID0gJygnICsgKHRoaXMuZ2V0QXJncygpIHx8IFtdKS5qb2luKCcsJykgKyAnKSc7XG4gICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSB0aGlzLmdldEZpbGVOYW1lKCkgPyAoJ0AnICsgdGhpcy5nZXRGaWxlTmFtZSgpKSA6ICcnO1xuICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBfaXNOdW1iZXIodGhpcy5nZXRMaW5lTnVtYmVyKCkpID8gKCc6JyArIHRoaXMuZ2V0TGluZU51bWJlcigpKSA6ICcnO1xuICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IF9pc051bWJlcih0aGlzLmdldENvbHVtbk51bWJlcigpKSA/ICgnOicgKyB0aGlzLmdldENvbHVtbk51bWJlcigpKSA6ICcnO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZSArIGFyZ3MgKyBmaWxlTmFtZSArIGxpbmVOdW1iZXIgKyBjb2x1bW5OdW1iZXI7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib29sZWFuUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IF9nZXR0ZXIoYm9vbGVhblByb3BzW2ldKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBCb29sZWFuKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoYm9vbGVhblByb3BzW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bWVyaWNQcm9wcy5sZW5ndGg7IGorKykge1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gX2dldHRlcihudW1lcmljUHJvcHNbal0pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gKGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfaXNOdW1iZXIodikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihwICsgJyBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBOdW1iZXIodik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShudW1lcmljUHJvcHNbal0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3RyaW5nUHJvcHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShzdHJpbmdQcm9wc1trXSldID0gX2dldHRlcihzdHJpbmdQcm9wc1trXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUoc3RyaW5nUHJvcHNba10pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBTdHJpbmcodik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShzdHJpbmdQcm9wc1trXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0YWNrRnJhbWU7XG59KSk7XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFja3RyYWNlLWdwcycsIFsnc291cmNlLW1hcCcsICdzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyJyksIHJlcXVpcmUoJ3N0YWNrZnJhbWUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja1RyYWNlR1BTID0gZmFjdG9yeShyb290LlNvdXJjZU1hcCB8fCByb290LnNvdXJjZU1hcCwgcm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uKFNvdXJjZU1hcCwgU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIE1ha2UgYSBYLURvbWFpbiByZXF1ZXN0IHRvIHVybCBhbmQgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IHdpdGggcmVzcG9uc2UgdGV4dCBpZiBmdWxmaWxsZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfeGRyKHVybCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICByZXEub3BlbignZ2V0JywgdXJsKTtcbiAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIG9ucmVhZHlzdGF0ZWNoYW5nZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChyZXEuc3RhdHVzID49IDIwMCAmJiByZXEuc3RhdHVzIDwgMzAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKHVybC5zdWJzdHIoMCwgNykgPT09ICdmaWxlOi8vJyAmJiByZXEucmVzcG9uc2VUZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0hUVFAgc3RhdHVzOiAnICsgcmVxLnN0YXR1cyArICcgcmV0cmlldmluZyAnICsgdXJsKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVxLnNlbmQoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgQmFzZTY0LWVuY29kZWQgc3RyaW5nIGludG8gaXRzIG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uLlxuICAgICAqIFVzZWQgZm9yIGlubGluZSBzb3VyY2VtYXBzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGI2NHN0ciBCYXNlLTY0IGVuY29kZWQgc3RyaW5nXG4gICAgICogQHJldHVybnMge1N0cmluZ30gb3JpZ2luYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NC1lbmNvZGVkIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfYXRvYihiNjRzdHIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5hdG9iKSB7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93LmF0b2IoYjY0c3RyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3VwcGx5IGEgcG9seWZpbGwgZm9yIHdpbmRvdy5hdG9iIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9wYXJzZUpzb24oc3RyaW5nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgSlNPTiAhPT0gJ3VuZGVmaW5lZCcgJiYgSlNPTi5wYXJzZSkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3VwcGx5IGEgcG9seWZpbGwgZm9yIEpTT04ucGFyc2UgaW4gdGhpcyBlbnZpcm9ubWVudCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRGdW5jdGlvbk5hbWUoc291cmNlLCBsaW5lTnVtYmVyLyosIGNvbHVtbk51bWJlciovKSB7XG4gICAgICAgIHZhciBzeW50YXhlcyA9IFtcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGZ1bmN0aW9uICh7YXJnc30pIFRPRE8gYXJncyBjYXB0dXJlXG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypmdW5jdGlvblxcYi8sXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiB7bmFtZX0oe2FyZ3N9KSBtWzFdPW5hbWUgbVsyXT1hcmdzXG4gICAgICAgICAgICAvZnVuY3Rpb25cXHMrKFteKCdcImBdKj8pXFxzKlxcKChbXildKilcXCkvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gZXZhbCgpXG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccyooPzpldmFsfG5ldyBGdW5jdGlvbilcXGIvLFxuICAgICAgICAgICAgLy8gZm5fbmFtZSgpIHtcbiAgICAgICAgICAgIC9cXGIoPyEoPzppZnxmb3J8c3dpdGNofHdoaWxlfHdpdGh8Y2F0Y2gpXFxiKSg/Oig/OnN0YXRpYylcXHMrKT8oXFxTKylcXHMqXFwoLio/XFwpXFxzKlxcey8sXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSAoKSA9PiB7XG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypcXCguKj9cXClcXHMqPT4vXG4gICAgICAgIF07XG4gICAgICAgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgnXFxuJyk7XG5cbiAgICAgICAgLy8gV2FsayBiYWNrd2FyZHMgaW4gdGhlIHNvdXJjZSBsaW5lcyB1bnRpbCB3ZSBmaW5kIHRoZSBsaW5lIHdoaWNoIG1hdGNoZXMgb25lIG9mIHRoZSBwYXR0ZXJucyBhYm92ZVxuICAgICAgICB2YXIgY29kZSA9ICcnO1xuICAgICAgICB2YXIgbWF4TGluZXMgPSBNYXRoLm1pbihsaW5lTnVtYmVyLCAyMCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4TGluZXM7ICsraSkge1xuICAgICAgICAgICAgLy8gbGluZU5vIGlzIDEtYmFzZWQsIHNvdXJjZVtdIGlzIDAtYmFzZWRcbiAgICAgICAgICAgIHZhciBsaW5lID0gbGluZXNbbGluZU51bWJlciAtIGkgLSAxXTtcbiAgICAgICAgICAgIHZhciBjb21tZW50UG9zID0gbGluZS5pbmRleE9mKCcvLycpO1xuICAgICAgICAgICAgaWYgKGNvbW1lbnRQb3MgPj0gMCkge1xuICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cigwLCBjb21tZW50UG9zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gbGluZSArIGNvZGU7XG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IHN5bnRheGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtID0gc3ludGF4ZXNbaW5kZXhdLmV4ZWMoY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG1bMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtWzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Vuc3VyZVN1cHBvcnRlZEVudmlyb25tZW50KCkge1xuICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY29uc3VtZSBzb3VyY2UgbWFwcyBpbiBvbGRlciBicm93c2VycycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGFja2ZyYW1lICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gU3RhY2tGcmFtZSBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUuZmlsZU5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBmaWxlIG5hbWUgaXMgbm90IGEgU3RyaW5nJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUubGluZU51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciAlIDEgIT09IDAgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGxpbmUgbnVtYmVyIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGNvbHVtbiBudW1iZXIgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSkge1xuICAgICAgICB2YXIgc291cmNlTWFwcGluZ1VybFJlZ0V4cCA9IC9cXC9cXC9bI0BdID9zb3VyY2VNYXBwaW5nVVJMPShbXlxccydcIl0rKVxccyokL21nO1xuICAgICAgICB2YXIgbGFzdFNvdXJjZU1hcHBpbmdVcmw7XG4gICAgICAgIHZhciBtYXRjaFNvdXJjZU1hcHBpbmdVcmw7XG4gICAgICAgIHdoaWxlIChtYXRjaFNvdXJjZU1hcHBpbmdVcmwgPSBzb3VyY2VNYXBwaW5nVXJsUmVnRXhwLmV4ZWMoc291cmNlKSkgeyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgICAgIGxhc3RTb3VyY2VNYXBwaW5nVXJsID0gbWF0Y2hTb3VyY2VNYXBwaW5nVXJsWzFdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXN0U291cmNlTWFwcGluZ1VybCkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzb3VyY2VNYXBwaW5nVVJMIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwU291cmNlKHN0YWNrZnJhbWUsIHNvdXJjZU1hcENvbnN1bWVyLCBzb3VyY2VDYWNoZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgbG9jID0gc291cmNlTWFwQ29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgICAgICAgICAgbGluZTogc3RhY2tmcmFtZS5saW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAobG9jLnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIC8vIGNhY2hlIG1hcHBlZCBzb3VyY2VzXG4gICAgICAgICAgICAgICAgdmFyIG1hcHBlZFNvdXJjZSA9IHNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IobG9jLnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hcHBlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VDYWNoZVtsb2Muc291cmNlXSA9IG1hcHBlZFNvdXJjZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAvLyBnaXZlbiBzdGFja2ZyYW1lIGFuZCBzb3VyY2UgbG9jYXRpb24sIHVwZGF0ZSBzdGFja2ZyYW1lXG4gICAgICAgICAgICAgICAgICAgIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbG9jLm5hbWUgfHwgc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBzdGFja2ZyYW1lLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbG9jLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvYy5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2MuY29sdW1uXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IGdldCBvcmlnaW5hbCBzb3VyY2UgZm9yIGdpdmVuIHN0YWNrZnJhbWUgYW5kIHNvdXJjZSBtYXAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICogICAgICBvcHRzLnNvdXJjZUNhY2hlID0ge3VybDogXCJTb3VyY2UgU3RyaW5nXCJ9ID0+IHByZWxvYWQgc291cmNlIGNhY2hlXG4gICAgICogICAgICBvcHRzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgPSB7L3BhdGgvZmlsZS5qcy5tYXA6IFNvdXJjZU1hcENvbnN1bWVyfVxuICAgICAqICAgICAgb3B0cy5vZmZsaW5lID0gVHJ1ZSB0byBwcmV2ZW50IG5ldHdvcmsgcmVxdWVzdHMuXG4gICAgICogICAgICAgICAgICAgIEJlc3QgZWZmb3J0IHdpdGhvdXQgc291cmNlcyBvciBzb3VyY2UgbWFwcy5cbiAgICAgKiAgICAgIG9wdHMuYWpheCA9IFByb21pc2UgcmV0dXJuaW5nIGZ1bmN0aW9uIHRvIG1ha2UgWC1Eb21haW4gcmVxdWVzdHNcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyhvcHRzKSB7XG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdGFja1RyYWNlR1BTKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja1RyYWNlR1BTKG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuc291cmNlQ2FjaGUgPSBvcHRzLnNvdXJjZUNhY2hlIHx8IHt9O1xuICAgICAgICB0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgPSBvcHRzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgfHwge307XG5cbiAgICAgICAgdGhpcy5hamF4ID0gb3B0cy5hamF4IHx8IF94ZHI7XG5cbiAgICAgICAgdGhpcy5fYXRvYiA9IG9wdHMuYXRvYiB8fCBfYXRvYjtcblxuICAgICAgICB0aGlzLl9nZXQgPSBmdW5jdGlvbiBfZ2V0KGxvY2F0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzRGF0YVVybCA9IGxvY2F0aW9uLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRzLm9mZmxpbmUgJiYgIWlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdDYW5ub3QgbWFrZSBuZXR3b3JrIHJlcXVlc3RzIGluIG9mZmxpbmUgbW9kZScpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNEYXRhVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIFVSTHMgY2FuIGhhdmUgcGFyYW1ldGVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VwcG9ydGVkRW5jb2RpbmdSZWdleHAgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9eZGF0YTphcHBsaWNhdGlvblxcL2pzb247KFtcXHc9OlwiLV0rOykqYmFzZTY0LC87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsb2NhdGlvbi5tYXRjaChzdXBwb3J0ZWRFbmNvZGluZ1JlZ2V4cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwU3RhcnQgPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kZWRTb3VyY2UgPSBsb2NhdGlvbi5zdWJzdHIoc291cmNlTWFwU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLl9hdG9iKGVuY29kZWRTb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0gc291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVGhlIGVuY29kaW5nIG9mIHRoZSBpbmxpbmUgc291cmNlbWFwIGlzIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGhyUHJvbWlzZSA9IHRoaXMuYWpheChsb2NhdGlvbiwge21ldGhvZDogJ2dldCd9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhY2hlIHRoZSBQcm9taXNlIHRvIHByZXZlbnQgZHVwbGljYXRlIGluLWZsaWdodCByZXF1ZXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0gPSB4aHJQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyUHJvbWlzZS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGluZyBTb3VyY2VNYXBDb25zdW1lcnMgaXMgZXhwZW5zaXZlLCBzbyB0aGlzIHdyYXBzIHRoZSBjcmVhdGlvbiBvZiBhXG4gICAgICAgICAqIFNvdXJjZU1hcENvbnN1bWVyIGluIGEgcGVyLWluc3RhbmNlIGNhY2hlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc291cmNlTWFwcGluZ1VSTCA9IFVSTCB0byBmZXRjaCBzb3VyY2UgbWFwIGZyb21cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGRlZmF1bHRTb3VyY2VSb290ID0gRGVmYXVsdCBzb3VyY2Ugcm9vdCBmb3Igc291cmNlIG1hcCBpZiB1bmRlZmluZWRcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgYSBTb3VyY2VNYXBDb25zdW1lclxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fZ2V0U291cmNlTWFwQ29uc3VtZXIgPSBmdW5jdGlvbiBfZ2V0U291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwcGluZ1VSTCwgZGVmYXVsdFNvdXJjZVJvb3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwQ29uc3VtZXJQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KHNvdXJjZU1hcHBpbmdVUkwpLnRoZW4oZnVuY3Rpb24oc291cmNlTWFwU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VNYXBTb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcFNvdXJjZSA9IF9wYXJzZUpzb24oc291cmNlTWFwU291cmNlLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VNYXBTb3VyY2Uuc291cmNlUm9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwU291cmNlLnNvdXJjZVJvb3QgPSBkZWZhdWx0U291cmNlUm9vdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBTb3VyY2VNYXAuU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwU291cmNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGVbc291cmNlTWFwcGluZ1VSTF0gPSBzb3VyY2VNYXBDb25zdW1lclByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc291cmNlTWFwQ29uc3VtZXJQcm9taXNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIFN0YWNrRnJhbWUsIGVuaGFuY2UgZnVuY3Rpb24gbmFtZSBhbmQgdXNlIHNvdXJjZSBtYXBzIGZvciBhXG4gICAgICAgICAqIGJldHRlciBTdGFja0ZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWUgb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggd2l0aCBzb3VyY2UtbWFwcGVkIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGlucG9pbnQgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRwaW5wb2ludChzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKS50aGVuKGZ1bmN0aW9uKG1hcHBlZFN0YWNrRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lKG1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlLCByZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIFsnY2F0Y2gnXShyZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCByZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBndWVzcyBmdW5jdGlvbiBuYW1lIGZyb20gbG9jYXRpb24gaW5mb3JtYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbmRGdW5jdGlvbk5hbWUgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRmaW5kRnVuY3Rpb25OYW1lKHN0YWNrZnJhbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBfZW5zdXJlU3RhY2tGcmFtZUlzTGVnaXQoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0KHN0YWNrZnJhbWUuZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24gZ2V0U291cmNlQ2FsbGJhY2soc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gc3RhY2tmcmFtZS5saW5lTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uTnVtYmVyID0gc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBndWVzc2VkRnVuY3Rpb25OYW1lID0gX2ZpbmRGdW5jdGlvbk5hbWUoc291cmNlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHJlcGxhY2UgZnVuY3Rpb25OYW1lIGlmIHdlIGZvdW5kIHNvbWV0aGluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3Vlc3NlZEZ1bmN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBndWVzc2VkRnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHN0YWNrZnJhbWUuYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogc3RhY2tmcmFtZS5maWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBzZWVrIHNvdXJjZS1tYXBwZWQgbG9jYXRpb24gYW5kIHJldHVybiBuZXcgZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZ2V0TWFwcGVkTG9jYXRpb24gPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRnZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN1cHBvcnRlZEVudmlyb25tZW50KCk7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZTtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBzdGFja2ZyYW1lLmZpbGVOYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChmaWxlTmFtZSkudGhlbihmdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmdVUkwgPSBfZmluZFNvdXJjZU1hcHBpbmdVUkwoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzRGF0YVVybCA9IHNvdXJjZU1hcHBpbmdVUkwuc3Vic3RyKDAsIDUpID09PSAnZGF0YTonO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdFNvdXJjZVJvb3QgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgZmlsZU5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VNYXBwaW5nVVJMWzBdICE9PSAnLycgJiYgIWlzRGF0YVVybCAmJiAhKC9eaHR0cHM/OlxcL1xcL3xeXFwvXFwvL2kpLnRlc3Qoc291cmNlTWFwcGluZ1VSTCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcHBpbmdVUkwgPSBkZWZhdWx0U291cmNlUm9vdCArIHNvdXJjZU1hcHBpbmdVUkw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwcGluZ1VSTCwgZGVmYXVsdFNvdXJjZVJvb3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihzb3VyY2VNYXBDb25zdW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZXh0cmFjdExvY2F0aW9uSW5mb0Zyb21Tb3VyY2VNYXBTb3VyY2Uoc3RhY2tmcmFtZSwgc291cmNlTWFwQ29uc3VtZXIsIHNvdXJjZUNhY2hlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVsnY2F0Y2gnXShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZScsIFsnZXJyb3Itc3RhY2stcGFyc2VyJywgJ3N0YWNrLWdlbmVyYXRvcicsICdzdGFja3RyYWNlLWdwcyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnZXJyb3Itc3RhY2stcGFyc2VyJyksIHJlcXVpcmUoJ3N0YWNrLWdlbmVyYXRvcicpLCByZXF1aXJlKCdzdGFja3RyYWNlLWdwcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2UgPSBmYWN0b3J5KHJvb3QuRXJyb3JTdGFja1BhcnNlciwgcm9vdC5TdGFja0dlbmVyYXRvciwgcm9vdC5TdGFja1RyYWNlR1BTKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIFN0YWNrVHJhY2UoRXJyb3JTdGFja1BhcnNlciwgU3RhY2tHZW5lcmF0b3IsIFN0YWNrVHJhY2VHUFMpIHtcbiAgICB2YXIgX29wdGlvbnMgPSB7XG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBzdGFja2ZyYW1lcyBmb3IgdGhpcyBsaWJyYXJ5IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2UkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignRXJyb3JTdGFja1BhcnNlciQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlR1BTJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrR2VuZXJhdG9yJCQnKSA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZUNhY2hlOiB7fVxuICAgIH07XG5cbiAgICB2YXIgX2dlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRHZW5lcmF0ZUVycm9yKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRXJyb3IgbXVzdCBiZSB0aHJvd24gdG8gZ2V0IHN0YWNrIGluIElFXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdlIDIgZ2l2ZW4gT2JqZWN0cy4gSWYgYSBjb25mbGljdCBvY2N1cnMgdGhlIHNlY29uZCBvYmplY3Qgd2lucy5cbiAgICAgKiBEb2VzIG5vdCBkbyBkZWVwIG1lcmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaXJzdCBiYXNlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWNvbmQgb3ZlcnJpZGVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gbWVyZ2VkIGZpcnN0IGFuZCBzZWNvbmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tZXJnZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcblxuICAgICAgICBbZmlyc3QsIHNlY29uZF0uZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVyci5zdGFjayB8fCBlcnJbJ29wZXJhI3NvdXJjZWxvYyddO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXJlZChzdGFja2ZyYW1lcywgZmlsdGVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXMuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrZnJhbWVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0KG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikgPyB0aGlzLmZyb21FcnJvcihlcnIsIG9wdHMpIDogdGhpcy5nZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgYmFja3RyYWNlIGZyb20gaW52b2NhdGlvbiBwb2ludC5cbiAgICAgICAgICogSU1QT1JUQU5UOiBEb2VzIG5vdCBoYW5kbGUgc291cmNlIG1hcHMgb3IgZ3Vlc3MgZnVuY3Rpb24gbmFtZXMhXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0U3luYzogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0U3luYyhvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyKSA6IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyZWQoc3RhY2ssIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3Igb2JqZWN0LCBwYXJzZSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmb3IgQXJyYXlbU3RhY2tGcmFtZX1cbiAgICAgICAgICovXG4gICAgICAgIGZyb21FcnJvcjogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZnJvbUVycm9yKGVycm9yLCBvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBncHMgPSBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrZnJhbWVzID0gX2ZpbHRlcmVkKEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyb3IpLCBvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShQcm9taXNlLmFsbChzdGFja2ZyYW1lcy5tYXAoZnVuY3Rpb24oc2YpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVPcmlnaW5hbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ3BzLnBpbnBvaW50KHNmKS50aGVuKHJlc29sdmUsIHJlc29sdmVPcmlnaW5hbClbJ2NhdGNoJ10ocmVzb2x2ZU9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBTdGFja0dlbmVyYXRvciB0byBnZW5lcmF0ZSBhIGJhY2t0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IG9mIEFycmF5W1N0YWNrRnJhbWVdXG4gICAgICAgICAqL1xuICAgICAgICBnZW5lcmF0ZUFydGlmaWNpYWxseTogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2VuZXJhdGVBcnRpZmljaWFsbHkob3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgc3RhY2tGcmFtZXMgPSBTdGFja0dlbmVyYXRvci5iYWNrdHJhY2Uob3B0cyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgc3RhY2tGcmFtZXMgPSBzdGFja0ZyYW1lcy5maWx0ZXIob3B0cy5maWx0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGFja0ZyYW1lcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24sIHdyYXAgaXQgc3VjaCB0aGF0IGludm9jYXRpb25zIHRyaWdnZXIgYSBjYWxsYmFjayB0aGF0XG4gICAgICAgICAqIGlzIGNhbGxlZCB3aXRoIGEgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGluc3RydW1lbnRlZFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdpdGggYSBzdGFjayB0cmFjZSBvbiBpbnZvY2F0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVycmJhY2sgb3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGVycm9yIGlmIHVuYWJsZSB0byBnZXQgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIG9wdGlvbmFsIGNvbnRleHQgb2JqZWN0IChlLmcuIHdpbmRvdylcbiAgICAgICAgICovXG4gICAgICAgIGluc3RydW1lbnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnQoZm4sIGNhbGxiYWNrLCBlcnJiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBpbnN0cnVtZW50ZWQsIHJldHVybiBnaXZlbiBGdW5jdGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGluc3RydW1lbnRlZCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnRlZCgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCgpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZyB8fCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb21FcnJvcihlKS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrKVsnY2F0Y2gnXShlcnJiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGluc3RydW1lbnRlZC5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID0gZm47XG5cbiAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50ZWQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBpbnN0cnVtZW50ZWQsXG4gICAgICAgICAqIHJldmVydCB0aGUgZnVuY3Rpb24gdG8gaXQncyBvcmlnaW5hbCAobm9uLWluc3RydW1lbnRlZCkgc3RhdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGRlLWluc3RydW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGRlaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZGVpbnN0cnVtZW50KGZuKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGUtaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIG5vdCBpbnN0cnVtZW50ZWQsIHJldHVybiBvcmlnaW5hbFxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3IgbWVzc2FnZSBhbmQgQXJyYXkgb2YgU3RhY2tGcmFtZXMsIHNlcmlhbGl6ZSBhbmQgUE9TVCB0byBnaXZlbiBVUkwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrZnJhbWVzXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVycm9yTXNnXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0T3B0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgcmVwb3J0OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRyZXBvcnQoc3RhY2tmcmFtZXMsIHVybCwgZXJyb3JNc2csIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPj0gMjAwICYmIHJlcS5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdQT1NUIHRvICcgKyB1cmwgKyAnIGZhaWxlZCB3aXRoIHN0YXR1czogJyArIHJlcS5zdGF0dXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVxLm9wZW4oJ3Bvc3QnLCB1cmwpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHJlcXVlc3QgaGVhZGVyc1xuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucyAmJiB0eXBlb2YgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgaGVhZGVyc1toZWFkZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZXBvcnRQYXlsb2FkID0ge3N0YWNrOiBzdGFja2ZyYW1lc307XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQgJiYgZXJyb3JNc2cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0UGF5bG9hZC5tZXNzYWdlID0gZXJyb3JNc2c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVwb3J0UGF5bG9hZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIl19 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9zdGFjay1nZW5lcmF0b3Ivc3RhY2stZ2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrZnJhbWUvc3RhY2tmcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja3RyYWNlLWdwcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYXJyYXktc2V0LmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iYXNlNjQtdmxxLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iYXNlNjQuanMiLCJub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1ncHMvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2JpbmFyeS1zZWFyY2guanMiLCJub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1ncHMvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3F1aWNrLXNvcnQuanMiLCJub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1ncHMvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAtY29uc3VtZXIuanMiLCJub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1ncHMvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3V0aWwuanMiLCJub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1ncHMvc3RhY2t0cmFjZS1ncHMuanMiLCJzdGFja3RyYWNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDamFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcFZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdlcnJvci1zdGFjay1wYXJzZXInLCBbJ3N0YWNrZnJhbWUnXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ3N0YWNrZnJhbWUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5FcnJvclN0YWNrUGFyc2VyID0gZmFjdG9yeShyb290LlN0YWNrRnJhbWUpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlcihTdGFja0ZyYW1lKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIEZJUkVGT1hfU0FGQVJJX1NUQUNLX1JFR0VYUCA9IC8oXnxAKVxcUytcXDpcXGQrLztcbiAgICB2YXIgQ0hST01FX0lFX1NUQUNLX1JFR0VYUCA9IC9eXFxzKmF0IC4qKFxcUytcXDpcXGQrfFxcKG5hdGl2ZVxcKSkvbTtcbiAgICB2YXIgU0FGQVJJX05BVElWRV9DT0RFX1JFR0VYUCA9IC9eKGV2YWxAKT8oXFxbbmF0aXZlIGNvZGVcXF0pPyQvO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGFuIEVycm9yIG9iamVjdCwgZXh0cmFjdCB0aGUgbW9zdCBpbmZvcm1hdGlvbiBmcm9tIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IG9mIFN0YWNrRnJhbWVzXG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2UoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3Iuc3RhY2t0cmFjZSAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGVycm9yWydvcGVyYSNzb3VyY2Vsb2MnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhY2sgJiYgZXJyb3Iuc3RhY2subWF0Y2goQ0hST01FX0lFX1NUQUNLX1JFR0VYUCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVY4T3JJRShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VGRk9yU2FmYXJpKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGFyc2UgZ2l2ZW4gRXJyb3Igb2JqZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gU2VwYXJhdGUgbGluZSBhbmQgY29sdW1uIG51bWJlcnMgZnJvbSBhIHN0cmluZyBvZiB0aGUgZm9ybTogKFVSSTpMaW5lOkNvbHVtbilcbiAgICAgICAgZXh0cmFjdExvY2F0aW9uOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRleHRyYWN0TG9jYXRpb24odXJsTGlrZSkge1xuICAgICAgICAgICAgLy8gRmFpbC1mYXN0IGJ1dCByZXR1cm4gbG9jYXRpb25zIGxpa2UgXCIobmF0aXZlKVwiXG4gICAgICAgICAgICBpZiAodXJsTGlrZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt1cmxMaWtlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJlZ0V4cCA9IC8oLis/KSg/OlxcOihcXGQrKSk/KD86XFw6KFxcZCspKT8kLztcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IHJlZ0V4cC5leGVjKHVybExpa2UucmVwbGFjZSgvW1xcKFxcKV0vZywgJycpKTtcbiAgICAgICAgICAgIHJldHVybiBbcGFydHNbMV0sIHBhcnRzWzJdIHx8IHVuZGVmaW5lZCwgcGFydHNbM10gfHwgdW5kZWZpbmVkXTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZVY4T3JJRTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VWOE9ySUUoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIWxpbmUubWF0Y2goQ0hST01FX0lFX1NUQUNLX1JFR0VYUCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignKGV2YWwgJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IGV2YWwgaW5mb3JtYXRpb24gdW50aWwgd2UgaW1wbGVtZW50IHN0YWNrdHJhY2UuanMvc3RhY2tmcmFtZSM4XG4gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoL2V2YWwgY29kZS9nLCAnZXZhbCcpLnJlcGxhY2UoLyhcXChldmFsIGF0IFteXFwoKV0qKXwoXFwpXFwsLiokKS9nLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBsaW5lLnJlcGxhY2UoL15cXHMrLywgJycpLnJlcGxhY2UoL1xcKGV2YWwgY29kZS9nLCAnKCcpLnNwbGl0KC9cXHMrLykuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbih0b2tlbnMucG9wKCkpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0b2tlbnMuam9pbignICcpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBbJ2V2YWwnLCAnPGFub255bW91cz4nXS5pbmRleE9mKGxvY2F0aW9uUGFydHNbMF0pID4gLTEgPyB1bmRlZmluZWQgOiBsb2NhdGlvblBhcnRzWzBdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlRkZPclNhZmFyaTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VGRk9yU2FmYXJpKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIWxpbmUubWF0Y2goU0FGQVJJX05BVElWRV9DT0RFX1JFR0VYUCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSBldmFsIGluZm9ybWF0aW9uIHVudGlsIHdlIGltcGxlbWVudCBzdGFja3RyYWNlLmpzL3N0YWNrZnJhbWUjOFxuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJyA+IGV2YWwnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoLyBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsXFw6XFxkK1xcOlxcZCsvZywgJzokMScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJ0AnKSA9PT0gLTEgJiYgbGluZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyaSBldmFsIGZyYW1lcyBvbmx5IGhhdmUgZnVuY3Rpb24gbmFtZXMgYW5kIG5vdGhpbmcgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBsaW5lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWVSZWdleCA9IC8oKC4qXCIuK1wiW15AXSopP1teQF0qKSg/OkApLztcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBsaW5lLm1hdGNoKGZ1bmN0aW9uTmFtZVJlZ2V4KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1hdGNoZXMgJiYgbWF0Y2hlc1sxXSA/IG1hdGNoZXNbMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24obGluZS5yZXBsYWNlKGZ1bmN0aW9uTmFtZVJlZ2V4LCAnJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhKGUpIHtcbiAgICAgICAgICAgIGlmICghZS5zdGFja3RyYWNlIHx8IChlLm1lc3NhZ2UuaW5kZXhPZignXFxuJykgPiAtMSAmJlxuICAgICAgICAgICAgICAgIGUubWVzc2FnZS5zcGxpdCgnXFxuJykubGVuZ3RoID4gZS5zdGFja3RyYWNlLnNwbGl0KCdcXG4nKS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTkoZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFlLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTEwKGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTEoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTk6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmE5KGUpIHtcbiAgICAgICAgICAgIHZhciBsaW5lUkUgPSAvTGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKS9pO1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gZS5tZXNzYWdlLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDIsIGxlbiA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZVJFLmV4ZWMobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZXNbaV1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhMTA6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMChlKSB7XG4gICAgICAgICAgICB2YXIgbGluZVJFID0gL0xpbmUgKFxcZCspLipzY3JpcHQgKD86aW4gKT8oXFxTKykoPzo6IEluIGZ1bmN0aW9uIChcXFMrKSk/JC9pO1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gZS5zdGFja3RyYWNlLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZVJFLmV4ZWMobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IG1hdGNoWzNdIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lc1tpXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gT3BlcmEgMTAuNjUrIEVycm9yLnN0YWNrIHZlcnkgc2ltaWxhciB0byBGRi9TYWZhcmlcbiAgICAgICAgcGFyc2VPcGVyYTExOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhMTEoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIWxpbmUubWF0Y2goRklSRUZPWF9TQUZBUklfU1RBQ0tfUkVHRVhQKSAmJiAhbGluZS5tYXRjaCgvXkVycm9yIGNyZWF0ZWQgYXQvKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5zcGxpdCgnQCcpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25DYWxsID0gKHRva2Vucy5zaGlmdCgpIHx8ICcnKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25DYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPGFub255bW91cyBmdW5jdGlvbig6IChcXHcrKSk/Pi8sICckMicpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwoW15cXCldKlxcKS9nLCAnJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzUmF3O1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkNhbGwubWF0Y2goL1xcKChbXlxcKV0qKVxcKS8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NSYXcgPSBmdW5jdGlvbkNhbGwucmVwbGFjZSgvXlteXFwoXStcXCgoW15cXCldKilcXCkkLywgJyQxJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gKGFyZ3NSYXcgPT09IHVuZGVmaW5lZCB8fCBhcmdzUmF3ID09PSAnW2FyZ3VtZW50cyBub3QgYXZhaWxhYmxlXScpID9cbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDogYXJnc1Jhdy5zcGxpdCgnLCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2stZ2VuZXJhdG9yJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tHZW5lcmF0b3IgPSBmYWN0b3J5KHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTdGFja0ZyYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFja3RyYWNlOiBmdW5jdGlvbiBTdGFja0dlbmVyYXRvciQkYmFja3RyYWNlKG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICAgICAgdmFyIG1heFN0YWNrU2l6ZSA9IDEwO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcHRzLm1heFN0YWNrU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBtYXhTdGFja1NpemUgPSBvcHRzLm1heFN0YWNrU2l6ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGN1cnIgPSBhcmd1bWVudHMuY2FsbGVlO1xuICAgICAgICAgICAgd2hpbGUgKGN1cnIgJiYgc3RhY2subGVuZ3RoIDwgbWF4U3RhY2tTaXplICYmIGN1cnJbJ2FyZ3VtZW50cyddKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxsb3cgVjggb3B0aW1pemF0aW9uc1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGN1cnJbJ2FyZ3VtZW50cyddLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBjdXJyWydhcmd1bWVudHMnXVtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKC9mdW5jdGlvbig/OlxccysoW1xcdyRdKykpK1xccypcXCgvLnRlc3QoY3Vyci50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ldyBTdGFja0ZyYW1lKHtmdW5jdGlvbk5hbWU6IFJlZ0V4cC4kMSB8fCB1bmRlZmluZWQsIGFyZ3M6IGFyZ3N9KSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh7YXJnczogYXJnc30pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci5jYWxsZXI7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2tmcmFtZScsIFtdLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrRnJhbWUgPSBmYWN0b3J5KCk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbigpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgZnVuY3Rpb24gX2lzTnVtYmVyKG4pIHtcbiAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfY2FwaXRhbGl6ZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2dldHRlcihwKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3BdO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBib29sZWFuUHJvcHMgPSBbJ2lzQ29uc3RydWN0b3InLCAnaXNFdmFsJywgJ2lzTmF0aXZlJywgJ2lzVG9wbGV2ZWwnXTtcbiAgICB2YXIgbnVtZXJpY1Byb3BzID0gWydjb2x1bW5OdW1iZXInLCAnbGluZU51bWJlciddO1xuICAgIHZhciBzdHJpbmdQcm9wcyA9IFsnZmlsZU5hbWUnLCAnZnVuY3Rpb25OYW1lJywgJ3NvdXJjZSddO1xuICAgIHZhciBhcnJheVByb3BzID0gWydhcmdzJ107XG5cbiAgICB2YXIgcHJvcHMgPSBib29sZWFuUHJvcHMuY29uY2F0KG51bWVyaWNQcm9wcywgc3RyaW5nUHJvcHMsIGFycmF5UHJvcHMpO1xuXG4gICAgZnVuY3Rpb24gU3RhY2tGcmFtZShvYmopIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcHNbaV0pICYmIG9ialtwcm9wc1tpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzWydzZXQnICsgX2NhcGl0YWxpemUocHJvcHNbaV0pXShvYmpbcHJvcHNbaV1dKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBTdGFja0ZyYW1lLnByb3RvdHlwZSA9IHtcbiAgICAgICAgZ2V0QXJnczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmdzO1xuICAgICAgICB9LFxuICAgICAgICBzZXRBcmdzOiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJncyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFyZ3MgPSB2O1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldEV2YWxPcmlnaW46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZhbE9yaWdpbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0RXZhbE9yaWdpbjogZnVuY3Rpb24odikge1xuICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsT3JpZ2luID0gdjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZhbE9yaWdpbiA9IG5ldyBTdGFja0ZyYW1lKHYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFdmFsIE9yaWdpbiBtdXN0IGJlIGFuIE9iamVjdCBvciBTdGFja0ZyYW1lJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2V0RnVuY3Rpb25OYW1lKCkgfHwgJ3thbm9ueW1vdXN9JztcbiAgICAgICAgICAgIHZhciBhcmdzID0gJygnICsgKHRoaXMuZ2V0QXJncygpIHx8IFtdKS5qb2luKCcsJykgKyAnKSc7XG4gICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSB0aGlzLmdldEZpbGVOYW1lKCkgPyAoJ0AnICsgdGhpcy5nZXRGaWxlTmFtZSgpKSA6ICcnO1xuICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBfaXNOdW1iZXIodGhpcy5nZXRMaW5lTnVtYmVyKCkpID8gKCc6JyArIHRoaXMuZ2V0TGluZU51bWJlcigpKSA6ICcnO1xuICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IF9pc051bWJlcih0aGlzLmdldENvbHVtbk51bWJlcigpKSA/ICgnOicgKyB0aGlzLmdldENvbHVtbk51bWJlcigpKSA6ICcnO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZSArIGFyZ3MgKyBmaWxlTmFtZSArIGxpbmVOdW1iZXIgKyBjb2x1bW5OdW1iZXI7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib29sZWFuUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IF9nZXR0ZXIoYm9vbGVhblByb3BzW2ldKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBCb29sZWFuKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoYm9vbGVhblByb3BzW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bWVyaWNQcm9wcy5sZW5ndGg7IGorKykge1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gX2dldHRlcihudW1lcmljUHJvcHNbal0pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gKGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfaXNOdW1iZXIodikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihwICsgJyBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBOdW1iZXIodik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShudW1lcmljUHJvcHNbal0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3RyaW5nUHJvcHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShzdHJpbmdQcm9wc1trXSldID0gX2dldHRlcihzdHJpbmdQcm9wc1trXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUoc3RyaW5nUHJvcHNba10pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBTdHJpbmcodik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShzdHJpbmdQcm9wc1trXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0YWNrRnJhbWU7XG59KSk7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgYW4gYXJyYXkgYW5kIGEgc2V0LiBBZGRpbmcgYSBuZXdcbiAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICogZWxlbWVudCBpcyBPKDEpLiBSZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBzZXQgaXMgbm90IHN1cHBvcnRlZC4gT25seVxuICogc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciBtZW1iZXJzaGlwLlxuICovXG5mdW5jdGlvbiBBcnJheVNldCgpIHtcbiAgdGhpcy5fYXJyYXkgPSBbXTtcbiAgdGhpcy5fc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgbWV0aG9kIGZvciBjcmVhdGluZyBBcnJheVNldCBpbnN0YW5jZXMgZnJvbSBhbiBleGlzdGluZyBhcnJheS5cbiAqL1xuQXJyYXlTZXQuZnJvbUFycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfZnJvbUFycmF5KGFBcnJheSwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc2V0ID0gbmV3IEFycmF5U2V0KCk7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzZXQuYWRkKGFBcnJheVtpXSwgYUFsbG93RHVwbGljYXRlcyk7XG4gIH1cbiAgcmV0dXJuIHNldDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhvdyBtYW55IHVuaXF1ZSBpdGVtcyBhcmUgaW4gdGhpcyBBcnJheVNldC4gSWYgZHVwbGljYXRlcyBoYXZlIGJlZW5cbiAqIGFkZGVkLCB0aGFuIHRob3NlIGRvIG5vdCBjb3VudCB0b3dhcmRzIHRoZSBzaXplLlxuICpcbiAqIEByZXR1cm5zIE51bWJlclxuICovXG5BcnJheVNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uIEFycmF5U2V0X3NpemUoKSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9zZXQpLmxlbmd0aDtcbn07XG5cbi8qKlxuICogQWRkIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhpcyBzZXQuXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBBcnJheVNldF9hZGQoYVN0ciwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHZhciBpc0R1cGxpY2F0ZSA9IGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG4gIHZhciBpZHggPSB0aGlzLl9hcnJheS5sZW5ndGg7XG4gIGlmICghaXNEdXBsaWNhdGUgfHwgYUFsbG93RHVwbGljYXRlcykge1xuICAgIHRoaXMuX2FycmF5LnB1c2goYVN0cik7XG4gIH1cbiAgaWYgKCFpc0R1cGxpY2F0ZSkge1xuICAgIHRoaXMuX3NldFtzU3RyXSA9IGlkeDtcbiAgfVxufTtcblxuLyoqXG4gKiBJcyB0aGUgZ2l2ZW4gc3RyaW5nIGEgbWVtYmVyIG9mIHRoaXMgc2V0P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gQXJyYXlTZXRfaGFzKGFTdHIpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICByZXR1cm4gaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbn07XG5cbi8qKlxuICogV2hhdCBpcyB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIHN0cmluZyBpbiB0aGUgYXJyYXk/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gQXJyYXlTZXRfaW5kZXhPZihhU3RyKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgaWYgKGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cikpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0W3NTdHJdO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignXCInICsgYVN0ciArICdcIiBpcyBub3QgaW4gdGhlIHNldC4nKTtcbn07XG5cbi8qKlxuICogV2hhdCBpcyB0aGUgZWxlbWVudCBhdCB0aGUgZ2l2ZW4gaW5kZXg/XG4gKlxuICogQHBhcmFtIE51bWJlciBhSWR4XG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uIEFycmF5U2V0X2F0KGFJZHgpIHtcbiAgaWYgKGFJZHggPj0gMCAmJiBhSWR4IDwgdGhpcy5fYXJyYXkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FycmF5W2FJZHhdO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignTm8gZWxlbWVudCBpbmRleGVkIGJ5ICcgKyBhSWR4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYXJyYXkgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzZXQgKHdoaWNoIGhhcyB0aGUgcHJvcGVyIGluZGljZXNcbiAqIGluZGljYXRlZCBieSBpbmRleE9mKS4gTm90ZSB0aGF0IHRoaXMgaXMgYSBjb3B5IG9mIHRoZSBpbnRlcm5hbCBhcnJheSB1c2VkXG4gKiBmb3Igc3RvcmluZyB0aGUgbWVtYmVycyBzbyB0aGF0IG5vIG9uZSBjYW4gbWVzcyB3aXRoIGludGVybmFsIHN0YXRlLlxuICovXG5BcnJheVNldC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X3RvQXJyYXkoKSB7XG4gIHJldHVybiB0aGlzLl9hcnJheS5zbGljZSgpO1xufTtcblxuZXhwb3J0cy5BcnJheVNldCA9IEFycmF5U2V0O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqXG4gKiBCYXNlZCBvbiB0aGUgQmFzZSA2NCBWTFEgaW1wbGVtZW50YXRpb24gaW4gQ2xvc3VyZSBDb21waWxlcjpcbiAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2xvc3VyZS1jb21waWxlci9zb3VyY2UvYnJvd3NlL3RydW5rL3NyYy9jb20vZ29vZ2xlL2RlYnVnZ2luZy9zb3VyY2VtYXAvQmFzZTY0VkxRLmphdmFcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMSBUaGUgQ2xvc3VyZSBDb21waWxlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlXG4gKiBtZXQ6XG4gKlxuICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbiAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXG4gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcbiAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZFxuICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbiAqIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcbiAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLFxuICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxuICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcbiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnLi9iYXNlNjQnKTtcblxuLy8gQSBzaW5nbGUgYmFzZSA2NCBkaWdpdCBjYW4gY29udGFpbiA2IGJpdHMgb2YgZGF0YS4gRm9yIHRoZSBiYXNlIDY0IHZhcmlhYmxlXG4vLyBsZW5ndGggcXVhbnRpdGllcyB3ZSB1c2UgaW4gdGhlIHNvdXJjZSBtYXAgc3BlYywgdGhlIGZpcnN0IGJpdCBpcyB0aGUgc2lnbixcbi8vIHRoZSBuZXh0IGZvdXIgYml0cyBhcmUgdGhlIGFjdHVhbCB2YWx1ZSwgYW5kIHRoZSA2dGggYml0IGlzIHRoZVxuLy8gY29udGludWF0aW9uIGJpdC4gVGhlIGNvbnRpbnVhdGlvbiBiaXQgdGVsbHMgdXMgd2hldGhlciB0aGVyZSBhcmUgbW9yZVxuLy8gZGlnaXRzIGluIHRoaXMgdmFsdWUgZm9sbG93aW5nIHRoaXMgZGlnaXQuXG4vL1xuLy8gICBDb250aW51YXRpb25cbi8vICAgfCAgICBTaWduXG4vLyAgIHwgICAgfFxuLy8gICBWICAgIFZcbi8vICAgMTAxMDExXG5cbnZhciBWTFFfQkFTRV9TSElGVCA9IDU7XG5cbi8vIGJpbmFyeTogMTAwMDAwXG52YXIgVkxRX0JBU0UgPSAxIDw8IFZMUV9CQVNFX1NISUZUO1xuXG4vLyBiaW5hcnk6IDAxMTExMVxudmFyIFZMUV9CQVNFX01BU0sgPSBWTFFfQkFTRSAtIDE7XG5cbi8vIGJpbmFyeTogMTAwMDAwXG52YXIgVkxRX0NPTlRJTlVBVElPTl9CSVQgPSBWTFFfQkFTRTtcblxuLyoqXG4gKiBDb252ZXJ0cyBmcm9tIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgdG8gYSB2YWx1ZSB3aGVyZSB0aGUgc2lnbiBiaXQgaXNcbiAqIHBsYWNlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LiAgRm9yIGV4YW1wbGUsIGFzIGRlY2ltYWxzOlxuICogICAxIGJlY29tZXMgMiAoMTAgYmluYXJ5KSwgLTEgYmVjb21lcyAzICgxMSBiaW5hcnkpXG4gKiAgIDIgYmVjb21lcyA0ICgxMDAgYmluYXJ5KSwgLTIgYmVjb21lcyA1ICgxMDEgYmluYXJ5KVxuICovXG5mdW5jdGlvbiB0b1ZMUVNpZ25lZChhVmFsdWUpIHtcbiAgcmV0dXJuIGFWYWx1ZSA8IDBcbiAgICA/ICgoLWFWYWx1ZSkgPDwgMSkgKyAxXG4gICAgOiAoYVZhbHVlIDw8IDEpICsgMDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0byBhIHR3by1jb21wbGVtZW50IHZhbHVlIGZyb20gYSB2YWx1ZSB3aGVyZSB0aGUgc2lnbiBiaXQgaXNcbiAqIHBsYWNlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LiAgRm9yIGV4YW1wbGUsIGFzIGRlY2ltYWxzOlxuICogICAyICgxMCBiaW5hcnkpIGJlY29tZXMgMSwgMyAoMTEgYmluYXJ5KSBiZWNvbWVzIC0xXG4gKiAgIDQgKDEwMCBiaW5hcnkpIGJlY29tZXMgMiwgNSAoMTAxIGJpbmFyeSkgYmVjb21lcyAtMlxuICovXG5mdW5jdGlvbiBmcm9tVkxRU2lnbmVkKGFWYWx1ZSkge1xuICB2YXIgaXNOZWdhdGl2ZSA9IChhVmFsdWUgJiAxKSA9PT0gMTtcbiAgdmFyIHNoaWZ0ZWQgPSBhVmFsdWUgPj4gMTtcbiAgcmV0dXJuIGlzTmVnYXRpdmVcbiAgICA/IC1zaGlmdGVkXG4gICAgOiBzaGlmdGVkO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGJhc2UgNjQgVkxRIGVuY29kZWQgdmFsdWUuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gYmFzZTY0VkxRX2VuY29kZShhVmFsdWUpIHtcbiAgdmFyIGVuY29kZWQgPSBcIlwiO1xuICB2YXIgZGlnaXQ7XG5cbiAgdmFyIHZscSA9IHRvVkxRU2lnbmVkKGFWYWx1ZSk7XG5cbiAgZG8ge1xuICAgIGRpZ2l0ID0gdmxxICYgVkxRX0JBU0VfTUFTSztcbiAgICB2bHEgPj4+PSBWTFFfQkFTRV9TSElGVDtcbiAgICBpZiAodmxxID4gMCkge1xuICAgICAgLy8gVGhlcmUgYXJlIHN0aWxsIG1vcmUgZGlnaXRzIGluIHRoaXMgdmFsdWUsIHNvIHdlIG11c3QgbWFrZSBzdXJlIHRoZVxuICAgICAgLy8gY29udGludWF0aW9uIGJpdCBpcyBtYXJrZWQuXG4gICAgICBkaWdpdCB8PSBWTFFfQ09OVElOVUFUSU9OX0JJVDtcbiAgICB9XG4gICAgZW5jb2RlZCArPSBiYXNlNjQuZW5jb2RlKGRpZ2l0KTtcbiAgfSB3aGlsZSAodmxxID4gMCk7XG5cbiAgcmV0dXJuIGVuY29kZWQ7XG59O1xuXG4vKipcbiAqIERlY29kZXMgdGhlIG5leHQgYmFzZSA2NCBWTFEgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCByZXR1cm5zIHRoZVxuICogdmFsdWUgYW5kIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgdmlhIHRoZSBvdXQgcGFyYW1ldGVyLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9kZWNvZGUoYVN0ciwgYUluZGV4LCBhT3V0UGFyYW0pIHtcbiAgdmFyIHN0ckxlbiA9IGFTdHIubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gMDtcbiAgdmFyIHNoaWZ0ID0gMDtcbiAgdmFyIGNvbnRpbnVhdGlvbiwgZGlnaXQ7XG5cbiAgZG8ge1xuICAgIGlmIChhSW5kZXggPj0gc3RyTGVuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBtb3JlIGRpZ2l0cyBpbiBiYXNlIDY0IFZMUSB2YWx1ZS5cIik7XG4gICAgfVxuXG4gICAgZGlnaXQgPSBiYXNlNjQuZGVjb2RlKGFTdHIuY2hhckNvZGVBdChhSW5kZXgrKykpO1xuICAgIGlmIChkaWdpdCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmFzZTY0IGRpZ2l0OiBcIiArIGFTdHIuY2hhckF0KGFJbmRleCAtIDEpKTtcbiAgICB9XG5cbiAgICBjb250aW51YXRpb24gPSAhIShkaWdpdCAmIFZMUV9DT05USU5VQVRJT05fQklUKTtcbiAgICBkaWdpdCAmPSBWTFFfQkFTRV9NQVNLO1xuICAgIHJlc3VsdCA9IHJlc3VsdCArIChkaWdpdCA8PCBzaGlmdCk7XG4gICAgc2hpZnQgKz0gVkxRX0JBU0VfU0hJRlQ7XG4gIH0gd2hpbGUgKGNvbnRpbnVhdGlvbik7XG5cbiAgYU91dFBhcmFtLnZhbHVlID0gZnJvbVZMUVNpZ25lZChyZXN1bHQpO1xuICBhT3V0UGFyYW0ucmVzdCA9IGFJbmRleDtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBpbnRUb0NoYXJNYXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xuXG4vKipcbiAqIEVuY29kZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAwIHRvIDYzIHRvIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKG51bWJlcikge1xuICBpZiAoMCA8PSBudW1iZXIgJiYgbnVtYmVyIDwgaW50VG9DaGFyTWFwLmxlbmd0aCkge1xuICAgIHJldHVybiBpbnRUb0NoYXJNYXBbbnVtYmVyXTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzOiBcIiArIG51bWJlcik7XG59O1xuXG4vKipcbiAqIERlY29kZSBhIHNpbmdsZSBiYXNlIDY0IGNoYXJhY3RlciBjb2RlIGRpZ2l0IHRvIGFuIGludGVnZXIuIFJldHVybnMgLTEgb25cbiAqIGZhaWx1cmUuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gKGNoYXJDb2RlKSB7XG4gIHZhciBiaWdBID0gNjU7ICAgICAvLyAnQSdcbiAgdmFyIGJpZ1ogPSA5MDsgICAgIC8vICdaJ1xuXG4gIHZhciBsaXR0bGVBID0gOTc7ICAvLyAnYSdcbiAgdmFyIGxpdHRsZVogPSAxMjI7IC8vICd6J1xuXG4gIHZhciB6ZXJvID0gNDg7ICAgICAvLyAnMCdcbiAgdmFyIG5pbmUgPSA1NzsgICAgIC8vICc5J1xuXG4gIHZhciBwbHVzID0gNDM7ICAgICAvLyAnKydcbiAgdmFyIHNsYXNoID0gNDc7ICAgIC8vICcvJ1xuXG4gIHZhciBsaXR0bGVPZmZzZXQgPSAyNjtcbiAgdmFyIG51bWJlck9mZnNldCA9IDUyO1xuXG4gIC8vIDAgLSAyNTogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcbiAgaWYgKGJpZ0EgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gYmlnWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBiaWdBKTtcbiAgfVxuXG4gIC8vIDI2IC0gNTE6IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XG4gIGlmIChsaXR0bGVBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGxpdHRsZVopIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gbGl0dGxlQSArIGxpdHRsZU9mZnNldCk7XG4gIH1cblxuICAvLyA1MiAtIDYxOiAwMTIzNDU2Nzg5XG4gIGlmICh6ZXJvIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IG5pbmUpIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gemVybyArIG51bWJlck9mZnNldCk7XG4gIH1cblxuICAvLyA2MjogK1xuICBpZiAoY2hhckNvZGUgPT0gcGx1cykge1xuICAgIHJldHVybiA2MjtcbiAgfVxuXG4gIC8vIDYzOiAvXG4gIGlmIChjaGFyQ29kZSA9PSBzbGFzaCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuXG4gIC8vIEludmFsaWQgYmFzZTY0IGRpZ2l0LlxuICByZXR1cm4gLTE7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG5leHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcbmV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZSBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoLlxuICpcbiAqIEBwYXJhbSBhTG93IEluZGljZXMgaGVyZSBhbmQgbG93ZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhSGlnaCBJbmRpY2VzIGhlcmUgYW5kIGhpZ2hlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgYmVpbmcgc2VhcmNoZWQgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgbm9uLWVtcHR5IGFycmF5IGJlaW5nIHNlYXJjaGVkLlxuICogQHBhcmFtIGFDb21wYXJlIEZ1bmN0aW9uIHdoaWNoIHRha2VzIHR3byBlbGVtZW50cyBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gcmVjdXJzaXZlU2VhcmNoKGFMb3csIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICAvLyBUaGlzIGZ1bmN0aW9uIHRlcm1pbmF0ZXMgd2hlbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAvL1xuICAvLyAgIDEuIFdlIGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQgd2UgYXJlIGxvb2tpbmcgZm9yLlxuICAvL1xuICAvLyAgIDIuIFdlIGRpZCBub3QgZmluZCB0aGUgZXhhY3QgZWxlbWVudCwgYnV0IHdlIGNhbiByZXR1cm4gdGhlIGluZGV4IG9mXG4gIC8vICAgICAgdGhlIG5leHQtY2xvc2VzdCBlbGVtZW50LlxuICAvL1xuICAvLyAgIDMuIFdlIGRpZCBub3QgZmluZCB0aGUgZXhhY3QgZWxlbWVudCwgYW5kIHRoZXJlIGlzIG5vIG5leHQtY2xvc2VzdFxuICAvLyAgICAgIGVsZW1lbnQgdGhhbiB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLCBzbyB3ZSByZXR1cm4gLTEuXG4gIHZhciBtaWQgPSBNYXRoLmZsb29yKChhSGlnaCAtIGFMb3cpIC8gMikgKyBhTG93O1xuICB2YXIgY21wID0gYUNvbXBhcmUoYU5lZWRsZSwgYUhheXN0YWNrW21pZF0sIHRydWUpO1xuICBpZiAoY21wID09PSAwKSB7XG4gICAgLy8gRm91bmQgdGhlIGVsZW1lbnQgd2UgYXJlIGxvb2tpbmcgZm9yLlxuICAgIHJldHVybiBtaWQ7XG4gIH1cbiAgZWxzZSBpZiAoY21wID4gMCkge1xuICAgIC8vIE91ciBuZWVkbGUgaXMgZ3JlYXRlciB0aGFuIGFIYXlzdGFja1ttaWRdLlxuICAgIGlmIChhSGlnaCAtIG1pZCA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSB1cHBlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChtaWQsIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGV4YWN0IG5lZWRsZSBlbGVtZW50IHdhcyBub3QgZm91bmQgaW4gdGhpcyBoYXlzdGFjay4gRGV0ZXJtaW5lIGlmXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIGFIaWdoIDwgYUhheXN0YWNrLmxlbmd0aCA/IGFIaWdoIDogLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIC8vIE91ciBuZWVkbGUgaXMgbGVzcyB0aGFuIGFIYXlzdGFja1ttaWRdLlxuICAgIGlmIChtaWQgLSBhTG93ID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIGxvd2VyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKGFMb3csIG1pZCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhTG93IDwgMCA/IC0xIDogYUxvdztcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2ggd2hpY2ggd2lsbCBhbHdheXMgdHJ5IGFuZCByZXR1cm5cbiAqIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBlbGVtZW50IGlmIHRoZXJlIGlzIG5vIGV4YWN0IGhpdC4gVGhpcyBpcyBiZWNhdXNlXG4gKiBtYXBwaW5ncyBiZXR3ZWVuIG9yaWdpbmFsIGFuZCBnZW5lcmF0ZWQgbGluZS9jb2wgcGFpcnMgYXJlIHNpbmdsZSBwb2ludHMsXG4gKiBhbmQgdGhlcmUgaXMgYW4gaW1wbGljaXQgcmVnaW9uIGJldHdlZW4gZWFjaCBvZiB0aGVtLCBzbyBhIG1pc3MganVzdCBtZWFuc1xuICogdGhhdCB5b3UgYXJlbid0IG9uIHRoZSB2ZXJ5IHN0YXJ0IG9mIGEgcmVnaW9uLlxuICpcbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IHlvdSBhcmUgbG9va2luZyBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBhcnJheSB0aGF0IGlzIGJlaW5nIHNlYXJjaGVkLlxuICogQHBhcmFtIGFDb21wYXJlIEEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgdGhlIG5lZWRsZSBhbmQgYW4gZWxlbWVudCBpbiB0aGVcbiAqICAgICBhcnJheSBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbmVlZGxlIGlzIGxlc3NcbiAqICAgICB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIHRoZSBlbGVtZW50LCByZXNwZWN0aXZlbHkuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKi9cbmV4cG9ydHMuc2VhcmNoID0gZnVuY3Rpb24gc2VhcmNoKGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIGlmIChhSGF5c3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgdmFyIGluZGV4ID0gcmVjdXJzaXZlU2VhcmNoKC0xLCBhSGF5c3RhY2subGVuZ3RoLCBhTmVlZGxlLCBhSGF5c3RhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ29tcGFyZSwgYUJpYXMgfHwgZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvLyBXZSBoYXZlIGZvdW5kIGVpdGhlciB0aGUgZXhhY3QgZWxlbWVudCwgb3IgdGhlIG5leHQtY2xvc2VzdCBlbGVtZW50IHRoYW5cbiAgLy8gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci4gSG93ZXZlciwgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgc3VjaFxuICAvLyBlbGVtZW50LiBNYWtlIHN1cmUgd2UgYWx3YXlzIHJldHVybiB0aGUgc21hbGxlc3Qgb2YgdGhlc2UuXG4gIHdoaWxlIChpbmRleCAtIDEgPj0gMCkge1xuICAgIGlmIChhQ29tcGFyZShhSGF5c3RhY2tbaW5kZXhdLCBhSGF5c3RhY2tbaW5kZXggLSAxXSwgdHJ1ZSkgIT09IDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAtLWluZGV4O1xuICB9XG5cbiAgcmV0dXJuIGluZGV4O1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLy8gSXQgdHVybnMgb3V0IHRoYXQgc29tZSAobW9zdD8pIEphdmFTY3JpcHQgZW5naW5lcyBkb24ndCBzZWxmLWhvc3Rcbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAuIFRoaXMgbWFrZXMgc2Vuc2UgYmVjYXVzZSBDKysgd2lsbCBsaWtlbHkgcmVtYWluXG4vLyBmYXN0ZXIgdGhhbiBKUyB3aGVuIGRvaW5nIHJhdyBDUFUtaW50ZW5zaXZlIHNvcnRpbmcuIEhvd2V2ZXIsIHdoZW4gdXNpbmcgYVxuLy8gY3VzdG9tIGNvbXBhcmF0b3IgZnVuY3Rpb24sIGNhbGxpbmcgYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aGUgVk0ncyBDKysgYW5kXG4vLyBKSVQnZCBKUyBpcyByYXRoZXIgc2xvdyAqYW5kKiBsb3NlcyBKSVQgdHlwZSBpbmZvcm1hdGlvbiwgcmVzdWx0aW5nIGluXG4vLyB3b3JzZSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIGNvbXBhcmF0b3IgZnVuY3Rpb24gdGhhbiB3b3VsZCBiZSBvcHRpbWFsLiBJblxuLy8gZmFjdCwgd2hlbiBzb3J0aW5nIHdpdGggYSBjb21wYXJhdG9yLCB0aGVzZSBjb3N0cyBvdXR3ZWlnaCB0aGUgYmVuZWZpdHMgb2Zcbi8vIHNvcnRpbmcgaW4gQysrLiBCeSB1c2luZyBvdXIgb3duIEpTLWltcGxlbWVudGVkIFF1aWNrIFNvcnQgKGJlbG93KSwgd2UgZ2V0XG4vLyBhIH4zNTAwbXMgbWVhbiBzcGVlZC11cCBpbiBgYmVuY2gvYmVuY2guaHRtbGAuXG5cbi8qKlxuICogU3dhcCB0aGUgZWxlbWVudHMgaW5kZXhlZCBieSBgeGAgYW5kIGB5YCBpbiB0aGUgYXJyYXkgYGFyeWAuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gKiAgICAgICAgVGhlIGFycmF5LlxuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGl0ZW0uXG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogICAgICAgIFRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIGl0ZW0uXG4gKi9cbmZ1bmN0aW9uIHN3YXAoYXJ5LCB4LCB5KSB7XG4gIHZhciB0ZW1wID0gYXJ5W3hdO1xuICBhcnlbeF0gPSBhcnlbeV07XG4gIGFyeVt5XSA9IHRlbXA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIHdpdGhpbiB0aGUgcmFuZ2UgYGxvdyAuLiBoaWdoYCBpbmNsdXNpdmUuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGxvd1xuICogICAgICAgIFRoZSBsb3dlciBib3VuZCBvbiB0aGUgcmFuZ2UuXG4gKiBAcGFyYW0ge051bWJlcn0gaGlnaFxuICogICAgICAgIFRoZSB1cHBlciBib3VuZCBvbiB0aGUgcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbUludEluUmFuZ2UobG93LCBoaWdoKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKGxvdyArIChNYXRoLnJhbmRvbSgpICogKGhpZ2ggLSBsb3cpKSk7XG59XG5cbi8qKlxuICogVGhlIFF1aWNrIFNvcnQgYWxnb3JpdGhtLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICogQHBhcmFtIHtOdW1iZXJ9IHBcbiAqICAgICAgICBTdGFydCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSByXG4gKiAgICAgICAgRW5kIGluZGV4IG9mIHRoZSBhcnJheVxuICovXG5mdW5jdGlvbiBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHAsIHIpIHtcbiAgLy8gSWYgb3VyIGxvd2VyIGJvdW5kIGlzIGxlc3MgdGhhbiBvdXIgdXBwZXIgYm91bmQsIHdlICgxKSBwYXJ0aXRpb24gdGhlXG4gIC8vIGFycmF5IGludG8gdHdvIHBpZWNlcyBhbmQgKDIpIHJlY3Vyc2Ugb24gZWFjaCBoYWxmLiBJZiBpdCBpcyBub3QsIHRoaXMgaXNcbiAgLy8gdGhlIGVtcHR5IGFycmF5IGFuZCBvdXIgYmFzZSBjYXNlLlxuXG4gIGlmIChwIDwgcikge1xuICAgIC8vICgxKSBQYXJ0aXRpb25pbmcuXG4gICAgLy9cbiAgICAvLyBUaGUgcGFydGl0aW9uaW5nIGNob29zZXMgYSBwaXZvdCBiZXR3ZWVuIGBwYCBhbmQgYHJgIGFuZCBtb3ZlcyBhbGxcbiAgICAvLyBlbGVtZW50cyB0aGF0IGFyZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBpdm90IHRvIHRoZSBiZWZvcmUgaXQsIGFuZFxuICAgIC8vIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBhcmUgZ3JlYXRlciB0aGFuIGl0IGFmdGVyIGl0LiBUaGUgZWZmZWN0IGlzIHRoYXRcbiAgICAvLyBvbmNlIHBhcnRpdGlvbiBpcyBkb25lLCB0aGUgcGl2b3QgaXMgaW4gdGhlIGV4YWN0IHBsYWNlIGl0IHdpbGwgYmUgd2hlblxuICAgIC8vIHRoZSBhcnJheSBpcyBwdXQgaW4gc29ydGVkIG9yZGVyLCBhbmQgaXQgd2lsbCBub3QgbmVlZCB0byBiZSBtb3ZlZFxuICAgIC8vIGFnYWluLiBUaGlzIHJ1bnMgaW4gTyhuKSB0aW1lLlxuXG4gICAgLy8gQWx3YXlzIGNob29zZSBhIHJhbmRvbSBwaXZvdCBzbyB0aGF0IGFuIGlucHV0IGFycmF5IHdoaWNoIGlzIHJldmVyc2VcbiAgICAvLyBzb3J0ZWQgZG9lcyBub3QgY2F1c2UgTyhuXjIpIHJ1bm5pbmcgdGltZS5cbiAgICB2YXIgcGl2b3RJbmRleCA9IHJhbmRvbUludEluUmFuZ2UocCwgcik7XG4gICAgdmFyIGkgPSBwIC0gMTtcblxuICAgIHN3YXAoYXJ5LCBwaXZvdEluZGV4LCByKTtcbiAgICB2YXIgcGl2b3QgPSBhcnlbcl07XG5cbiAgICAvLyBJbW1lZGlhdGVseSBhZnRlciBgamAgaXMgaW5jcmVtZW50ZWQgaW4gdGhpcyBsb29wLCB0aGUgZm9sbG93aW5nIGhvbGRcbiAgICAvLyB0cnVlOlxuICAgIC8vXG4gICAgLy8gICAqIEV2ZXJ5IGVsZW1lbnQgaW4gYGFyeVtwIC4uIGldYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBpdm90LlxuICAgIC8vXG4gICAgLy8gICAqIEV2ZXJ5IGVsZW1lbnQgaW4gYGFyeVtpKzEgLi4gai0xXWAgaXMgZ3JlYXRlciB0aGFuIHRoZSBwaXZvdC5cbiAgICBmb3IgKHZhciBqID0gcDsgaiA8IHI7IGorKykge1xuICAgICAgaWYgKGNvbXBhcmF0b3IoYXJ5W2pdLCBwaXZvdCkgPD0gMCkge1xuICAgICAgICBpICs9IDE7XG4gICAgICAgIHN3YXAoYXJ5LCBpLCBqKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2FwKGFyeSwgaSArIDEsIGopO1xuICAgIHZhciBxID0gaSArIDE7XG5cbiAgICAvLyAoMikgUmVjdXJzZSBvbiBlYWNoIGhhbGYuXG5cbiAgICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHAsIHEgLSAxKTtcbiAgICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHEgKyAxLCByKTtcbiAgfVxufVxuXG4vKipcbiAqIFNvcnQgdGhlIGdpdmVuIGFycmF5IGluLXBsYWNlIHdpdGggdGhlIGdpdmVuIGNvbXBhcmF0b3IgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gKiAgICAgICAgQW4gYXJyYXkgdG8gc29ydC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXBhcmF0b3JcbiAqICAgICAgICBGdW5jdGlvbiB0byB1c2UgdG8gY29tcGFyZSB0d28gaXRlbXMuXG4gKi9cbmV4cG9ydHMucXVpY2tTb3J0ID0gZnVuY3Rpb24gKGFyeSwgY29tcGFyYXRvcikge1xuICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIDAsIGFyeS5sZW5ndGggLSAxKTtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG52YXIgYmluYXJ5U2VhcmNoID0gcmVxdWlyZSgnLi9iaW5hcnktc2VhcmNoJyk7XG52YXIgQXJyYXlTZXQgPSByZXF1aXJlKCcuL2FycmF5LXNldCcpLkFycmF5U2V0O1xudmFyIGJhc2U2NFZMUSA9IHJlcXVpcmUoJy4vYmFzZTY0LXZscScpO1xudmFyIHF1aWNrU29ydCA9IHJlcXVpcmUoJy4vcXVpY2stc29ydCcpLnF1aWNrU29ydDtcblxuZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICByZXR1cm4gc291cmNlTWFwLnNlY3Rpb25zICE9IG51bGxcbiAgICA/IG5ldyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwKVxuICAgIDogbmV3IEJhc2ljU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwKTtcbn1cblxuU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcCA9IGZ1bmN0aW9uKGFTb3VyY2VNYXApIHtcbiAgcmV0dXJuIEJhc2ljU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKTtcbn1cblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8vIGBfX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmQgYF9fb3JpZ2luYWxNYXBwaW5nc2AgYXJlIGFycmF5cyB0aGF0IGhvbGQgdGhlXG4vLyBwYXJzZWQgbWFwcGluZyBjb29yZGluYXRlcyBmcm9tIHRoZSBzb3VyY2UgbWFwJ3MgXCJtYXBwaW5nc1wiIGF0dHJpYnV0ZS4gVGhleVxuLy8gYXJlIGxhemlseSBpbnN0YW50aWF0ZWQsIGFjY2Vzc2VkIHZpYSB0aGUgYF9nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGdldHRlcnMgcmVzcGVjdGl2ZWx5LCBhbmQgd2Ugb25seSBwYXJzZSB0aGUgbWFwcGluZ3Ncbi8vIGFuZCBjcmVhdGUgdGhlc2UgYXJyYXlzIG9uY2UgcXVlcmllZCBmb3IgYSBzb3VyY2UgbG9jYXRpb24uIFdlIGp1bXAgdGhyb3VnaFxuLy8gdGhlc2UgaG9vcHMgYmVjYXVzZSB0aGVyZSBjYW4gYmUgbWFueSB0aG91c2FuZHMgb2YgbWFwcGluZ3MsIGFuZCBwYXJzaW5nXG4vLyB0aGVtIGlzIGV4cGVuc2l2ZSwgc28gd2Ugb25seSB3YW50IHRvIGRvIGl0IGlmIHdlIG11c3QuXG4vL1xuLy8gRWFjaCBvYmplY3QgaW4gdGhlIGFycmF5cyBpcyBvZiB0aGUgZm9ybTpcbi8vXG4vLyAgICAge1xuLy8gICAgICAgZ2VuZXJhdGVkTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIGdlbmVyYXRlZENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgc291cmNlOiBUaGUgcGF0aCB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUgdGhhdCBnZW5lcmF0ZWQgdGhpc1xuLy8gICAgICAgICAgICAgICBjaHVuayBvZiBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxMaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4vLyAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBvcmlnaW5hbENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4vLyAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBzeW1ib2wgd2hpY2ggZ2VuZXJhdGVkIHRoaXMgY2h1bmsgb2Zcbi8vICAgICAgICAgICAgIGNvZGUuXG4vLyAgICAgfVxuLy9cbi8vIEFsbCBwcm9wZXJ0aWVzIGV4Y2VwdCBmb3IgYGdlbmVyYXRlZExpbmVgIGFuZCBgZ2VuZXJhdGVkQ29sdW1uYCBjYW4gYmVcbi8vIGBudWxsYC5cbi8vXG4vLyBgX2dlbmVyYXRlZE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zLlxuLy9cbi8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zLlxuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IG51bGw7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnX2dlbmVyYXRlZE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncykge1xuICAgICAgdGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncywgdGhpcy5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzO1xuICB9XG59KTtcblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG51bGw7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnX29yaWdpbmFsTWFwcGluZ3MnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzO1xuICB9XG59KTtcblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfY2hhcklzTWFwcGluZ1NlcGFyYXRvcihhU3RyLCBpbmRleCkge1xuICAgIHZhciBjID0gYVN0ci5jaGFyQXQoaW5kZXgpO1xuICAgIHJldHVybiBjID09PSBcIjtcIiB8fCBjID09PSBcIixcIjtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IF9wYXJzZU1hcHBpbmdzXCIpO1xuICB9O1xuXG5Tb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVIgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVIgPSAyO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5Tb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGVhY2ggbWFwcGluZyBiZXR3ZWVuIGFuIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiBhbmQgYVxuICogZ2VuZXJhdGVkIGxpbmUvY29sdW1uIGluIHRoaXMgc291cmNlIG1hcC5cbiAqXG4gKiBAcGFyYW0gRnVuY3Rpb24gYUNhbGxiYWNrXG4gKiAgICAgICAgVGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggZWFjaCBtYXBwaW5nLlxuICogQHBhcmFtIE9iamVjdCBhQ29udGV4dFxuICogICAgICAgIE9wdGlvbmFsLiBJZiBzcGVjaWZpZWQsIHRoaXMgb2JqZWN0IHdpbGwgYmUgdGhlIHZhbHVlIG9mIGB0aGlzYCBldmVyeVxuICogICAgICAgIHRpbWUgdGhhdCBgYUNhbGxiYWNrYCBpcyBjYWxsZWQuXG4gKiBAcGFyYW0gYU9yZGVyXG4gKiAgICAgICAgRWl0aGVyIGBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVJgIG9yXG4gKiAgICAgICAgYFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSYC4gU3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgdG9cbiAqICAgICAgICBpdGVyYXRlIG92ZXIgdGhlIG1hcHBpbmdzIHNvcnRlZCBieSB0aGUgZ2VuZXJhdGVkIGZpbGUncyBsaW5lL2NvbHVtblxuICogICAgICAgIG9yZGVyIG9yIHRoZSBvcmlnaW5hbCdzIHNvdXJjZS9saW5lL2NvbHVtbiBvcmRlciwgcmVzcGVjdGl2ZWx5LiBEZWZhdWx0cyB0b1xuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVJgLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZWFjaE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9lYWNoTWFwcGluZyhhQ2FsbGJhY2ssIGFDb250ZXh0LCBhT3JkZXIpIHtcbiAgICB2YXIgY29udGV4dCA9IGFDb250ZXh0IHx8IG51bGw7XG4gICAgdmFyIG9yZGVyID0gYU9yZGVyIHx8IFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUjtcblxuICAgIHZhciBtYXBwaW5ncztcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XG4gICAgY2FzZSBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUjpcbiAgICAgIG1hcHBpbmdzID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG9yZGVyIG9mIGl0ZXJhdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZVJvb3QgPSB0aGlzLnNvdXJjZVJvb3Q7XG4gICAgbWFwcGluZ3MubWFwKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICB2YXIgc291cmNlID0gbWFwcGluZy5zb3VyY2UgPT09IG51bGwgPyBudWxsIDogdGhpcy5fc291cmNlcy5hdChtYXBwaW5nLnNvdXJjZSk7XG4gICAgICBpZiAoc291cmNlICE9IG51bGwgJiYgc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbixcbiAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgb3JpZ2luYWxDb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sXG4gICAgICAgIG5hbWU6IG1hcHBpbmcubmFtZSA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpXG4gICAgICB9O1xuICAgIH0sIHRoaXMpLmZvckVhY2goYUNhbGxiYWNrLCBjb250ZXh0KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwcm92aWRlZC4gSWYgbm8gY29sdW1uIGlzIHByb3ZpZGVkLCByZXR1cm5zIGFsbCBtYXBwaW5nc1xuICogY29ycmVzcG9uZGluZyB0byBhIGVpdGhlciB0aGUgbGluZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciBvciB0aGUgbmV4dFxuICogY2xvc2VzdCBsaW5lIHRoYXQgaGFzIGFueSBtYXBwaW5ncy4gT3RoZXJ3aXNlLCByZXR1cm5zIGFsbCBtYXBwaW5nc1xuICogY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gbGluZSBhbmQgZWl0aGVyIHRoZSBjb2x1bW4gd2UgYXJlIHNlYXJjaGluZyBmb3JcbiAqIG9yIHRoZSBuZXh0IGNsb3Nlc3QgY29sdW1uIHRoYXQgaGFzIGFueSBvZmZzZXRzLlxuICpcbiAqIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IE9wdGlvbmFsLiB0aGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBhcnJheSBvZiBvYmplY3RzIGlzIHJldHVybmVkLCBlYWNoIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmFsbEdlbmVyYXRlZFBvc2l0aW9uc0ZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2FsbEdlbmVyYXRlZFBvc2l0aW9uc0ZvcihhQXJncykge1xuICAgIHZhciBsaW5lID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyk7XG5cbiAgICAvLyBXaGVuIHRoZXJlIGlzIG5vIGV4YWN0IG1hdGNoLCBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmdcbiAgICAvLyByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBtYXBwaW5nIGxlc3MgdGhhbiB0aGUgbmVlZGxlLiBCeVxuICAgIC8vIHNldHRpbmcgbmVlZGxlLm9yaWdpbmFsQ29sdW1uIHRvIDAsIHdlIHRodXMgZmluZCB0aGUgbGFzdCBtYXBwaW5nIGZvclxuICAgIC8vIHRoZSBnaXZlbiBsaW5lLCBwcm92aWRlZCBzdWNoIGEgbWFwcGluZyBleGlzdHMuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKSxcbiAgICAgIG9yaWdpbmFsTGluZTogbGluZSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicsIDApXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgbmVlZGxlLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBuZWVkbGUuc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhuZWVkbGUuc291cmNlKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBuZWVkbGUuc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKG5lZWRsZS5zb3VyY2UpO1xuXG4gICAgdmFyIG1hcHBpbmdzID0gW107XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhuZWVkbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsTGluZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxDb2x1bW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChhQXJncy5jb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgb3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG5cbiAgICAgICAgLy8gSXRlcmF0ZSB1bnRpbCBlaXRoZXIgd2UgcnVuIG91dCBvZiBtYXBwaW5ncywgb3Igd2UgcnVuIGludG9cbiAgICAgICAgLy8gYSBtYXBwaW5nIGZvciBhIGRpZmZlcmVudCBsaW5lIHRoYW4gdGhlIG9uZSB3ZSBmb3VuZC4gU2luY2VcbiAgICAgICAgLy8gbWFwcGluZ3MgYXJlIHNvcnRlZCwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG1hcHBpbmdzIGZvclxuICAgICAgICAvLyB0aGUgbGluZSB3ZSBmb3VuZC5cbiAgICAgICAgd2hpbGUgKG1hcHBpbmcgJiYgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IG9yaWdpbmFsTGluZSkge1xuICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbKytpbmRleF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBvcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgLy8gSXRlcmF0ZSB1bnRpbCBlaXRoZXIgd2UgcnVuIG91dCBvZiBtYXBwaW5ncywgb3Igd2UgcnVuIGludG9cbiAgICAgICAgLy8gYSBtYXBwaW5nIGZvciBhIGRpZmZlcmVudCBsaW5lIHRoYW4gdGhlIG9uZSB3ZSB3ZXJlIHNlYXJjaGluZyBmb3IuXG4gICAgICAgIC8vIFNpbmNlIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmXG4gICAgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gbGluZSAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9PSBvcmlnaW5hbENvbHVtbikge1xuICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbKytpbmRleF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWFwcGluZ3M7XG4gIH07XG5cbmV4cG9ydHMuU291cmNlTWFwQ29uc3VtZXIgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBBIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBhcnNlZCBzb3VyY2UgbWFwIHdoaWNoIHdlIGNhblxuICogcXVlcnkgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBmaWxlIHBvc2l0aW9ucyBieSBnaXZpbmcgaXQgYSBmaWxlXG4gKiBwb3NpdGlvbiBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqXG4gKiBUaGUgb25seSBwYXJhbWV0ZXIgaXMgdGhlIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3JcbiAqIGFscmVhZHkgcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYywgc291cmNlIG1hcHMgaGF2ZSB0aGVcbiAqIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICpcbiAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICogICAtIHNvdXJjZXM6IEFuIGFycmF5IG9mIFVSTHMgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAqICAgLSBuYW1lczogQW4gYXJyYXkgb2YgaWRlbnRpZmllcnMgd2hpY2ggY2FuIGJlIHJlZmVycmVuY2VkIGJ5IGluZGl2aWR1YWwgbWFwcGluZ3MuXG4gKiAgIC0gc291cmNlUm9vdDogT3B0aW9uYWwuIFRoZSBVUkwgcm9vdCBmcm9tIHdoaWNoIGFsbCBzb3VyY2VzIGFyZSByZWxhdGl2ZS5cbiAqICAgLSBzb3VyY2VzQ29udGVudDogT3B0aW9uYWwuIEFuIGFycmF5IG9mIGNvbnRlbnRzIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbWFwcGluZ3M6IEEgc3RyaW5nIG9mIGJhc2U2NCBWTFFzIHdoaWNoIGNvbnRhaW4gdGhlIGFjdHVhbCBtYXBwaW5ncy5cbiAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gKlxuICogSGVyZSBpcyBhbiBleGFtcGxlIHNvdXJjZSBtYXAsIHRha2VuIGZyb20gdGhlIHNvdXJjZSBtYXAgc3BlY1swXTpcbiAqXG4gKiAgICAge1xuICogICAgICAgdmVyc2lvbiA6IDMsXG4gKiAgICAgICBmaWxlOiBcIm91dC5qc1wiLFxuICogICAgICAgc291cmNlUm9vdCA6IFwiXCIsXG4gKiAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAqICAgICAgIG1hcHBpbmdzOiBcIkFBLEFCOztBQkNERTtcIlxuICogICAgIH1cbiAqXG4gKiBbMF06IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVUxUkdBZWhRd1J5cFVUb3ZGMUtSbHBpT0Z6ZTBiLV8yZ2M2ZkFIMEtZMGsvZWRpdD9wbGk9MSNcbiAqL1xuZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgfVxuXG4gIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICB2YXIgc291cmNlcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXMnKTtcbiAgLy8gU2FzcyAzLjMgbGVhdmVzIG91dCB0aGUgJ25hbWVzJyBhcnJheSwgc28gd2UgZGV2aWF0ZSBmcm9tIHRoZSBzcGVjICh3aGljaFxuICAvLyByZXF1aXJlcyB0aGUgYXJyYXkpIHRvIHBsYXkgbmljZSBoZXJlLlxuICB2YXIgbmFtZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICduYW1lcycsIFtdKTtcbiAgdmFyIHNvdXJjZVJvb3QgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VSb290JywgbnVsbCk7XG4gIHZhciBzb3VyY2VzQ29udGVudCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXNDb250ZW50JywgbnVsbCk7XG4gIHZhciBtYXBwaW5ncyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ21hcHBpbmdzJyk7XG4gIHZhciBmaWxlID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnZmlsZScsIG51bGwpO1xuXG4gIC8vIE9uY2UgYWdhaW4sIFNhc3MgZGV2aWF0ZXMgZnJvbSB0aGUgc3BlYyBhbmQgc3VwcGxpZXMgdGhlIHZlcnNpb24gYXMgYVxuICAvLyBzdHJpbmcgcmF0aGVyIHRoYW4gYSBudW1iZXIsIHNvIHdlIHVzZSBsb29zZSBlcXVhbGl0eSBjaGVja2luZyBoZXJlLlxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICBzb3VyY2VzID0gc291cmNlc1xuICAgIC5tYXAoU3RyaW5nKVxuICAgIC8vIFNvbWUgc291cmNlIG1hcHMgcHJvZHVjZSByZWxhdGl2ZSBzb3VyY2UgcGF0aHMgbGlrZSBcIi4vZm9vLmpzXCIgaW5zdGVhZCBvZlxuICAgIC8vIFwiZm9vLmpzXCIuICBOb3JtYWxpemUgdGhlc2UgZmlyc3Qgc28gdGhhdCBmdXR1cmUgY29tcGFyaXNvbnMgd2lsbCBzdWNjZWVkLlxuICAgIC8vIFNlZSBidWd6aWwubGEvMTA5MDc2OC5cbiAgICAubWFwKHV0aWwubm9ybWFsaXplKVxuICAgIC8vIEFsd2F5cyBlbnN1cmUgdGhhdCBhYnNvbHV0ZSBzb3VyY2VzIGFyZSBpbnRlcm5hbGx5IHN0b3JlZCByZWxhdGl2ZSB0b1xuICAgIC8vIHRoZSBzb3VyY2Ugcm9vdCwgaWYgdGhlIHNvdXJjZSByb290IGlzIGFic29sdXRlLiBOb3QgZG9pbmcgdGhpcyB3b3VsZFxuICAgIC8vIGJlIHBhcnRpY3VsYXJseSBwcm9ibGVtYXRpYyB3aGVuIHRoZSBzb3VyY2Ugcm9vdCBpcyBhIHByZWZpeCBvZiB0aGVcbiAgICAvLyBzb3VyY2UgKHZhbGlkLCBidXQgd2h5Pz8pLiBTZWUgZ2l0aHViIGlzc3VlICMxOTkgYW5kIGJ1Z3ppbC5sYS8xMTg4OTgyLlxuICAgIC5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIHNvdXJjZVJvb3QgJiYgdXRpbC5pc0Fic29sdXRlKHNvdXJjZVJvb3QpICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2UpXG4gICAgICAgID8gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2UpXG4gICAgICAgIDogc291cmNlO1xuICAgIH0pO1xuXG4gIC8vIFBhc3MgYHRydWVgIGJlbG93IHRvIGFsbG93IGR1cGxpY2F0ZSBuYW1lcyBhbmQgc291cmNlcy4gV2hpbGUgc291cmNlIG1hcHNcbiAgLy8gYXJlIGludGVuZGVkIHRvIGJlIGNvbXByZXNzZWQgYW5kIGRlZHVwbGljYXRlZCwgdGhlIFR5cGVTY3JpcHQgY29tcGlsZXJcbiAgLy8gc29tZXRpbWVzIGdlbmVyYXRlcyBzb3VyY2UgbWFwcyB3aXRoIGR1cGxpY2F0ZXMgaW4gdGhlbS4gU2VlIEdpdGh1YiBpc3N1ZVxuICAvLyAjNzIgYW5kIGJ1Z3ppbC5sYS84ODk0OTIuXG4gIHRoaXMuX25hbWVzID0gQXJyYXlTZXQuZnJvbUFycmF5KG5hbWVzLm1hcChTdHJpbmcpLCB0cnVlKTtcbiAgdGhpcy5fc291cmNlcyA9IEFycmF5U2V0LmZyb21BcnJheShzb3VyY2VzLCB0cnVlKTtcblxuICB0aGlzLnNvdXJjZVJvb3QgPSBzb3VyY2VSb290O1xuICB0aGlzLnNvdXJjZXNDb250ZW50ID0gc291cmNlc0NvbnRlbnQ7XG4gIHRoaXMuX21hcHBpbmdzID0gbWFwcGluZ3M7XG4gIHRoaXMuZmlsZSA9IGZpbGU7XG59XG5cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3VtZXIgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBDcmVhdGUgYSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGZyb20gYSBTb3VyY2VNYXBHZW5lcmF0b3IuXG4gKlxuICogQHBhcmFtIFNvdXJjZU1hcEdlbmVyYXRvciBhU291cmNlTWFwXG4gKiAgICAgICAgVGhlIHNvdXJjZSBtYXAgdGhhdCB3aWxsIGJlIGNvbnN1bWVkLlxuICogQHJldHVybnMgQmFzaWNTb3VyY2VNYXBDb25zdW1lclxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9mcm9tU291cmNlTWFwKGFTb3VyY2VNYXApIHtcbiAgICB2YXIgc21jID0gT2JqZWN0LmNyZWF0ZShCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5cbiAgICB2YXIgbmFtZXMgPSBzbWMuX25hbWVzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX25hbWVzLnRvQXJyYXkoKSwgdHJ1ZSk7XG4gICAgdmFyIHNvdXJjZXMgPSBzbWMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fc291cmNlcy50b0FycmF5KCksIHRydWUpO1xuICAgIHNtYy5zb3VyY2VSb290ID0gYVNvdXJjZU1hcC5fc291cmNlUm9vdDtcbiAgICBzbWMuc291cmNlc0NvbnRlbnQgPSBhU291cmNlTWFwLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KHNtYy5fc291cmNlcy50b0FycmF5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWMuc291cmNlUm9vdCk7XG4gICAgc21jLmZpbGUgPSBhU291cmNlTWFwLl9maWxlO1xuXG4gICAgLy8gQmVjYXVzZSB3ZSBhcmUgbW9kaWZ5aW5nIHRoZSBlbnRyaWVzIChieSBjb252ZXJ0aW5nIHN0cmluZyBzb3VyY2VzIGFuZFxuICAgIC8vIG5hbWVzIHRvIGluZGljZXMgaW50byB0aGUgc291cmNlcyBhbmQgbmFtZXMgQXJyYXlTZXRzKSwgd2UgaGF2ZSB0byBtYWtlXG4gICAgLy8gYSBjb3B5IG9mIHRoZSBlbnRyeSBvciBlbHNlIGJhZCB0aGluZ3MgaGFwcGVuLiBTaGFyZWQgbXV0YWJsZSBzdGF0ZVxuICAgIC8vIHN0cmlrZXMgYWdhaW4hIFNlZSBnaXRodWIgaXNzdWUgIzE5MS5cblxuICAgIHZhciBnZW5lcmF0ZWRNYXBwaW5ncyA9IGFTb3VyY2VNYXAuX21hcHBpbmdzLnRvQXJyYXkoKS5zbGljZSgpO1xuICAgIHZhciBkZXN0R2VuZXJhdGVkTWFwcGluZ3MgPSBzbWMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBkZXN0T3JpZ2luYWxNYXBwaW5ncyA9IHNtYy5fX29yaWdpbmFsTWFwcGluZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNyY01hcHBpbmcgPSBnZW5lcmF0ZWRNYXBwaW5nc1tpXTtcbiAgICAgIHZhciBkZXN0TWFwcGluZyA9IG5ldyBNYXBwaW5nO1xuICAgICAgZGVzdE1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9IHNyY01hcHBpbmcuZ2VuZXJhdGVkTGluZTtcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHNyY01hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICBpZiAoc3JjTWFwcGluZy5zb3VyY2UpIHtcbiAgICAgICAgZGVzdE1hcHBpbmcuc291cmNlID0gc291cmNlcy5pbmRleE9mKHNyY01hcHBpbmcuc291cmNlKTtcbiAgICAgICAgZGVzdE1hcHBpbmcub3JpZ2luYWxMaW5lID0gc3JjTWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gc3JjTWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICBpZiAoc3JjTWFwcGluZy5uYW1lKSB7XG4gICAgICAgICAgZGVzdE1hcHBpbmcubmFtZSA9IG5hbWVzLmluZGV4T2Yoc3JjTWFwcGluZy5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlc3RPcmlnaW5hbE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgICAgfVxuXG4gICAgICBkZXN0R2VuZXJhdGVkTWFwcGluZ3MucHVzaChkZXN0TWFwcGluZyk7XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KHNtYy5fX29yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuXG4gICAgcmV0dXJuIHNtYztcbiAgfTtcblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBvcmlnaW5hbCBzb3VyY2VzLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc291cmNlcy50b0FycmF5KCkubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VSb290ICE9IG51bGwgPyB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzKSA6IHM7XG4gICAgfSwgdGhpcyk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFByb3ZpZGUgdGhlIEpJVCB3aXRoIGEgbmljZSBzaGFwZSAvIGhpZGRlbiBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gTWFwcGluZygpIHtcbiAgdGhpcy5nZW5lcmF0ZWRMaW5lID0gMDtcbiAgdGhpcy5nZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgdGhpcy5vcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gIHRoaXMubmFtZSA9IG51bGw7XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB2YXIgZ2VuZXJhdGVkTGluZSA9IDE7XG4gICAgdmFyIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbExpbmUgPSAwO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNTb3VyY2UgPSAwO1xuICAgIHZhciBwcmV2aW91c05hbWUgPSAwO1xuICAgIHZhciBsZW5ndGggPSBhU3RyLmxlbmd0aDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjYWNoZWRTZWdtZW50cyA9IHt9O1xuICAgIHZhciB0ZW1wID0ge307XG4gICAgdmFyIG9yaWdpbmFsTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgbWFwcGluZywgc3RyLCBzZWdtZW50LCBlbmQsIHZhbHVlO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnOycpIHtcbiAgICAgICAgZ2VuZXJhdGVkTGluZSsrO1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChhU3RyLmNoYXJBdChpbmRleCkgPT09ICcsJykge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG1hcHBpbmcgPSBuZXcgTWFwcGluZygpO1xuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBnZW5lcmF0ZWRMaW5lO1xuXG4gICAgICAgIC8vIEJlY2F1c2UgZWFjaCBvZmZzZXQgaXMgZW5jb2RlZCByZWxhdGl2ZSB0byB0aGUgcHJldmlvdXMgb25lLFxuICAgICAgICAvLyBtYW55IHNlZ21lbnRzIG9mdGVuIGhhdmUgdGhlIHNhbWUgZW5jb2RpbmcuIFdlIGNhbiBleHBsb2l0IHRoaXNcbiAgICAgICAgLy8gZmFjdCBieSBjYWNoaW5nIHRoZSBwYXJzZWQgdmFyaWFibGUgbGVuZ3RoIGZpZWxkcyBvZiBlYWNoIHNlZ21lbnQsXG4gICAgICAgIC8vIGFsbG93aW5nIHVzIHRvIGF2b2lkIGEgc2Vjb25kIHBhcnNlIGlmIHdlIGVuY291bnRlciB0aGUgc2FtZVxuICAgICAgICAvLyBzZWdtZW50IGFnYWluLlxuICAgICAgICBmb3IgKGVuZCA9IGluZGV4OyBlbmQgPCBsZW5ndGg7IGVuZCsrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgZW5kKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0ciA9IGFTdHIuc2xpY2UoaW5kZXgsIGVuZCk7XG5cbiAgICAgICAgc2VnbWVudCA9IGNhY2hlZFNlZ21lbnRzW3N0cl07XG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgaW5kZXggKz0gc3RyLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWdtZW50ID0gW107XG4gICAgICAgICAgd2hpbGUgKGluZGV4IDwgZW5kKSB7XG4gICAgICAgICAgICBiYXNlNjRWTFEuZGVjb2RlKGFTdHIsIGluZGV4LCB0ZW1wKTtcbiAgICAgICAgICAgIHZhbHVlID0gdGVtcC52YWx1ZTtcbiAgICAgICAgICAgIGluZGV4ID0gdGVtcC5yZXN0O1xuICAgICAgICAgICAgc2VnbWVudC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UsIGJ1dCBubyBsaW5lIGFuZCBjb2x1bW4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UgYW5kIGxpbmUsIGJ1dCBubyBjb2x1bW4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYWNoZWRTZWdtZW50c1tzdHJdID0gc2VnbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdlbmVyYXRlZCBjb2x1bW4uXG4gICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uID0gcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gKyBzZWdtZW50WzBdO1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAvLyBPcmlnaW5hbCBzb3VyY2UuXG4gICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSBwcmV2aW91c1NvdXJjZSArIHNlZ21lbnRbMV07XG4gICAgICAgICAgcHJldmlvdXNTb3VyY2UgKz0gc2VnbWVudFsxXTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGxpbmUuXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPSBwcmV2aW91c09yaWdpbmFsTGluZSArIHNlZ21lbnRbMl07XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZTtcbiAgICAgICAgICAvLyBMaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWRcbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSArPSAxO1xuXG4gICAgICAgICAgLy8gT3JpZ2luYWwgY29sdW1uLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBwcmV2aW91c09yaWdpbmFsQ29sdW1uICsgc2VnbWVudFszXTtcbiAgICAgICAgICBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA+IDQpIHtcbiAgICAgICAgICAgIC8vIE9yaWdpbmFsIG5hbWUuXG4gICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBwcmV2aW91c05hbWUgKyBzZWdtZW50WzRdO1xuICAgICAgICAgICAgcHJldmlvdXNOYW1lICs9IHNlZ21lbnRbNF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZ2VuZXJhdGVkTWFwcGluZ3MucHVzaChtYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvcmlnaW5hbE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBxdWlja1NvcnQoZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IGdlbmVyYXRlZE1hcHBpbmdzO1xuXG4gICAgcXVpY2tTb3J0KG9yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gb3JpZ2luYWxNYXBwaW5ncztcbiAgfTtcblxuLyoqXG4gKiBGaW5kIHRoZSBtYXBwaW5nIHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBoeXBvdGhldGljYWwgXCJuZWVkbGVcIiBtYXBwaW5nIHRoYXRcbiAqIHdlIGFyZSBzZWFyY2hpbmcgZm9yIGluIHRoZSBnaXZlbiBcImhheXN0YWNrXCIgb2YgbWFwcGluZ3MuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2ZpbmRNYXBwaW5nKGFOZWVkbGUsIGFNYXBwaW5ncywgYUxpbmVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ29sdW1uTmFtZSwgYUNvbXBhcmF0b3IsIGFCaWFzKSB7XG4gICAgLy8gVG8gcmV0dXJuIHRoZSBwb3NpdGlvbiB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgd2UgbXVzdCBmaXJzdCBmaW5kIHRoZVxuICAgIC8vIG1hcHBpbmcgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgdGhlbiByZXR1cm4gdGhlIG9wcG9zaXRlIHBvc2l0aW9uIGl0XG4gICAgLy8gcG9pbnRzIHRvLiBCZWNhdXNlIHRoZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB3ZSBjYW4gdXNlIGJpbmFyeSBzZWFyY2ggdG9cbiAgICAvLyBmaW5kIHRoZSBiZXN0IG1hcHBpbmcuXG5cbiAgICBpZiAoYU5lZWRsZVthTGluZU5hbWVdIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbmUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMSwgZ290ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhTmVlZGxlW2FMaW5lTmFtZV0pO1xuICAgIH1cbiAgICBpZiAoYU5lZWRsZVthQ29sdW1uTmFtZV0gPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb2x1bW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCwgZ290ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhTmVlZGxlW2FDb2x1bW5OYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJpbmFyeVNlYXJjaC5zZWFyY2goYU5lZWRsZSwgYU1hcHBpbmdzLCBhQ29tcGFyYXRvciwgYUJpYXMpO1xuICB9O1xuXG4vKipcbiAqIENvbXB1dGUgdGhlIGxhc3QgY29sdW1uIGZvciBlYWNoIGdlbmVyYXRlZCBtYXBwaW5nLiBUaGUgbGFzdCBjb2x1bW4gaXNcbiAqIGluY2x1c2l2ZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29tcHV0ZUNvbHVtblNwYW5zID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfY29tcHV0ZUNvbHVtblNwYW5zKCkge1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICAvLyBNYXBwaW5ncyBkbyBub3QgY29udGFpbiBhIGZpZWxkIGZvciB0aGUgbGFzdCBnZW5lcmF0ZWQgY29sdW1udC4gV2VcbiAgICAgIC8vIGNhbiBjb21lIHVwIHdpdGggYW4gb3B0aW1pc3RpYyBlc3RpbWF0ZSwgaG93ZXZlciwgYnkgYXNzdW1pbmcgdGhhdFxuICAgICAgLy8gbWFwcGluZ3MgYXJlIGNvbnRpZ3VvdXMgKGkuZS4gZ2l2ZW4gdHdvIGNvbnNlY3V0aXZlIG1hcHBpbmdzLCB0aGVcbiAgICAgIC8vIGZpcnN0IG1hcHBpbmcgZW5kcyB3aGVyZSB0aGUgc2Vjb25kIG9uZSBzdGFydHMpLlxuICAgICAgaWYgKGluZGV4ICsgMSA8IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aCkge1xuICAgICAgICB2YXIgbmV4dE1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleCArIDFdO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5leHRNYXBwaW5nLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5nLmxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBsYXN0IG1hcHBpbmcgZm9yIGVhY2ggbGluZSBzcGFucyB0aGUgZW50aXJlIGxpbmUuXG4gICAgICBtYXBwaW5nLmxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBJbmZpbml0eTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkXG4gKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBiaWFzOiBFaXRoZXIgJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdTb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgb3IgbnVsbC5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9vcmlnaW5hbFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIGdlbmVyYXRlZExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgZ2VuZXJhdGVkQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MsXG4gICAgICBcImdlbmVyYXRlZExpbmVcIixcbiAgICAgIFwiZ2VuZXJhdGVkQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9PT0gbmVlZGxlLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdzb3VyY2UnLCBudWxsKTtcbiAgICAgICAgaWYgKHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuYXQoc291cmNlKTtcbiAgICAgICAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbih0aGlzLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBuYW1lID0gdXRpbC5nZXRBcmcobWFwcGluZywgJ25hbWUnLCBudWxsKTtcbiAgICAgICAgaWYgKG5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICBuYW1lID0gdGhpcy5fbmFtZXMuYXQobmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnb3JpZ2luYWxMaW5lJywgbnVsbCksXG4gICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnb3JpZ2luYWxDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGwsXG4gICAgICBuYW1lOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHRoZSBzb3VyY2UgY29udGVudCBmb3IgZXZlcnkgc291cmNlIGluIHRoZSBzb3VyY2VcbiAqIG1hcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXJfaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKSB7XG4gICAgaWYgKCF0aGlzLnNvdXJjZXNDb250ZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50Lmxlbmd0aCA+PSB0aGlzLl9zb3VyY2VzLnNpemUoKSAmJlxuICAgICAgIXRoaXMuc291cmNlc0NvbnRlbnQuc29tZShmdW5jdGlvbiAoc2MpIHsgcmV0dXJuIHNjID09IG51bGw7IH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICogb3JpZ2luYWwgc291cmNlIGZpbGUuIFJldHVybnMgbnVsbCBpZiBubyBvcmlnaW5hbCBzb3VyY2UgY29udGVudCBpc1xuICogYXZhaWxhYmxlLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfc291cmNlQ29udGVudEZvcihhU291cmNlLCBudWxsT25NaXNzaW5nKSB7XG4gICAgaWYgKCF0aGlzLnNvdXJjZXNDb250ZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIGFTb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgYVNvdXJjZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NvdXJjZXMuaGFzKGFTb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoYVNvdXJjZSldO1xuICAgIH1cblxuICAgIHZhciB1cmw7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsXG4gICAgICAgICYmICh1cmwgPSB1dGlsLnVybFBhcnNlKHRoaXMuc291cmNlUm9vdCkpKSB7XG4gICAgICAvLyBYWFg6IGZpbGU6Ly8gVVJJcyBhbmQgYWJzb2x1dGUgcGF0aHMgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGZvclxuICAgICAgLy8gbWFueSB1c2Vycy4gV2UgY2FuIGhlbHAgdGhlbSBvdXQgd2hlbiB0aGV5IGV4cGVjdCBmaWxlOi8vIFVSSXMgdG9cbiAgICAgIC8vIGJlaGF2ZSBsaWtlIGl0IHdvdWxkIGlmIHRoZXkgd2VyZSBydW5uaW5nIGEgbG9jYWwgSFRUUCBzZXJ2ZXIuIFNlZVxuICAgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg1NTk3LlxuICAgICAgdmFyIGZpbGVVcmlBYnNQYXRoID0gYVNvdXJjZS5yZXBsYWNlKC9eZmlsZTpcXC9cXC8vLCBcIlwiKTtcbiAgICAgIGlmICh1cmwuc2NoZW1lID09IFwiZmlsZVwiXG4gICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoZmlsZVVyaUFic1BhdGgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihmaWxlVXJpQWJzUGF0aCldXG4gICAgICB9XG5cbiAgICAgIGlmICgoIXVybC5wYXRoIHx8IHVybC5wYXRoID09IFwiL1wiKVxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKFwiL1wiICsgYVNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKFwiL1wiICsgYVNvdXJjZSldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCByZWN1cnNpdmVseSBmcm9tXG4gICAgLy8gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yLiBJbiB0aGF0IGNhc2UsIHdlXG4gICAgLy8gZG9uJ3Qgd2FudCB0byB0aHJvdyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBzb3VyY2UgLSB3ZSBqdXN0IHdhbnQgdG9cbiAgICAvLyByZXR1cm4gbnVsbCwgc28gd2UgcHJvdmlkZSBhIGZsYWcgdG8gZXhpdCBncmFjZWZ1bGx5LlxuICAgIGlmIChudWxsT25NaXNzaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKTtcbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgICAgfTtcbiAgICB9XG4gICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBvcmlnaW5hbExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICBuZWVkbGUsXG4gICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgIFwib3JpZ2luYWxDb2x1bW5cIixcbiAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsXG4gICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gbmVlZGxlLnNvdXJjZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgIH07XG4gIH07XG5cbmV4cG9ydHMuQmFzaWNTb3VyY2VNYXBDb25zdW1lciA9IEJhc2ljU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQW4gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaFxuICogd2UgY2FuIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbi4gSXQgZGlmZmVycyBmcm9tIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgaW5cbiAqIHRoYXQgaXQgdGFrZXMgXCJpbmRleGVkXCIgc291cmNlIG1hcHMgKGkuZS4gb25lcyB3aXRoIGEgXCJzZWN0aW9uc1wiIGZpZWxkKSBhc1xuICogaW5wdXQuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIGEgcmF3IHNvdXJjZSBtYXAgKGVpdGhlciBhcyBhIEpTT04gc3RyaW5nLCBvciBhbHJlYWR5XG4gKiBwYXJzZWQgdG8gYW4gb2JqZWN0KS4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjIGZvciBpbmRleGVkIHNvdXJjZSBtYXBzLCB0aGV5XG4gKiBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gKiAgIC0gc2VjdGlvbnM6IEEgbGlzdCBvZiBzZWN0aW9uIGRlZmluaXRpb25zLlxuICpcbiAqIEVhY2ggdmFsdWUgdW5kZXIgdGhlIFwic2VjdGlvbnNcIiBmaWVsZCBoYXMgdHdvIGZpZWxkczpcbiAqICAgLSBvZmZzZXQ6IFRoZSBvZmZzZXQgaW50byB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkIGF0IHdoaWNoIHRoaXMgc2VjdGlvblxuICogICAgICAgYmVnaW5zIHRvIGFwcGx5LCBkZWZpbmVkIGFzIGFuIG9iamVjdCB3aXRoIGEgXCJsaW5lXCIgYW5kIFwiY29sdW1uXCJcbiAqICAgICAgIGZpZWxkLlxuICogICAtIG1hcDogQSBzb3VyY2UgbWFwIGRlZmluaXRpb24uIFRoaXMgc291cmNlIG1hcCBjb3VsZCBhbHNvIGJlIGluZGV4ZWQsXG4gKiAgICAgICBidXQgZG9lc24ndCBoYXZlIHRvIGJlLlxuICpcbiAqIEluc3RlYWQgb2YgdGhlIFwibWFwXCIgZmllbGQsIGl0J3MgYWxzbyBwb3NzaWJsZSB0byBoYXZlIGEgXCJ1cmxcIiBmaWVsZFxuICogc3BlY2lmeWluZyBhIFVSTCB0byByZXRyaWV2ZSBhIHNvdXJjZSBtYXAgZnJvbSwgYnV0IHRoYXQncyBjdXJyZW50bHlcbiAqIHVuc3VwcG9ydGVkLlxuICpcbiAqIEhlcmUncyBhbiBleGFtcGxlIHNvdXJjZSBtYXAsIHRha2VuIGZyb20gdGhlIHNvdXJjZSBtYXAgc3BlY1swXSwgYnV0XG4gKiBtb2RpZmllZCB0byBvbWl0IGEgc2VjdGlvbiB3aGljaCB1c2VzIHRoZSBcInVybFwiIGZpZWxkLlxuICpcbiAqICB7XG4gKiAgICB2ZXJzaW9uIDogMyxcbiAqICAgIGZpbGU6IFwiYXBwLmpzXCIsXG4gKiAgICBzZWN0aW9uczogW3tcbiAqICAgICAgb2Zmc2V0OiB7bGluZToxMDAsIGNvbHVtbjoxMH0sXG4gKiAgICAgIG1hcDoge1xuICogICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgIGZpbGU6IFwic2VjdGlvbi5qc1wiLFxuICogICAgICAgIHNvdXJjZXM6IFtcImZvby5qc1wiLCBcImJhci5qc1wiXSxcbiAqICAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAqICAgICAgICBtYXBwaW5nczogXCJBQUFBLEU7O0FCQ0RFO1wiXG4gKiAgICAgIH1cbiAqICAgIH1dLFxuICogIH1cbiAqXG4gKiBbMF06IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVUxUkdBZWhRd1J5cFVUb3ZGMUtSbHBpT0Z6ZTBiLV8yZ2M2ZkFIMEtZMGsvZWRpdCNoZWFkaW5nPWguNTM1ZXMzeGVwcmd0XG4gKi9cbmZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgfVxuXG4gIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICB2YXIgc2VjdGlvbnMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzZWN0aW9ucycpO1xuXG4gIGlmICh2ZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgfVxuXG4gIHRoaXMuX3NvdXJjZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcblxuICB2YXIgbGFzdE9mZnNldCA9IHtcbiAgICBsaW5lOiAtMSxcbiAgICBjb2x1bW46IDBcbiAgfTtcbiAgdGhpcy5fc2VjdGlvbnMgPSBzZWN0aW9ucy5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICBpZiAocy51cmwpIHtcbiAgICAgIC8vIFRoZSB1cmwgZmllbGQgd2lsbCByZXF1aXJlIHN1cHBvcnQgZm9yIGFzeW5jaHJvbmljaXR5LlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzE2XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cHBvcnQgZm9yIHVybCBmaWVsZCBpbiBzZWN0aW9ucyBub3QgaW1wbGVtZW50ZWQuJyk7XG4gICAgfVxuICAgIHZhciBvZmZzZXQgPSB1dGlsLmdldEFyZyhzLCAnb2Zmc2V0Jyk7XG4gICAgdmFyIG9mZnNldExpbmUgPSB1dGlsLmdldEFyZyhvZmZzZXQsICdsaW5lJyk7XG4gICAgdmFyIG9mZnNldENvbHVtbiA9IHV0aWwuZ2V0QXJnKG9mZnNldCwgJ2NvbHVtbicpO1xuXG4gICAgaWYgKG9mZnNldExpbmUgPCBsYXN0T2Zmc2V0LmxpbmUgfHxcbiAgICAgICAgKG9mZnNldExpbmUgPT09IGxhc3RPZmZzZXQubGluZSAmJiBvZmZzZXRDb2x1bW4gPCBsYXN0T2Zmc2V0LmNvbHVtbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2VjdGlvbiBvZmZzZXRzIG11c3QgYmUgb3JkZXJlZCBhbmQgbm9uLW92ZXJsYXBwaW5nLicpO1xuICAgIH1cbiAgICBsYXN0T2Zmc2V0ID0gb2Zmc2V0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdlbmVyYXRlZE9mZnNldDoge1xuICAgICAgICAvLyBUaGUgb2Zmc2V0IGZpZWxkcyBhcmUgMC1iYXNlZCwgYnV0IHdlIHVzZSAxLWJhc2VkIGluZGljZXMgd2hlblxuICAgICAgICAvLyBlbmNvZGluZy9kZWNvZGluZyBmcm9tIFZMUS5cbiAgICAgICAgZ2VuZXJhdGVkTGluZTogb2Zmc2V0TGluZSArIDEsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogb2Zmc2V0Q29sdW1uICsgMVxuICAgICAgfSxcbiAgICAgIGNvbnN1bWVyOiBuZXcgU291cmNlTWFwQ29uc3VtZXIodXRpbC5nZXRBcmcocywgJ21hcCcpKVxuICAgIH1cbiAgfSk7XG59XG5cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBvcmlnaW5hbCBzb3VyY2VzLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ3NvdXJjZXMnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl9zZWN0aW9uc1tpXS5jb25zdW1lci5zb3VyY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHNvdXJjZXMucHVzaCh0aGlzLl9zZWN0aW9uc1tpXS5jb25zdW1lci5zb3VyY2VzW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZXM7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICAvLyBGaW5kIHRoZSBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbiB3ZSdyZSB0cnlpbmcgdG8gbWFwXG4gICAgLy8gdG8gYW4gb3JpZ2luYWwgcG9zaXRpb24uXG4gICAgdmFyIHNlY3Rpb25JbmRleCA9IGJpbmFyeVNlYXJjaC5zZWFyY2gobmVlZGxlLCB0aGlzLl9zZWN0aW9ucyxcbiAgICAgIGZ1bmN0aW9uKG5lZWRsZSwgc2VjdGlvbikge1xuICAgICAgICB2YXIgY21wID0gbmVlZGxlLmdlbmVyYXRlZExpbmUgLSBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lO1xuICAgICAgICBpZiAoY21wKSB7XG4gICAgICAgICAgcmV0dXJuIGNtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAobmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgICAgICAgICAgc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgIH0pO1xuICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcblxuICAgIGlmICghc2VjdGlvbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBudWxsLFxuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIG5hbWU6IG51bGxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlY3Rpb24uY29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICBsaW5lOiBuZWVkbGUuZ2VuZXJhdGVkTGluZSAtXG4gICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICBjb2x1bW46IG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbmVlZGxlLmdlbmVyYXRlZExpbmVcbiAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgOiAwKSxcbiAgICAgIGJpYXM6IGFBcmdzLmJpYXNcbiAgICB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHRoZSBzb3VyY2UgY29udGVudCBmb3IgZXZlcnkgc291cmNlIGluIHRoZSBzb3VyY2VcbiAqIG1hcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWN0aW9ucy5ldmVyeShmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHMuY29uc3VtZXIuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKTtcbiAgICB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG5cbiAgICAgIHZhciBjb250ZW50ID0gc2VjdGlvbi5jb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIHRydWUpO1xuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChudWxsT25NaXNzaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICAvLyBPbmx5IGNvbnNpZGVyIHRoaXMgc2VjdGlvbiBpZiB0aGUgcmVxdWVzdGVkIHNvdXJjZSBpcyBpbiB0aGUgbGlzdCBvZlxuICAgICAgLy8gc291cmNlcyBvZiB0aGUgY29uc3VtZXIuXG4gICAgICBpZiAoc2VjdGlvbi5jb25zdW1lci5zb3VyY2VzLmluZGV4T2YodXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKSkgPT09IC0xKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIGdlbmVyYXRlZFBvc2l0aW9uID0gc2VjdGlvbi5jb25zdW1lci5nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncyk7XG4gICAgICBpZiAoZ2VuZXJhdGVkUG9zaXRpb24pIHtcbiAgICAgICAgdmFyIHJldCA9IHtcbiAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWRQb3NpdGlvbi5jb2x1bW4gK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IGdlbmVyYXRlZFBvc2l0aW9uLmxpbmVcbiAgICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgICA6IDApXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuICAgICAgdmFyIHNlY3Rpb25NYXBwaW5ncyA9IHNlY3Rpb24uY29uc3VtZXIuX2dlbmVyYXRlZE1hcHBpbmdzO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWN0aW9uTWFwcGluZ3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIG1hcHBpbmcgPSBzZWN0aW9uTWFwcGluZ3Nbal07XG5cbiAgICAgICAgdmFyIHNvdXJjZSA9IHNlY3Rpb24uY29uc3VtZXIuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBpZiAoc2VjdGlvbi5jb25zdW1lci5zb3VyY2VSb290ICE9PSBudWxsKSB7XG4gICAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zb3VyY2VzLmFkZChzb3VyY2UpO1xuICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblxuICAgICAgICB2YXIgbmFtZSA9IHNlY3Rpb24uY29uc3VtZXIuX25hbWVzLmF0KG1hcHBpbmcubmFtZSk7XG4gICAgICAgIHRoaXMuX25hbWVzLmFkZChuYW1lKTtcbiAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG5cbiAgICAgICAgLy8gVGhlIG1hcHBpbmdzIGNvbWluZyBmcm9tIHRoZSBjb25zdW1lciBmb3IgdGhlIHNlY3Rpb24gaGF2ZVxuICAgICAgICAvLyBnZW5lcmF0ZWQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgc2VjdGlvbiwgc28gd2VcbiAgICAgICAgLy8gbmVlZCB0byBvZmZzZXQgdGhlbSB0byBiZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbmNhdGVuYXRlZFxuICAgICAgICAvLyBnZW5lcmF0ZWQgZmlsZS5cbiAgICAgICAgdmFyIGFkanVzdGVkTWFwcGluZyA9IHtcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUgK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBtYXBwaW5nLmdlbmVyYXRlZExpbmVcbiAgICAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgICAgOiAwKSxcbiAgICAgICAgICBvcmlnaW5hbExpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MucHVzaChhZGp1c3RlZE1hcHBpbmcpO1xuICAgICAgICBpZiAodHlwZW9mIGFkanVzdGVkTWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MucHVzaChhZGp1c3RlZE1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCk7XG4gICAgcXVpY2tTb3J0KHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgfTtcblxuZXhwb3J0cy5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIgPSBJbmRleGVkU291cmNlTWFwQ29uc3VtZXI7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8qKlxuICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2V0dGluZyB2YWx1ZXMgZnJvbSBwYXJhbWV0ZXIvb3B0aW9uc1xuICogb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gYXJncyBUaGUgb2JqZWN0IHdlIGFyZSBleHRyYWN0aW5nIHZhbHVlcyBmcm9tXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgd2UgYXJlIGdldHRpbmcuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIEFuIG9wdGlvbmFsIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgcHJvcGVydHkgaXMgbWlzc2luZ1xuICogZnJvbSB0aGUgb2JqZWN0LiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBhblxuICogZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gKi9cbmZ1bmN0aW9uIGdldEFyZyhhQXJncywgYU5hbWUsIGFEZWZhdWx0VmFsdWUpIHtcbiAgaWYgKGFOYW1lIGluIGFBcmdzKSB7XG4gICAgcmV0dXJuIGFBcmdzW2FOYW1lXTtcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIGFEZWZhdWx0VmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhTmFtZSArICdcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LicpO1xuICB9XG59XG5leHBvcnRzLmdldEFyZyA9IGdldEFyZztcblxudmFyIHVybFJlZ2V4cCA9IC9eKD86KFtcXHcrXFwtLl0rKTopP1xcL1xcLyg/OihcXHcrOlxcdyspQCk/KFtcXHcuXSopKD86OihcXGQrKSk/KFxcUyopJC87XG52YXIgZGF0YVVybFJlZ2V4cCA9IC9eZGF0YTouK1xcLC4rJC87XG5cbmZ1bmN0aW9uIHVybFBhcnNlKGFVcmwpIHtcbiAgdmFyIG1hdGNoID0gYVVybC5tYXRjaCh1cmxSZWdleHApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY2hlbWU6IG1hdGNoWzFdLFxuICAgIGF1dGg6IG1hdGNoWzJdLFxuICAgIGhvc3Q6IG1hdGNoWzNdLFxuICAgIHBvcnQ6IG1hdGNoWzRdLFxuICAgIHBhdGg6IG1hdGNoWzVdXG4gIH07XG59XG5leHBvcnRzLnVybFBhcnNlID0gdXJsUGFyc2U7XG5cbmZ1bmN0aW9uIHVybEdlbmVyYXRlKGFQYXJzZWRVcmwpIHtcbiAgdmFyIHVybCA9ICcnO1xuICBpZiAoYVBhcnNlZFVybC5zY2hlbWUpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5zY2hlbWUgKyAnOic7XG4gIH1cbiAgdXJsICs9ICcvLyc7XG4gIGlmIChhUGFyc2VkVXJsLmF1dGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5hdXRoICsgJ0AnO1xuICB9XG4gIGlmIChhUGFyc2VkVXJsLmhvc3QpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5ob3N0O1xuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBvcnQpIHtcbiAgICB1cmwgKz0gXCI6XCIgKyBhUGFyc2VkVXJsLnBvcnRcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wYXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwucGF0aDtcbiAgfVxuICByZXR1cm4gdXJsO1xufVxuZXhwb3J0cy51cmxHZW5lcmF0ZSA9IHVybEdlbmVyYXRlO1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBwYXRoLCBvciB0aGUgcGF0aCBwb3J0aW9uIG9mIGEgVVJMOlxuICpcbiAqIC0gUmVwbGFjZXMgY29uc2VjdXRpdmUgc2xhc2hlcyB3aXRoIG9uZSBzbGFzaC5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnLicgcGFydHMuXG4gKiAtIFJlbW92ZXMgdW5uZWNlc3NhcnkgJzxkaXI+Ly4uJyBwYXJ0cy5cbiAqXG4gKiBCYXNlZCBvbiBjb2RlIGluIHRoZSBOb2RlLmpzICdwYXRoJyBjb3JlIG1vZHVsZS5cbiAqXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgdXJsIHRvIG5vcm1hbGl6ZS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplKGFQYXRoKSB7XG4gIHZhciBwYXRoID0gYVBhdGg7XG4gIHZhciB1cmwgPSB1cmxQYXJzZShhUGF0aCk7XG4gIGlmICh1cmwpIHtcbiAgICBpZiAoIXVybC5wYXRoKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuICAgIHBhdGggPSB1cmwucGF0aDtcbiAgfVxuICB2YXIgaXNBYnNvbHV0ZSA9IGV4cG9ydHMuaXNBYnNvbHV0ZShwYXRoKTtcblxuICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KC9cXC8rLyk7XG4gIGZvciAodmFyIHBhcnQsIHVwID0gMCwgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgcGFydCA9IHBhcnRzW2ldO1xuICAgIGlmIChwYXJ0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCA+IDApIHtcbiAgICAgIGlmIChwYXJ0ID09PSAnJykge1xuICAgICAgICAvLyBUaGUgZmlyc3QgcGFydCBpcyBibGFuayBpZiB0aGUgcGF0aCBpcyBhYnNvbHV0ZS4gVHJ5aW5nIHRvIGdvXG4gICAgICAgIC8vIGFib3ZlIHRoZSByb290IGlzIGEgbm8tb3AuIFRoZXJlZm9yZSB3ZSBjYW4gcmVtb3ZlIGFsbCAnLi4nIHBhcnRzXG4gICAgICAgIC8vIGRpcmVjdGx5IGFmdGVyIHRoZSByb290LlxuICAgICAgICBwYXJ0cy5zcGxpY2UoaSArIDEsIHVwKTtcbiAgICAgICAgdXAgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFydHMuc3BsaWNlKGksIDIpO1xuICAgICAgICB1cC0tO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwYXRoID0gcGFydHMuam9pbignLycpO1xuXG4gIGlmIChwYXRoID09PSAnJykge1xuICAgIHBhdGggPSBpc0Fic29sdXRlID8gJy8nIDogJy4nO1xuICB9XG5cbiAgaWYgKHVybCkge1xuICAgIHVybC5wYXRoID0gcGF0aDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUodXJsKTtcbiAgfVxuICByZXR1cm4gcGF0aDtcbn1cbmV4cG9ydHMubm9ybWFsaXplID0gbm9ybWFsaXplO1xuXG4vKipcbiAqIEpvaW5zIHR3byBwYXRocy9VUkxzLlxuICpcbiAqIEBwYXJhbSBhUm9vdCBUaGUgcm9vdCBwYXRoIG9yIFVSTC5cbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciBVUkwgdG8gYmUgam9pbmVkIHdpdGggdGhlIHJvb3QuXG4gKlxuICogLSBJZiBhUGF0aCBpcyBhIFVSTCBvciBhIGRhdGEgVVJJLCBhUGF0aCBpcyByZXR1cm5lZCwgdW5sZXNzIGFQYXRoIGlzIGFcbiAqICAgc2NoZW1lLXJlbGF0aXZlIFVSTDogVGhlbiB0aGUgc2NoZW1lIG9mIGFSb290LCBpZiBhbnksIGlzIHByZXBlbmRlZFxuICogICBmaXJzdC5cbiAqIC0gT3RoZXJ3aXNlIGFQYXRoIGlzIGEgcGF0aC4gSWYgYVJvb3QgaXMgYSBVUkwsIHRoZW4gaXRzIHBhdGggcG9ydGlvblxuICogICBpcyB1cGRhdGVkIHdpdGggdGhlIHJlc3VsdCBhbmQgYVJvb3QgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSB0aGUgcmVzdWx0XG4gKiAgIGlzIHJldHVybmVkLlxuICogICAtIElmIGFQYXRoIGlzIGFic29sdXRlLCB0aGUgcmVzdWx0IGlzIGFQYXRoLlxuICogICAtIE90aGVyd2lzZSB0aGUgdHdvIHBhdGhzIGFyZSBqb2luZWQgd2l0aCBhIHNsYXNoLlxuICogLSBKb2luaW5nIGZvciBleGFtcGxlICdodHRwOi8vJyBhbmQgJ3d3dy5leGFtcGxlLmNvbScgaXMgYWxzbyBzdXBwb3J0ZWQuXG4gKi9cbmZ1bmN0aW9uIGpvaW4oYVJvb3QsIGFQYXRoKSB7XG4gIGlmIChhUm9vdCA9PT0gXCJcIikge1xuICAgIGFSb290ID0gXCIuXCI7XG4gIH1cbiAgaWYgKGFQYXRoID09PSBcIlwiKSB7XG4gICAgYVBhdGggPSBcIi5cIjtcbiAgfVxuICB2YXIgYVBhdGhVcmwgPSB1cmxQYXJzZShhUGF0aCk7XG4gIHZhciBhUm9vdFVybCA9IHVybFBhcnNlKGFSb290KTtcbiAgaWYgKGFSb290VXJsKSB7XG4gICAgYVJvb3QgPSBhUm9vdFVybC5wYXRoIHx8ICcvJztcbiAgfVxuXG4gIC8vIGBqb2luKGZvbywgJy8vd3d3LmV4YW1wbGUub3JnJylgXG4gIGlmIChhUGF0aFVybCAmJiAhYVBhdGhVcmwuc2NoZW1lKSB7XG4gICAgaWYgKGFSb290VXJsKSB7XG4gICAgICBhUGF0aFVybC5zY2hlbWUgPSBhUm9vdFVybC5zY2hlbWU7XG4gICAgfVxuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUGF0aFVybCk7XG4gIH1cblxuICBpZiAoYVBhdGhVcmwgfHwgYVBhdGgubWF0Y2goZGF0YVVybFJlZ2V4cCkpIHtcbiAgICByZXR1cm4gYVBhdGg7XG4gIH1cblxuICAvLyBgam9pbignaHR0cDovLycsICd3d3cuZXhhbXBsZS5jb20nKWBcbiAgaWYgKGFSb290VXJsICYmICFhUm9vdFVybC5ob3N0ICYmICFhUm9vdFVybC5wYXRoKSB7XG4gICAgYVJvb3RVcmwuaG9zdCA9IGFQYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cblxuICB2YXIgam9pbmVkID0gYVBhdGguY2hhckF0KDApID09PSAnLydcbiAgICA/IGFQYXRoXG4gICAgOiBub3JtYWxpemUoYVJvb3QucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyBhUGF0aCk7XG5cbiAgaWYgKGFSb290VXJsKSB7XG4gICAgYVJvb3RVcmwucGF0aCA9IGpvaW5lZDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG4gIHJldHVybiBqb2luZWQ7XG59XG5leHBvcnRzLmpvaW4gPSBqb2luO1xuXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbiAoYVBhdGgpIHtcbiAgcmV0dXJuIGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nIHx8ICEhYVBhdGgubWF0Y2godXJsUmVnZXhwKTtcbn07XG5cbi8qKlxuICogTWFrZSBhIHBhdGggcmVsYXRpdmUgdG8gYSBVUkwgb3IgYW5vdGhlciBwYXRoLlxuICpcbiAqIEBwYXJhbSBhUm9vdCBUaGUgcm9vdCBwYXRoIG9yIFVSTC5cbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciBVUkwgdG8gYmUgbWFkZSByZWxhdGl2ZSB0byBhUm9vdC5cbiAqL1xuZnVuY3Rpb24gcmVsYXRpdmUoYVJvb3QsIGFQYXRoKSB7XG4gIGlmIChhUm9vdCA9PT0gXCJcIikge1xuICAgIGFSb290ID0gXCIuXCI7XG4gIH1cblxuICBhUm9vdCA9IGFSb290LnJlcGxhY2UoL1xcLyQvLCAnJyk7XG5cbiAgLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBwYXRoIHRvIGJlIGFib3ZlIHRoZSByb290LiBJbiB0aGlzIGNhc2UsIHNpbXBseVxuICAvLyBjaGVja2luZyB3aGV0aGVyIHRoZSByb290IGlzIGEgcHJlZml4IG9mIHRoZSBwYXRoIHdvbid0IHdvcmsuIEluc3RlYWQsIHdlXG4gIC8vIG5lZWQgdG8gcmVtb3ZlIGNvbXBvbmVudHMgZnJvbSB0aGUgcm9vdCBvbmUgYnkgb25lLCB1bnRpbCBlaXRoZXIgd2UgZmluZFxuICAvLyBhIHByZWZpeCB0aGF0IGZpdHMsIG9yIHdlIHJ1biBvdXQgb2YgY29tcG9uZW50cyB0byByZW1vdmUuXG4gIHZhciBsZXZlbCA9IDA7XG4gIHdoaWxlIChhUGF0aC5pbmRleE9mKGFSb290ICsgJy8nKSAhPT0gMCkge1xuICAgIHZhciBpbmRleCA9IGFSb290Lmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9ubHkgcGFydCBvZiB0aGUgcm9vdCB0aGF0IGlzIGxlZnQgaXMgdGhlIHNjaGVtZSAoaS5lLiBodHRwOi8vLFxuICAgIC8vIGZpbGU6Ly8vLCBldGMuKSwgb25lIG9yIG1vcmUgc2xhc2hlcyAoLyksIG9yIHNpbXBseSBub3RoaW5nIGF0IGFsbCwgd2VcbiAgICAvLyBoYXZlIGV4aGF1c3RlZCBhbGwgY29tcG9uZW50cywgc28gdGhlIHBhdGggaXMgbm90IHJlbGF0aXZlIHRvIHRoZSByb290LlxuICAgIGFSb290ID0gYVJvb3Quc2xpY2UoMCwgaW5kZXgpO1xuICAgIGlmIChhUm9vdC5tYXRjaCgvXihbXlxcL10rOlxcLyk/XFwvKiQvKSkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgICsrbGV2ZWw7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgd2UgYWRkIGEgXCIuLi9cIiBmb3IgZWFjaCBjb21wb25lbnQgd2UgcmVtb3ZlZCBmcm9tIHRoZSByb290LlxuICByZXR1cm4gQXJyYXkobGV2ZWwgKyAxKS5qb2luKFwiLi4vXCIpICsgYVBhdGguc3Vic3RyKGFSb290Lmxlbmd0aCArIDEpO1xufVxuZXhwb3J0cy5yZWxhdGl2ZSA9IHJlbGF0aXZlO1xuXG52YXIgc3VwcG9ydHNOdWxsUHJvdG8gPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuICEoJ19fcHJvdG9fXycgaW4gb2JqKTtcbn0oKSk7XG5cbmZ1bmN0aW9uIGlkZW50aXR5IChzKSB7XG4gIHJldHVybiBzO1xufVxuXG4vKipcbiAqIEJlY2F1c2UgYmVoYXZpb3IgZ29lcyB3YWNreSB3aGVuIHlvdSBzZXQgYF9fcHJvdG9fX2Agb24gb2JqZWN0cywgd2VcbiAqIGhhdmUgdG8gcHJlZml4IGFsbCB0aGUgc3RyaW5ncyBpbiBvdXIgc2V0IHdpdGggYW4gYXJiaXRyYXJ5IGNoYXJhY3Rlci5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9wdWxsLzMxIGFuZFxuICogaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9pc3N1ZXMvMzBcbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuZnVuY3Rpb24gdG9TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiAnJCcgKyBhU3RyO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLnRvU2V0U3RyaW5nID0gc3VwcG9ydHNOdWxsUHJvdG8gPyBpZGVudGl0eSA6IHRvU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBmcm9tU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gYVN0ci5zbGljZSgxKTtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy5mcm9tU2V0U3RyaW5nID0gc3VwcG9ydHNOdWxsUHJvdG8gPyBpZGVudGl0eSA6IGZyb21TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzUHJvdG9TdHJpbmcocykge1xuICBpZiAoIXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgbGVuZ3RoID0gcy5sZW5ndGg7XG5cbiAgaWYgKGxlbmd0aCA8IDkgLyogXCJfX3Byb3RvX19cIi5sZW5ndGggKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocy5jaGFyQ29kZUF0KGxlbmd0aCAtIDEpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMikgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAzKSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDQpICE9PSAxMTYgLyogJ3QnICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNSkgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA2KSAhPT0gMTE0IC8qICdyJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDcpICE9PSAxMTIgLyogJ3AnICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOCkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA5KSAhPT0gOTUgIC8qICdfJyAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSBsZW5ndGggLSAxMDsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAocy5jaGFyQ29kZUF0KGkpICE9PSAzNiAvKiAnJCcgKi8pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdoZXJlIHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgb3JpZ2luYWwgc291cmNlL2xpbmUvY29sdW1uLCBidXQgZGlmZmVyZW50IGdlbmVyYXRlZFxuICogbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGEgbWFwcGluZyB3aXRoIGFcbiAqIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICB2YXIgY21wID0gbWFwcGluZ0Euc291cmNlIC0gbWFwcGluZ0Iuc291cmNlO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsTGluZSAtIG1hcHBpbmdCLm9yaWdpbmFsTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIHJldHVybiBtYXBwaW5nQS5uYW1lIC0gbWFwcGluZ0IubmFtZTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMgPSBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucztcblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggZGVmbGF0ZWQgc291cmNlIGFuZCBuYW1lIGluZGljZXMgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4sIGJ1dCBkaWZmZXJlbnRcbiAqIHNvdXJjZS9uYW1lL29yaWdpbmFsIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhXG4gKiBtYXBwaW5nIHdpdGggYSBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Euc291cmNlIC0gbWFwcGluZ0Iuc291cmNlO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsTGluZSAtIG1hcHBpbmdCLm9yaWdpbmFsTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIHJldHVybiBtYXBwaW5nQS5uYW1lIC0gbWFwcGluZ0IubmFtZTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZDtcblxuZnVuY3Rpb24gc3RyY21wKGFTdHIxLCBhU3RyMikge1xuICBpZiAoYVN0cjEgPT09IGFTdHIyKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoYVN0cjEgPiBhU3RyMikge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBpbmZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgc3RyaW5ncyB3aGVyZVxuICogdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBzdHJjbXAobWFwcGluZ0Euc291cmNlLCBtYXBwaW5nQi5zb3VyY2UpO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsTGluZSAtIG1hcHBpbmdCLm9yaWdpbmFsTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIHJldHVybiBzdHJjbXAobWFwcGluZ0EubmFtZSwgbWFwcGluZ0IubmFtZSk7XG59XG5leHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQ7XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFja3RyYWNlLWdwcycsIFsnc291cmNlLW1hcCcsICdzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyJyksIHJlcXVpcmUoJ3N0YWNrZnJhbWUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja1RyYWNlR1BTID0gZmFjdG9yeShyb290LlNvdXJjZU1hcCB8fCByb290LnNvdXJjZU1hcCwgcm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uKFNvdXJjZU1hcCwgU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIE1ha2UgYSBYLURvbWFpbiByZXF1ZXN0IHRvIHVybCBhbmQgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IHdpdGggcmVzcG9uc2UgdGV4dCBpZiBmdWxmaWxsZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfeGRyKHVybCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICByZXEub3BlbignZ2V0JywgdXJsKTtcbiAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIG9ucmVhZHlzdGF0ZWNoYW5nZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChyZXEuc3RhdHVzID49IDIwMCAmJiByZXEuc3RhdHVzIDwgMzAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKHVybC5zdWJzdHIoMCwgNykgPT09ICdmaWxlOi8vJyAmJiByZXEucmVzcG9uc2VUZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0hUVFAgc3RhdHVzOiAnICsgcmVxLnN0YXR1cyArICcgcmV0cmlldmluZyAnICsgdXJsKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVxLnNlbmQoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgQmFzZTY0LWVuY29kZWQgc3RyaW5nIGludG8gaXRzIG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uLlxuICAgICAqIFVzZWQgZm9yIGlubGluZSBzb3VyY2VtYXBzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGI2NHN0ciBCYXNlLTY0IGVuY29kZWQgc3RyaW5nXG4gICAgICogQHJldHVybnMge1N0cmluZ30gb3JpZ2luYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NC1lbmNvZGVkIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfYXRvYihiNjRzdHIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5hdG9iKSB7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93LmF0b2IoYjY0c3RyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3VwcGx5IGEgcG9seWZpbGwgZm9yIHdpbmRvdy5hdG9iIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9wYXJzZUpzb24oc3RyaW5nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgSlNPTiAhPT0gJ3VuZGVmaW5lZCcgJiYgSlNPTi5wYXJzZSkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3VwcGx5IGEgcG9seWZpbGwgZm9yIEpTT04ucGFyc2UgaW4gdGhpcyBlbnZpcm9ubWVudCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRGdW5jdGlvbk5hbWUoc291cmNlLCBsaW5lTnVtYmVyLyosIGNvbHVtbk51bWJlciovKSB7XG4gICAgICAgIHZhciBzeW50YXhlcyA9IFtcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGZ1bmN0aW9uICh7YXJnc30pIFRPRE8gYXJncyBjYXB0dXJlXG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypmdW5jdGlvblxcYi8sXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiB7bmFtZX0oe2FyZ3N9KSBtWzFdPW5hbWUgbVsyXT1hcmdzXG4gICAgICAgICAgICAvZnVuY3Rpb25cXHMrKFteKCdcImBdKj8pXFxzKlxcKChbXildKilcXCkvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gZXZhbCgpXG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccyooPzpldmFsfG5ldyBGdW5jdGlvbilcXGIvLFxuICAgICAgICAgICAgLy8gZm5fbmFtZSgpIHtcbiAgICAgICAgICAgIC9cXGIoPyEoPzppZnxmb3J8c3dpdGNofHdoaWxlfHdpdGh8Y2F0Y2gpXFxiKSg/Oig/OnN0YXRpYylcXHMrKT8oXFxTKylcXHMqXFwoLio/XFwpXFxzKlxcey8sXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSAoKSA9PiB7XG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypcXCguKj9cXClcXHMqPT4vXG4gICAgICAgIF07XG4gICAgICAgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgnXFxuJyk7XG5cbiAgICAgICAgLy8gV2FsayBiYWNrd2FyZHMgaW4gdGhlIHNvdXJjZSBsaW5lcyB1bnRpbCB3ZSBmaW5kIHRoZSBsaW5lIHdoaWNoIG1hdGNoZXMgb25lIG9mIHRoZSBwYXR0ZXJucyBhYm92ZVxuICAgICAgICB2YXIgY29kZSA9ICcnO1xuICAgICAgICB2YXIgbWF4TGluZXMgPSBNYXRoLm1pbihsaW5lTnVtYmVyLCAyMCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4TGluZXM7ICsraSkge1xuICAgICAgICAgICAgLy8gbGluZU5vIGlzIDEtYmFzZWQsIHNvdXJjZVtdIGlzIDAtYmFzZWRcbiAgICAgICAgICAgIHZhciBsaW5lID0gbGluZXNbbGluZU51bWJlciAtIGkgLSAxXTtcbiAgICAgICAgICAgIHZhciBjb21tZW50UG9zID0gbGluZS5pbmRleE9mKCcvLycpO1xuICAgICAgICAgICAgaWYgKGNvbW1lbnRQb3MgPj0gMCkge1xuICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cigwLCBjb21tZW50UG9zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gbGluZSArIGNvZGU7XG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IHN5bnRheGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtID0gc3ludGF4ZXNbaW5kZXhdLmV4ZWMoY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG1bMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtWzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Vuc3VyZVN1cHBvcnRlZEVudmlyb25tZW50KCkge1xuICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY29uc3VtZSBzb3VyY2UgbWFwcyBpbiBvbGRlciBicm93c2VycycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGFja2ZyYW1lICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gU3RhY2tGcmFtZSBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUuZmlsZU5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBmaWxlIG5hbWUgaXMgbm90IGEgU3RyaW5nJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUubGluZU51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciAlIDEgIT09IDAgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGxpbmUgbnVtYmVyIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGNvbHVtbiBudW1iZXIgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSkge1xuICAgICAgICB2YXIgc291cmNlTWFwcGluZ1VybFJlZ0V4cCA9IC9cXC9cXC9bI0BdID9zb3VyY2VNYXBwaW5nVVJMPShbXlxccydcIl0rKVxccyokL21nO1xuICAgICAgICB2YXIgbGFzdFNvdXJjZU1hcHBpbmdVcmw7XG4gICAgICAgIHZhciBtYXRjaFNvdXJjZU1hcHBpbmdVcmw7XG4gICAgICAgIHdoaWxlIChtYXRjaFNvdXJjZU1hcHBpbmdVcmwgPSBzb3VyY2VNYXBwaW5nVXJsUmVnRXhwLmV4ZWMoc291cmNlKSkgeyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgICAgIGxhc3RTb3VyY2VNYXBwaW5nVXJsID0gbWF0Y2hTb3VyY2VNYXBwaW5nVXJsWzFdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXN0U291cmNlTWFwcGluZ1VybCkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzb3VyY2VNYXBwaW5nVVJMIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwU291cmNlKHN0YWNrZnJhbWUsIHNvdXJjZU1hcENvbnN1bWVyLCBzb3VyY2VDYWNoZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgbG9jID0gc291cmNlTWFwQ29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgICAgICAgICAgbGluZTogc3RhY2tmcmFtZS5saW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAobG9jLnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIC8vIGNhY2hlIG1hcHBlZCBzb3VyY2VzXG4gICAgICAgICAgICAgICAgdmFyIG1hcHBlZFNvdXJjZSA9IHNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IobG9jLnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hcHBlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VDYWNoZVtsb2Muc291cmNlXSA9IG1hcHBlZFNvdXJjZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAvLyBnaXZlbiBzdGFja2ZyYW1lIGFuZCBzb3VyY2UgbG9jYXRpb24sIHVwZGF0ZSBzdGFja2ZyYW1lXG4gICAgICAgICAgICAgICAgICAgIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbG9jLm5hbWUgfHwgc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBzdGFja2ZyYW1lLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbG9jLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvYy5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2MuY29sdW1uXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IGdldCBvcmlnaW5hbCBzb3VyY2UgZm9yIGdpdmVuIHN0YWNrZnJhbWUgYW5kIHNvdXJjZSBtYXAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICogICAgICBvcHRzLnNvdXJjZUNhY2hlID0ge3VybDogXCJTb3VyY2UgU3RyaW5nXCJ9ID0+IHByZWxvYWQgc291cmNlIGNhY2hlXG4gICAgICogICAgICBvcHRzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgPSB7L3BhdGgvZmlsZS5qcy5tYXA6IFNvdXJjZU1hcENvbnN1bWVyfVxuICAgICAqICAgICAgb3B0cy5vZmZsaW5lID0gVHJ1ZSB0byBwcmV2ZW50IG5ldHdvcmsgcmVxdWVzdHMuXG4gICAgICogICAgICAgICAgICAgIEJlc3QgZWZmb3J0IHdpdGhvdXQgc291cmNlcyBvciBzb3VyY2UgbWFwcy5cbiAgICAgKiAgICAgIG9wdHMuYWpheCA9IFByb21pc2UgcmV0dXJuaW5nIGZ1bmN0aW9uIHRvIG1ha2UgWC1Eb21haW4gcmVxdWVzdHNcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyhvcHRzKSB7XG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdGFja1RyYWNlR1BTKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja1RyYWNlR1BTKG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuc291cmNlQ2FjaGUgPSBvcHRzLnNvdXJjZUNhY2hlIHx8IHt9O1xuICAgICAgICB0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgPSBvcHRzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgfHwge307XG5cbiAgICAgICAgdGhpcy5hamF4ID0gb3B0cy5hamF4IHx8IF94ZHI7XG5cbiAgICAgICAgdGhpcy5fYXRvYiA9IG9wdHMuYXRvYiB8fCBfYXRvYjtcblxuICAgICAgICB0aGlzLl9nZXQgPSBmdW5jdGlvbiBfZ2V0KGxvY2F0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzRGF0YVVybCA9IGxvY2F0aW9uLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRzLm9mZmxpbmUgJiYgIWlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdDYW5ub3QgbWFrZSBuZXR3b3JrIHJlcXVlc3RzIGluIG9mZmxpbmUgbW9kZScpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNEYXRhVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIFVSTHMgY2FuIGhhdmUgcGFyYW1ldGVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VwcG9ydGVkRW5jb2RpbmdSZWdleHAgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9eZGF0YTphcHBsaWNhdGlvblxcL2pzb247KFtcXHc9OlwiLV0rOykqYmFzZTY0LC87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsb2NhdGlvbi5tYXRjaChzdXBwb3J0ZWRFbmNvZGluZ1JlZ2V4cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwU3RhcnQgPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kZWRTb3VyY2UgPSBsb2NhdGlvbi5zdWJzdHIoc291cmNlTWFwU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLl9hdG9iKGVuY29kZWRTb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0gc291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVGhlIGVuY29kaW5nIG9mIHRoZSBpbmxpbmUgc291cmNlbWFwIGlzIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGhyUHJvbWlzZSA9IHRoaXMuYWpheChsb2NhdGlvbiwge21ldGhvZDogJ2dldCd9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhY2hlIHRoZSBQcm9taXNlIHRvIHByZXZlbnQgZHVwbGljYXRlIGluLWZsaWdodCByZXF1ZXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0gPSB4aHJQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyUHJvbWlzZS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGluZyBTb3VyY2VNYXBDb25zdW1lcnMgaXMgZXhwZW5zaXZlLCBzbyB0aGlzIHdyYXBzIHRoZSBjcmVhdGlvbiBvZiBhXG4gICAgICAgICAqIFNvdXJjZU1hcENvbnN1bWVyIGluIGEgcGVyLWluc3RhbmNlIGNhY2hlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc291cmNlTWFwcGluZ1VSTCA9IFVSTCB0byBmZXRjaCBzb3VyY2UgbWFwIGZyb21cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGRlZmF1bHRTb3VyY2VSb290ID0gRGVmYXVsdCBzb3VyY2Ugcm9vdCBmb3Igc291cmNlIG1hcCBpZiB1bmRlZmluZWRcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgYSBTb3VyY2VNYXBDb25zdW1lclxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fZ2V0U291cmNlTWFwQ29uc3VtZXIgPSBmdW5jdGlvbiBfZ2V0U291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwcGluZ1VSTCwgZGVmYXVsdFNvdXJjZVJvb3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwQ29uc3VtZXJQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KHNvdXJjZU1hcHBpbmdVUkwpLnRoZW4oZnVuY3Rpb24oc291cmNlTWFwU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VNYXBTb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcFNvdXJjZSA9IF9wYXJzZUpzb24oc291cmNlTWFwU291cmNlLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VNYXBTb3VyY2Uuc291cmNlUm9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwU291cmNlLnNvdXJjZVJvb3QgPSBkZWZhdWx0U291cmNlUm9vdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBTb3VyY2VNYXAuU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwU291cmNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGVbc291cmNlTWFwcGluZ1VSTF0gPSBzb3VyY2VNYXBDb25zdW1lclByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc291cmNlTWFwQ29uc3VtZXJQcm9taXNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIFN0YWNrRnJhbWUsIGVuaGFuY2UgZnVuY3Rpb24gbmFtZSBhbmQgdXNlIHNvdXJjZSBtYXBzIGZvciBhXG4gICAgICAgICAqIGJldHRlciBTdGFja0ZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWUgb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggd2l0aCBzb3VyY2UtbWFwcGVkIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGlucG9pbnQgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRwaW5wb2ludChzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKS50aGVuKGZ1bmN0aW9uKG1hcHBlZFN0YWNrRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lKG1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlLCByZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIFsnY2F0Y2gnXShyZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCByZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBndWVzcyBmdW5jdGlvbiBuYW1lIGZyb20gbG9jYXRpb24gaW5mb3JtYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbmRGdW5jdGlvbk5hbWUgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRmaW5kRnVuY3Rpb25OYW1lKHN0YWNrZnJhbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBfZW5zdXJlU3RhY2tGcmFtZUlzTGVnaXQoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0KHN0YWNrZnJhbWUuZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24gZ2V0U291cmNlQ2FsbGJhY2soc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gc3RhY2tmcmFtZS5saW5lTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uTnVtYmVyID0gc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBndWVzc2VkRnVuY3Rpb25OYW1lID0gX2ZpbmRGdW5jdGlvbk5hbWUoc291cmNlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHJlcGxhY2UgZnVuY3Rpb25OYW1lIGlmIHdlIGZvdW5kIHNvbWV0aGluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3Vlc3NlZEZ1bmN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBndWVzc2VkRnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHN0YWNrZnJhbWUuYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogc3RhY2tmcmFtZS5maWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBzZWVrIHNvdXJjZS1tYXBwZWQgbG9jYXRpb24gYW5kIHJldHVybiBuZXcgZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZ2V0TWFwcGVkTG9jYXRpb24gPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRnZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN1cHBvcnRlZEVudmlyb25tZW50KCk7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZTtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBzdGFja2ZyYW1lLmZpbGVOYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChmaWxlTmFtZSkudGhlbihmdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmdVUkwgPSBfZmluZFNvdXJjZU1hcHBpbmdVUkwoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzRGF0YVVybCA9IHNvdXJjZU1hcHBpbmdVUkwuc3Vic3RyKDAsIDUpID09PSAnZGF0YTonO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdFNvdXJjZVJvb3QgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgZmlsZU5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VNYXBwaW5nVVJMWzBdICE9PSAnLycgJiYgIWlzRGF0YVVybCAmJiAhKC9eaHR0cHM/OlxcL1xcL3xeXFwvXFwvL2kpLnRlc3Qoc291cmNlTWFwcGluZ1VSTCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcHBpbmdVUkwgPSBkZWZhdWx0U291cmNlUm9vdCArIHNvdXJjZU1hcHBpbmdVUkw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwcGluZ1VSTCwgZGVmYXVsdFNvdXJjZVJvb3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihzb3VyY2VNYXBDb25zdW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZXh0cmFjdExvY2F0aW9uSW5mb0Zyb21Tb3VyY2VNYXBTb3VyY2Uoc3RhY2tmcmFtZSwgc291cmNlTWFwQ29uc3VtZXIsIHNvdXJjZUNhY2hlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVsnY2F0Y2gnXShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZScsIFsnZXJyb3Itc3RhY2stcGFyc2VyJywgJ3N0YWNrLWdlbmVyYXRvcicsICdzdGFja3RyYWNlLWdwcyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnZXJyb3Itc3RhY2stcGFyc2VyJyksIHJlcXVpcmUoJ3N0YWNrLWdlbmVyYXRvcicpLCByZXF1aXJlKCdzdGFja3RyYWNlLWdwcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2UgPSBmYWN0b3J5KHJvb3QuRXJyb3JTdGFja1BhcnNlciwgcm9vdC5TdGFja0dlbmVyYXRvciwgcm9vdC5TdGFja1RyYWNlR1BTKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIFN0YWNrVHJhY2UoRXJyb3JTdGFja1BhcnNlciwgU3RhY2tHZW5lcmF0b3IsIFN0YWNrVHJhY2VHUFMpIHtcbiAgICB2YXIgX29wdGlvbnMgPSB7XG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBzdGFja2ZyYW1lcyBmb3IgdGhpcyBsaWJyYXJ5IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2UkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignRXJyb3JTdGFja1BhcnNlciQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlR1BTJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrR2VuZXJhdG9yJCQnKSA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZUNhY2hlOiB7fVxuICAgIH07XG5cbiAgICB2YXIgX2dlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRHZW5lcmF0ZUVycm9yKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRXJyb3IgbXVzdCBiZSB0aHJvd24gdG8gZ2V0IHN0YWNrIGluIElFXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdlIDIgZ2l2ZW4gT2JqZWN0cy4gSWYgYSBjb25mbGljdCBvY2N1cnMgdGhlIHNlY29uZCBvYmplY3Qgd2lucy5cbiAgICAgKiBEb2VzIG5vdCBkbyBkZWVwIG1lcmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaXJzdCBiYXNlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWNvbmQgb3ZlcnJpZGVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gbWVyZ2VkIGZpcnN0IGFuZCBzZWNvbmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tZXJnZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcblxuICAgICAgICBbZmlyc3QsIHNlY29uZF0uZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVyci5zdGFjayB8fCBlcnJbJ29wZXJhI3NvdXJjZWxvYyddO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXJlZChzdGFja2ZyYW1lcywgZmlsdGVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXMuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrZnJhbWVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0KG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikgPyB0aGlzLmZyb21FcnJvcihlcnIsIG9wdHMpIDogdGhpcy5nZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgYmFja3RyYWNlIGZyb20gaW52b2NhdGlvbiBwb2ludC5cbiAgICAgICAgICogSU1QT1JUQU5UOiBEb2VzIG5vdCBoYW5kbGUgc291cmNlIG1hcHMgb3IgZ3Vlc3MgZnVuY3Rpb24gbmFtZXMhXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0U3luYzogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0U3luYyhvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyKSA6IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyZWQoc3RhY2ssIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3Igb2JqZWN0LCBwYXJzZSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmb3IgQXJyYXlbU3RhY2tGcmFtZX1cbiAgICAgICAgICovXG4gICAgICAgIGZyb21FcnJvcjogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZnJvbUVycm9yKGVycm9yLCBvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBncHMgPSBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrZnJhbWVzID0gX2ZpbHRlcmVkKEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyb3IpLCBvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShQcm9taXNlLmFsbChzdGFja2ZyYW1lcy5tYXAoZnVuY3Rpb24oc2YpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVPcmlnaW5hbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ3BzLnBpbnBvaW50KHNmKS50aGVuKHJlc29sdmUsIHJlc29sdmVPcmlnaW5hbClbJ2NhdGNoJ10ocmVzb2x2ZU9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBTdGFja0dlbmVyYXRvciB0byBnZW5lcmF0ZSBhIGJhY2t0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IG9mIEFycmF5W1N0YWNrRnJhbWVdXG4gICAgICAgICAqL1xuICAgICAgICBnZW5lcmF0ZUFydGlmaWNpYWxseTogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2VuZXJhdGVBcnRpZmljaWFsbHkob3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgc3RhY2tGcmFtZXMgPSBTdGFja0dlbmVyYXRvci5iYWNrdHJhY2Uob3B0cyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgc3RhY2tGcmFtZXMgPSBzdGFja0ZyYW1lcy5maWx0ZXIob3B0cy5maWx0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGFja0ZyYW1lcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24sIHdyYXAgaXQgc3VjaCB0aGF0IGludm9jYXRpb25zIHRyaWdnZXIgYSBjYWxsYmFjayB0aGF0XG4gICAgICAgICAqIGlzIGNhbGxlZCB3aXRoIGEgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGluc3RydW1lbnRlZFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdpdGggYSBzdGFjayB0cmFjZSBvbiBpbnZvY2F0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVycmJhY2sgb3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGVycm9yIGlmIHVuYWJsZSB0byBnZXQgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIG9wdGlvbmFsIGNvbnRleHQgb2JqZWN0IChlLmcuIHdpbmRvdylcbiAgICAgICAgICovXG4gICAgICAgIGluc3RydW1lbnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnQoZm4sIGNhbGxiYWNrLCBlcnJiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBpbnN0cnVtZW50ZWQsIHJldHVybiBnaXZlbiBGdW5jdGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGluc3RydW1lbnRlZCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnRlZCgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCgpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZyB8fCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb21FcnJvcihlKS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrKVsnY2F0Y2gnXShlcnJiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGluc3RydW1lbnRlZC5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID0gZm47XG5cbiAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50ZWQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBpbnN0cnVtZW50ZWQsXG4gICAgICAgICAqIHJldmVydCB0aGUgZnVuY3Rpb24gdG8gaXQncyBvcmlnaW5hbCAobm9uLWluc3RydW1lbnRlZCkgc3RhdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGRlLWluc3RydW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGRlaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZGVpbnN0cnVtZW50KGZuKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGUtaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIG5vdCBpbnN0cnVtZW50ZWQsIHJldHVybiBvcmlnaW5hbFxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3IgbWVzc2FnZSBhbmQgQXJyYXkgb2YgU3RhY2tGcmFtZXMsIHNlcmlhbGl6ZSBhbmQgUE9TVCB0byBnaXZlbiBVUkwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrZnJhbWVzXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVycm9yTXNnXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0T3B0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgcmVwb3J0OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRyZXBvcnQoc3RhY2tmcmFtZXMsIHVybCwgZXJyb3JNc2csIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPj0gMjAwICYmIHJlcS5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdQT1NUIHRvICcgKyB1cmwgKyAnIGZhaWxlZCB3aXRoIHN0YXR1czogJyArIHJlcS5zdGF0dXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVxLm9wZW4oJ3Bvc3QnLCB1cmwpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHJlcXVlc3QgaGVhZGVyc1xuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucyAmJiB0eXBlb2YgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgaGVhZGVyc1toZWFkZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZXBvcnRQYXlsb2FkID0ge3N0YWNrOiBzdGFja2ZyYW1lc307XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQgJiYgZXJyb3JNc2cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0UGF5bG9hZC5tZXNzYWdlID0gZXJyb3JNc2c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVwb3J0UGF5bG9hZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIl19 diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index 5af6c8b..40d39c0 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.StackTrace=e()}}(function(){var e;return function n(e,r,t){function o(a,s){if(!r[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=r[a]={exports:{}};e[a][0].call(l.exports,function(n){var r=e[a][1][n];return o(r?r:n)},l,l.exports,n,e,r,t)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var r=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),t=this.extractLocation(r.pop()),o=r.join(" ")||void 0,i=["eval",""].indexOf(t[0])>-1?void 0:t[0];return new e({functionName:o,fileName:i,lineNumber:t[1],columnNumber:t[2],source:n})},this)},parseFFOrSafari:function(n){var r=n.stack.split("\n").filter(function(e){return!e.match(t)},this);return r.map(function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),n.indexOf("@")===-1&&n.indexOf(":")===-1)return new e({functionName:n});var r=n.split("@"),t=this.extractLocation(r.pop()),o=r.join("@")||void 0;return new e({functionName:o,fileName:t[0],lineNumber:t[1],columnNumber:t[2],source:n})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,t=n.message.split("\n"),o=[],i=2,a=t.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:n})},this)}}})},{stackframe:10}],2:[function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=e("./util"),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;o=0&&e>1;return n?-r:r}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(n|=c),r+=i.encode(n);while(o>0);return r},r.decode=function(e,n,r){var t,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(s&c),s&=u,f+=s<0?n-u>1?t(u,n,o,i,a,s):s==r.LEAST_UPPER_BOUND?n1?t(e,u,o,i,a,s):s==r.LEAST_UPPER_BOUND?u:e<0?-1:e}r.GREATEST_LOWER_BOUND=1,r.LEAST_UPPER_BOUND=2,r.search=function(e,n,o,i){if(0===n.length)return-1;var a=t(-1,n.length,e,n,o,i||r.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],6:[function(e,n,r){function t(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,r,a){if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},r.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=c.fromArray(e._names.toArray(),!0),t=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;p1&&(r.source=m+o[1],m+=o[1],r.originalLine=g+o[2],g=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),"number"==typeof r.originalLine&&b.push(r)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=s.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},r.BasicSourceMapConsumer=o,a.prototype=Object.create(t.prototype),a.prototype.constructor=t,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),t?(t.path=n,i(t)):n}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=o(n),t=o(e);if(t&&(e=t.path||"/"),r&&!r.scheme)return t&&(r.scheme=t.scheme),i(r);if(r||n.match(_))return n;if(t&&!t.host&&!t.path)return t.host=n,i(t);var s="/"===n.charAt(0)?n:a(e.replace(/\/+$/,"")+"/"+n);return t?(t.path=s,i(t)):s}function u(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function g(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=m(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:m(e.name,n.name)))))}r.getArg=t;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;r.urlParse=o,r.urlGenerate=i,r.normalize=a,r.join=s,r.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},r.relative=u;var y=function(){var e=Object.create(null);return!("__proto__"in e)}();r.toSetString=y?c:l,r.fromSetString=y?c:f,r.compareByOriginalPositions=g,r.compareByGeneratedPositionsDeflated=h,r.compareByGeneratedPositionsInflated=d},{}],9:[function(n,r,t){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof t?r.exports=i(n("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var r=[],t=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(t=n.maxStackSize);for(var o=arguments.callee;o&&r.length=200&&t.status<300||"file://"===e.substr(0,7)&&t.responseText?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],t=e.split("\n"),o="",i=Math.min(n,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=r.length,l=0;l=200&&a.status<400?o(a.responseText):i(new Error("POST to "+n+" failed with status: "+a.status)))},a.open("post",n),a.setRequestHeader("Content-Type","application/json"),t&&"object"==typeof t.headers){var s=t.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==r&&null!==r&&(c.message=r),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":9,"stacktrace-gps":11}]},{},[12])(12)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.StackTrace=e()}}(function(){var e;return function n(e,r,t){function o(a,s){if(!r[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=r[a]={exports:{}};e[a][0].call(l.exports,function(n){var r=e[a][1][n];return o(r?r:n)},l,l.exports,n,e,r,t)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var r=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),t=this.extractLocation(r.pop()),o=r.join(" ")||void 0,i=["eval",""].indexOf(t[0])>-1?void 0:t[0];return new e({functionName:o,fileName:i,lineNumber:t[1],columnNumber:t[2],source:n})},this)},parseFFOrSafari:function(n){var r=n.stack.split("\n").filter(function(e){return!e.match(t)},this);return r.map(function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),n.indexOf("@")===-1&&n.indexOf(":")===-1)return new e({functionName:n});var r=/((.*".+"[^@]*)?[^@]*)(?:@)/,t=n.match(r),o=t&&t[1]?t[1]:void 0,i=this.extractLocation(n.replace(r,""));return new e({functionName:o,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:n})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,t=n.message.split("\n"),o=[],i=2,a=t.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:n})},this)}}})},{stackframe:3}],2:[function(n,r,t){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof t?r.exports=i(n("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var r=[],t=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(t=n.maxStackSize);for(var o=arguments.callee;o&&r.length=0&&e>1;return n?-r:r}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(n|=c),r+=i.encode(n);while(o>0);return r},r.decode=function(e,n,r){var t,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(s&c),s&=u,f+=s<0?n-u>1?t(u,n,o,i,a,s):s==r.LEAST_UPPER_BOUND?n1?t(e,u,o,i,a,s):s==r.LEAST_UPPER_BOUND?u:e<0?-1:e}r.GREATEST_LOWER_BOUND=1,r.LEAST_UPPER_BOUND=2,r.search=function(e,n,o,i){if(0===n.length)return-1;var a=t(-1,n.length,e,n,o,i||r.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],8:[function(e,n,r){function t(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,r,a){if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},r.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=c.fromArray(e._names.toArray(),!0),t=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;p1&&(r.source=m+o[1],m+=o[1],r.originalLine=g+o[2],g=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),"number"==typeof r.originalLine&&b.push(r)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=s.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},r.BasicSourceMapConsumer=o,a.prototype=Object.create(t.prototype),a.prototype.constructor=t,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),t?(t.path=n,i(t)):n}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=o(n),t=o(e);if(t&&(e=t.path||"/"),r&&!r.scheme)return t&&(r.scheme=t.scheme),i(r);if(r||n.match(_))return n;if(t&&!t.host&&!t.path)return t.host=n,i(t);var s="/"===n.charAt(0)?n:a(e.replace(/\/+$/,"")+"/"+n);return t?(t.path=s,i(t)):s}function u(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function g(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=m(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:m(e.name,n.name)))))}r.getArg=t;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;r.urlParse=o,r.urlGenerate=i,r.normalize=a,r.join=s,r.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},r.relative=u;var y=function(){var e=Object.create(null);return!("__proto__"in e)}();r.toSetString=y?c:l,r.fromSetString=y?c:f,r.compareByOriginalPositions=g,r.compareByGeneratedPositionsDeflated=h,r.compareByGeneratedPositionsInflated=d},{}],11:[function(n,r,t){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stacktrace-gps",["source-map","stackframe"],i):"object"==typeof t?r.exports=i(n("source-map/lib/source-map-consumer"),n("stackframe")):o.StackTraceGPS=i(o.SourceMap||o.sourceMap,o.StackFrame)}(this,function(e,n){"use strict";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open("get",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300||"file://"===e.substr(0,7)&&t.responseText?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],t=e.split("\n"),o="",i=Math.min(n,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=r.length,l=0;l=200&&a.status<400?o(a.responseText):i(new Error("POST to "+n+" failed with status: "+a.status)))},a.open("post",n),a.setRequestHeader("Content-Type","application/json"),t&&"object"==typeof t.headers){var s=t.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==r&&null!==r&&(c.message=r),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":2,"stacktrace-gps":11}]},{},[12])(12)}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/package-lock.json b/package-lock.json index 1383a7f..9695d82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,28 @@ "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz" } }, + "@types/geojson": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", + "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==", + "dev": true + }, + "JSONStream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", + "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "dev": true, + "requires": { + "jsonparse": "1.3.1", + "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + } + }, + "JSV": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", + "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", + "dev": true + }, "abbrev": { "version": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", @@ -75,11 +97,29 @@ "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" } }, + "alter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/alter/-/alter-0.2.0.tgz", + "integrity": "sha1-x1iICGF1cgNKrmJICvJrHU0cs80=", + "dev": true, + "requires": { + "stable": "0.1.8" + } + }, "amdefine": { "version": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, "ansi-regex": { "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=", @@ -90,6 +130,12 @@ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true + }, "anymatch": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", @@ -234,6 +280,12 @@ } } }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, "argparse": { "version": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", @@ -255,6 +307,24 @@ "integrity": "sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=", "dev": true }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true + }, "array-filter": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", @@ -339,6 +409,24 @@ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", "dev": true }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-traverse": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", + "integrity": "sha1-ac8rg4bxnc2hux4F1o/jWdiJfeY=", + "dev": true + }, + "ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", + "dev": true + }, "astw": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", @@ -381,105 +469,536 @@ "integrity": "sha1-Cin/t5wxyecS7rCH6OemS0pW11U=", "dev": true }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true + "babel-core": { + "version": "5.8.38", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-5.8.38.tgz", + "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", + "dev": true, + "requires": { + "babel-plugin-constant-folding": "1.0.1", + "babel-plugin-dead-code-elimination": "1.0.2", + "babel-plugin-eval": "1.0.1", + "babel-plugin-inline-environment-variables": "1.0.1", + "babel-plugin-jscript": "1.0.4", + "babel-plugin-member-expression-literals": "1.0.1", + "babel-plugin-property-literals": "1.0.1", + "babel-plugin-proto-to-assign": "1.0.4", + "babel-plugin-react-constant-elements": "1.0.3", + "babel-plugin-react-display-name": "1.0.3", + "babel-plugin-remove-console": "1.0.1", + "babel-plugin-remove-debugger": "1.0.1", + "babel-plugin-runtime": "1.0.7", + "babel-plugin-undeclared-variables-check": "1.0.2", + "babel-plugin-undefined-to-void": "1.1.6", + "babylon": "5.8.38", + "bluebird": "2.11.0", + "chalk": "1.1.3", + "convert-source-map": "1.5.1", + "core-js": "1.2.7", + "debug": "2.6.9", + "detect-indent": "3.0.1", + "esutils": "2.0.2", + "fs-readdir-recursive": "0.1.2", + "globals": "6.4.1", + "home-or-tmp": "1.0.0", + "is-integer": "1.0.7", + "js-tokens": "1.0.1", + "json5": "0.4.0", + "lodash": "3.10.1", + "minimatch": "2.0.10", + "output-file-sync": "1.1.2", + "path-exists": "1.0.0", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "regenerator": "0.8.40", + "regexpu": "1.3.0", + "repeating": "1.1.3", + "resolve": "1.7.1", + "shebang-regex": "1.0.0", + "slash": "1.0.0", + "source-map": "0.5.7", + "source-map-support": "0.2.10", + "to-fast-properties": "1.0.3", + "trim-right": "1.0.1", + "try-resolve": "1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "bluebird": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "path-exists": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz", + "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "repeating": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", + "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } }, - "balanced-match": { - "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "babel-jscs": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/babel-jscs/-/babel-jscs-2.0.5.tgz", + "integrity": "sha1-CjRwRrSBRay8pW6MjtX3NrxU+dA=", + "dev": true, + "requires": { + "babel-core": "5.8.38", + "lodash.assign": "3.2.0" + } + }, + "babel-plugin-constant-folding": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz", + "integrity": "sha1-g2HTZMmORJw2kr26Ue/whEKQqo4=", "dev": true }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "babel-plugin-dead-code-elimination": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz", + "integrity": "sha1-X3xFEnTc18zNv7s+C4XdKBIfD2U=", "dev": true }, - "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "babel-plugin-eval": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz", + "integrity": "sha1-ovrtJc5r5preS/7CY/cBaRlZUNo=", "dev": true }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "babel-plugin-inline-environment-variables": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz", + "integrity": "sha1-H1jOkSB61qgmqL9kX6/mj/X+P/4=", "dev": true }, - "bcrypt-pbkdf": { - "version": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz", - "integrity": "sha1-PKdrhSQccXC/fZcD57mqdGMAQNQ=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" - } + "babel-plugin-jscript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz", + "integrity": "sha1-jzQsOCduh6R9X6CovT1etsytj8w=", + "dev": true }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } + "babel-plugin-member-expression-literals": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz", + "integrity": "sha1-zF7bD6qNyScXDnTW0cAkQAIWJNM=", + "dev": true }, - "binary-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.9.0.tgz", - "integrity": "sha1-ZlBsFs5vTWkopbPNajPKQelB43s=", + "babel-plugin-property-literals": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz", + "integrity": "sha1-AlIwGQAZKYCxwRjv6kjOk6q4MzY=", "dev": true }, - "bl": { - "version": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", - "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", + "babel-plugin-proto-to-assign": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz", + "integrity": "sha1-xJ56/QL1d7xNoF6i3wAiUM980SM=", "dev": true, "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz" + "lodash": "3.10.1" }, "dependencies": { - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - } + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true } } }, - "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "babel-plugin-react-constant-elements": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz", + "integrity": "sha1-lGc26DeEKcvDSdz/YvUcFDs041o=", "dev": true }, - "bluebird": { - "version": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", + "babel-plugin-react-display-name": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz", + "integrity": "sha1-dU/jiSboQkpOexWrbqYTne4FFPw=", "dev": true }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "babel-plugin-remove-console": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz", + "integrity": "sha1-2PJFVsOgUAXUKqqv0neH9T/wE6c=", "dev": true }, - "body-parser": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", - "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", - "dev": true, - "requires": { + "babel-plugin-remove-debugger": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz", + "integrity": "sha1-/S6jzWGkKK0fO5yJiC/0KT6MFMc=", + "dev": true + }, + "babel-plugin-runtime": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz", + "integrity": "sha1-v3x9lm3Vbs1cF/ocslPJrLflSq8=", + "dev": true + }, + "babel-plugin-undeclared-variables-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz", + "integrity": "sha1-XPGqU52BP/ZOmWQSkK9iCWX2Xe4=", + "dev": true, + "requires": { + "leven": "1.0.2" + } + }, + "babel-plugin-undefined-to-void": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz", + "integrity": "sha1-f1eO+LeN+uYAM4XYQXph7aBuL4E=", + "dev": true + }, + "babylon": { + "version": "5.8.38", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-5.8.38.tgz", + "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz", + "integrity": "sha1-PKdrhSQccXC/fZcD57mqdGMAQNQ=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + } + }, + "beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "binary-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.9.0.tgz", + "integrity": "sha1-ZlBsFs5vTWkopbPNajPKQelB43s=", + "dev": true + }, + "bl": { + "version": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", + "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz" + }, + "dependencies": { + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + } + } + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, + "bluebird": { + "version": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body-parser": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", + "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", + "dev": true, + "requires": { "bytes": "2.4.0", "content-type": "1.0.2", "debug": "2.6.7", @@ -542,6 +1061,12 @@ "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz" } }, + "breakable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/breakable/-/breakable-1.0.0.tgz", + "integrity": "sha1-eEp5eRWjjq0nutRWtVcstLuqeME=", + "dev": true + }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -554,9 +1079,9 @@ "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", "dev": true, "requires": { + "JSONStream": "1.3.1", "combine-source-map": "0.7.2", "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "JSONStream": "1.3.1", "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "umd": "3.0.1" } @@ -584,6 +1109,7 @@ "integrity": "sha1-tanJAgJD8McORnW+yCI7xifkFc4=", "dev": true, "requires": { + "JSONStream": "1.3.1", "assert": "1.4.1", "browser-pack": "6.0.2", "browser-resolve": "1.11.2", @@ -605,7 +1131,6 @@ "https-browserify": "0.0.1", "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "insert-module-globals": "7.0.1", - "JSONStream": "1.3.1", "labeled-stream-splicer": "2.0.0", "module-deps": "4.1.1", "os-browserify": "0.1.2", @@ -788,6 +1313,37 @@ "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", "dev": true }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, "cached-path-relative": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", @@ -868,1672 +1424,2994 @@ "safe-buffer": "5.1.1" } }, - "cliui": { - "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "right-align": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" - } - }, - "clone": { - "version": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", - "dev": true - }, - "clone-stats": { - "version": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "colors": { - "version": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "combine-lists": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "lodash": "4.17.4" + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" }, "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } } }, - "combine-source-map": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", - "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", - "dev": true, - "requires": { - "convert-source-map": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "inline-source-map": "0.6.2", - "lodash.memoize": "3.0.4", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" - } - }, - "combined-stream": { - "version": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - } - }, - "commander": { - "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "cli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", + "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", "dev": true, "requires": { - "graceful-readlink": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" - } - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "compress-commons": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.0.tgz", - "integrity": "sha1-WFhwku8g03y1i68AARLJJ4/3O58=", - "dev": true, - "requires": { - "buffer-crc32": "0.2.13", - "crc32-stream": "2.0.0", - "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" - } - }, - "concat-map": { - "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", - "dev": true, - "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "readable-stream": "2.0.6", - "typedarray": "0.0.6" + "exit": "0.1.2", + "glob": "7.1.2" }, "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true } } }, - "config-chain": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", - "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", - "dev": true, - "requires": { - "ini": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "proto-list": "1.2.4" - } - }, - "connect": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.3.tgz", - "integrity": "sha512-GLSZqgjVxPvGYVD/2vz//gS201MEXk4b7t3nHV6OVnTdDNWi/Gm7Rpxs/ybvljPWvULys/wrzIV3jB3YvEc3nQ==", + "cli-table": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", "dev": true, "requires": { - "debug": "2.6.8", - "finalhandler": "1.0.4", - "parseurl": "1.3.1", - "utils-merge": "1.0.0" + "colors": "1.0.3" }, "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", "dev": true } } }, - "console-browserify": { - "version": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "cliui": { + "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, + "optional": true, "requires": { - "date-now": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz" + "center-align": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "right-align": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" } }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-type": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", - "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=", - "dev": true - }, - "convert-source-map": { - "version": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", - "dev": true - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "clone": { + "version": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", "dev": true }, - "core-util-is": { - "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", "dev": true }, - "crc": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", - "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=", + "clone-stats": { + "version": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", "dev": true }, - "crc32-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", + "cloneable-readable": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", + "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", "dev": true, "requires": { - "crc": "3.4.4", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + "inherits": "2.0.3", + "process-nextick-args": "2.0.0", + "readable-stream": "2.3.6" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + } } }, - "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "map-visit": "1.0.0", + "object-visit": "1.0.1" } }, - "create-hash": { + "color-support": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.0.tgz", + "integrity": "sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw==", + "dev": true + }, + "combine-lists": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "ripemd160": "2.0.1", - "sha.js": "2.4.8" + "lodash": "4.17.4" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } } }, - "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "combine-source-map": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", + "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.8" + "convert-source-map": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "inline-source-map": "0.6.2", + "lodash.memoize": "3.0.4", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" } }, - "cryptiles": { - "version": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "combined-stream": { + "version": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", "dev": true, "requires": { - "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz" + "delayed-stream": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" } }, - "crypto-browserify": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", - "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", + "commander": { + "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", "dev": true, "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "pbkdf2": "3.0.13", - "public-encrypt": "4.0.0", - "randombytes": "2.0.5" + "graceful-readlink": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" } }, - "css": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz", - "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", + "comment-parser": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.3.2.tgz", + "integrity": "sha1-PAPwd2uGo239mgosl8YwfzMggv4=", "dev": true, "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "source-map": "0.1.43", - "source-map-resolve": "0.3.1", - "urix": "0.1.0" + "readable-stream": "2.3.6" }, "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true } } }, - "ctype": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", - "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", - "dev": true - }, - "currently-unhandled": { - "version": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" - } - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "dashdash": { - "version": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "commoner": { + "version": "0.10.8", + "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", + "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", "dev": true, "requires": { - "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "commander": "2.15.1", + "detective": "4.7.1", + "glob": "5.0.15", + "graceful-fs": "4.1.11", + "iconv-lite": "0.4.23", + "mkdirp": "0.5.1", + "private": "0.1.8", + "q": "1.5.1", + "recast": "0.11.23" }, "dependencies": { - "assert-plus": { - "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "acorn": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.6.0.tgz", + "integrity": "sha512-QatFQ4C0n+PLqemyC6zXEv04tSqRR0hRqe+uGKPEVgKe2G8kl8wJvHzRYWwz6vqqEqt6idPVMFojZ4P1zlyAzQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "detective": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", + "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", + "dev": true, + "requires": { + "acorn": "5.6.0", + "defined": "1.0.0" + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "recast": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "dev": true, + "requires": { + "ast-types": "0.9.6", + "esprima": "3.1.3", + "private": "0.1.8", + "source-map": "0.5.7" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true } } }, - "date-now": { - "version": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", "dev": true }, - "dateformat": { - "version": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "meow": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" - } + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "dev": true }, - "debug": { - "version": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", - "integrity": "sha1-wE0XplTpICRkgD8JYVP3Cm8x9L4=", + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compress-commons": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.0.tgz", + "integrity": "sha1-WFhwku8g03y1i68AARLJJ4/3O58=", "dev": true, "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + "buffer-crc32": "0.2.13", + "crc32-stream": "2.0.0", + "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" } }, - "debug-fabulous": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-0.0.4.tgz", - "integrity": "sha1-+gccXYdIRoVCSAdCHKSxawsaB2M=", + "concat-map": { + "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", "dev": true, "requires": { - "debug": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", - "lazy-debug-legacy": "0.0.1", - "object-assign": "4.1.0" + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" }, "dependencies": { - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "dev": true + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } } } }, - "decamelize": { - "version": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "defined": { - "version": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", "dev": true, "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "p-map": "1.1.1", - "pify": "3.0.0", - "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz" + "source-map": "0.6.1" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "delayed-stream": { - "version": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "depd": { - "version": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", - "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", - "dev": true + "config-chain": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", + "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", + "dev": true, + "requires": { + "ini": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "proto-list": "1.2.4" + } }, - "deps-sort": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", - "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", + "connect": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.3.tgz", + "integrity": "sha512-GLSZqgjVxPvGYVD/2vz//gS201MEXk4b7t3nHV6OVnTdDNWi/Gm7Rpxs/ybvljPWvULys/wrzIV3jB3YvEc3nQ==", "dev": true, "requires": { - "JSONStream": "1.3.1", - "shasum": "1.0.2", - "subarg": "1.0.0", - "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz" + "debug": "2.6.8", + "finalhandler": "1.0.4", + "parseurl": "1.3.1", + "utils-merge": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "console-browserify": { + "version": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimalistic-assert": "1.0.0" + "date-now": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz" } }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, - "detective": { - "version": "https://registry.npmjs.org/detective/-/detective-4.3.2.tgz", - "integrity": "sha1-d2l+LnlHrD/nyOJqbW8RUjWvqRw=", + "content-type": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", + "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=", + "dev": true + }, + "convert-source-map": { + "version": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "dev": true + }, + "core-util-is": { + "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "coveralls": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-2.13.3.tgz", + "integrity": "sha512-iiAmn+l1XqRwNLXhW8Rs5qHZRFMYp9ZIPjEOVRpC/c4so6Y/f4/lFi0FfR5B9cCqgyhkJ5cZmbvcVRfP8MHchw==", "dev": true, "requires": { - "acorn": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz" + "js-yaml": "3.6.1", + "lcov-parse": "0.0.10", + "log-driver": "1.2.5", + "minimist": "1.2.0", + "request": "2.79.0" }, "dependencies": { - "acorn": { - "version": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "js-yaml": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", + "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "2.7.3" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true } } }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "crc": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", + "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=", "dev": true }, - "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "crc32-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", + "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.0", - "randombytes": "2.0.5" + "crc": "3.4.4", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" } }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", "dev": true, "requires": { - "custom-event": "1.0.1", - "ent": "2.2.0", - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "void-elements": "2.0.1" + "bn.js": "4.11.8", + "elliptic": "6.4.0" } }, - "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", "dev": true, "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + "cipher-base": "1.0.4", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "ripemd160": "2.0.1", + "sha.js": "2.4.8" } }, - "ecc-jsbn": { - "version": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", "dev": true, - "optional": true, "requires": { - "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz" + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.8" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "cryptiles": { + "version": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz" } }, - "encodeurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", - "dev": true - }, - "engine.io": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", - "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "crypto-browserify": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", + "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", "dev": true, "requires": { - "accepts": "1.3.3", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" - } - } + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "pbkdf2": "3.0.13", + "public-encrypt": "4.0.0", + "randombytes": "2.0.5" } }, - "engine.io-client": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", - "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "css": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz", + "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", "dev": true, "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "has-cors": "1.1.0", - "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "parsejson": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "1.1.2", - "xmlhttprequest-ssl": "1.5.3", - "yeast": "0.1.2" + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "source-map": "0.1.43", + "source-map-resolve": "0.3.1", + "urix": "0.1.0" }, "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" } } } }, - "engine.io-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "ctype": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", + "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", + "dev": true + }, + "currently-unhandled": { + "version": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" + "array-find-index": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" } }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", "dev": true }, - "error-ex": { - "version": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", - "integrity": "sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=", + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", + "dev": true + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "is-arrayish": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "es5-ext": "0.10.44" } }, - "error-stack-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.1.tgz", - "integrity": "sha1-oyArj7AxFKqbQKDjZp5IsrZaAQo=", + "dashdash": { + "version": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, "requires": { - "stackframe": "1.0.4" + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + }, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "date-now": { + "version": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, - "escape-string-regexp": { - "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dateformat": { + "version": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "meow": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" + } + }, + "deap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deap/-/deap-1.0.1.tgz", + "integrity": "sha512-k75KYNZMvwAwes2xIPry/QTffXIchjD8QfABvvfTr80P85jv5ZcKqcoDo+vMe71nNnVnXYe8MA28weyqcf/DKw==", "dev": true }, - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", + "integrity": "sha1-wE0XplTpICRkgD8JYVP3Cm8x9L4=", "dev": true, "requires": { - "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "estraverse": "1.9.3", - "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "optionator": "0.8.2", - "source-map": "0.2.0" + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + }, + "debug-fabulous": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-0.0.4.tgz", + "integrity": "sha1-+gccXYdIRoVCSAdCHKSxawsaB2M=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", + "lazy-debug-legacy": "0.0.1", + "object-assign": "4.1.0" }, "dependencies": { - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", "dev": true - }, - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, - "requires": { - "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" - } } } }, - "esprima": { - "version": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "esutils": { - "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "decamelize": { + "version": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, - "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", "dev": true }, - "evp_bytestokey": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", - "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "requires": { - "create-hash": "1.1.3" + "clone": "1.0.4" + }, + "dependencies": { + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + } } }, - "exit": { - "version": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "array-slice": "0.2.3", - "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "braces": "0.1.5" + "is-descriptor": "1.0.2", + "isobject": "3.0.1" }, "dependencies": { - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "expand-range": "0.1.1" + "kind-of": "6.0.2" } }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "is-number": "0.1.1", - "repeat-string": "0.2.2" + "kind-of": "6.0.2" } }, - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } } }, - "expand-brackets": { - "version": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz" - } + "defined": { + "version": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true }, - "expand-range": { - "version": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz" + "defs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/defs/-/defs-1.1.1.tgz", + "integrity": "sha1-siYJ8sehG6ej2xFoBcE5scr/qdI=", + "dev": true, + "requires": { + "alter": "0.2.0", + "ast-traverse": "0.1.1", + "breakable": "1.0.0", + "esprima-fb": "15001.1001.0-dev-harmony-fb", + "simple-fmt": "0.1.0", + "simple-is": "0.2.0", + "stringmap": "0.2.2", + "stringset": "0.2.1", + "tryor": "0.1.2", + "yargs": "3.27.0" + }, + "dependencies": { + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "0.1.4" + } + }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", + "dev": true + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "yargs": { + "version": "3.27.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.27.0.tgz", + "integrity": "sha1-ISBUaTFuk5Ex1Z8toMbX+YIh6kA=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "os-locale": "1.4.0", + "window-size": "0.1.4", + "y18n": "3.2.1" + } + } } }, - "extend": { - "version": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=", - "dev": true - }, - "extglob": { - "version": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "p-map": "1.1.1", + "pify": "3.0.0", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, - "extsprintf": { - "version": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", + "delayed-stream": { + "version": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "depd": { + "version": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", "dev": true }, - "filename-regex": { - "version": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", - "integrity": "sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=", + "deprecated": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", + "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", "dev": true }, - "fill-range": { - "version": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "deps-sort": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", + "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", "dev": true, "requires": { - "is-number": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "isobject": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "randomatic": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", - "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + "JSONStream": "1.3.1", + "shasum": "1.0.2", + "subarg": "1.0.0", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz" } }, - "finalhandler": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.4.tgz", - "integrity": "sha512-16l/r8RgzlXKmFOhZpHBztvye+lAhC5SU7hXavnerC9UfZqZxxXl3BzL8MhffPT3kF61lj9Oav2LKEzh0ei7tg==", + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "debug": "2.6.8", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.1", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimalistic-assert": "1.0.0" + } + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "detect-indent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz", + "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "minimist": "1.2.0", + "repeating": "1.1.3" }, "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "ms": "2.0.0" + "number-is-nan": "1.0.1" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true + }, + "repeating": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", + "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } } } }, - "find-up": { - "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - } - }, - "for-in": { - "version": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz", - "integrity": "sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=", + "detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", "dev": true }, - "for-own": { - "version": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", - "integrity": "sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=", + "detective": { + "version": "https://registry.npmjs.org/detective/-/detective-4.3.2.tgz", + "integrity": "sha1-d2l+LnlHrD/nyOJqbW8RUjWvqRw=", "dev": true, "requires": { - "for-in": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz" + "acorn": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz" + }, + "dependencies": { + "acorn": { + "version": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } } }, - "forever-agent": { - "version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", "dev": true }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", "dev": true, "requires": { - "null-check": "1.0.0" + "bn.js": "4.11.8", + "miller-rabin": "4.0.0", + "randombytes": "2.0.5" } }, - "fs.realpath": { - "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "docset-generator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/docset-generator/-/docset-generator-0.2.2.tgz", + "integrity": "sha1-hCdOTIbxpCXIdDvmumMCRpoChHg=", + "dev": true, + "requires": { + "extended-fs": "0.3.3", + "sequelize": "3.33.0", + "sqlite3": "3.1.13" + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "1.0.1", + "ent": "2.2.0", + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "void-elements": "2.0.1" + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", "dev": true }, - "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "dottie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-1.1.1.tgz", + "integrity": "sha1-RcKj9IvWUo7u0memmoSOqspvqmo=", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + } + }, + "ecc-jsbn": { + "version": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "dev": true, "optional": true, "requires": { - "nan": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", - "node-pre-gyp": "0.6.36" + "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "encodeurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", + "dev": true + }, + "end-of-stream": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", + "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", + "dev": true, + "requires": { + "once": "1.3.3" }, "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", "dev": true, - "optional": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "wrappy": "1.0.2" } }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, + } + } + }, + "engine.io": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", + "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "ws": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", "dev": true, - "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true, + } + } + }, + "engine.io-client": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", + "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "1.1.0", + "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.2", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", "dev": true, - "optional": true, "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "2.0.3" + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" } + } + } + }, + "engine.io-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.7", + "wtf-8": "1.0.0" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", + "dev": true + }, + "error-ex": { + "version": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", + "integrity": "sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=", + "dev": true, + "requires": { + "is-arrayish": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + } + }, + "error-stack-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz", + "integrity": "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==", + "requires": { + "stackframe": "1.0.4" + } + }, + "es5-ext": { + "version": "0.10.44", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.44.tgz", + "integrity": "sha512-TO4Vt9IhW3FzDKLDOpoA8VS9BCV4b9WTf6BqvMOgfoa8wX73F3Kh3y2J7yTstTaXlQ0k1vq4DH2vw6RSs42z+g==", + "dev": true, + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.44", + "es6-symbol": "3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.44", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", + "dev": true + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.44", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.44" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.44", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "estraverse": "1.9.3", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "optionator": "0.8.2", + "source-map": "0.2.0" + }, + "dependencies": { + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true }, - "boom": { - "version": "2.10.1", - "bundled": true, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", "dev": true, + "optional": true, "requires": { - "hoek": "2.16.3" + "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, + } + } + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } + }, + "esprima": { + "version": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esprima-fb": { + "version": "15001.1001.0-dev-harmony-fb", + "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", + "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", + "dev": true + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.44" + } + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", + "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", + "dev": true, + "requires": { + "create-hash": "1.1.3" + } + }, + "exit": { + "version": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-braces": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "requires": { + "array-slice": "0.2.3", + "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "braces": "0.1.5" + }, + "dependencies": { + "braces": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", "dev": true, "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" + "expand-range": "0.1.1" } }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, + "expand-range": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "is-number": "0.1.1", + "repeat-string": "0.2.2" } }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, + "is-number": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", "dev": true }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, + "repeat-string": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, + } + } + }, + "expand-brackets": { + "version": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz" + } + }, + "expand-range": { + "version": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz" + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "1.0.1" + } + }, + "extend": { + "version": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, - "optional": true, "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } + "is-plain-object": "2.0.4" } + } + } + }, + "extended-fs": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/extended-fs/-/extended-fs-0.3.3.tgz", + "integrity": "sha1-i6esNx7Gb/HT1Y17F798qYInmZw=", + "dev": true, + "requires": { + "graceful-fs": "2.0.3", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "q": "0.9.7" + }, + "dependencies": { + "graceful-fs": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", + "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=", + "dev": true }, + "q": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/q/-/q-0.9.7.tgz", + "integrity": "sha1-TeLmyzspCIyeTLwDv51C+5bOL3U=", + "dev": true + } + } + }, + "extglob": { + "version": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + }, + "extsprintf": { + "version": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", + "dev": true + }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", + "dev": true + }, + "fancy-log": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", + "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", + "dev": true, + "requires": { + "ansi-gray": "0.1.1", + "color-support": "1.1.3", + "time-stamp": "1.1.0" + } + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "filename-regex": { + "version": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", + "integrity": "sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=", + "dev": true + }, + "fill-range": { + "version": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "isobject": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "randomatic": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", + "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + } + }, + "finalhandler": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.4.tgz", + "integrity": "sha512-16l/r8RgzlXKmFOhZpHBztvye+lAhC5SU7hXavnerC9UfZqZxxXl3BzL8MhffPT3kF61lj9Oav2LKEzh0ei7tg==", + "dev": true, + "requires": { + "debug": "2.6.8", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.1", + "statuses": "1.3.1", + "unpipe": "1.0.0" + }, + "dependencies": { "debug": { "version": "2.6.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", "dev": true, - "optional": true, "requires": { "ms": "2.0.0" } }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-index": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", + "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", + "dev": true + }, + "find-up": { + "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "1.0.0", + "is-glob": "3.1.0", + "micromatch": "3.1.10", + "resolve-dir": "1.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, - "optional": true, "requires": { - "jsbn": "0.1.1" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } } }, - "extend": { - "version": "3.0.1", - "bundled": true, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "optional": true + "requires": { + "ms": "2.0.0" + } }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, - "optional": true + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } }, - "form-data": { - "version": "2.1.4", - "bundled": true, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, - "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } } }, - "fs.realpath": { + "is-accessor-descriptor": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "fstream": { - "version": "1.0.11", - "bundled": true, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" + "kind-of": "6.0.2" } }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, - "optional": true, "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, - "gauge": { - "version": "2.7.4", - "bundled": true, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, - "optional": true, "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "is-extglob": "2.1.1" } }, - "getpass": { - "version": "0.1.7", - "bundled": true, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, - "optional": true, "requires": { - "assert-plus": "1.0.0" + "kind-of": "3.2.2" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, - "optional": true + "requires": { + "is-buffer": "1.1.6" + } } } }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true }, - "har-validator": { - "version": "4.2.1", - "bundled": true, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, - "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, - "hawk": { - "version": "3.1.3", - "bundled": true, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + } + } + }, + "fined": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", + "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "is-plain-object": "2.0.4", + "object.defaults": "1.1.0", + "object.pick": "1.3.0", + "parse-filepath": "1.0.2" + } + }, + "first-chunk-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "dev": true + }, + "flagged-respawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz", + "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=", + "dev": true + }, + "for-in": { + "version": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz", + "integrity": "sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=", + "dev": true + }, + "for-own": { + "version": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", + "integrity": "sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=", + "dev": true, + "requires": { + "for-in": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz" + } + }, + "forever-agent": { + "version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + }, + "dependencies": { + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, - "optional": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "delayed-stream": "1.0.0" } }, - "hoek": { - "version": "2.16.3", - "bundled": true, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, - "http-signature": { - "version": "1.1.1", - "bundled": true, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dev": true, - "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" + "mime-db": "1.33.0" } + } + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "1.0.0" + } + }, + "fs-readdir-recursive": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz", + "integrity": "sha1-MVtPuMHKW4xH3v7zGdBz2tNWgFk=", + "dev": true + }, + "fs.realpath": { + "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "dev": true, + "optional": true, + "requires": { + "nan": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", + "node-pre-gyp": "0.6.36" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true }, - "inflight": { - "version": "1.0.6", + "ajv": { + "version": "4.11.8", "bundled": true, "dev": true, + "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "co": "4.6.0", + "json-stable-stringify": "1.0.1" } }, - "inherits": { - "version": "2.0.3", + "ansi-regex": { + "version": "2.1.1", "bundled": true, "dev": true }, - "ini": { - "version": "1.3.4", + "aproba": { + "version": "1.1.1", "bundled": true, "dev": true, "optional": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", + "are-we-there-yet": { + "version": "1.1.4", "bundled": true, "dev": true, + "optional": true, "requires": { - "number-is-nan": "1.0.1" + "delegates": "1.0.0", + "readable-stream": "2.2.9" } }, - "is-typedarray": { - "version": "1.0.0", + "asn1": { + "version": "0.2.3", "bundled": true, "dev": true, "optional": true }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", + "assert-plus": { + "version": "0.2.0", "bundled": true, "dev": true, "optional": true }, - "jodid25519": { - "version": "1.0.2", + "asynckit": { + "version": "0.4.0", "bundled": true, "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } + "optional": true }, - "jsbn": { - "version": "0.1.1", + "aws-sign2": { + "version": "0.6.0", "bundled": true, "dev": true, "optional": true }, - "json-schema": { - "version": "0.2.3", + "aws4": { + "version": "1.6.0", "bundled": true, "dev": true, "optional": true }, - "json-stable-stringify": { + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { "version": "1.0.1", "bundled": true, "dev": true, "optional": true, "requires": { - "jsonify": "0.0.0" + "tweetnacl": "0.14.5" } }, - "json-stringify-safe": { - "version": "5.0.1", + "block-stream": { + "version": "0.0.9", "bundled": true, "dev": true, - "optional": true + "requires": { + "inherits": "2.0.3" + } }, - "jsonify": { - "version": "0.0.0", + "boom": { + "version": "2.10.1", "bundled": true, "dev": true, - "optional": true + "requires": { + "hoek": "2.16.3" + } }, - "jsprim": { - "version": "1.4.0", + "brace-expansion": { + "version": "1.1.7", "bundled": true, "dev": true, - "optional": true, "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } + "balanced-match": "0.4.2", + "concat-map": "0.0.1" } }, - "mime-db": { - "version": "1.27.0", + "buffer-shims": { + "version": "1.0.0", "bundled": true, "dev": true }, - "mime-types": { - "version": "2.1.15", + "caseless": { + "version": "0.12.0", "bundled": true, "dev": true, - "requires": { - "mime-db": "1.27.0" - } + "optional": true }, - "minimatch": { - "version": "3.0.4", + "co": { + "version": "4.6.0", "bundled": true, "dev": true, - "requires": { - "brace-expansion": "1.1.7" - } + "optional": true }, - "minimist": { - "version": "0.0.8", + "code-point-at": { + "version": "1.1.0", "bundled": true, "dev": true }, - "mkdirp": { - "version": "0.5.1", + "combined-stream": { + "version": "1.0.5", "bundled": true, "dev": true, "requires": { - "minimist": "0.0.8" + "delayed-stream": "1.0.0" } }, - "ms": { - "version": "2.0.0", + "concat-map": { + "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, - "node-pre-gyp": { - "version": "0.6.36", + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", "bundled": true, "dev": true, "optional": true, "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" + "boom": "2.10.1" } }, - "nopt": { - "version": "4.0.1", + "dashdash": { + "version": "1.14.1", "bundled": true, "dev": true, "optional": true, "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } } }, - "npmlog": { - "version": "4.1.0", + "debug": { + "version": "2.6.8", "bundled": true, "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "ms": "2.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", + "deep-extend": { + "version": "0.4.2", "bundled": true, "dev": true, "optional": true }, - "object-assign": { - "version": "4.1.1", + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", "bundled": true, "dev": true, "optional": true }, - "once": { - "version": "1.4.0", + "ecc-jsbn": { + "version": "0.1.1", "bundled": true, "dev": true, + "optional": true, "requires": { - "wrappy": "1.0.2" + "jsbn": "0.1.1" } }, - "os-homedir": { - "version": "1.0.2", + "extend": { + "version": "3.0.1", "bundled": true, "dev": true, "optional": true }, - "os-tmpdir": { + "extsprintf": { "version": "1.0.2", "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, "dev": true, "optional": true }, - "osenv": { - "version": "0.1.4", + "form-data": { + "version": "2.1.4", "bundled": true, "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" } }, - "path-is-absolute": { - "version": "1.0.1", + "fs.realpath": { + "version": "1.0.0", "bundled": true, "dev": true }, - "performance-now": { - "version": "0.2.0", + "fstream": { + "version": "1.0.11", "bundled": true, "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } }, - "punycode": { - "version": "1.4.1", + "fstream-ignore": { + "version": "1.0.5", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } }, - "qs": { - "version": "6.4.0", + "gauge": { + "version": "2.7.4", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } }, - "rc": { - "version": "1.2.1", + "getpass": { + "version": "0.1.7", "bundled": true, "dev": true, "optional": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "assert-plus": "1.0.0" }, "dependencies": { - "minimist": { - "version": "1.2.0", + "assert-plus": { + "version": "1.0.0", "bundled": true, "dev": true, "optional": true } } }, - "readable-stream": { - "version": "2.2.9", + "glob": { + "version": "7.1.2", "bundled": true, "dev": true, "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", + "fs.realpath": "1.0.0", + "inflight": "1.0.6", "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, - "request": { - "version": "2.81.0", + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", "bundled": true, "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" + "ajv": "4.11.8", + "har-schema": "1.0.5" } }, - "rimraf": { - "version": "2.6.1", + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", "bundled": true, "dev": true, + "optional": true, "requires": { - "glob": "7.1.2" + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" } }, - "safe-buffer": { - "version": "5.0.1", + "hoek": { + "version": "2.16.3", "bundled": true, "dev": true }, - "semver": { - "version": "5.3.0", + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", "bundled": true, "dev": true, "optional": true }, - "set-blocking": { - "version": "2.0.0", + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", "bundled": true, "dev": true, "optional": true }, - "signal-exit": { - "version": "3.0.2", + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", "bundled": true, "dev": true, "optional": true }, - "sntp": { - "version": "1.0.9", + "jodid25519": { + "version": "1.0.2", "bundled": true, "dev": true, "optional": true, "requires": { - "hoek": "2.16.3" + "jsbn": "0.1.1" } }, - "sshpk": { - "version": "1.13.0", + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", "bundled": true, "dev": true, "optional": true, "requires": { - "asn1": "0.2.3", "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" }, "dependencies": { "assert-plus": { @@ -2544,785 +4422,726 @@ } } }, - "string_decoder": { - "version": "1.0.1", + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.0.1" + "mime-db": "1.27.0" } }, - "string-width": { - "version": "1.0.2", + "minimatch": { + "version": "3.0.4", "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "brace-expansion": "1.1.7" } }, - "stringstream": { - "version": "0.0.5", + "minimist": { + "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, - "strip-ansi": { - "version": "3.0.1", + "mkdirp": { + "version": "0.5.1", "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "minimist": "0.0.8" } }, - "strip-json-comments": { - "version": "2.0.1", + "ms": { + "version": "2.0.0", "bundled": true, "dev": true, "optional": true }, - "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", + "node-pre-gyp": { + "version": "0.6.36", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", "rimraf": "2.6.1", + "semver": "5.3.0", "tar": "2.2.1", - "uid-number": "0.0.6" + "tar-pack": "3.4.0" } }, - "tough-cookie": { - "version": "2.3.2", + "nopt": { + "version": "4.0.1", "bundled": true, "dev": true, "optional": true, "requires": { - "punycode": "1.4.1" + "abbrev": "1.1.0", + "osenv": "0.1.4" } }, - "tunnel-agent": { - "version": "0.6.0", + "npmlog": { + "version": "4.1.0", "bundled": true, "dev": true, "optional": true, "requires": { - "safe-buffer": "5.0.1" + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" } }, - "tweetnacl": { - "version": "0.14.5", + "number-is-nan": { + "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, - "uid-number": { - "version": "0.0.6", + "oauth-sign": { + "version": "0.8.2", "bundled": true, "dev": true, "optional": true }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", + "object-assign": { + "version": "4.1.1", "bundled": true, "dev": true, "optional": true }, - "verror": { - "version": "1.3.6", + "once": { + "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { - "extsprintf": "1.0.2" + "wrappy": "1.0.2" } }, - "wide-align": { - "version": "1.1.2", + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", "bundled": true, "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, - "wrappy": { - "version": "1.0.2", + "path-is-absolute": { + "version": "1.0.1", "bundled": true, "dev": true - } - } - }, - "function-bind": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", - "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", - "dev": true - }, - "generate-function": { - "version": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" - } - }, - "get-stdin": { - "version": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "getpass": { - "version": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", - "integrity": "sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=", - "dev": true, - "requires": { - "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - }, - "dependencies": { - "assert-plus": { - "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "glob": { - "version": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - } - }, - "glob-base": { - "version": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" - } - }, - "glob-parent": { - "version": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - }, - "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, "dev": true }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, "dev": true, + "optional": true, "requires": { - "balanced-match": "1.0.0", - "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } } }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "readable-stream": { + "version": "2.2.9", + "bundled": true, "dev": true, "requires": { - "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "3.0.4", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" } }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "request": { + "version": "2.81.0", + "bundled": true, "dev": true, + "optional": true, "requires": { - "brace-expansion": "1.1.8" + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } - } - }, - "graceful-fs": { - "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "graceful-readlink": { - "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "gulp-sourcemaps": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.12.0.tgz", - "integrity": "sha1-eG+XyUoPloSSRl1wVY4EJCxnlZg=", - "dev": true, - "requires": { - "@gulp-sourcemaps/map-sources": "1.0.0", - "acorn": "4.0.13", - "convert-source-map": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "css": "2.2.1", - "debug-fabulous": "0.0.4", - "detect-newline": "2.1.0", - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "vinyl": "1.2.0" - }, - "dependencies": { - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "rimraf": { + "version": "2.6.1", + "bundled": true, "dev": true, "requires": { - "clone": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz" + "glob": "7.1.2" } - } - } - }, - "handlebars": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", - "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", - "dev": true, - "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, "dev": true, + "optional": true, "requires": { - "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true } } }, - "har-validator": { - "version": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "requires": { - "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "is-my-json-valid": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - } + "function-bind": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", + "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", + "dev": true }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "gaze": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", + "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", "dev": true, "requires": { - "function-bind": "1.1.0" + "globule": "0.1.0" } }, - "has-ansi": { - "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "generate-function": { + "version": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", "dev": true, "requires": { - "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" + "is-property": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" } }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "generic-pool": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.2.tgz", + "integrity": "sha1-iGvFvwvrfblugby7oHiBjeWmJoM=", + "dev": true + }, + "get-stdin": { + "version": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", + "integrity": "sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=", "dev": true, "requires": { - "isarray": "0.0.1" + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true } } }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true, - "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimalistic-assert": "1.0.0" + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" } }, - "hawk": { - "version": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "glob-base": { + "version": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "sntp": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" + "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" } }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "glob-parent": { + "version": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" } }, - "hoek": { - "version": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "hosted-git-info": { - "version": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", - "integrity": "sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=", - "dev": true - }, - "htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", - "dev": true - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "glob-stream": { + "version": "3.1.18", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", + "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", "dev": true, "requires": { - "depd": "1.1.1", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" + "glob": "4.5.3", + "glob2base": "0.0.12", + "minimatch": "2.0.10", + "ordered-read-streams": "0.1.0", + "through2": "0.6.5", + "unique-stream": "1.0.0" }, "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "glob": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", + "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "2.0.10", + "once": "1.4.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true } } }, - "http-proxy": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", - "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "glob-watcher": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", + "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", "dev": true, "requires": { - "eventemitter3": "1.2.0", - "requires-port": "1.0.0" + "gaze": "0.5.2" } }, - "http-signature": { - "version": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "glob2base": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", "dev": true, "requires": { - "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "jsprim": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", - "sshpk": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz" + "find-index": "0.1.1" } }, - "https-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", - "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", - "dev": true - }, - "https-proxy-agent": { + "global-modules": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", - "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", - "dev": true, - "requires": { - "agent-base": "2.1.1", - "debug": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz" - } - }, - "iconv-lite": { - "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", - "dev": true - }, - "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", - "dev": true - }, - "indent-string": { - "version": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { - "repeating": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz" + "global-prefix": "1.0.2", + "is-windows": "1.0.2", + "resolve-dir": "1.0.1" } }, - "indexof": { - "version": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflight": { - "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, "requires": { - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "expand-tilde": "2.0.2", + "homedir-polyfill": "1.0.1", + "ini": "1.3.5", + "is-windows": "1.0.2", + "which": "1.3.1" + }, + "dependencies": { + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + } } }, - "inherits": { - "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "globals": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-6.4.1.tgz", + "integrity": "sha1-hJgDKzttHMge68X3lpDY/in6v08=", "dev": true }, - "inline-source-map": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" - } - }, - "insert-module-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", - "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", - "dev": true, - "requires": { - "combine-source-map": "0.7.2", - "concat-stream": "1.5.2", - "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", - "JSONStream": "1.3.1", - "lexical-scope": "1.2.0", - "process": "0.11.10", - "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - } - }, - "is-arrayish": { - "version": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "1.9.0" - } - }, - "is-buffer": { - "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", - "integrity": "sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=", - "dev": true - }, - "is-builtin-module": { - "version": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" - } - }, - "is-dotfile": { - "version": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", - "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=", - "dev": true - }, - "is-equal-shallow": { - "version": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" - } - }, - "is-extendable": { - "version": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" - } - }, - "is-glob": { - "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" - } - }, - "is-my-json-valid": { - "version": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", - "integrity": "sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=", - "dev": true, - "requires": { - "generate-function": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "generate-object-property": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "jsonpointer": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - } - }, - "is-number": { - "version": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz" - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-posix-bracket": { - "version": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-property": { - "version": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-typedarray": { - "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "isarray": { - "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isbinaryfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", - "dev": true - }, - "isexe": { - "version": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", - "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=", - "dev": true - }, - "isobject": { - "version": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - } - }, - "isstream": { - "version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "dev": true, - "requires": { - "abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "async": "1.5.2", - "escodegen": "1.8.1", - "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "glob": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "handlebars": "4.0.10", - "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", - "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "nopt": "3.0.6", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "resolve": "1.1.7", - "supports-color": "3.2.3", - "which": "https://registry.npmjs.org/which/-/which-1.2.12.tgz", - "wordwrap": "1.0.0" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "jasmine": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.7.0.tgz", - "integrity": "sha1-XPC7TllLRgC7QjVWA2YhKsWuobI=", - "dev": true, - "requires": { - "exit": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "array-union": "1.0.2", "glob": "7.1.2", - "jasmine-core": "2.7.0" + "object-assign": "4.1.1", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" }, "dependencies": { "balanced-match": { @@ -3363,2235 +5182,8033 @@ "requires": { "brace-expansion": "1.1.8" } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true } } }, - "jasmine-core": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.7.0.tgz", - "integrity": "sha1-UP+MT5LY71wLLBuEbdJj7YUVIJE=", - "dev": true - }, - "jodid25519": { - "version": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", + "globule": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", + "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", "dev": true, - "optional": true, "requires": { - "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz" - } - }, - "js-yaml": { - "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", - "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", - "dev": true, - "requires": { - "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz" + "glob": "3.1.21", + "lodash": "1.0.2", + "minimatch": "0.2.14" + }, + "dependencies": { + "glob": { + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "dev": true, + "requires": { + "graceful-fs": "1.2.3", + "inherits": "1.0.2", + "minimatch": "0.2.14" + } + }, + "graceful-fs": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true + }, + "inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + } } }, - "jsbn": { - "version": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", - "integrity": "sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=", - "dev": true, - "optional": true - }, - "json-schema": { - "version": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "glogg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", + "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", "dev": true, "requires": { - "jsonify": "0.0.0" + "sparkles": "1.0.1" } }, - "json-stringify-safe": { - "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, - "jsonpointer": { - "version": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz", - "integrity": "sha1-ZmHhYdL8RF8Z+YQwIxNDci4fy9U=", + "graceful-readlink": { + "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", "dev": true }, - "JSONStream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", - "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", - "dev": true, - "requires": { - "jsonparse": "1.3.1", - "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - } - }, - "jsprim": { - "version": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", - "integrity": "sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=", - "dev": true, - "requires": { - "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "json-schema": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "verror": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz" + "gulp": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", + "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", + "dev": true, + "requires": { + "archy": "1.0.0", + "chalk": "1.1.3", + "deprecated": "0.0.1", + "gulp-util": "3.0.8", + "interpret": "1.1.0", + "liftoff": "2.5.0", + "minimist": "1.2.0", + "orchestrator": "0.3.8", + "pretty-hrtime": "1.0.3", + "semver": "4.3.6", + "tildify": "1.2.0", + "v8flags": "2.1.1", + "vinyl-fs": "0.3.14" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } } }, - "karma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.0.tgz", - "integrity": "sha1-b3oaQGRG+i4YfslTmGmPTO5HYmk=", + "gulp-concat": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", + "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", "dev": true, "requires": { - "bluebird": "3.5.0", - "body-parser": "1.17.2", - "chokidar": "1.7.0", - "colors": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "combine-lists": "1.0.1", - "connect": "3.6.3", - "core-js": "2.5.0", - "di": "0.0.1", - "dom-serialize": "2.2.1", - "expand-braces": "0.1.2", - "glob": "7.1.2", - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "http-proxy": "1.16.2", - "isbinaryfile": "3.0.2", - "lodash": "3.10.1", - "log4js": "0.6.38", - "mime": "1.3.6", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "optimist": "0.6.1", - "qjobs": "1.1.5", - "range-parser": "1.2.0", - "rimraf": "2.6.1", - "safe-buffer": "5.1.1", - "socket.io": "1.7.3", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "tmp": "0.0.31", - "useragent": "2.2.1" + "concat-with-sourcemaps": "1.1.0", + "through2": "2.0.3", + "vinyl": "2.1.0" }, "dependencies": { - "balanced-match": { + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + }, + "clone-stats": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", "dev": true }, - "bluebird": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", - "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "balanced-match": "1.0.0", - "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, - "core-js": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz", - "integrity": "sha1-VpwFCRi+ZIazg3VSAorgRmtxcIY=", + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", "dev": true }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "3.0.4", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - }, - "dependencies": { - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } + "safe-buffer": "5.1.1" } }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.6", + "xtend": "4.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "vinyl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "dev": true, "requires": { - "glob": "7.1.2" + "clone": "2.1.1", + "clone-buffer": "1.0.0", + "clone-stats": "1.0.0", + "cloneable-readable": "1.1.2", + "remove-trailing-separator": "1.1.0", + "replace-ext": "1.0.0" } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true } } }, - "karma-chrome-launcher": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", - "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "gulp-coveralls": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/gulp-coveralls/-/gulp-coveralls-0.1.4.tgz", + "integrity": "sha1-L2IKyN9i0LhrS73mTaNnzEGhkMk=", "dev": true, "requires": { - "fs-access": "1.0.1", - "which": "https://registry.npmjs.org/which/-/which-1.2.12.tgz" - } - }, - "karma-coverage": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.1.tgz", - "integrity": "sha1-Wv+LOc9plNwi3kyENix2ABtjfPY=", - "dev": true, - "requires": { - "dateformat": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "istanbul": "0.4.5", - "lodash": "3.10.1", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "karma-firefox-launcher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.0.1.tgz", - "integrity": "sha1-zlj0fCATqIFW1VpdYTN8CZz1u1E=", - "dev": true - }, - "karma-ie-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/karma-ie-launcher/-/karma-ie-launcher-1.0.0.tgz", - "integrity": "sha1-SXmGhCxJAZA0bNifVJTKmDDG1Zw=", - "dev": true, - "requires": { - "lodash": "4.17.4" + "coveralls": "2.13.3", + "gulp-util": "3.0.8", + "through2": "1.1.1" }, "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true - } - } - }, - "karma-jasmine": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.0.tgz", - "integrity": "sha1-IuTAa/mhguUpTR9wXjczgRuBCs8=", - "dev": true - }, - "karma-opera-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/karma-opera-launcher/-/karma-opera-launcher-1.0.0.tgz", - "integrity": "sha1-+lFihTGh0L6EstjcDX7iCfyP+Ro=", - "dev": true - }, - "karma-phantomjs2-launcher": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/karma-phantomjs2-launcher/-/karma-phantomjs2-launcher-0.5.0.tgz", - "integrity": "sha1-X/jI8i0N+OZygoyoeQhiq8Amk0U=", - "dev": true, - "requires": { - "lodash": "3.10.1", - "phantomjs2-ext": "0.2.2" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true - } - } - }, - "karma-safari-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/karma-safari-launcher/-/karma-safari-launcher-1.0.0.tgz", - "integrity": "sha1-lpgqLMR9BmquccVTursoMZEVos4=", - "dev": true - }, - "karma-sauce-launcher": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/karma-sauce-launcher/-/karma-sauce-launcher-1.1.0.tgz", - "integrity": "sha1-PQg89WWdZzarl7zuXYrNhq1SIhI=", - "dev": true, - "requires": { - "q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "sauce-connect-launcher": "0.17.0", - "saucelabs": "1.4.0", - "wd": "1.4.0" - } - }, - "karma-spec-reporter": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.31.tgz", - "integrity": "sha1-SDDccUihVcfXoYbmMjOaDYD63sM=", - "dev": true, - "requires": { - "colors": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz" - } - }, - "kew": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/kew/-/kew-0.5.0.tgz", - "integrity": "sha1-7OEctdjQGoH4zoBMjQu6BuayXKI=", - "dev": true - }, - "kind-of": { - "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", - "integrity": "sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=", - "dev": true, - "requires": { - "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz" - } - }, - "labeled-stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", - "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", - "dev": true, - "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "0.0.1", - "stream-splicer": "2.0.0" - }, - "dependencies": { + }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", + "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", + "dev": true, + "requires": { + "readable-stream": "1.1.14", + "xtend": "4.0.1" + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true } } }, - "lazy-cache": { - "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true, - "optional": true - }, - "lazy-debug-legacy": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/lazy-debug-legacy/-/lazy-debug-legacy-0.0.1.tgz", - "integrity": "sha1-U3cWwHduTPeePtG2IfdljCkRsbE=", - "dev": true - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "lexical-scope": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", - "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", - "dev": true, - "requires": { - "astw": "2.2.0" - } - }, - "load-json-file": { - "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "parse-json": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" - } - }, - "lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", - "dev": true - }, - "log4js": { - "version": "0.6.38", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", - "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "gulp-jshint": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/gulp-jshint/-/gulp-jshint-1.12.0.tgz", + "integrity": "sha1-I/vRuv3W+/5h6mRmenSAmpYdA94=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz" + "gulp-util": "3.0.8", + "jshint": "2.9.5", + "lodash": "3.10.1", + "minimatch": "2.0.10", + "rcloader": "0.1.2", + "through2": "0.6.5" }, "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "core-util-is": "1.0.2", + "inherits": "2.0.3", "isarray": "0.0.1", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + "string_decoder": "0.10.31" } - } - } - }, - "longest": { - "version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loud-rejection": { - "version": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "signal-exit": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz" - } - }, - "map-obj": { - "version": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "meow": { - "version": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "loud-rejection": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "map-obj": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", - "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "read-pkg-up": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "redent": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "trim-newlines": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" - }, - "dependencies": { - "object-assign": { - "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true } } }, - "micromatch": { - "version": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "braces": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "expand-brackets": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "extglob": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "filename-regex": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", - "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", - "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", - "object.omit": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "parse-glob": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "regex-cache": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz" - } - }, - "miller-rabin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", - "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" - } - }, - "mime": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", - "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", - "dev": true - }, - "mime-db": { - "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz", - "integrity": "sha1-wY29fHOl2/b0SgJNwNFloeexw5I=", - "dev": true - }, - "mime-types": { - "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", - "integrity": "sha1-4HqqnGxrmnyjASxpADrSWjnpKog=", - "dev": true, - "requires": { - "mime-db": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz" - } - }, - "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", - "dev": true, - "requires": { - "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" - } - }, - "minimist": { - "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "gulp-rename": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.3.tgz", + "integrity": "sha512-CmdPM0BjJ105QCX1fk+j7NGhiN/1rCl9HLGss+KllBS/tdYadpjTxqdKyh/5fNV+M3yjT1MFz5z93bXdrTyzAw==", "dev": true }, - "mkdirp": { - "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "gulp-sourcemaps": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.12.0.tgz", + "integrity": "sha1-eG+XyUoPloSSRl1wVY4EJCxnlZg=", "dev": true, "requires": { - "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + "@gulp-sourcemaps/map-sources": "1.0.0", + "acorn": "4.0.13", + "convert-source-map": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "css": "2.2.1", + "debug-fabulous": "0.0.4", + "detect-newline": "2.1.0", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "vinyl": "1.2.0" }, "dependencies": { - "minimist": { - "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz" + } } } }, - "module-deps": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", - "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", - "dev": true, - "requires": { - "browser-resolve": "1.11.2", - "cached-path-relative": "1.0.1", - "concat-stream": "1.5.2", - "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "detective": "https://registry.npmjs.org/detective/-/detective-4.3.2.tgz", - "duplexer2": "0.1.4", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "JSONStream": "1.3.1", - "parents": "1.0.1", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", - "stream-combiner2": "1.1.1", - "subarg": "1.0.0", - "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" - } - }, - "ms": { - "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "nan": { - "version": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", - "integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=", - "dev": true, - "optional": true - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "node-uuid": { - "version": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", - "integrity": "sha1-baWhdmjEs91ZYjvaEc9/pMH2Cm8=", - "dev": true - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz" - } - }, - "normalize-package-data": { - "version": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", - "integrity": "sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=", - "dev": true, - "requires": { - "hosted-git-info": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", - "is-builtin-module": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "validate-npm-package-license": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz" - } - }, - "normalize-path": { - "version": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", - "integrity": "sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=", - "dev": true - }, - "npmconf": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/npmconf/-/npmconf-2.1.1.tgz", - "integrity": "sha1-ombH5cVmlet/VcrzpacyjyRRDa4=", - "dev": true, - "requires": { - "config-chain": "1.1.11", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "ini": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "nopt": "3.0.6", - "once": "1.3.3", - "osenv": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "uid-number": "0.0.5" + "gulp-uglify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-1.5.4.tgz", + "integrity": "sha1-UkeI2HZm0J+dDCH7IXf5ADmmWMk=", + "dev": true, + "requires": { + "deap": "1.0.1", + "fancy-log": "1.3.2", + "gulp-util": "3.0.8", + "isobject": "2.1.0", + "through2": "2.0.3", + "uglify-js": "2.6.4", + "uglify-save-license": "0.4.1", + "vinyl-sourcemaps-apply": "0.2.1" }, "dependencies": { - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" } - } - } - }, - "null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", - "dev": true - }, - "number-is-nan": { - "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, - "object.omit": { - "version": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", - "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + }, + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "0.1.4" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.6", + "xtend": "4.0.1" + } + }, + "uglify-js": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", + "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=", + "dev": true, + "requires": { + "async": "0.2.10", + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } } }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-uniq": "1.0.3", + "beeper": "1.1.1", + "chalk": "1.1.3", + "dateformat": "2.2.0", + "fancy-log": "1.3.2", + "gulplog": "1.0.0", + "has-gulplog": "0.1.0", + "lodash._reescape": "3.0.0", + "lodash._reevaluate": "3.0.0", + "lodash._reinterpolate": "3.0.0", + "lodash.template": "3.6.2", + "minimist": "1.2.0", + "multipipe": "0.1.2", + "object-assign": "3.0.0", + "replace-ext": "0.0.1", + "through2": "2.0.3", + "vinyl": "0.5.3" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.6", + "xtend": "4.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + } } }, - "once": { - "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", "dev": true, "requires": { - "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "glogg": "1.0.1" } }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "handlebars": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", + "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", "dev": true, "requires": { - "minimist": "0.0.10", - "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz" }, "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + } } } }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "har-validator": { + "version": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "is-my-json-valid": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.0" + } + }, + "has-ansi": { + "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" + } + }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "dev": true, + "requires": { + "isarray": "0.0.1" }, "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true } } }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "dev": true - }, - "os-browserify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", - "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=", + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", "dev": true }, - "os-homedir": { - "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", "dev": true }, - "os-tmpdir": { - "version": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, - "osenv": { - "version": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", "dev": true, "requires": { - "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + "sparkles": "1.0.1" } }, - "p-map": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.1.1.tgz", - "integrity": "sha1-BfXkrpegaDcbwqXMhr+9vBnErno=", - "dev": true - }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", - "dev": true - }, - "parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "path-platform": "0.11.15" + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, - "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "asn1.js": "4.9.1", - "browserify-aes": "1.0.6", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.0", - "pbkdf2": "3.0.13" + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } } }, - "parse-glob": { - "version": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", "dev": true, "requires": { - "glob-base": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "is-dotfile": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", - "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" } }, - "parse-json": { - "version": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "dev": true, "requires": { - "error-ex": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz" + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimalistic-assert": "1.0.0" } }, - "parsejson": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "hawk": { + "version": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "dev": true, "requires": { - "better-assert": "1.0.2" + "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "sntp": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" } }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "better-assert": "1.0.2" + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" } }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "hoek": { + "version": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "home-or-tmp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-1.0.0.tgz", + "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", "dev": true, "requires": { - "better-assert": "1.0.2" + "os-tmpdir": "1.0.2", + "user-home": "1.1.1" + }, + "dependencies": { + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + } } }, - "parseurl": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", - "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", - "dev": true - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "path-exists": { - "version": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + "parse-passwd": "1.0.0" } }, - "path-is-absolute": { - "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "hosted-git-info": { + "version": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", + "integrity": "sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=", "dev": true }, - "path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", "dev": true }, - "path-type": { - "version": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "dev": true, "requires": { - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - } - }, - "pbkdf2": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.13.tgz", - "integrity": "sha512-+dCHxDH+djNtjgWmvVC/my3SYBAKpKNqKSjLkp+GtWWYe4XPE+e/PSD2aCanlEZZnqPk2uekTKNC/ccbwd2X2Q==", - "dev": true, - "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.8" - } - }, - "phantomjs2-ext": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/phantomjs2-ext/-/phantomjs2-ext-0.2.2.tgz", - "integrity": "sha1-v8oHkeYPniZVVctr76Pw3PVaviw=", - "dev": true, - "requires": { - "adm-zip": "0.4.7", - "kew": "0.5.0", - "mkdirp": "0.5.0", - "ncp": "2.0.0", - "npmconf": "2.1.1", - "progress": "1.1.8", - "request": "2.55.0", - "request-progress": "0.3.1", - "rimraf": "2.3.4", - "which": "1.0.9" + "domelementtype": "1.3.0", + "domhandler": "2.3.0", + "domutils": "1.5.1", + "entities": "1.0.0", + "readable-stream": "1.1.14" }, "dependencies": { - "asn1": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", - "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", - "dev": true - }, - "assert-plus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", - "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", - "dev": true - }, - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - }, - "aws-sign2": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", - "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", - "dev": true - }, - "bl": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", - "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", - "dev": true, - "requires": { - "readable-stream": "1.0.34" - } - }, - "caseless": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.9.0.tgz", - "integrity": "sha1-t7Zc5r8UE4hlOc/VM/CzDv+pz4g=", + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "combined-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", - "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", - "dev": true, - "requires": { - "delayed-stream": "0.0.5" - } - }, - "delayed-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", - "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "form-data": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz", - "integrity": "sha1-Jvi8JtpkQOKZy9z7aQNcT3em5GY=", - "dev": true, - "requires": { - "async": "0.9.2", - "combined-stream": "0.0.7", - "mime-types": "2.0.14" - } - }, - "glob": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", - "dev": true, - "requires": { - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "2.0.10", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - } - }, - "har-validator": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-1.8.0.tgz", - "integrity": "sha1-2DhCsOtMQ1lgrrEIoGejqpTA7rI=", - "dev": true, - "requires": { - "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "is-my-json-valid": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz" - } - }, - "hawk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz", - "integrity": "sha1-HnMc45RH+h0PbXB/e87r7A/R7B8=", - "dev": true, - "requires": { - "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "sntp": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" - } - }, - "http-signature": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", - "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", - "dev": true, - "requires": { - "asn1": "0.1.11", - "assert-plus": "0.1.5", - "ctype": "0.5.3" - } - }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, - "mime-db": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", - "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=", - "dev": true - }, - "mime-types": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", - "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", - "dev": true, - "requires": { - "mime-db": "1.12.0" - } - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", - "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", - "dev": true - }, - "oauth-sign": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.6.0.tgz", - "integrity": "sha1-fb6uRPbKRU4fFoRR1jB0ZzWBPOM=", - "dev": true - }, - "qs": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-2.4.2.tgz", - "integrity": "sha1-9854jld33wtQENp/fE5zujJHD1o=", - "dev": true - }, "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "core-util-is": "1.0.2", + "inherits": "2.0.3", "isarray": "0.0.1", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - } - }, - "request": { - "version": "2.55.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.55.0.tgz", - "integrity": "sha1-11wc32eddrsQD5v/4f5VG1wk6T0=", - "dev": true, - "requires": { - "aws-sign2": "0.5.0", - "bl": "0.9.5", - "caseless": "0.9.0", - "combined-stream": "0.0.7", - "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "form-data": "0.2.0", - "har-validator": "1.8.0", - "hawk": "2.3.1", - "http-signature": "0.10.1", - "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "mime-types": "2.0.14", - "node-uuid": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", - "oauth-sign": "0.6.0", - "qs": "2.4.2", - "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "tunnel-agent": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz" - } - }, - "rimraf": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.3.4.tgz", - "integrity": "sha1-gtm8Gy/PMeIFrHsoE4oCXQjpFZo=", - "dev": true, - "requires": { - "glob": "4.5.3" + "string_decoder": "0.10.31" } }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", - "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } } }, - "pify": { - "version": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", "dev": true, "requires": { - "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + "depd": "1.1.1", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + } } }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "http-proxy": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } }, - "preserve": { - "version": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true + "http-signature": { + "version": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "jsprim": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", + "sshpk": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz" + } }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", "dev": true }, - "process-nextick-args": { - "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "https-proxy-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", + "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", + "dev": true, + "requires": { + "agent-base": "2.1.1", + "debug": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz" + } + }, + "i": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", + "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=", "dev": true }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "iconv-lite": { + "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", "dev": true }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", "dev": true }, - "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "indent-string": { + "version": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.5" + "repeating": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz" } }, - "punycode": { - "version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "indexof": { + "version": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "dev": true }, - "q": { - "version": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "inflection": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", + "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", "dev": true }, - "qjobs": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", - "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", + "inflight": { + "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + }, + "inherit": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/inherit/-/inherit-2.2.6.tgz", + "integrity": "sha1-8WFLBshUToEo5CKchjR9tzrZeI0=", "dev": true }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "inherits": { + "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "ini": { + "version": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", "dev": true }, - "randomatic": { - "version": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", - "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=", + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", "dev": true, "requires": { - "is-number": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz" + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" } }, - "randombytes": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", - "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "insert-module-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", + "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "JSONStream": "1.3.1", + "combine-source-map": "0.7.2", + "concat-stream": "1.5.2", + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", + "lexical-scope": "1.2.0", + "process": "0.11.10", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" } }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", "dev": true }, - "raw-body": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", - "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "requires": { - "bytes": "2.4.0", - "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "unpipe": "1.0.0" + "is-relative": "1.0.0", + "is-windows": "1.0.2" } }, - "read-only-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + "kind-of": "3.2.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } } }, - "read-pkg": { - "version": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "is-arrayish": { + "version": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "load-json-file": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", - "path-type": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" + "binary-extensions": "1.9.0" } }, - "read-pkg-up": { - "version": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "is-buffer": { + "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", + "integrity": "sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=", + "dev": true + }, + "is-builtin-module": { + "version": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "find-up": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "read-pkg": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" + "builtin-modules": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" } }, - "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=", + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "buffer-shims": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "kind-of": "3.2.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } } }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "set-immediate-shim": "1.0.1" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } } }, - "redent": { - "version": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "strip-indent": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz" - } + "is-dotfile": { + "version": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", + "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=", + "dev": true }, - "regex-cache": { - "version": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", - "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "is-equal-shallow": { + "version": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-equal-shallow": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "is-primitive": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" } }, - "repeat-element": { - "version": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "is-extendable": { + "version": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + } + }, + "is-glob": { + "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + }, + "is-integer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.7.tgz", + "integrity": "sha1-a96Bqs3feLZZtmKdYpytxRqIbVw=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + }, + "dependencies": { + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + } + } + }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true + }, + "is-my-json-valid": { + "version": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", + "integrity": "sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=", + "dev": true, + "requires": { + "generate-function": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "generate-object-property": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "jsonpointer": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "is-number": { + "version": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz" + } + }, + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "dev": true, + "requires": { + "is-number": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-property": { + "version": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "requires": { + "is-unc-path": "1.0.0" + } + }, + "is-typedarray": { + "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "requires": { + "unc-path-regex": "0.1.2" + } + }, + "is-utf8": { + "version": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", + "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", + "dev": true + }, + "isexe": { + "version": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", + "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=", + "dev": true + }, + "isobject": { + "version": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + } + }, + "isstream": { + "version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "requires": { + "abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "handlebars": "4.0.10", + "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "nopt": "3.0.6", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "https://registry.npmjs.org/which/-/which-1.2.12.tgz", + "wordwrap": "1.0.0" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "jasmine": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.7.0.tgz", + "integrity": "sha1-XPC7TllLRgC7QjVWA2YhKsWuobI=", + "dev": true, + "requires": { + "exit": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "glob": "7.1.2", + "jasmine-core": "2.7.0" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "3.0.4", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "jasmine-ajax": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jasmine-ajax/-/jasmine-ajax-3.4.0.tgz", + "integrity": "sha512-LIVNVCmx5ou+IG6wgX7j73YYzvE2e3aqFWMjOhvAHWTnLICOYSobIH+PG/gOwtP20X0u2SkD3NXT/j5X8rMGOA==", + "dev": true + }, + "jasmine-core": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.7.0.tgz", + "integrity": "sha1-UP+MT5LY71wLLBuEbdJj7YUVIJE=", + "dev": true + }, + "jodid25519": { + "version": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz" + } + }, + "js-tokens": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.1.tgz", + "integrity": "sha1-zENaXIuUrRWst5gxQPyAGCyJrq4=", + "dev": true + }, + "js-yaml": { + "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", + "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", + "dev": true, + "requires": { + "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz" + } + }, + "jsbn": { + "version": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", + "integrity": "sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=", + "dev": true, + "optional": true + }, + "jscs": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/jscs/-/jscs-2.11.0.tgz", + "integrity": "sha1-bhHvDKqgdzH53MKysn2OzuHdvLY=", + "dev": true, + "requires": { + "babel-jscs": "2.0.5", + "chalk": "1.1.3", + "cli-table": "0.3.1", + "commander": "2.9.0", + "escope": "3.6.0", + "esprima": "2.7.3", + "estraverse": "4.2.0", + "exit": "0.1.2", + "glob": "5.0.15", + "htmlparser2": "3.8.3", + "js-yaml": "3.4.6", + "jscs-jsdoc": "1.3.2", + "jscs-preset-wikimedia": "1.0.1", + "jsonlint": "1.6.3", + "lodash": "3.10.1", + "minimatch": "3.0.4", + "natural-compare": "1.2.2", + "pathval": "0.1.1", + "prompt": "0.2.14", + "reserved-words": "0.1.2", + "resolve": "1.7.1", + "strip-bom": "2.0.0", + "strip-json-comments": "1.0.4", + "to-double-quotes": "2.0.0", + "to-single-quotes": "2.0.1", + "vow": "0.4.17", + "vow-fs": "0.3.6", + "xmlbuilder": "3.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "js-yaml": { + "version": "3.4.6", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.4.6.tgz", + "integrity": "sha1-a+GyP2JJ9T0pM3D9TRqqY84bTrA=", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "2.7.3", + "inherit": "2.2.6" + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } + }, + "jscs-jsdoc": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/jscs-jsdoc/-/jscs-jsdoc-1.3.2.tgz", + "integrity": "sha1-HyyCtqtLl1JNqVj0a05WLgMF+ac=", + "dev": true, + "requires": { + "comment-parser": "0.3.2", + "jsdoctypeparser": "1.2.0" + } + }, + "jscs-preset-wikimedia": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.1.tgz", + "integrity": "sha512-RWqu6IYSUlnYuCRCF0obCOHjJV0vhpLcvKbauwxmLQoZ0PiXDTWBYlfpsEfdhg7pmREAEwrARfDRz5qWD6qknA==", + "dev": true + }, + "jsdoc-dash-template": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/jsdoc-dash-template/-/jsdoc-dash-template-1.2.0.tgz", + "integrity": "sha1-8iUxyOvERmJ5pxNuVO+SDHKtEOk=", + "dev": true, + "requires": { + "jsdoc-docset": "0.2.1" + } + }, + "jsdoc-docset": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/jsdoc-docset/-/jsdoc-docset-0.2.1.tgz", + "integrity": "sha1-5XLsy4aj+lYBrnxrtkMBU1MeezU=", + "dev": true, + "requires": { + "docset-generator": "0.2.2", + "object-assign": "4.1.1" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + } + } + }, + "jsdoctypeparser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz", + "integrity": "sha1-597cFToRhJ/8UUEUSuhqfvDCU5I=", + "dev": true, + "requires": { + "lodash": "3.10.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "jshint": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz", + "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", + "dev": true, + "requires": { + "cli": "1.0.1", + "console-browserify": "1.1.0", + "exit": "0.1.2", + "htmlparser2": "3.8.3", + "lodash": "3.7.0", + "minimatch": "3.0.4", + "shelljs": "0.3.0", + "strip-json-comments": "1.0.4" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "lodash": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", + "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + } + } + }, + "json-schema": { + "version": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", + "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=", + "dev": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonlint": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.3.tgz", + "integrity": "sha512-jMVTMzP+7gU/IyC6hvKyWpUU8tmTkK5b3BPNuMI9U8Sit+YAWLlZwB6Y6YrdCxfg2kNz05p3XY3Bmm4m26Nv3A==", + "dev": true, + "requires": { + "JSV": "4.0.2", + "nomnom": "1.8.1" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsonpointer": { + "version": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz", + "integrity": "sha1-ZmHhYdL8RF8Z+YQwIxNDci4fy9U=", + "dev": true + }, + "jsprim": { + "version": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", + "integrity": "sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=", + "dev": true, + "requires": { + "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "json-schema": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "verror": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz" + } + }, + "karma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.0.tgz", + "integrity": "sha1-b3oaQGRG+i4YfslTmGmPTO5HYmk=", + "dev": true, + "requires": { + "bluebird": "3.5.0", + "body-parser": "1.17.2", + "chokidar": "1.7.0", + "colors": "1.3.0", + "combine-lists": "1.0.1", + "connect": "3.6.3", + "core-js": "2.5.0", + "di": "0.0.1", + "dom-serialize": "2.2.1", + "expand-braces": "0.1.2", + "glob": "7.1.2", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "http-proxy": "1.16.2", + "isbinaryfile": "3.0.2", + "lodash": "3.10.1", + "log4js": "0.6.38", + "mime": "1.3.6", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "optimist": "0.6.1", + "qjobs": "1.1.5", + "range-parser": "1.2.0", + "rimraf": "2.6.1", + "safe-buffer": "5.1.1", + "socket.io": "1.7.3", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "tmp": "0.0.31", + "useragent": "2.2.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "bluebird": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + }, + "core-js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz", + "integrity": "sha1-VpwFCRi+ZIazg3VSAorgRmtxcIY=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "3.0.4", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, + "requires": { + "glob": "7.1.2" + } + } + } + }, + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "dev": true, + "requires": { + "fs-access": "1.0.1", + "which": "https://registry.npmjs.org/which/-/which-1.2.12.tgz" + } + }, + "karma-coverage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.1.tgz", + "integrity": "sha1-Wv+LOc9plNwi3kyENix2ABtjfPY=", + "dev": true, + "requires": { + "dateformat": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "istanbul": "0.4.5", + "lodash": "3.10.1", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "karma-firefox-launcher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.0.1.tgz", + "integrity": "sha1-zlj0fCATqIFW1VpdYTN8CZz1u1E=", + "dev": true + }, + "karma-ie-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/karma-ie-launcher/-/karma-ie-launcher-1.0.0.tgz", + "integrity": "sha1-SXmGhCxJAZA0bNifVJTKmDDG1Zw=", + "dev": true, + "requires": { + "lodash": "4.17.4" + }, + "dependencies": { + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + } + } + }, + "karma-jasmine": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.0.tgz", + "integrity": "sha1-IuTAa/mhguUpTR9wXjczgRuBCs8=", + "dev": true + }, + "karma-jasmine-ajax": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/karma-jasmine-ajax/-/karma-jasmine-ajax-0.1.13.tgz", + "integrity": "sha1-eLuS2Jb+MqJaGACYxHci4dlgW/w=", + "dev": true, + "requires": { + "jasmine-ajax": "3.4.0" + } + }, + "karma-opera-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/karma-opera-launcher/-/karma-opera-launcher-1.0.0.tgz", + "integrity": "sha1-+lFihTGh0L6EstjcDX7iCfyP+Ro=", + "dev": true + }, + "karma-phantomjs2-launcher": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/karma-phantomjs2-launcher/-/karma-phantomjs2-launcher-0.5.0.tgz", + "integrity": "sha1-X/jI8i0N+OZygoyoeQhiq8Amk0U=", + "dev": true, + "requires": { + "lodash": "3.10.1", + "phantomjs2-ext": "0.2.2" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "karma-safari-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/karma-safari-launcher/-/karma-safari-launcher-1.0.0.tgz", + "integrity": "sha1-lpgqLMR9BmquccVTursoMZEVos4=", + "dev": true + }, + "karma-sauce-launcher": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/karma-sauce-launcher/-/karma-sauce-launcher-1.1.0.tgz", + "integrity": "sha1-PQg89WWdZzarl7zuXYrNhq1SIhI=", + "dev": true, + "requires": { + "q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "sauce-connect-launcher": "0.17.0", + "saucelabs": "1.4.0", + "wd": "1.4.0" + } + }, + "karma-spec-reporter": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.31.tgz", + "integrity": "sha1-SDDccUihVcfXoYbmMjOaDYD63sM=", + "dev": true, + "requires": { + "colors": "1.3.0" + } + }, + "kew": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.5.0.tgz", + "integrity": "sha1-7OEctdjQGoH4zoBMjQu6BuayXKI=", + "dev": true + }, + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", + "integrity": "sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz" + } + }, + "labeled-stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", + "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "0.0.1", + "stream-splicer": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "lazy-cache": { + "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, + "lazy-debug-legacy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/lazy-debug-legacy/-/lazy-debug-legacy-0.0.1.tgz", + "integrity": "sha1-U3cWwHduTPeePtG2IfdljCkRsbE=", + "dev": true + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "lcov-parse": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", + "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", + "dev": true + }, + "leven": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/leven/-/leven-1.0.2.tgz", + "integrity": "sha1-kUS27ryl8dBoAWnxpncNzqYLdcM=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "lexical-scope": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", + "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", + "dev": true, + "requires": { + "astw": "2.2.0" + } + }, + "liftoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", + "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", + "dev": true, + "requires": { + "extend": "3.0.1", + "findup-sync": "2.0.0", + "fined": "1.1.0", + "flagged-respawn": "1.0.0", + "is-plain-object": "2.0.4", + "object.map": "1.0.1", + "rechoir": "0.6.2", + "resolve": "1.7.1" + }, + "dependencies": { + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + } + } + }, + "load-json-file": { + "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "parse-json": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" + } + }, + "lodash": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", + "dev": true + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true + }, + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "dev": true + }, + "lodash._createassigner": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", + "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "dev": true, + "requires": { + "lodash._bindcallback": "3.0.1", + "lodash._isiterateecall": "3.0.9", + "lodash.restparam": "3.6.1" + } + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.assign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", + "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", + "dev": true, + "requires": { + "lodash._baseassign": "3.2.0", + "lodash._createassigner": "3.1.1", + "lodash.keys": "3.1.2" + } + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true, + "requires": { + "lodash._root": "3.0.1" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "dev": true + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash._basetostring": "3.0.1", + "lodash._basevalues": "3.0.0", + "lodash._isiterateecall": "3.0.9", + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0", + "lodash.keys": "3.1.2", + "lodash.restparam": "3.6.1", + "lodash.templatesettings": "3.1.1" + } + }, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0" + } + }, + "log-driver": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", + "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=", + "dev": true + }, + "log4js": { + "version": "0.6.38", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "0.0.1", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + } + } + }, + "longest": { + "version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loud-rejection": { + "version": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "signal-exit": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz" + } + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "meow": { + "version": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "loud-rejection": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "map-obj": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "read-pkg-up": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "redent": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "trim-newlines": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" + }, + "dependencies": { + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "micromatch": { + "version": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "braces": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "expand-brackets": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "extglob": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "filename-regex": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", + "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", + "object.omit": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "parse-glob": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "regex-cache": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz" + } + }, + "miller-rabin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", + "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "dev": true + }, + "mime-db": { + "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz", + "integrity": "sha1-wY29fHOl2/b0SgJNwNFloeexw5I=", + "dev": true + }, + "mime-types": { + "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", + "integrity": "sha1-4HqqnGxrmnyjASxpADrSWjnpKog=", + "dev": true, + "requires": { + "mime-db": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz" + } + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", + "dev": true, + "requires": { + "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" + } + }, + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mkdirp": { + "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + }, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "module-deps": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", + "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", + "dev": true, + "requires": { + "JSONStream": "1.3.1", + "browser-resolve": "1.11.2", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "detective": "https://registry.npmjs.org/detective/-/detective-4.3.2.tgz", + "duplexer2": "0.1.4", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "parents": "1.0.1", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", + "stream-combiner2": "1.1.1", + "subarg": "1.0.0", + "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "moment": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", + "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==", + "dev": true + }, + "moment-timezone": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.17.tgz", + "integrity": "sha512-Y/JpVEWIOA9Gho4vO15MTnW1FCmHi3ypprrkUaxsZ1TKg3uqC8q/qMBjTddkHoiwwZN3qvZSr4zJP7x9V3LpXA==", + "dev": true, + "requires": { + "moment": "2.22.1" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "requires": { + "duplexer2": "0.0.2" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "1.1.14" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", + "integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "natives": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz", + "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==", + "dev": true + }, + "natural-compare": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.2.2.tgz", + "integrity": "sha1-H5bWDjFBysG20FZTzg2urHY69qo=", + "dev": true + }, + "ncp": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", + "integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "node-uuid": { + "version": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", + "integrity": "sha1-baWhdmjEs91ZYjvaEc9/pMH2Cm8=", + "dev": true + }, + "nomnom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "dev": true, + "requires": { + "chalk": "0.4.0", + "underscore": "1.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "1.0.0", + "has-color": "0.1.7", + "strip-ansi": "0.1.1" + } + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz" + } + }, + "normalize-package-data": { + "version": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", + "integrity": "sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=", + "dev": true, + "requires": { + "hosted-git-info": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", + "is-builtin-module": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "validate-npm-package-license": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz" + } + }, + "normalize-path": { + "version": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", + "integrity": "sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=", + "dev": true + }, + "npmconf": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/npmconf/-/npmconf-2.1.1.tgz", + "integrity": "sha1-ombH5cVmlet/VcrzpacyjyRRDa4=", + "dev": true, + "requires": { + "config-chain": "1.1.11", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "ini": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "nopt": "3.0.6", + "once": "1.3.3", + "osenv": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "uid-number": "0.0.5" + }, + "dependencies": { + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "requires": { + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + } + } + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "number-is-nan": { + "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "requires": { + "array-each": "1.0.1", + "array-slice": "1.1.0", + "for-own": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "requires": { + "for-own": "1.0.0", + "make-iterator": "1.0.1" + }, + "dependencies": { + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + } + } + }, + "object.omit": { + "version": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.10", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "orchestrator": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", + "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", + "dev": true, + "requires": { + "end-of-stream": "0.1.5", + "sequencify": "0.0.7", + "stream-consume": "0.1.1" + } + }, + "ordered-read-streams": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", + "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", + "dev": true + }, + "os-browserify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", + "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=", + "dev": true + }, + "os-homedir": { + "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, + "os-tmpdir": { + "version": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "dev": true, + "requires": { + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + } + }, + "output-file-sync": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + } + } + }, + "p-map": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.1.1.tgz", + "integrity": "sha1-BfXkrpegaDcbwqXMhr+9vBnErno=", + "dev": true + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dev": true, + "requires": { + "path-platform": "0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true, + "requires": { + "asn1.js": "4.9.1", + "browserify-aes": "1.0.6", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.0", + "pbkdf2": "3.0.13" + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "requires": { + "is-absolute": "1.0.0", + "map-cache": "0.2.2", + "path-root": "0.1.1" + } + }, + "parse-glob": { + "version": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "is-dotfile": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + } + }, + "parse-json": { + "version": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-exists": { + "version": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "path-is-absolute": { + "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "0.1.2" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "path-type": { + "version": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "pathval": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-0.1.1.tgz", + "integrity": "sha1-CPkRzcqczllCiA2ngXvAtyO2bYI=", + "dev": true + }, + "pbkdf2": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.13.tgz", + "integrity": "sha512-+dCHxDH+djNtjgWmvVC/my3SYBAKpKNqKSjLkp+GtWWYe4XPE+e/PSD2aCanlEZZnqPk2uekTKNC/ccbwd2X2Q==", + "dev": true, + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.8" + } + }, + "phantomjs2-ext": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/phantomjs2-ext/-/phantomjs2-ext-0.2.2.tgz", + "integrity": "sha1-v8oHkeYPniZVVctr76Pw3PVaviw=", + "dev": true, + "requires": { + "adm-zip": "0.4.7", + "kew": "0.5.0", + "mkdirp": "0.5.0", + "ncp": "2.0.0", + "npmconf": "2.1.1", + "progress": "1.1.8", + "request": "2.55.0", + "request-progress": "0.3.1", + "rimraf": "2.3.4", + "which": "1.0.9" + }, + "dependencies": { + "asn1": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", + "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", + "dev": true + }, + "assert-plus": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", + "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", + "dev": true + }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, + "aws-sign2": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", + "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", + "dev": true + }, + "bl": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", + "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", + "dev": true, + "requires": { + "readable-stream": "1.0.34" + } + }, + "caseless": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.9.0.tgz", + "integrity": "sha1-t7Zc5r8UE4hlOc/VM/CzDv+pz4g=", + "dev": true + }, + "combined-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", + "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", + "dev": true, + "requires": { + "delayed-stream": "0.0.5" + } + }, + "delayed-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", + "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", + "dev": true + }, + "form-data": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz", + "integrity": "sha1-Jvi8JtpkQOKZy9z7aQNcT3em5GY=", + "dev": true, + "requires": { + "async": "0.9.2", + "combined-stream": "0.0.7", + "mime-types": "2.0.14" + } + }, + "glob": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", + "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", + "dev": true, + "requires": { + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "2.0.10", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + } + }, + "har-validator": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-1.8.0.tgz", + "integrity": "sha1-2DhCsOtMQ1lgrrEIoGejqpTA7rI=", + "dev": true, + "requires": { + "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "is-my-json-valid": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz" + } + }, + "hawk": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz", + "integrity": "sha1-HnMc45RH+h0PbXB/e87r7A/R7B8=", + "dev": true, + "requires": { + "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "sntp": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" + } + }, + "http-signature": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", + "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", + "dev": true, + "requires": { + "asn1": "0.1.11", + "assert-plus": "0.1.5", + "ctype": "0.5.3" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "mime-db": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", + "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=", + "dev": true + }, + "mime-types": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", + "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", + "dev": true, + "requires": { + "mime-db": "1.12.0" + } + }, + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true, + "requires": { + "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "dev": true + }, + "oauth-sign": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.6.0.tgz", + "integrity": "sha1-fb6uRPbKRU4fFoRR1jB0ZzWBPOM=", + "dev": true + }, + "qs": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-2.4.2.tgz", + "integrity": "sha1-9854jld33wtQENp/fE5zujJHD1o=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "0.0.1", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "request": { + "version": "2.55.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.55.0.tgz", + "integrity": "sha1-11wc32eddrsQD5v/4f5VG1wk6T0=", + "dev": true, + "requires": { + "aws-sign2": "0.5.0", + "bl": "0.9.5", + "caseless": "0.9.0", + "combined-stream": "0.0.7", + "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "form-data": "0.2.0", + "har-validator": "1.8.0", + "hawk": "2.3.1", + "http-signature": "0.10.1", + "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "mime-types": "2.0.14", + "node-uuid": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", + "oauth-sign": "0.6.0", + "qs": "2.4.2", + "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "tunnel-agent": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz" + } + }, + "rimraf": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.3.4.tgz", + "integrity": "sha1-gtm8Gy/PMeIFrHsoE4oCXQjpFZo=", + "dev": true, + "requires": { + "glob": "4.5.3" + } + }, + "which": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", + "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", + "dev": true + } + } + }, + "pify": { + "version": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + } + }, + "pkginfo": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", + "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", + "dev": true + }, + "prompt": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", + "integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=", + "dev": true, + "requires": { + "pkginfo": "0.4.1", + "read": "1.0.7", + "revalidator": "0.1.8", + "utile": "0.2.1", + "winston": "0.8.3" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.5" + } + }, + "punycode": { + "version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true + }, + "qjobs": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", + "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", + "dev": true + }, + "qs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "randomatic": { + "version": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", + "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=", + "dev": true, + "requires": { + "is-number": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz" + } + }, + "randombytes": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", + "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", + "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", + "dev": true, + "requires": { + "bytes": "2.4.0", + "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "unpipe": "1.0.0" + } + }, + "rcfinder": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/rcfinder/-/rcfinder-0.1.9.tgz", + "integrity": "sha1-8+gPOH3fmugK4wpBADKWQuroERU=", + "dev": true, + "requires": { + "lodash.clonedeep": "4.5.0" + } + }, + "rcloader": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/rcloader/-/rcloader-0.1.2.tgz", + "integrity": "sha1-oJY6ZDfQnvjLktky0trUl7DRc2w=", + "dev": true, + "requires": { + "lodash": "2.4.2", + "rcfinder": "0.1.9" + }, + "dependencies": { + "lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true + } + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dev": true, + "requires": { + "mute-stream": "0.0.7" + } + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + } + }, + "read-pkg": { + "version": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", + "path-type": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" + } + }, + "read-pkg-up": { + "version": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "read-pkg": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" + } + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=", + "dev": true, + "requires": { + "buffer-shims": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "set-immediate-shim": "1.0.1" + } + }, + "recast": { + "version": "0.10.33", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.10.33.tgz", + "integrity": "sha1-lCgI96oBbx+nFCxGHX5XBKqo1pc=", + "dev": true, + "requires": { + "ast-types": "0.8.12", + "esprima-fb": "15001.1001.0-dev-harmony-fb", + "private": "0.1.8", + "source-map": "0.5.7" + }, + "dependencies": { + "ast-types": { + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.12.tgz", + "integrity": "sha1-oNkOQ1G7iHcWyD/WN+v4GK9K38w=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.7.1" + }, + "dependencies": { + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + } + } + }, + "redent": { + "version": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "strip-indent": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerator": { + "version": "0.8.40", + "resolved": "https://registry.npmjs.org/regenerator/-/regenerator-0.8.40.tgz", + "integrity": "sha1-oORXxY69uuV1yfjNdRJ+k3VkNdg=", + "dev": true, + "requires": { + "commoner": "0.10.8", + "defs": "1.1.1", + "esprima-fb": "15001.1001.0-dev-harmony-fb", + "private": "0.1.8", + "recast": "0.10.33", + "through": "2.3.8" + }, + "dependencies": { + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + } + } + }, + "regex-cache": { + "version": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "dev": true, + "requires": { + "is-equal-shallow": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "is-primitive": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "regexpu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexpu/-/regexpu-1.3.0.tgz", + "integrity": "sha1-5TTcmRqeWEYFDJjebX3UpVyeoW0=", + "dev": true, + "requires": { + "esprima": "2.7.3", + "recast": "0.10.33", + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + } + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz" + } + }, + "replace-ext": { + "version": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "request": { + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", + "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.7.0", + "caseless": "0.11.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "qs": "6.3.2", + "stringstream": "0.0.6", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.4.3", + "uuid": "3.2.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "1.0.2" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.15.1", + "is-my-json-valid": "2.17.2", + "pinkie-promise": "2.0.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } + }, + "is-my-json-valid": { + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", + "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "is-my-ip-valid": "1.0.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "1.33.0" + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + } + } + }, + "request-progress": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz", + "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=", + "dev": true, + "requires": { + "throttleit": "0.0.2" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "reserved-words": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz", + "integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=", + "dev": true + }, + "resolve": { + "version": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", + "integrity": "sha1-lYnD8vYUnRQXpAvswWY9tuxrwmw=", + "dev": true + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "global-modules": "1.0.0" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry-as-promised": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.2.tgz", + "integrity": "sha1-zZdO5P2bX+A8vzGHHuSCIcB3N7c=", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "debug": "2.6.9" + }, + "dependencies": { + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "revalidator": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", + "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=", + "dev": true + }, + "right-align": { + "version": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, + "requires": { + "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz" + } + }, + "rimraf": { + "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", + "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz" + }, + "dependencies": { + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + } + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "run-sequence": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-1.2.2.tgz", + "integrity": "sha1-UJWgvr6YczsBQL0I3YDsAw3azes=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "gulp-util": "3.0.8" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sauce-connect-launcher": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-0.17.0.tgz", + "integrity": "sha1-kI2TEeyvF92bRkehQ1/UogcugM4=", + "dev": true, + "requires": { + "adm-zip": "0.4.7", + "async": "1.4.0", + "https-proxy-agent": "1.0.0", + "lodash": "3.10.1", + "rimraf": "2.4.3" + }, + "dependencies": { + "async": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.4.0.tgz", + "integrity": "sha1-Nfhvg8WeBCHQmc2akdgnj7V4wA0=", + "dev": true + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "rimraf": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.3.tgz", + "integrity": "sha1-5bUclDekxYKtuVXp8oz42UXicq8=", + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" + } + } + } + }, + "saucelabs": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.4.0.tgz", + "integrity": "sha1-uTSpr52ih0s/QKrh/N5QpEZvXzg=", + "dev": true, + "requires": { + "https-proxy-agent": "1.0.0" + } + }, + "semver": { + "version": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "sequelize": { + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-3.33.0.tgz", + "integrity": "sha1-sOsSuHIjre0Q5QqdeFBuDdQvkgg=", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "depd": "1.1.2", + "dottie": "1.1.1", + "generic-pool": "2.4.2", + "inflection": "1.12.0", + "lodash": "4.17.10", + "moment": "2.22.1", + "moment-timezone": "0.5.17", + "retry-as-promised": "2.3.2", + "semver": "5.5.0", + "shimmer": "1.1.0", + "terraformer-wkt-parser": "1.2.0", + "toposort-class": "1.0.1", + "uuid": "3.2.1", + "validator": "5.7.0", + "wkx": "0.2.0" + }, + "dependencies": { + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + } + } + }, + "sequencify": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", + "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + }, + "sha.js": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", + "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "dev": true, + "requires": { + "json-stable-stringify": "0.0.1", + "sha.js": "2.4.8" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "requires": { + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" + } + }, + "shelljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", + "dev": true + }, + "shimmer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.1.0.tgz", + "integrity": "sha1-l9c3cTf/u6tCVSLkKf4KqJpIizU=", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "signal-exit": { + "version": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "simple-fmt": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/simple-fmt/-/simple-fmt-0.1.0.tgz", + "integrity": "sha1-GRv1ZqWeZTBILLJatTtKjchcOms=", + "dev": true + }, + "simple-is": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz", + "integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.1.0" + }, + "dependencies": { + "atob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "2.1.1", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "sntp": { + "version": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" + } + }, + "socket.io": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", + "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "dev": true, + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.3", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.7.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "dev": true, + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + } + } + }, + "socket.io-client": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", + "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.3", + "has-binary": "0.1.7", + "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "dev": true, + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + }, + "source-map-resolve": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz", + "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", + "dev": true, + "requires": { + "atob": "1.1.3", + "resolve-url": "0.2.1", + "source-map-url": "0.3.0", + "urix": "0.1.0" + } + }, + "source-map-support": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", + "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", + "dev": true, + "requires": { + "source-map": "0.1.32" + }, + "dependencies": { + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "source-map": { + "version": "0.1.32", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", + "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "source-map-url": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz", + "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=", + "dev": true + }, + "sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "dev": true + }, + "spdx-correct": { + "version": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz" + } + }, + "spdx-expression-parse": { + "version": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, + "sprintf-js": { + "version": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sqlite3": { + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-3.1.13.tgz", + "integrity": "sha512-JxXKPJnkZ6NuHRojq+g2WXWBt3M1G9sjZaYiHEWSTGijDM3cwju/0T2XbWqMXFmPqDgw+iB7zKQvnns4bvzXlw==", + "dev": true, + "requires": { + "nan": "2.7.0", + "node-pre-gyp": "0.6.38" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.3" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.8", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true + } + } + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true + } + } + }, + "mime-db": { + "version": "1.30.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.17", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.30.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "nan": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", + "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", + "dev": true + }, + "node-pre-gyp": { + "version": "0.6.38", + "bundled": true, + "dev": true, + "requires": { + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.2", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.2", + "semver": "5.4.1", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.3", + "bundled": true, + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.4.1", + "bundled": true, + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.1", + "bundled": true, + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "requires": { + "debug": "2.6.9", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.3.3", + "rimraf": "2.6.2", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.3", + "bundled": true, + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.1.0", + "bundled": true, + "dev": true + }, + "verror": { + "version": "1.10.0", + "bundled": true, + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true + } + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, + "sshpk": { + "version": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz", + "integrity": "sha1-MOGl0ykkSXShr2FREznVla9mOLA=", "dev": true, "requires": { - "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz" + "asn1": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "bcrypt-pbkdf": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz", + "dashdash": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "ecc-jsbn": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "getpass": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", + "jodid25519": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", + "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + }, + "dependencies": { + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } } }, - "replace-ext": { - "version": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, - "request-progress": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz", - "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=", - "dev": true, + "stack-generator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.3.tgz", + "integrity": "sha512-kdzGoqrnqsMxOEuXsXyQTmvWXZmG0f3Ql2GDx5NtmZs59sT2Bt9Vdyq0XdtxUi58q/+nxtbF9KOQ9HkV1QznGg==", "requires": { - "throttleit": "0.0.2" + "stackframe": "1.0.4" } }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", - "integrity": "sha1-lYnD8vYUnRQXpAvswWY9tuxrwmw=", + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", "dev": true }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true + "stackframe": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", + "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==" }, - "right-align": { - "version": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "optional": true, + "stacktrace-gps": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.2.tgz", + "integrity": "sha512-9o+nWhiz5wFnrB3hBHs2PTyYrS60M1vvpSzHxwxnIbtY2q9Nt51hZvhrG1+2AxD374ecwyS+IUwfkHRE/2zuGg==", "requires": { - "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz" + "source-map": "0.5.6", + "stackframe": "1.0.4" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + } } }, - "rimraf": { - "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", - "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz" + "define-property": "0.2.5", + "object-copy": "0.1.0" }, "dependencies": { - "glob": { - "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "is-descriptor": "0.1.6" } } } }, - "ripemd160": { + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stream-browserify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "hash-base": "2.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" } }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "requires": { + "duplexer2": "0.1.4", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + } + }, + "stream-consume": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz", + "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==", "dev": true }, - "sauce-connect-launcher": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-0.17.0.tgz", - "integrity": "sha1-kI2TEeyvF92bRkehQ1/UogcugM4=", + "stream-http": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", "dev": true, "requires": { - "adm-zip": "0.4.7", - "async": "1.4.0", - "https-proxy-agent": "1.0.0", - "lodash": "3.10.1", - "rimraf": "2.4.3" + "builtin-status-codes": "3.0.0", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "2.3.3", + "to-arraybuffer": "1.0.1", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" }, "dependencies": { - "async": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.4.0.tgz", - "integrity": "sha1-Nfhvg8WeBCHQmc2akdgnj7V4wA0=", - "dev": true - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "rimraf": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.3.tgz", - "integrity": "sha1-5bUclDekxYKtuVXp8oz42UXicq8=", + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { - "glob": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" + "safe-buffer": "5.1.1" } } } }, - "saucelabs": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.4.0.tgz", - "integrity": "sha1-uTSpr52ih0s/QKrh/N5QpEZvXzg=", + "stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", + "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", "dev": true, "requires": { - "https-proxy-agent": "1.0.0" + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" } }, - "semver": { - "version": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "stringmap": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stringmap/-/stringmap-0.2.2.tgz", + "integrity": "sha1-VWwTeyWPlCuHdvWy71gqoGnX0bE=", "dev": true }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "stringset": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/stringset/-/stringset-0.2.1.tgz", + "integrity": "sha1-7yWcTjSTRDd/zRyRPdLoSMnAQrU=", "dev": true }, - "sha.js": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", - "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", + "stringstream": { + "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" } }, - "shasum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "strip-bom": { + "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "json-stable-stringify": "0.0.1", - "sha.js": "2.4.8" + "is-utf8": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" } }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "strip-indent": { + "version": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, "requires": { - "array-filter": "0.0.1", - "array-map": "0.0.0", - "array-reduce": "0.0.0", - "jsonify": "0.0.0" + "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" } }, - "signal-exit": { - "version": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", "dev": true }, - "sntp": { - "version": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", "dev": true, "requires": { - "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" } }, - "socket.io": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", - "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "syntax-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", + "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", "dev": true, "requires": { - "debug": "2.3.3", - "engine.io": "1.8.3", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" - } - }, - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "dev": true - } + "acorn": "4.0.13" } }, - "socket.io-adapter": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "tar-stream": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", + "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", "dev": true, "requires": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" + "bl": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", + "end-of-stream": "1.4.0", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" }, "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "end-of-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", "dev": true, "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" } } } }, - "socket.io-client": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", - "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "terraformer": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.8.tgz", + "integrity": "sha1-UeCtiXRvzyFh3G9lqnDkI3fItZM=", "dev": true, "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "1.8.3", - "has-binary": "0.1.7", - "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "object-component": "0.0.3", - "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", - "to-array": "0.1.4" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" - } - } + "@types/geojson": "1.0.6" } }, - "socket.io-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "terraformer-wkt-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.0.tgz", + "integrity": "sha512-QU3iA54St5lF8Za1jg1oj4NYc8sn5tCZ08aNSWDeGzrsaV48eZk1iAVWasxhNspYBoCqdHuoot1pUTUrE1AJ4w==", "dev": true, "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - } + "@types/geojson": "1.0.6", + "terraformer": "1.0.8" } }, - "source-map": { - "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "throttleit": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", "dev": true }, - "source-map-resolve": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz", - "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", + "through": { + "version": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "atob": "1.1.3", - "resolve-url": "0.2.1", - "source-map-url": "0.3.0", - "urix": "0.1.0" + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" } }, - "source-map-url": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz", - "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=", + "tildify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", + "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", + "dev": true, + "requires": { + "os-homedir": "1.0.2" + }, + "dependencies": { + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + } + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", "dev": true }, - "spdx-correct": { - "version": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dev": true, + "requires": { + "process": "0.11.10" + } + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", "dev": true, "requires": { - "spdx-license-ids": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz" + "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" } }, - "spdx-expression-parse": { - "version": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", "dev": true }, - "spdx-license-ids": { - "version": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, - "sprintf-js": { - "version": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "to-double-quotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-double-quotes/-/to-double-quotes-2.0.0.tgz", + "integrity": "sha1-qvIx1vqUiUn4GTAburRITYWI5Kc=", "dev": true }, - "sshpk": { - "version": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz", - "integrity": "sha1-MOGl0ykkSXShr2FREznVla9mOLA=", + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "asn1": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "bcrypt-pbkdf": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz", - "dashdash": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "ecc-jsbn": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "getpass": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", - "jodid25519": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", - "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + "kind-of": "3.2.2" }, "dependencies": { - "assert-plus": { - "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } } } }, - "stack-generator": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.2.tgz", - "integrity": "sha512-Qj3X+vY7qQ0OOLQomEihHk5SSnSPCI3z4RfB8kDk9lnzwznBODlkWODitEo8sHpp0a2VdSy3yuJkabNsQN5RGA==", + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, "requires": { - "stackframe": "1.0.4" + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } }, - "stackframe": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", - "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==" - }, - "stacktrace-gps": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.2.tgz", - "integrity": "sha512-9o+nWhiz5wFnrB3hBHs2PTyYrS60M1vvpSzHxwxnIbtY2q9Nt51hZvhrG1+2AxD374ecwyS+IUwfkHRE/2zuGg==", + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, "requires": { - "source-map": "0.5.6", - "stackframe": "1.0.4" + "is-number": "3.0.0", + "repeat-string": "1.6.1" }, "dependencies": { - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true } } }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "to-single-quotes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/to-single-quotes/-/to-single-quotes-2.0.1.tgz", + "integrity": "sha1-fMKRUfD18sQZRvEZ9ZMv5VQXASU=", "dev": true }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=", + "dev": true + }, + "tough-cookie": { + "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", "dev": true, "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + "punycode": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" } }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "trim-newlines": { + "version": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "try-resolve": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz", + "integrity": "sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=", + "dev": true + }, + "tryor": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz", + "integrity": "sha1-gUXkynyv9ArN48z5Rui4u3W0Fys=", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + }, + "tweetnacl": { + "version": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "duplexer2": "0.1.4", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + "prelude-ls": "1.1.2" } }, - "stream-http": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + "media-typer": "0.3.0", + "mime-types": "2.1.16" }, "dependencies": { - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - } + "mime-db": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", + "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=", + "dev": true }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "mime-types": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", + "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "mime-db": "1.29.0" } } } }, - "stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", - "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", + "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=", "dev": true, + "optional": true, "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + "async": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "uglify-to-browserify": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "yargs": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz" + }, + "dependencies": { + "async": { + "version": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true, + "optional": true + } } }, - "string_decoder": { - "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "uglify-save-license": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz", + "integrity": "sha1-lXJsF8xv0XHDYX479NjYKqjEzOE=", "dev": true }, - "stringstream": { - "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "uglify-to-browserify": { + "version": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.5.tgz", + "integrity": "sha1-Wj2yPvXb1VuB/ODsmirG/M3ruB4=", "dev": true }, - "strip-ansi": { - "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" - } + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "umd": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", + "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", + "dev": true + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true }, - "strip-bom": { - "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + }, + "underscore.string": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", + "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", "dev": true, "requires": { - "is-utf8": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + "sprintf-js": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" } }, - "strip-indent": { - "version": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } } }, - "subarg": { + "unique-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", + "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, - "supports-color": { - "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, - "syntax-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", - "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, "requires": { - "acorn": "4.0.13" + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } } }, - "tar-stream": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", - "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", + "use": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", "dev": true, "requires": { - "bl": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", - "end-of-stream": "1.4.0", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + "kind-of": "6.0.2" }, "dependencies": { - "end-of-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", - "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", - "dev": true, - "requires": { - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - } + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, - "throttleit": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", - "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", - "dev": true - }, - "through": { - "version": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", "dev": true }, - "through2": { - "version": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "useragent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", + "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", "dev": true, "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + "lru-cache": "2.2.4", + "tmp": "0.0.31" + }, + "dependencies": { + "lru-cache": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", + "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", + "dev": true + } } }, - "timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { - "process": "0.11.10" + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } } }, - "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "util-deprecate": { + "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utile": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", + "integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=", "dev": true, "requires": { - "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + "async": "0.2.10", + "deep-equal": "1.0.1", + "i": "0.3.6", + "mkdirp": "0.5.1", + "ncp": "0.4.2", + "rimraf": "2.6.2" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } } }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "utils-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", "dev": true }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", "dev": true }, - "tough-cookie": { - "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { - "punycode": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + "user-home": "1.1.1" } }, - "trim-newlines": { - "version": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true + "validate-npm-package-license": { + "version": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "spdx-expression-parse": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz" + } }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "validator": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-5.7.0.tgz", + "integrity": "sha1-eoelgUa2laxIYHEUHAxJ1n2gXlw=", "dev": true }, - "tunnel-agent": { - "version": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "vargs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vargs/-/vargs-0.1.0.tgz", + "integrity": "sha1-a2GE2mUgzDIEzhtAfKwm2SYJ6/8=", "dev": true }, - "tweetnacl": { - "version": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "verror": { + "version": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz" } }, - "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", "dev": true, "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.16" + "clone": "1.0.4", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" }, "dependencies": { - "mime-db": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", - "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=", + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, - "mime-types": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", - "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", - "dev": true, - "requires": { - "mime-db": "1.29.0" - } + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true } } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "uglify-js": { - "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", - "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=", + "vinyl-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vinyl-buffer/-/vinyl-buffer-1.0.1.tgz", + "integrity": "sha1-lsGjR5uMU5JULGEgKQE7Wyf4i78=", "dev": true, - "optional": true, "requires": { - "async": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "uglify-to-browserify": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "yargs": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz" + "bl": "1.2.2", + "through2": "2.0.3" }, "dependencies": { - "async": { - "version": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, - "optional": true + "requires": { + "readable-stream": "2.3.6", + "safe-buffer": "5.1.1" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.6", + "xtend": "4.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true } } }, - "uglify-to-browserify": { - "version": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.5.tgz", - "integrity": "sha1-Wj2yPvXb1VuB/ODsmirG/M3ruB4=", - "dev": true - }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", - "dev": true - }, - "umd": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", - "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", - "dev": true - }, - "underscore.string": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", - "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", - "dev": true, - "requires": { - "sprintf-js": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "vinyl-fs": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", + "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", "dev": true, "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "defaults": "1.0.3", + "glob-stream": "3.1.18", + "glob-watcher": "0.0.6", + "graceful-fs": "3.0.11", + "mkdirp": "0.5.1", + "strip-bom": "1.0.0", + "through2": "0.6.5", + "vinyl": "0.4.6" }, "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "graceful-fs": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", + "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", + "dev": true, + "requires": { + "natives": "1.1.4" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-bom": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", + "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", + "dev": true, + "requires": { + "first-chunk-stream": "1.0.0", + "is-utf8": "0.2.1" + } + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "0.2.0", + "clone-stats": "0.0.1" + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true } } }, - "useragent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", - "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", + "vinyl-source-stream": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.2.tgz", + "integrity": "sha1-YrU6E1YQqJbpjKlr7jqH8Aio54A=", "dev": true, "requires": { - "lru-cache": "2.2.4", - "tmp": "0.0.31" + "through2": "2.0.3", + "vinyl": "0.4.6" }, "dependencies": { - "lru-cache": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", - "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.6", + "xtend": "4.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "0.2.0", + "clone-stats": "0.0.1" + } + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true } } }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", "dev": true, "requires": { - "inherits": "2.0.1" + "source-map": "0.5.7" }, "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true } } }, - "util-deprecate": { - "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", - "dev": true - }, - "validate-npm-package-license": { - "version": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "dev": true, - "requires": { - "spdx-correct": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "spdx-expression-parse": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz" - } - }, - "vargs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/vargs/-/vargs-0.1.0.tgz", - "integrity": "sha1-a2GE2mUgzDIEzhtAfKwm2SYJ6/8=", - "dev": true - }, - "verror": { - "version": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "dev": true, - "requires": { - "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz" - } - }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", @@ -5607,6 +13224,129 @@ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true }, + "vow": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/vow/-/vow-0.4.17.tgz", + "integrity": "sha512-A3/9bWFqf6gT0jLR4/+bT+IPTe1mQf+tdsW6+WI5geP9smAp8Kbbu4R6QQCDKZN/8TSCqTlXVQm12QliB4rHfg==", + "dev": true + }, + "vow-fs": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.6.tgz", + "integrity": "sha1-LUxZviLivyYY3fWXq0uqkjvnIA0=", + "dev": true, + "requires": { + "glob": "7.1.2", + "uuid": "2.0.3", + "vow": "0.4.17", + "vow-queue": "0.4.3" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } + }, + "vow-queue": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/vow-queue/-/vow-queue-0.4.3.tgz", + "integrity": "sha512-/poAKDTFL3zYbeQg7cl4BGcfP4sGgXKrHnRFSKj97dteUFu8oyXMwIcdwu8NSx/RmPGIuYx1Bik/y5vU4H/VKw==", + "dev": true, + "requires": { + "vow": "0.4.17" + } + }, "walkdir": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", @@ -5711,6 +13451,53 @@ "dev": true, "optional": true }, + "winston": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", + "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=", + "dev": true, + "requires": { + "async": "0.2.10", + "colors": "0.6.2", + "cycle": "1.0.3", + "eyes": "0.1.8", + "isstream": "0.1.2", + "pkginfo": "0.3.1", + "stack-trace": "0.0.10" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "pkginfo": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", + "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=", + "dev": true + } + } + }, + "wkx": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.2.0.tgz", + "integrity": "sha1-dsJPFqzQzY+TzTSqMx4PeWElboQ=", + "dev": true + }, "wordwrap": { "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", @@ -5737,6 +13524,23 @@ "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", "dev": true }, + "xmlbuilder": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-3.1.0.tgz", + "integrity": "sha1-LIaIjy1OrehQ+jjKf3Ij9yCVFuE=", + "dev": true, + "requires": { + "lodash": "3.10.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, "xmlhttprequest-ssl": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", @@ -5748,6 +13552,12 @@ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, "yargs": { "version": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", diff --git a/package.json b/package.json index 797a764..614dcb1 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,8 @@ "url": "git://github.com/stacktracejs/stacktrace.js.git" }, "dependencies": { - "error-stack-parser": "^2.0.1", - "stack-generator": "^2.0.2", + "error-stack-parser": "^2.0.2", + "stack-generator": "^2.0.3", "stacktrace-gps": "^3.0.2" }, "devDependencies": { From c93875a396af352aa11ddbafeb04acb70bd674c5 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Thu, 31 May 2018 12:32:48 -0700 Subject: [PATCH 096/110] Omit unsupported browsers from Karma sauce config --- karma.conf.ci.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/karma.conf.ci.js b/karma.conf.ci.js index 2dafce6..433a158 100644 --- a/karma.conf.ci.js +++ b/karma.conf.ci.js @@ -8,12 +8,6 @@ module.exports = function(config) { // Commented some of these out just so CI doesn't take forever. // Check out https://saucelabs.com/platforms for all browser/platform combos var customLaunchers = { - slIOS8: { - base: 'SauceLabs', - browserName: 'iPhone', - platform: 'OS X 10.10', - version: '8.4' - }, slIOS9: { appiumVersion: '1.6.3', base: 'SauceLabs', @@ -83,10 +77,6 @@ module.exports = function(config) { platform: 'macOS 10.12', version: '10.0' }, - slOpera: { - base: 'SauceLabs', - browserName: 'opera' - }, slEdge14: { base: 'SauceLabs', browserName: 'microsoftedge', From 89214a1866da9eb9fb25054d64a65dea06e302dc Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Thu, 31 May 2018 12:33:57 -0700 Subject: [PATCH 097/110] Declare node@8 for travis CI --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 82cdaee..ad55ec1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,8 @@ language: node_js sudo: required dist: trusty -node_js: stable +node_js: + - 8 addons: sauce_connect: true firefox: latest From c5a34fd44fe9771bd1a4e1a8db66f5064703e8bc Mon Sep 17 00:00:00 2001 From: Andrew Makarov Date: Sat, 9 Jun 2018 10:56:18 +0300 Subject: [PATCH 098/110] Enable TypeScript typings --- package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package.json b/package.json index 614dcb1..94ac47e 100644 --- a/package.json +++ b/package.json @@ -69,8 +69,10 @@ "CHANGELOG.md", "README.md", "stacktrace.js", + "stacktrace-js.d.ts", "dist/" ], + "typings": "./stacktrace-js.d.ts", "scripts": { "test": "gulp test", "prepublish": "gulp dist" From 53aab1474d55ee625e74f509f6a568037754038a Mon Sep 17 00:00:00 2001 From: niftylettuce Date: Fri, 13 Sep 2019 10:10:48 -0500 Subject: [PATCH 099/110] Fix travis.yml (trusty > xenial) Builds otherwise fail without this. Ref: --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ad55ec1..d5f0774 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js sudo: required -dist: trusty +dist: xenial node_js: - 8 addons: From c7e5c594699bd3024e0acfec3ee28491333ac19d Mon Sep 17 00:00:00 2001 From: niftylettuce Date: Fri, 13 Sep 2019 10:16:19 -0500 Subject: [PATCH 100/110] Added "xvfb" to travis services Ref: https://stackoverflow.com/questions/55674746/travis-sh-0-cant-open-etc-init-d-xvfb --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d5f0774..81240ae 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,10 +11,11 @@ addons: - google-chrome packages: - google-chrome-stable +services: + - xvfb before_install: - export CHROME_BIN=chromium-browser - export DISPLAY=:99.0 -- sh -e /etc/init.d/xvfb start before_script: - npm install script: From 8e9f9197020d5920a2a716c9b8de0c7d2276fdbe Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Tue, 17 Sep 2019 19:58:21 -0700 Subject: [PATCH 101/110] Update dependencies to latest --- ...ktrace-with-promises-and-json-polyfills.js | 400 +- ...ce-with-promises-and-json-polyfills.min.js | 4 +- dist/stacktrace.js | 180 +- dist/stacktrace.min.js | 2 +- package-lock.json | 4716 +++++++++-------- package.json | 6 +- 6 files changed, 2807 insertions(+), 2501 deletions(-) diff --git a/dist/stacktrace-with-promises-and-json-polyfills.js b/dist/stacktrace-with-promises-and-json-polyfills.js index e327f07..9c2ba0b 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.js @@ -59,8 +59,18 @@ // Throw away eval information until we implement stacktrace.js/stackframe#8 line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^\()]*)|(\)\,.*$)/g, ''); } - var tokens = line.replace(/^\s+/, '').replace(/\(eval code/g, '(').split(/\s+/).slice(1); - var locationParts = this.extractLocation(tokens.pop()); + var sanitizedLine = line.replace(/^\s+/, '').replace(/\(eval code/g, '('); + + // capture and preseve the parenthesized location "(/foo/my bar.js:12:87)" in + // case it has spaces in it, as the string is split on \s+ later on + var location = sanitizedLine.match(/ (\((.+):(\d+):(\d+)\)$)/); + + // remove the parenthesized location from the line, if it was matched + sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine; + + var tokens = sanitizedLine.split(/\s+/).slice(1); + // if a location was matched, pass it to extractLocation() otherwise pop the last token + var locationParts = this.extractLocation(location ? location[1] : tokens.pop()); var functionName = tokens.join(' ') || undefined; var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0]; @@ -192,7 +202,152 @@ }; })); -},{"stackframe":6}],2:[function(require,module,exports){ +},{"stackframe":2}],2:[function(require,module,exports){ +(function(root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stackframe', [], factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + root.StackFrame = factory(); + } +}(this, function() { + 'use strict'; + function _isNumber(n) { + return !isNaN(parseFloat(n)) && isFinite(n); + } + + function _capitalize(str) { + return str.charAt(0).toUpperCase() + str.substring(1); + } + + function _getter(p) { + return function() { + return this[p]; + }; + } + + var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel']; + var numericProps = ['columnNumber', 'lineNumber']; + var stringProps = ['fileName', 'functionName', 'source']; + var arrayProps = ['args']; + + var props = booleanProps.concat(numericProps, stringProps, arrayProps); + + function StackFrame(obj) { + if (obj instanceof Object) { + for (var i = 0; i < props.length; i++) { + if (obj.hasOwnProperty(props[i]) && obj[props[i]] !== undefined) { + this['set' + _capitalize(props[i])](obj[props[i]]); + } + } + } + } + + StackFrame.prototype = { + getArgs: function() { + return this.args; + }, + setArgs: function(v) { + if (Object.prototype.toString.call(v) !== '[object Array]') { + throw new TypeError('Args must be an Array'); + } + this.args = v; + }, + + getEvalOrigin: function() { + return this.evalOrigin; + }, + setEvalOrigin: function(v) { + if (v instanceof StackFrame) { + this.evalOrigin = v; + } else if (v instanceof Object) { + this.evalOrigin = new StackFrame(v); + } else { + throw new TypeError('Eval Origin must be an Object or StackFrame'); + } + }, + + toString: function() { + var fileName = this.getFileName() || ''; + var lineNumber = this.getLineNumber() || ''; + var columnNumber = this.getColumnNumber() || ''; + var functionName = this.getFunctionName() || ''; + if (this.getIsEval()) { + if (fileName) { + return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')'; + } + return '[eval]:' + lineNumber + ':' + columnNumber; + } + if (functionName) { + return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')'; + } + return fileName + ':' + lineNumber + ':' + columnNumber; + } + }; + + StackFrame.fromString = function StackFrame$$fromString(str) { + var argsStartIndex = str.indexOf('('); + var argsEndIndex = str.lastIndexOf(')'); + + var functionName = str.substring(0, argsStartIndex); + var args = str.substring(argsStartIndex + 1, argsEndIndex).split(','); + var locationString = str.substring(argsEndIndex + 1); + + if (locationString.indexOf('@') === 0) { + var parts = /@(.+?)(?::(\d+))?(?::(\d+))?$/.exec(locationString, ''); + var fileName = parts[1]; + var lineNumber = parts[2]; + var columnNumber = parts[3]; + } + + return new StackFrame({ + functionName: functionName, + args: args || undefined, + fileName: fileName, + lineNumber: lineNumber || undefined, + columnNumber: columnNumber || undefined + }); + }; + + for (var i = 0; i < booleanProps.length; i++) { + StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]); + StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) { + return function(v) { + this[p] = Boolean(v); + }; + })(booleanProps[i]); + } + + for (var j = 0; j < numericProps.length; j++) { + StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]); + StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) { + return function(v) { + if (!_isNumber(v)) { + throw new TypeError(p + ' must be a Number'); + } + this[p] = Number(v); + }; + })(numericProps[j]); + } + + for (var k = 0; k < stringProps.length; k++) { + StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]); + StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) { + return function(v) { + this[p] = String(v); + }; + })(stringProps[k]); + } + + return StackFrame; +})); + +},{}],3:[function(require,module,exports){ (function (process,global){ /*! * @overview es6-promise - a tiny implementation of Promises/A+. @@ -1350,7 +1505,7 @@ return Promise; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"_process":4}],3:[function(require,module,exports){ +},{"_process":5}],4:[function(require,module,exports){ (function (global){ /*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */ ;(function () { @@ -2257,7 +2412,7 @@ return Promise; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],4:[function(require,module,exports){ +},{}],5:[function(require,module,exports){ // shim for using process in browser var process = module.exports = {}; @@ -2443,167 +2598,7 @@ process.chdir = function (dir) { }; process.umask = function() { return 0; }; -},{}],5:[function(require,module,exports){ -(function(root, factory) { - 'use strict'; - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. - - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define('stack-generator', ['stackframe'], factory); - } else if (typeof exports === 'object') { - module.exports = factory(require('stackframe')); - } else { - root.StackGenerator = factory(root.StackFrame); - } -}(this, function(StackFrame) { - return { - backtrace: function StackGenerator$$backtrace(opts) { - var stack = []; - var maxStackSize = 10; - - if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') { - maxStackSize = opts.maxStackSize; - } - - var curr = arguments.callee; - while (curr && stack.length < maxStackSize && curr['arguments']) { - // Allow V8 optimizations - var args = new Array(curr['arguments'].length); - for (var i = 0; i < args.length; ++i) { - args[i] = curr['arguments'][i]; - } - if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { - stack.push(new StackFrame({functionName: RegExp.$1 || undefined, args: args})); - } else { - stack.push(new StackFrame({args: args})); - } - - try { - curr = curr.caller; - } catch (e) { - break; - } - } - return stack; - } - }; -})); - -},{"stackframe":6}],6:[function(require,module,exports){ -(function(root, factory) { - 'use strict'; - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. - - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define('stackframe', [], factory); - } else if (typeof exports === 'object') { - module.exports = factory(); - } else { - root.StackFrame = factory(); - } -}(this, function() { - 'use strict'; - function _isNumber(n) { - return !isNaN(parseFloat(n)) && isFinite(n); - } - - function _capitalize(str) { - return str.charAt(0).toUpperCase() + str.substring(1); - } - - function _getter(p) { - return function() { - return this[p]; - }; - } - - var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel']; - var numericProps = ['columnNumber', 'lineNumber']; - var stringProps = ['fileName', 'functionName', 'source']; - var arrayProps = ['args']; - - var props = booleanProps.concat(numericProps, stringProps, arrayProps); - - function StackFrame(obj) { - if (obj instanceof Object) { - for (var i = 0; i < props.length; i++) { - if (obj.hasOwnProperty(props[i]) && obj[props[i]] !== undefined) { - this['set' + _capitalize(props[i])](obj[props[i]]); - } - } - } - } - - StackFrame.prototype = { - getArgs: function() { - return this.args; - }, - setArgs: function(v) { - if (Object.prototype.toString.call(v) !== '[object Array]') { - throw new TypeError('Args must be an Array'); - } - this.args = v; - }, - - getEvalOrigin: function() { - return this.evalOrigin; - }, - setEvalOrigin: function(v) { - if (v instanceof StackFrame) { - this.evalOrigin = v; - } else if (v instanceof Object) { - this.evalOrigin = new StackFrame(v); - } else { - throw new TypeError('Eval Origin must be an Object or StackFrame'); - } - }, - - toString: function() { - var functionName = this.getFunctionName() || '{anonymous}'; - var args = '(' + (this.getArgs() || []).join(',') + ')'; - var fileName = this.getFileName() ? ('@' + this.getFileName()) : ''; - var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : ''; - var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : ''; - return functionName + args + fileName + lineNumber + columnNumber; - } - }; - - for (var i = 0; i < booleanProps.length; i++) { - StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]); - StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) { - return function(v) { - this[p] = Boolean(v); - }; - })(booleanProps[i]); - } - - for (var j = 0; j < numericProps.length; j++) { - StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]); - StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) { - return function(v) { - if (!_isNumber(v)) { - throw new TypeError(p + ' must be a Number'); - } - this[p] = Number(v); - }; - })(numericProps[j]); - } - - for (var k = 0; k < stringProps.length; k++) { - StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]); - StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) { - return function(v) { - this[p] = String(v); - }; - })(stringProps[k]); - } - - return StackFrame; -})); - -},{}],7:[function(require,module,exports){ +},{}],6:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -2709,7 +2704,7 @@ ArraySet.prototype.toArray = function ArraySet_toArray() { exports.ArraySet = ArraySet; -},{"./util":13}],8:[function(require,module,exports){ +},{"./util":12}],7:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -2851,7 +2846,7 @@ exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { aOutParam.rest = aIndex; }; -},{"./base64":9}],9:[function(require,module,exports){ +},{"./base64":8}],8:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -2920,7 +2915,7 @@ exports.decode = function (charCode) { return -1; }; -},{}],10:[function(require,module,exports){ +},{}],9:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -3033,7 +3028,7 @@ exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { return index; }; -},{}],11:[function(require,module,exports){ +},{}],10:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -3149,7 +3144,7 @@ exports.quickSort = function (ary, comparator) { doQuickSort(ary, comparator, 0, ary.length - 1); }; -},{}],12:[function(require,module,exports){ +},{}],11:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -4233,7 +4228,7 @@ IndexedSourceMapConsumer.prototype._parseMappings = exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; -},{"./array-set":7,"./base64-vlq":8,"./binary-search":10,"./quick-sort":11,"./util":13}],13:[function(require,module,exports){ +},{"./array-set":6,"./base64-vlq":7,"./binary-search":9,"./quick-sort":10,"./util":12}],12:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -4652,7 +4647,58 @@ function compareByGeneratedPositionsInflated(mappingA, mappingB) { } exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; -},{}],14:[function(require,module,exports){ +},{}],13:[function(require,module,exports){ +arguments[4][2][0].apply(exports,arguments) +},{"dup":2}],14:[function(require,module,exports){ +(function(root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stack-generator', ['stackframe'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('stackframe')); + } else { + root.StackGenerator = factory(root.StackFrame); + } +}(this, function(StackFrame) { + return { + backtrace: function StackGenerator$$backtrace(opts) { + var stack = []; + var maxStackSize = 10; + + if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') { + maxStackSize = opts.maxStackSize; + } + + var curr = arguments.callee; + while (curr && stack.length < maxStackSize && curr['arguments']) { + // Allow V8 optimizations + var args = new Array(curr['arguments'].length); + for (var i = 0; i < args.length; ++i) { + args[i] = curr['arguments'][i]; + } + if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { + stack.push(new StackFrame({functionName: RegExp.$1 || undefined, args: args})); + } else { + stack.push(new StackFrame({args: args})); + } + + try { + curr = curr.caller; + } catch (e) { + break; + } + } + return stack; + } + }; +})); + +},{"stackframe":13}],15:[function(require,module,exports){ +arguments[4][2][0].apply(exports,arguments) +},{"dup":2}],16:[function(require,module,exports){ (function(root, factory) { 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. @@ -4994,7 +5040,7 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate }; })); -},{"source-map/lib/source-map-consumer":12,"stackframe":6}],15:[function(require,module,exports){ +},{"source-map/lib/source-map-consumer":11,"stackframe":15}],17:[function(require,module,exports){ // Polyfill for old browsers // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray if (!Array.isArray) { @@ -5123,7 +5169,7 @@ if (!Array.prototype.forEach) { }; } -},{}],16:[function(require,module,exports){ +},{}],18:[function(require,module,exports){ (function(root, factory) { 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. @@ -5352,6 +5398,6 @@ if (!Array.prototype.forEach) { }; })); -},{"error-stack-parser":1,"stack-generator":5,"stacktrace-gps":14}]},{},[2,3,15,16])(16) +},{"error-stack-parser":1,"stack-generator":14,"stacktrace-gps":16}]},{},[3,4,17,18])(18) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9lczYtcHJvbWlzZS9kaXN0L2VzNi1wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2pzb24zL2xpYi9qc29uMy5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc3RhY2stZ2VuZXJhdG9yL3N0YWNrLWdlbmVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja2ZyYW1lL3N0YWNrZnJhbWUuanMiLCJub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1ncHMvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2FycmF5LXNldC5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja3RyYWNlLWdwcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LXZscS5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja3RyYWNlLWdwcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iaW5hcnktc2VhcmNoLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9xdWljay1zb3J0LmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi91dGlsLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL3N0YWNrdHJhY2UtZ3BzLmpzIiwicG9seWZpbGxzLmpzIiwic3RhY2t0cmFjZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNoTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNqb0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3Q0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWpDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ2Vycm9yLXN0YWNrLXBhcnNlcicsIFsnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc3RhY2tmcmFtZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LkVycm9yU3RhY2tQYXJzZXIgPSBmYWN0b3J5KHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyKFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgRklSRUZPWF9TQUZBUklfU1RBQ0tfUkVHRVhQID0gLyhefEApXFxTK1xcOlxcZCsvO1xuICAgIHZhciBDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQID0gL15cXHMqYXQgLiooXFxTK1xcOlxcZCt8XFwobmF0aXZlXFwpKS9tO1xuICAgIHZhciBTQUZBUklfTkFUSVZFX0NPREVfUkVHRVhQID0gL14oZXZhbEApPyhcXFtuYXRpdmUgY29kZVxcXSk/JC87XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gRXJyb3Igb2JqZWN0LCBleHRyYWN0IHRoZSBtb3N0IGluZm9ybWF0aW9uIGZyb20gaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gb2YgU3RhY2tGcmFtZXNcbiAgICAgICAgICovXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZShlcnJvcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlcnJvci5zdGFja3RyYWNlICE9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZXJyb3JbJ29wZXJhI3NvdXJjZWxvYyddICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmEoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGFjayAmJiBlcnJvci5zdGFjay5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlVjhPcklFKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUZGT3JTYWZhcmkoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXJzZSBnaXZlbiBFcnJvciBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvLyBTZXBhcmF0ZSBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycyBmcm9tIGEgc3RyaW5nIG9mIHRoZSBmb3JtOiAoVVJJOkxpbmU6Q29sdW1uKVxuICAgICAgICBleHRyYWN0TG9jYXRpb246IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJGV4dHJhY3RMb2NhdGlvbih1cmxMaWtlKSB7XG4gICAgICAgICAgICAvLyBGYWlsLWZhc3QgYnV0IHJldHVybiBsb2NhdGlvbnMgbGlrZSBcIihuYXRpdmUpXCJcbiAgICAgICAgICAgIGlmICh1cmxMaWtlLmluZGV4T2YoJzonKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3VybExpa2VdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcmVnRXhwID0gLyguKz8pKD86XFw6KFxcZCspKT8oPzpcXDooXFxkKykpPyQvO1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gcmVnRXhwLmV4ZWModXJsTGlrZS5yZXBsYWNlKC9bXFwoXFwpXS9nLCAnJykpO1xuICAgICAgICAgICAgcmV0dXJuIFtwYXJ0c1sxXSwgcGFydHNbMl0gfHwgdW5kZWZpbmVkLCBwYXJ0c1szXSB8fCB1bmRlZmluZWRdO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlVjhPcklFOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZVY4T3JJRShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCcoZXZhbCAnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgZXZhbCBpbmZvcm1hdGlvbiB1bnRpbCB3ZSBpbXBsZW1lbnQgc3RhY2t0cmFjZS5qcy9zdGFja2ZyYW1lIzhcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvZXZhbCBjb2RlL2csICdldmFsJykucmVwbGFjZSgvKFxcKGV2YWwgYXQgW15cXCgpXSopfChcXClcXCwuKiQpL2csICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGxpbmUucmVwbGFjZSgvXlxccysvLCAnJykucmVwbGFjZSgvXFwoZXZhbCBjb2RlL2csICcoJykuc3BsaXQoL1xccysvKS5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRva2Vucy5qb2luKCcgJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IFsnZXZhbCcsICc8YW5vbnltb3VzPiddLmluZGV4T2YobG9jYXRpb25QYXJ0c1swXSkgPiAtMSA/IHVuZGVmaW5lZCA6IGxvY2F0aW9uUGFydHNbMF07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VGRk9yU2FmYXJpOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZUZGT3JTYWZhcmkoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhbGluZS5tYXRjaChTQUZBUklfTkFUSVZFX0NPREVfUkVHRVhQKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IGV2YWwgaW5mb3JtYXRpb24gdW50aWwgd2UgaW1wbGVtZW50IHN0YWNrdHJhY2UuanMvc3RhY2tmcmFtZSM4XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignID4gZXZhbCcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvIGxpbmUgKFxcZCspKD86ID4gZXZhbCBsaW5lIFxcZCspKiA+IGV2YWxcXDpcXGQrXFw6XFxkKy9nLCAnOiQxJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignQCcpID09PSAtMSAmJiBsaW5lLmluZGV4T2YoJzonKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIGV2YWwgZnJhbWVzIG9ubHkgaGF2ZSBmdW5jdGlvbiBuYW1lcyBhbmQgbm90aGluZyBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGxpbmVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZVJlZ2V4ID0gLygoLipcIi4rXCJbXkBdKik/W15AXSopKD86QCkvO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IGxpbmUubWF0Y2goZnVuY3Rpb25OYW1lUmVnZXgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gbWF0Y2hlcyAmJiBtYXRjaGVzWzFdID8gbWF0Y2hlc1sxXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbihsaW5lLnJlcGxhY2UoZnVuY3Rpb25OYW1lUmVnZXgsICcnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmEoZSkge1xuICAgICAgICAgICAgaWYgKCFlLnN0YWNrdHJhY2UgfHwgKGUubWVzc2FnZS5pbmRleE9mKCdcXG4nKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlLnNwbGl0KCdcXG4nKS5sZW5ndGggPiBlLnN0YWNrdHJhY2Uuc3BsaXQoJ1xcbicpLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhOShlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWUuc3RhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTAoZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmExMShlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhOTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTkoZSkge1xuICAgICAgICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspL2k7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBlLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMiwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lUkUuZXhlYyhsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lc1tpXVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmExMDogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTEwKGUpIHtcbiAgICAgICAgICAgIHZhciBsaW5lUkUgPSAvTGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKSg/OjogSW4gZnVuY3Rpb24gKFxcUyspKT8kL2k7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBlLnN0YWNrdHJhY2Uuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lUkUuZXhlYyhsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbWF0Y2hbM10gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVzW2ldXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBPcGVyYSAxMC42NSsgRXJyb3Iuc3RhY2sgdmVyeSBzaW1pbGFyIHRvIEZGL1NhZmFyaVxuICAgICAgICBwYXJzZU9wZXJhMTE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFApICYmICFsaW5lLm1hdGNoKC9eRXJyb3IgY3JlYXRlZCBhdC8pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBsaW5lLnNwbGl0KCdAJyk7XG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbih0b2tlbnMucG9wKCkpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbkNhbGwgPSAodG9rZW5zLnNoaWZ0KCkgfHwgJycpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbkNhbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88YW5vbnltb3VzIGZ1bmN0aW9uKDogKFxcdyspKT8+LywgJyQyJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXChbXlxcKV0qXFwpL2csICcnKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3NSYXc7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uQ2FsbC5tYXRjaCgvXFwoKFteXFwpXSopXFwpLykpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1JhdyA9IGZ1bmN0aW9uQ2FsbC5yZXBsYWNlKC9eW15cXChdK1xcKChbXlxcKV0qKVxcKSQvLCAnJDEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSAoYXJnc1JhdyA9PT0gdW5kZWZpbmVkIHx8IGFyZ3NSYXcgPT09ICdbYXJndW1lbnRzIG5vdCBhdmFpbGFibGVdJykgP1xuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgOiBhcmdzUmF3LnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG59KSk7XG4iLCIvKiFcbiAqIEBvdmVydmlldyBlczYtcHJvbWlzZSAtIGEgdGlueSBpbXBsZW1lbnRhdGlvbiBvZiBQcm9taXNlcy9BKy5cbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE0IFllaHVkYSBLYXR6LCBUb20gRGFsZSwgU3RlZmFuIFBlbm5lciBhbmQgY29udHJpYnV0b3JzIChDb252ZXJzaW9uIHRvIEVTNiBBUEkgYnkgSmFrZSBBcmNoaWJhbGQpXG4gKiBAbGljZW5zZSAgIExpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlXG4gKiAgICAgICAgICAgIFNlZSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc3RlZmFucGVubmVyL2VzNi1wcm9taXNlL21hc3Rlci9MSUNFTlNFXG4gKiBAdmVyc2lvbiAgIDMuMy4xXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsLkVTNlByb21pc2UgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG9iamVjdE9yRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG59XG5cbnZhciBfaXNBcnJheSA9IHVuZGVmaW5lZDtcbmlmICghQXJyYXkuaXNBcnJheSkge1xuICBfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcbn0gZWxzZSB7XG4gIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbn1cblxudmFyIGlzQXJyYXkgPSBfaXNBcnJheTtcblxudmFyIGxlbiA9IDA7XG52YXIgdmVydHhOZXh0ID0gdW5kZWZpbmVkO1xudmFyIGN1c3RvbVNjaGVkdWxlckZuID0gdW5kZWZpbmVkO1xuXG52YXIgYXNhcCA9IGZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGFyZykge1xuICBxdWV1ZVtsZW5dID0gY2FsbGJhY2s7XG4gIHF1ZXVlW2xlbiArIDFdID0gYXJnO1xuICBsZW4gKz0gMjtcbiAgaWYgKGxlbiA9PT0gMikge1xuICAgIC8vIElmIGxlbiBpcyAyLCB0aGF0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBhc3luYyBmbHVzaC5cbiAgICAvLyBJZiBhZGRpdGlvbmFsIGNhbGxiYWNrcyBhcmUgcXVldWVkIGJlZm9yZSB0aGUgcXVldWUgaXMgZmx1c2hlZCwgdGhleVxuICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgZmx1c2ggdGhhdCB3ZSBhcmUgc2NoZWR1bGluZy5cbiAgICBpZiAoY3VzdG9tU2NoZWR1bGVyRm4pIHtcbiAgICAgIGN1c3RvbVNjaGVkdWxlckZuKGZsdXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZWR1bGVGbHVzaCgpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gc2V0U2NoZWR1bGVyKHNjaGVkdWxlRm4pIHtcbiAgY3VzdG9tU2NoZWR1bGVyRm4gPSBzY2hlZHVsZUZuO1xufVxuXG5mdW5jdGlvbiBzZXRBc2FwKGFzYXBGbikge1xuICBhc2FwID0gYXNhcEZuO1xufVxuXG52YXIgYnJvd3NlcldpbmRvdyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdW5kZWZpbmVkO1xudmFyIGJyb3dzZXJHbG9iYWwgPSBicm93c2VyV2luZG93IHx8IHt9O1xudmFyIEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID0gYnJvd3Nlckdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGJyb3dzZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBpc05vZGUgPSB0eXBlb2Ygc2VsZiA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICh7fSkudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nO1xuXG4vLyB0ZXN0IGZvciB3ZWIgd29ya2VyIGJ1dCBub3QgaW4gSUUxMFxudmFyIGlzV29ya2VyID0gdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJztcblxuLy8gbm9kZVxuZnVuY3Rpb24gdXNlTmV4dFRpY2soKSB7XG4gIC8vIG5vZGUgdmVyc2lvbiAwLjEwLnggZGlzcGxheXMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gbmV4dFRpY2sgaXMgdXNlZCByZWN1cnNpdmVseVxuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2N1am9qcy93aGVuL2lzc3Vlcy80MTAgZm9yIGRldGFpbHNcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gIH07XG59XG5cbi8vIHZlcnR4XG5mdW5jdGlvbiB1c2VWZXJ0eFRpbWVyKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZlcnR4TmV4dChmbHVzaCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZU11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gIHZhciBpdGVyYXRpb25zID0gMDtcbiAgdmFyIG9ic2VydmVyID0gbmV3IEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKGZsdXNoKTtcbiAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gIG9ic2VydmVyLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgbm9kZS5kYXRhID0gaXRlcmF0aW9ucyA9ICsraXRlcmF0aW9ucyAlIDI7XG4gIH07XG59XG5cbi8vIHdlYiB3b3JrZXJcbmZ1bmN0aW9uIHVzZU1lc3NhZ2VDaGFubmVsKCkge1xuICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZsdXNoO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKDApO1xuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VTZXRUaW1lb3V0KCkge1xuICAvLyBTdG9yZSBzZXRUaW1lb3V0IHJlZmVyZW5jZSBzbyBlczYtcHJvbWlzZSB3aWxsIGJlIHVuYWZmZWN0ZWQgYnlcbiAgLy8gb3RoZXIgY29kZSBtb2RpZnlpbmcgc2V0VGltZW91dCAobGlrZSBzaW5vbi51c2VGYWtlVGltZXJzKCkpXG4gIHZhciBnbG9iYWxTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2xvYmFsU2V0VGltZW91dChmbHVzaCwgMSk7XG4gIH07XG59XG5cbnZhciBxdWV1ZSA9IG5ldyBBcnJheSgxMDAwKTtcbmZ1bmN0aW9uIGZsdXNoKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gcXVldWVbaV07XG4gICAgdmFyIGFyZyA9IHF1ZXVlW2kgKyAxXTtcblxuICAgIGNhbGxiYWNrKGFyZyk7XG5cbiAgICBxdWV1ZVtpXSA9IHVuZGVmaW5lZDtcbiAgICBxdWV1ZVtpICsgMV0gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBsZW4gPSAwO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0VmVydHgoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHIgPSByZXF1aXJlO1xuICAgIHZhciB2ZXJ0eCA9IHIoJ3ZlcnR4Jyk7XG4gICAgdmVydHhOZXh0ID0gdmVydHgucnVuT25Mb29wIHx8IHZlcnR4LnJ1bk9uQ29udGV4dDtcbiAgICByZXR1cm4gdXNlVmVydHhUaW1lcigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHVzZVNldFRpbWVvdXQoKTtcbiAgfVxufVxuXG52YXIgc2NoZWR1bGVGbHVzaCA9IHVuZGVmaW5lZDtcbi8vIERlY2lkZSB3aGF0IGFzeW5jIG1ldGhvZCB0byB1c2UgdG8gdHJpZ2dlcmluZyBwcm9jZXNzaW5nIG9mIHF1ZXVlZCBjYWxsYmFja3M6XG5pZiAoaXNOb2RlKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VOZXh0VGljaygpO1xufSBlbHNlIGlmIChCcm93c2VyTXV0YXRpb25PYnNlcnZlcikge1xuICBzY2hlZHVsZUZsdXNoID0gdXNlTXV0YXRpb25PYnNlcnZlcigpO1xufSBlbHNlIGlmIChpc1dvcmtlcikge1xuICBzY2hlZHVsZUZsdXNoID0gdXNlTWVzc2FnZUNoYW5uZWwoKTtcbn0gZWxzZSBpZiAoYnJvd3NlcldpbmRvdyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSBhdHRlbXB0VmVydHgoKTtcbn0gZWxzZSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VTZXRUaW1lb3V0KCk7XG59XG5cbmZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgdmFyIF9hcmd1bWVudHMgPSBhcmd1bWVudHM7XG5cbiAgdmFyIHBhcmVudCA9IHRoaXM7XG5cbiAgdmFyIGNoaWxkID0gbmV3IHRoaXMuY29uc3RydWN0b3Iobm9vcCk7XG5cbiAgaWYgKGNoaWxkW1BST01JU0VfSURdID09PSB1bmRlZmluZWQpIHtcbiAgICBtYWtlUHJvbWlzZShjaGlsZCk7XG4gIH1cblxuICB2YXIgX3N0YXRlID0gcGFyZW50Ll9zdGF0ZTtcblxuICBpZiAoX3N0YXRlKSB7XG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjYWxsYmFjayA9IF9hcmd1bWVudHNbX3N0YXRlIC0gMV07XG4gICAgICBhc2FwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrKF9zdGF0ZSwgY2hpbGQsIGNhbGxiYWNrLCBwYXJlbnQuX3Jlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbik7XG4gIH1cblxuICByZXR1cm4gY2hpbGQ7XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yZXNvbHZlYCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdpbGwgYmVjb21lIHJlc29sdmVkIHdpdGggdGhlXG4gIHBhc3NlZCBgdmFsdWVgLiBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgcmVzb2x2ZSgxKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyB2YWx1ZSA9PT0gMVxuICB9KTtcbiAgYGBgXG5cbiAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoMSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyB2YWx1ZSA9PT0gMVxuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCByZXNvbHZlXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBbnl9IHZhbHVlIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCB3aXRoXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgZnVsZmlsbGVkIHdpdGggdGhlIGdpdmVuXG4gIGB2YWx1ZWBcbiovXG5mdW5jdGlvbiByZXNvbHZlKG9iamVjdCkge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuXG4gIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0LmNvbnN0cnVjdG9yID09PSBDb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcbiAgX3Jlc29sdmUocHJvbWlzZSwgb2JqZWN0KTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbnZhciBQUk9NSVNFX0lEID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDE2KTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnZhciBQRU5ESU5HID0gdm9pZCAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xuXG52YXIgR0VUX1RIRU5fRVJST1IgPSBuZXcgRXJyb3JPYmplY3QoKTtcblxuZnVuY3Rpb24gc2VsZkZ1bGZpbGxtZW50KCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIik7XG59XG5cbmZ1bmN0aW9uIGNhbm5vdFJldHVybk93bigpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGhlbihwcm9taXNlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHByb21pc2UudGhlbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBHRVRfVEhFTl9FUlJPUi5lcnJvciA9IGVycm9yO1xuICAgIHJldHVybiBHRVRfVEhFTl9FUlJPUjtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlUaGVuKHRoZW4sIHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpIHtcbiAgdHJ5IHtcbiAgICB0aGVuLmNhbGwodmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUsIHRoZW4pIHtcbiAgYXNhcChmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgIHZhciBzZWFsZWQgPSBmYWxzZTtcbiAgICB2YXIgZXJyb3IgPSB0cnlUaGVuKHRoZW4sIHRoZW5hYmxlLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChzZWFsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2VhbGVkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGVuYWJsZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuXG4gICAgICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSwgJ1NldHRsZTogJyArIChwcm9taXNlLl9sYWJlbCB8fCAnIHVua25vd24gcHJvbWlzZScpKTtcblxuICAgIGlmICghc2VhbGVkICYmIGVycm9yKSB7XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgX3JlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgfVxuICB9LCBwcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUpIHtcbiAgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gRlVMRklMTEVEKSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgfSBlbHNlIGlmICh0aGVuYWJsZS5fc3RhdGUgPT09IFJFSkVDVEVEKSB7XG4gICAgX3JlamVjdChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgfSBlbHNlIHtcbiAgICBzdWJzY3JpYmUodGhlbmFibGUsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuJCQpIHtcbiAgaWYgKG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IgPT09IHByb21pc2UuY29uc3RydWN0b3IgJiYgdGhlbiQkID09PSB0aGVuICYmIG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IucmVzb2x2ZSA9PT0gcmVzb2x2ZSkge1xuICAgIGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICB9IGVsc2Uge1xuICAgIGlmICh0aGVuJCQgPT09IEdFVF9USEVOX0VSUk9SKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIEdFVF9USEVOX0VSUk9SLmVycm9yKTtcbiAgICB9IGVsc2UgaWYgKHRoZW4kJCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbih0aGVuJCQpKSB7XG4gICAgICBoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSwgdGhlbiQkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCBtYXliZVRoZW5hYmxlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpIHtcbiAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgX3JlamVjdChwcm9taXNlLCBzZWxmRnVsZmlsbG1lbnQoKSk7XG4gIH0gZWxzZSBpZiAob2JqZWN0T3JGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIHZhbHVlLCBnZXRUaGVuKHZhbHVlKSk7XG4gIH0gZWxzZSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaFJlamVjdGlvbihwcm9taXNlKSB7XG4gIGlmIChwcm9taXNlLl9vbmVycm9yKSB7XG4gICAgcHJvbWlzZS5fb25lcnJvcihwcm9taXNlLl9yZXN1bHQpO1xuICB9XG5cbiAgcHVibGlzaChwcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gZnVsZmlsbChwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwcm9taXNlLl9yZXN1bHQgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fc3RhdGUgPSBGVUxGSUxMRUQ7XG5cbiAgaWYgKHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIGFzYXAocHVibGlzaCwgcHJvbWlzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3JlamVjdChwcm9taXNlLCByZWFzb24pIHtcbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByb21pc2UuX3N0YXRlID0gUkVKRUNURUQ7XG4gIHByb21pc2UuX3Jlc3VsdCA9IHJlYXNvbjtcblxuICBhc2FwKHB1Ymxpc2hSZWplY3Rpb24sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBzdWJzY3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgdmFyIF9zdWJzY3JpYmVycyA9IHBhcmVudC5fc3Vic2NyaWJlcnM7XG4gIHZhciBsZW5ndGggPSBfc3Vic2NyaWJlcnMubGVuZ3RoO1xuXG4gIHBhcmVudC5fb25lcnJvciA9IG51bGw7XG5cbiAgX3N1YnNjcmliZXJzW2xlbmd0aF0gPSBjaGlsZDtcbiAgX3N1YnNjcmliZXJzW2xlbmd0aCArIEZVTEZJTExFRF0gPSBvbkZ1bGZpbGxtZW50O1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgUkVKRUNURURdID0gb25SZWplY3Rpb247XG5cbiAgaWYgKGxlbmd0aCA9PT0gMCAmJiBwYXJlbnQuX3N0YXRlKSB7XG4gICAgYXNhcChwdWJsaXNoLCBwYXJlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1Ymxpc2gocHJvbWlzZSkge1xuICB2YXIgc3Vic2NyaWJlcnMgPSBwcm9taXNlLl9zdWJzY3JpYmVycztcbiAgdmFyIHNldHRsZWQgPSBwcm9taXNlLl9zdGF0ZTtcblxuICBpZiAoc3Vic2NyaWJlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGNoaWxkID0gdW5kZWZpbmVkLFxuICAgICAgY2FsbGJhY2sgPSB1bmRlZmluZWQsXG4gICAgICBkZXRhaWwgPSBwcm9taXNlLl9yZXN1bHQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJzY3JpYmVycy5sZW5ndGg7IGkgKz0gMykge1xuICAgIGNoaWxkID0gc3Vic2NyaWJlcnNbaV07XG4gICAgY2FsbGJhY2sgPSBzdWJzY3JpYmVyc1tpICsgc2V0dGxlZF07XG5cbiAgICBpZiAoY2hpbGQpIHtcbiAgICAgIGludm9rZUNhbGxiYWNrKHNldHRsZWQsIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soZGV0YWlsKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlLl9zdWJzY3JpYmVycy5sZW5ndGggPSAwO1xufVxuXG5mdW5jdGlvbiBFcnJvck9iamVjdCgpIHtcbiAgdGhpcy5lcnJvciA9IG51bGw7XG59XG5cbnZhciBUUllfQ0FUQ0hfRVJST1IgPSBuZXcgRXJyb3JPYmplY3QoKTtcblxuZnVuY3Rpb24gdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCkge1xuICB0cnkge1xuICAgIHJldHVybiBjYWxsYmFjayhkZXRhaWwpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgVFJZX0NBVENIX0VSUk9SLmVycm9yID0gZTtcbiAgICByZXR1cm4gVFJZX0NBVENIX0VSUk9SO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZUNhbGxiYWNrKHNldHRsZWQsIHByb21pc2UsIGNhbGxiYWNrLCBkZXRhaWwpIHtcbiAgdmFyIGhhc0NhbGxiYWNrID0gaXNGdW5jdGlvbihjYWxsYmFjayksXG4gICAgICB2YWx1ZSA9IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yID0gdW5kZWZpbmVkLFxuICAgICAgc3VjY2VlZGVkID0gdW5kZWZpbmVkLFxuICAgICAgZmFpbGVkID0gdW5kZWZpbmVkO1xuXG4gIGlmIChoYXNDYWxsYmFjaykge1xuICAgIHZhbHVlID0gdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCk7XG5cbiAgICBpZiAodmFsdWUgPT09IFRSWV9DQVRDSF9FUlJPUikge1xuICAgICAgZmFpbGVkID0gdHJ1ZTtcbiAgICAgIGVycm9yID0gdmFsdWUuZXJyb3I7XG4gICAgICB2YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1Y2NlZWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGNhbm5vdFJldHVybk93bigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBkZXRhaWw7XG4gICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIC8vIG5vb3BcbiAgfSBlbHNlIGlmIChoYXNDYWxsYmFjayAmJiBzdWNjZWVkZWQpIHtcbiAgICAgIF9yZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGZhaWxlZCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBGVUxGSUxMRUQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gUkVKRUNURUQpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVByb21pc2UocHJvbWlzZSwgcmVzb2x2ZXIpIHtcbiAgdHJ5IHtcbiAgICByZXNvbHZlcihmdW5jdGlvbiByZXNvbHZlUHJvbWlzZSh2YWx1ZSkge1xuICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIHJlamVjdFByb21pc2UocmVhc29uKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIGUpO1xuICB9XG59XG5cbnZhciBpZCA9IDA7XG5mdW5jdGlvbiBuZXh0SWQoKSB7XG4gIHJldHVybiBpZCsrO1xufVxuXG5mdW5jdGlvbiBtYWtlUHJvbWlzZShwcm9taXNlKSB7XG4gIHByb21pc2VbUFJPTUlTRV9JRF0gPSBpZCsrO1xuICBwcm9taXNlLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9zdWJzY3JpYmVycyA9IFtdO1xufVxuXG5mdW5jdGlvbiBFbnVtZXJhdG9yKENvbnN0cnVjdG9yLCBpbnB1dCkge1xuICB0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcblxuICBpZiAoIXRoaXMucHJvbWlzZVtQUk9NSVNFX0lEXSkge1xuICAgIG1ha2VQcm9taXNlKHRoaXMucHJvbWlzZSk7XG4gIH1cblxuICBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMubGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgIHRoaXMuX3JlbWFpbmluZyA9IGlucHV0Lmxlbmd0aDtcblxuICAgIHRoaXMuX3Jlc3VsdCA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGZ1bGZpbGwodGhpcy5wcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoIHx8IDA7XG4gICAgICB0aGlzLl9lbnVtZXJhdGUoKTtcbiAgICAgIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIF9yZWplY3QodGhpcy5wcm9taXNlLCB2YWxpZGF0aW9uRXJyb3IoKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGlvbkVycm9yKCkge1xuICByZXR1cm4gbmV3IEVycm9yKCdBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXknKTtcbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl9lbnVtZXJhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgdmFyIF9pbnB1dCA9IHRoaXMuX2lucHV0O1xuXG4gIGZvciAodmFyIGkgPSAwOyB0aGlzLl9zdGF0ZSA9PT0gUEVORElORyAmJiBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLl9lYWNoRW50cnkoX2lucHV0W2ldLCBpKTtcbiAgfVxufTtcblxuRW51bWVyYXRvci5wcm90b3R5cGUuX2VhY2hFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSwgaSkge1xuICB2YXIgYyA9IHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I7XG4gIHZhciByZXNvbHZlJCQgPSBjLnJlc29sdmU7XG5cbiAgaWYgKHJlc29sdmUkJCA9PT0gcmVzb2x2ZSkge1xuICAgIHZhciBfdGhlbiA9IGdldFRoZW4oZW50cnkpO1xuXG4gICAgaWYgKF90aGVuID09PSB0aGVuICYmIGVudHJ5Ll9zdGF0ZSAhPT0gUEVORElORykge1xuICAgICAgdGhpcy5fc2V0dGxlZEF0KGVudHJ5Ll9zdGF0ZSwgaSwgZW50cnkuX3Jlc3VsdCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgX3RoZW4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuICAgICAgdGhpcy5fcmVzdWx0W2ldID0gZW50cnk7XG4gICAgfSBlbHNlIGlmIChjID09PSBQcm9taXNlKSB7XG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBjKG5vb3ApO1xuICAgICAgaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBlbnRyeSwgX3RoZW4pO1xuICAgICAgdGhpcy5fd2lsbFNldHRsZUF0KHByb21pc2UsIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQobmV3IGMoZnVuY3Rpb24gKHJlc29sdmUkJCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSQkKGVudHJ5KTtcbiAgICAgIH0pLCBpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fd2lsbFNldHRsZUF0KHJlc29sdmUkJChlbnRyeSksIGkpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fc2V0dGxlZEF0ID0gZnVuY3Rpb24gKHN0YXRlLCBpLCB2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTtcblxuICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IFBFTkRJTkcpIHtcbiAgICB0aGlzLl9yZW1haW5pbmctLTtcblxuICAgIGlmIChzdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXN1bHRbaV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5fcmVtYWluaW5nID09PSAwKSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0ID0gZnVuY3Rpb24gKHByb21pc2UsIGkpIHtcbiAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuXG4gIHN1YnNjcmliZShwcm9taXNlLCB1bmRlZmluZWQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoRlVMRklMTEVELCBpLCB2YWx1ZSk7XG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICByZXR1cm4gZW51bWVyYXRvci5fc2V0dGxlZEF0KFJFSkVDVEVELCBpLCByZWFzb24pO1xuICB9KTtcbn07XG5cbi8qKlxuICBgUHJvbWlzZS5hbGxgIGFjY2VwdHMgYW4gYXJyYXkgb2YgcHJvbWlzZXMsIGFuZCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2hcbiAgaXMgZnVsZmlsbGVkIHdpdGggYW4gYXJyYXkgb2YgZnVsZmlsbG1lbnQgdmFsdWVzIGZvciB0aGUgcGFzc2VkIHByb21pc2VzLCBvclxuICByZWplY3RlZCB3aXRoIHRoZSByZWFzb24gb2YgdGhlIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIGJlIHJlamVjdGVkLiBJdCBjYXN0cyBhbGxcbiAgZWxlbWVudHMgb2YgdGhlIHBhc3NlZCBpdGVyYWJsZSB0byBwcm9taXNlcyBhcyBpdCBydW5zIHRoaXMgYWxnb3JpdGhtLlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSByZXNvbHZlKDEpO1xuICBsZXQgcHJvbWlzZTIgPSByZXNvbHZlKDIpO1xuICBsZXQgcHJvbWlzZTMgPSByZXNvbHZlKDMpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gVGhlIGFycmF5IGhlcmUgd291bGQgYmUgWyAxLCAyLCAzIF07XG4gIH0pO1xuICBgYGBcblxuICBJZiBhbnkgb2YgdGhlIGBwcm9taXNlc2AgZ2l2ZW4gdG8gYGFsbGAgYXJlIHJlamVjdGVkLCB0aGUgZmlyc3QgcHJvbWlzZVxuICB0aGF0IGlzIHJlamVjdGVkIHdpbGwgYmUgZ2l2ZW4gYXMgYW4gYXJndW1lbnQgdG8gdGhlIHJldHVybmVkIHByb21pc2VzJ3NcbiAgcmVqZWN0aW9uIGhhbmRsZXIuIEZvciBleGFtcGxlOlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSByZXNvbHZlKDEpO1xuICBsZXQgcHJvbWlzZTIgPSByZWplY3QobmV3IEVycm9yKFwiMlwiKSk7XG4gIGxldCBwcm9taXNlMyA9IHJlamVjdChuZXcgRXJyb3IoXCIzXCIpKTtcbiAgbGV0IHByb21pc2VzID0gWyBwcm9taXNlMSwgcHJvbWlzZTIsIHByb21pc2UzIF07XG5cbiAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oYXJyYXkpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zIGJlY2F1c2UgdGhlcmUgYXJlIHJlamVjdGVkIHByb21pc2VzIVxuICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgIC8vIGVycm9yLm1lc3NhZ2UgPT09IFwiMlwiXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIGFsbFxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IGVudHJpZXMgYXJyYXkgb2YgcHJvbWlzZXNcbiAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgbGFiZWxpbmcgdGhlIHByb21pc2UuXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIGFsbCBgcHJvbWlzZXNgIGhhdmUgYmVlblxuICBmdWxmaWxsZWQsIG9yIHJlamVjdGVkIGlmIGFueSBvZiB0aGVtIGJlY29tZSByZWplY3RlZC5cbiAgQHN0YXRpY1xuKi9cbmZ1bmN0aW9uIGFsbChlbnRyaWVzKSB7XG4gIHJldHVybiBuZXcgRW51bWVyYXRvcih0aGlzLCBlbnRyaWVzKS5wcm9taXNlO1xufVxuXG4vKipcbiAgYFByb21pc2UucmFjZWAgcmV0dXJucyBhIG5ldyBwcm9taXNlIHdoaWNoIGlzIHNldHRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZVxuICBmaXJzdCBwYXNzZWQgcHJvbWlzZSB0byBzZXR0bGUuXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVzb2x2ZSgncHJvbWlzZSAxJyk7XG4gICAgfSwgMjAwKTtcbiAgfSk7XG5cbiAgbGV0IHByb21pc2UyID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDInKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyByZXN1bHQgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgaXQgd2FzIHJlc29sdmVkIGJlZm9yZSBwcm9taXNlMVxuICAgIC8vIHdhcyByZXNvbHZlZC5cbiAgfSk7XG4gIGBgYFxuXG4gIGBQcm9taXNlLnJhY2VgIGlzIGRldGVybWluaXN0aWMgaW4gdGhhdCBvbmx5IHRoZSBzdGF0ZSBvZiB0aGUgZmlyc3RcbiAgc2V0dGxlZCBwcm9taXNlIG1hdHRlcnMuIEZvciBleGFtcGxlLCBldmVuIGlmIG90aGVyIHByb21pc2VzIGdpdmVuIHRvIHRoZVxuICBgcHJvbWlzZXNgIGFycmF5IGFyZ3VtZW50IGFyZSByZXNvbHZlZCwgYnV0IHRoZSBmaXJzdCBzZXR0bGVkIHByb21pc2UgaGFzXG4gIGJlY29tZSByZWplY3RlZCBiZWZvcmUgdGhlIG90aGVyIHByb21pc2VzIGJlY2FtZSBmdWxmaWxsZWQsIHRoZSByZXR1cm5lZFxuICBwcm9taXNlIHdpbGwgYmVjb21lIHJlamVjdGVkOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoJ3Byb21pc2UgMicpKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyBDb2RlIGhlcmUgbmV2ZXIgcnVuc1xuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAncHJvbWlzZSAyJyBiZWNhdXNlIHByb21pc2UgMiBiZWNhbWUgcmVqZWN0ZWQgYmVmb3JlXG4gICAgLy8gcHJvbWlzZSAxIGJlY2FtZSBmdWxmaWxsZWRcbiAgfSk7XG4gIGBgYFxuXG4gIEFuIGV4YW1wbGUgcmVhbC13b3JsZCB1c2UgY2FzZSBpcyBpbXBsZW1lbnRpbmcgdGltZW91dHM6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBQcm9taXNlLnJhY2UoW2FqYXgoJ2Zvby5qc29uJyksIHRpbWVvdXQoNTAwMCldKVxuICBgYGBcblxuICBAbWV0aG9kIHJhY2VcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FycmF5fSBwcm9taXNlcyBhcnJheSBvZiBwcm9taXNlcyB0byBvYnNlcnZlXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHdoaWNoIHNldHRsZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBmaXJzdCBwYXNzZWRcbiAgcHJvbWlzZSB0byBzZXR0bGUuXG4qL1xuZnVuY3Rpb24gcmFjZShlbnRyaWVzKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKCFpc0FycmF5KGVudHJpZXMpKSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAoXywgcmVqZWN0KSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1lvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4nKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gZW50cmllcy5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLnJlc29sdmUoZW50cmllc1tpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yZWplY3RgIHJldHVybnMgYSBwcm9taXNlIHJlamVjdGVkIHdpdGggdGhlIHBhc3NlZCBgcmVhc29uYC5cbiAgSXQgaXMgc2hvcnRoYW5kIGZvciB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCFcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUydcbiAgfSk7XG4gIGBgYFxuXG4gIEluc3RlYWQgb2Ygd3JpdGluZyB0aGUgYWJvdmUsIHlvdXIgY29kZSBub3cgc2ltcGx5IGJlY29tZXMgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdXSE9PUFMnKSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCFcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUydcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgcmVqZWN0XG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBbnl9IHJlYXNvbiB2YWx1ZSB0aGF0IHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aC5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgZ2l2ZW4gYHJlYXNvbmAuXG4qL1xuZnVuY3Rpb24gcmVqZWN0KHJlYXNvbikge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcbiAgX3JlamVjdChwcm9taXNlLCByZWFzb24pO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gbmVlZHNSZXNvbHZlcigpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xufVxuXG5mdW5jdGlvbiBuZWVkc05ldygpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbn1cblxuLyoqXG4gIFByb21pc2Ugb2JqZWN0cyByZXByZXNlbnQgdGhlIGV2ZW50dWFsIHJlc3VsdCBvZiBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uLiBUaGVcbiAgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCwgd2hpY2hcbiAgcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGUgcmVhc29uXG4gIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuXG4gIFRlcm1pbm9sb2d5XG4gIC0tLS0tLS0tLS0tXG5cbiAgLSBgcHJvbWlzZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHdpdGggYSBgdGhlbmAgbWV0aG9kIHdob3NlIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoaXMgc3BlY2lmaWNhdGlvbi5cbiAgLSBgdGhlbmFibGVgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB0aGF0IGRlZmluZXMgYSBgdGhlbmAgbWV0aG9kLlxuICAtIGB2YWx1ZWAgaXMgYW55IGxlZ2FsIEphdmFTY3JpcHQgdmFsdWUgKGluY2x1ZGluZyB1bmRlZmluZWQsIGEgdGhlbmFibGUsIG9yIGEgcHJvbWlzZSkuXG4gIC0gYGV4Y2VwdGlvbmAgaXMgYSB2YWx1ZSB0aGF0IGlzIHRocm93biB1c2luZyB0aGUgdGhyb3cgc3RhdGVtZW50LlxuICAtIGByZWFzb25gIGlzIGEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2h5IGEgcHJvbWlzZSB3YXMgcmVqZWN0ZWQuXG4gIC0gYHNldHRsZWRgIHRoZSBmaW5hbCByZXN0aW5nIHN0YXRlIG9mIGEgcHJvbWlzZSwgZnVsZmlsbGVkIG9yIHJlamVjdGVkLlxuXG4gIEEgcHJvbWlzZSBjYW4gYmUgaW4gb25lIG9mIHRocmVlIHN0YXRlczogcGVuZGluZywgZnVsZmlsbGVkLCBvciByZWplY3RlZC5cblxuICBQcm9taXNlcyB0aGF0IGFyZSBmdWxmaWxsZWQgaGF2ZSBhIGZ1bGZpbGxtZW50IHZhbHVlIGFuZCBhcmUgaW4gdGhlIGZ1bGZpbGxlZFxuICBzdGF0ZS4gIFByb21pc2VzIHRoYXQgYXJlIHJlamVjdGVkIGhhdmUgYSByZWplY3Rpb24gcmVhc29uIGFuZCBhcmUgaW4gdGhlXG4gIHJlamVjdGVkIHN0YXRlLiAgQSBmdWxmaWxsbWVudCB2YWx1ZSBpcyBuZXZlciBhIHRoZW5hYmxlLlxuXG4gIFByb21pc2VzIGNhbiBhbHNvIGJlIHNhaWQgdG8gKnJlc29sdmUqIGEgdmFsdWUuICBJZiB0aGlzIHZhbHVlIGlzIGFsc28gYVxuICBwcm9taXNlLCB0aGVuIHRoZSBvcmlnaW5hbCBwcm9taXNlJ3Mgc2V0dGxlZCBzdGF0ZSB3aWxsIG1hdGNoIHRoZSB2YWx1ZSdzXG4gIHNldHRsZWQgc3RhdGUuICBTbyBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgd2lsbFxuICBpdHNlbGYgcmVqZWN0LCBhbmQgYSBwcm9taXNlIHRoYXQgKnJlc29sdmVzKiBhIHByb21pc2UgdGhhdCBmdWxmaWxscyB3aWxsXG4gIGl0c2VsZiBmdWxmaWxsLlxuXG5cbiAgQmFzaWMgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLVxuXG4gIGBgYGpzXG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgLy8gb24gc3VjY2Vzc1xuICAgIHJlc29sdmUodmFsdWUpO1xuXG4gICAgLy8gb24gZmFpbHVyZVxuICAgIHJlamVjdChyZWFzb24pO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAvLyBvbiBmdWxmaWxsbWVudFxuICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAvLyBvbiByZWplY3Rpb25cbiAgfSk7XG4gIGBgYFxuXG4gIEFkdmFuY2VkIFVzYWdlOlxuICAtLS0tLS0tLS0tLS0tLS1cblxuICBQcm9taXNlcyBzaGluZSB3aGVuIGFic3RyYWN0aW5nIGF3YXkgYXN5bmNocm9ub3VzIGludGVyYWN0aW9ucyBzdWNoIGFzXG4gIGBYTUxIdHRwUmVxdWVzdGBzLlxuXG4gIGBgYGpzXG4gIGZ1bmN0aW9uIGdldEpTT04odXJsKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwpO1xuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2pzb24nO1xuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICB4aHIuc2VuZCgpO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSB0aGlzLkRPTkUpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignZ2V0SlNPTjogYCcgKyB1cmwgKyAnYCBmYWlsZWQgd2l0aCBzdGF0dXM6IFsnICsgdGhpcy5zdGF0dXMgKyAnXScpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRKU09OKCcvcG9zdHMuanNvbicpLnRoZW4oZnVuY3Rpb24oanNvbikge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgVW5saWtlIGNhbGxiYWNrcywgcHJvbWlzZXMgYXJlIGdyZWF0IGNvbXBvc2FibGUgcHJpbWl0aXZlcy5cblxuICBgYGBqc1xuICBQcm9taXNlLmFsbChbXG4gICAgZ2V0SlNPTignL3Bvc3RzJyksXG4gICAgZ2V0SlNPTignL2NvbW1lbnRzJylcbiAgXSkudGhlbihmdW5jdGlvbih2YWx1ZXMpe1xuICAgIHZhbHVlc1swXSAvLyA9PiBwb3N0c0pTT05cbiAgICB2YWx1ZXNbMV0gLy8gPT4gY29tbWVudHNKU09OXG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9KTtcbiAgYGBgXG5cbiAgQGNsYXNzIFByb21pc2VcbiAgQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZXJcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAY29uc3RydWN0b3JcbiovXG5mdW5jdGlvbiBQcm9taXNlKHJlc29sdmVyKSB7XG4gIHRoaXNbUFJPTUlTRV9JRF0gPSBuZXh0SWQoKTtcbiAgdGhpcy5fcmVzdWx0ID0gdGhpcy5fc3RhdGUgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG5cbiAgaWYgKG5vb3AgIT09IHJlc29sdmVyKSB7XG4gICAgdHlwZW9mIHJlc29sdmVyICE9PSAnZnVuY3Rpb24nICYmIG5lZWRzUmVzb2x2ZXIoKTtcbiAgICB0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSA/IGluaXRpYWxpemVQcm9taXNlKHRoaXMsIHJlc29sdmVyKSA6IG5lZWRzTmV3KCk7XG4gIH1cbn1cblxuUHJvbWlzZS5hbGwgPSBhbGw7XG5Qcm9taXNlLnJhY2UgPSByYWNlO1xuUHJvbWlzZS5yZXNvbHZlID0gcmVzb2x2ZTtcblByb21pc2UucmVqZWN0ID0gcmVqZWN0O1xuUHJvbWlzZS5fc2V0U2NoZWR1bGVyID0gc2V0U2NoZWR1bGVyO1xuUHJvbWlzZS5fc2V0QXNhcCA9IHNldEFzYXA7XG5Qcm9taXNlLl9hc2FwID0gYXNhcDtcblxuUHJvbWlzZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBQcm9taXNlLFxuXG4gIC8qKlxuICAgIFRoZSBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLFxuICAgIHdoaWNoIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlJ3MgZXZlbnR1YWwgdmFsdWUgb3IgdGhlXG4gICAgcmVhc29uIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbih1c2VyKXtcbiAgICAgIC8vIHVzZXIgaXMgYXZhaWxhYmxlXG4gICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIHVzZXIgaXMgdW5hdmFpbGFibGUsIGFuZCB5b3UgYXJlIGdpdmVuIHRoZSByZWFzb24gd2h5XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIENoYWluaW5nXG4gICAgLS0tLS0tLS1cbiAgXG4gICAgVGhlIHJldHVybiB2YWx1ZSBvZiBgdGhlbmAgaXMgaXRzZWxmIGEgcHJvbWlzZS4gIFRoaXMgc2Vjb25kLCAnZG93bnN0cmVhbSdcbiAgICBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZmlyc3QgcHJvbWlzZSdzIGZ1bGZpbGxtZW50XG4gICAgb3IgcmVqZWN0aW9uIGhhbmRsZXIsIG9yIHJlamVjdGVkIGlmIHRoZSBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24uXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICByZXR1cm4gdXNlci5uYW1lO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiAnZGVmYXVsdCBuYW1lJztcbiAgICB9KS50aGVuKGZ1bmN0aW9uICh1c2VyTmFtZSkge1xuICAgICAgLy8gSWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGB1c2VyTmFtZWAgd2lsbCBiZSB0aGUgdXNlcidzIG5hbWUsIG90aGVyd2lzZSBpdFxuICAgICAgLy8gd2lsbCBiZSBgJ2RlZmF1bHQgbmFtZSdgXG4gICAgfSk7XG4gIFxuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCB1c2VyLCBidXQgc3RpbGwgdW5oYXBweScpO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgLy8gaWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGByZWFzb25gIHdpbGwgYmUgJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jy5cbiAgICAgIC8vIElmIGBmaW5kVXNlcmAgcmVqZWN0ZWQsIGByZWFzb25gIHdpbGwgYmUgJ2BmaW5kVXNlcmAgcmVqZWN0ZWQgYW5kIHdlJ3JlIHVuaGFwcHknLlxuICAgIH0pO1xuICAgIGBgYFxuICAgIElmIHRoZSBkb3duc3RyZWFtIHByb21pc2UgZG9lcyBub3Qgc3BlY2lmeSBhIHJlamVjdGlvbiBoYW5kbGVyLCByZWplY3Rpb24gcmVhc29ucyB3aWxsIGJlIHByb3BhZ2F0ZWQgZnVydGhlciBkb3duc3RyZWFtLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgdGhyb3cgbmV3IFBlZGFnb2dpY2FsRXhjZXB0aW9uKCdVcHN0cmVhbSBlcnJvcicpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAvLyBUaGUgYFBlZGdhZ29jaWFsRXhjZXB0aW9uYCBpcyBwcm9wYWdhdGVkIGFsbCB0aGUgd2F5IGRvd24gdG8gaGVyZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBBc3NpbWlsYXRpb25cbiAgICAtLS0tLS0tLS0tLS1cbiAgXG4gICAgU29tZXRpbWVzIHRoZSB2YWx1ZSB5b3Ugd2FudCB0byBwcm9wYWdhdGUgdG8gYSBkb3duc3RyZWFtIHByb21pc2UgY2FuIG9ubHkgYmVcbiAgICByZXRyaWV2ZWQgYXN5bmNocm9ub3VzbHkuIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHJldHVybmluZyBhIHByb21pc2UgaW4gdGhlXG4gICAgZnVsZmlsbG1lbnQgb3IgcmVqZWN0aW9uIGhhbmRsZXIuIFRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCB0aGVuIGJlIHBlbmRpbmdcbiAgICB1bnRpbCB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBzZXR0bGVkLiBUaGlzIGlzIGNhbGxlZCAqYXNzaW1pbGF0aW9uKi5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgICAgLy8gVGhlIHVzZXIncyBjb21tZW50cyBhcmUgbm93IGF2YWlsYWJsZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBJZiB0aGUgYXNzaW1saWF0ZWQgcHJvbWlzZSByZWplY3RzLCB0aGVuIHRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCBhbHNvIHJlamVjdC5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCBmdWxmaWxscywgd2UnbGwgaGF2ZSB0aGUgdmFsdWUgaGVyZVxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIElmIGBmaW5kQ29tbWVudHNCeUF1dGhvcmAgcmVqZWN0cywgd2UnbGwgaGF2ZSB0aGUgcmVhc29uIGhlcmVcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgU2ltcGxlIEV4YW1wbGVcbiAgICAtLS0tLS0tLS0tLS0tLVxuICBcbiAgICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBsZXQgcmVzdWx0O1xuICBcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gZmluZFJlc3VsdCgpO1xuICAgICAgLy8gc3VjY2Vzc1xuICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAvLyBmYWlsdXJlXG4gICAgfVxuICAgIGBgYFxuICBcbiAgICBFcnJiYWNrIEV4YW1wbGVcbiAgXG4gICAgYGBganNcbiAgICBmaW5kUmVzdWx0KGZ1bmN0aW9uKHJlc3VsdCwgZXJyKXtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgLy8gZmFpbHVyZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgfVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBQcm9taXNlIEV4YW1wbGU7XG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBmaW5kUmVzdWx0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgICAgLy8gc3VjY2Vzc1xuICAgIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAvLyBmYWlsdXJlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEFkdmFuY2VkIEV4YW1wbGVcbiAgICAtLS0tLS0tLS0tLS0tLVxuICBcbiAgICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBsZXQgYXV0aG9yLCBib29rcztcbiAgXG4gICAgdHJ5IHtcbiAgICAgIGF1dGhvciA9IGZpbmRBdXRob3IoKTtcbiAgICAgIGJvb2tzICA9IGZpbmRCb29rc0J5QXV0aG9yKGF1dGhvcik7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9XG4gICAgYGBgXG4gIFxuICAgIEVycmJhY2sgRXhhbXBsZVxuICBcbiAgICBgYGBqc1xuICBcbiAgICBmdW5jdGlvbiBmb3VuZEJvb2tzKGJvb2tzKSB7XG4gIFxuICAgIH1cbiAgXG4gICAgZnVuY3Rpb24gZmFpbHVyZShyZWFzb24pIHtcbiAgXG4gICAgfVxuICBcbiAgICBmaW5kQXV0aG9yKGZ1bmN0aW9uKGF1dGhvciwgZXJyKXtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZpbmRCb29va3NCeUF1dGhvcihhdXRob3IsIGZ1bmN0aW9uKGJvb2tzLCBlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3VuZEJvb2tzKGJvb2tzKTtcbiAgICAgICAgICAgICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICBmYWlsdXJlKHJlYXNvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIFByb21pc2UgRXhhbXBsZTtcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGZpbmRBdXRob3IoKS5cbiAgICAgIHRoZW4oZmluZEJvb2tzQnlBdXRob3IpLlxuICAgICAgdGhlbihmdW5jdGlvbihib29rcyl7XG4gICAgICAgIC8vIGZvdW5kIGJvb2tzXG4gICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEBtZXRob2QgdGhlblxuICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uRnVsZmlsbGVkXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3RlZFxuICAgIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgICBAcmV0dXJuIHtQcm9taXNlfVxuICAqL1xuICB0aGVuOiB0aGVuLFxuXG4gIC8qKlxuICAgIGBjYXRjaGAgaXMgc2ltcGx5IHN1Z2FyIGZvciBgdGhlbih1bmRlZmluZWQsIG9uUmVqZWN0aW9uKWAgd2hpY2ggbWFrZXMgaXQgdGhlIHNhbWVcbiAgICBhcyB0aGUgY2F0Y2ggYmxvY2sgb2YgYSB0cnkvY2F0Y2ggc3RhdGVtZW50LlxuICBcbiAgICBgYGBqc1xuICAgIGZ1bmN0aW9uIGZpbmRBdXRob3IoKXtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGRuJ3QgZmluZCB0aGF0IGF1dGhvcicpO1xuICAgIH1cbiAgXG4gICAgLy8gc3luY2hyb25vdXNcbiAgICB0cnkge1xuICAgICAgZmluZEF1dGhvcigpO1xuICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIH1cbiAgXG4gICAgLy8gYXN5bmMgd2l0aCBwcm9taXNlc1xuICAgIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQG1ldGhvZCBjYXRjaFxuICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVqZWN0aW9uXG4gICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG4gICdjYXRjaCc6IGZ1bmN0aW9uIF9jYXRjaChvblJlamVjdGlvbikge1xuICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3Rpb24pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBwb2x5ZmlsbCgpIHtcbiAgICB2YXIgbG9jYWwgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbG9jYWwgPSBnbG9iYWw7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbG9jYWwgPSBzZWxmO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2NhbCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgUCA9IGxvY2FsLlByb21pc2U7XG5cbiAgICBpZiAoUCkge1xuICAgICAgICB2YXIgcHJvbWlzZVRvU3RyaW5nID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb21pc2VUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChQLnJlc29sdmUoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIHNpbGVudGx5IGlnbm9yZWRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9taXNlVG9TdHJpbmcgPT09ICdbb2JqZWN0IFByb21pc2VdJyAmJiAhUC5jYXN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2NhbC5Qcm9taXNlID0gUHJvbWlzZTtcbn1cblxucG9seWZpbGwoKTtcbi8vIFN0cmFuZ2UgY29tcGF0Li5cblByb21pc2UucG9seWZpbGwgPSBwb2x5ZmlsbDtcblByb21pc2UuUHJvbWlzZSA9IFByb21pc2U7XG5cbnJldHVybiBQcm9taXNlO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXM2LXByb21pc2UubWFwIiwiLyohIEpTT04gdjMuMy4yIHwgaHR0cDovL2Jlc3RpZWpzLmdpdGh1Yi5pby9qc29uMyB8IENvcHlyaWdodCAyMDEyLTIwMTQsIEtpdCBDYW1icmlkZ2UgfCBodHRwOi8va2l0Lm1pdC1saWNlbnNlLm9yZyAqL1xuOyhmdW5jdGlvbiAoKSB7XG4gIC8vIERldGVjdCB0aGUgYGRlZmluZWAgZnVuY3Rpb24gZXhwb3NlZCBieSBhc3luY2hyb25vdXMgbW9kdWxlIGxvYWRlcnMuIFRoZVxuICAvLyBzdHJpY3QgYGRlZmluZWAgY2hlY2sgaXMgbmVjZXNzYXJ5IGZvciBjb21wYXRpYmlsaXR5IHdpdGggYHIuanNgLlxuICB2YXIgaXNMb2FkZXIgPSB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZDtcblxuICAvLyBBIHNldCBvZiB0eXBlcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIG9iamVjdHMgZnJvbSBwcmltaXRpdmVzLlxuICB2YXIgb2JqZWN0VHlwZXMgPSB7XG4gICAgXCJmdW5jdGlvblwiOiB0cnVlLFxuICAgIFwib2JqZWN0XCI6IHRydWVcbiAgfTtcblxuICAvLyBEZXRlY3QgdGhlIGBleHBvcnRzYCBvYmplY3QgZXhwb3NlZCBieSBDb21tb25KUyBpbXBsZW1lbnRhdGlvbnMuXG4gIHZhciBmcmVlRXhwb3J0cyA9IG9iamVjdFR5cGVzW3R5cGVvZiBleHBvcnRzXSAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbiAgLy8gVXNlIHRoZSBgZ2xvYmFsYCBvYmplY3QgZXhwb3NlZCBieSBOb2RlIChpbmNsdWRpbmcgQnJvd3NlcmlmeSB2aWFcbiAgLy8gYGluc2VydC1tb2R1bGUtZ2xvYmFsc2ApLCBOYXJ3aGFsLCBhbmQgUmluZ28gYXMgdGhlIGRlZmF1bHQgY29udGV4dCxcbiAgLy8gYW5kIHRoZSBgd2luZG93YCBvYmplY3QgaW4gYnJvd3NlcnMuIFJoaW5vIGV4cG9ydHMgYSBgZ2xvYmFsYCBmdW5jdGlvblxuICAvLyBpbnN0ZWFkLlxuICB2YXIgcm9vdCA9IG9iamVjdFR5cGVzW3R5cGVvZiB3aW5kb3ddICYmIHdpbmRvdyB8fCB0aGlzLFxuICAgICAgZnJlZUdsb2JhbCA9IGZyZWVFeHBvcnRzICYmIG9iamVjdFR5cGVzW3R5cGVvZiBtb2R1bGVdICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIHR5cGVvZiBnbG9iYWwgPT0gXCJvYmplY3RcIiAmJiBnbG9iYWw7XG5cbiAgaWYgKGZyZWVHbG9iYWwgJiYgKGZyZWVHbG9iYWxbXCJnbG9iYWxcIl0gPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbFtcIndpbmRvd1wiXSA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsW1wic2VsZlwiXSA9PT0gZnJlZUdsb2JhbCkpIHtcbiAgICByb290ID0gZnJlZUdsb2JhbDtcbiAgfVxuXG4gIC8vIFB1YmxpYzogSW5pdGlhbGl6ZXMgSlNPTiAzIHVzaW5nIHRoZSBnaXZlbiBgY29udGV4dGAgb2JqZWN0LCBhdHRhY2hpbmcgdGhlXG4gIC8vIGBzdHJpbmdpZnlgIGFuZCBgcGFyc2VgIGZ1bmN0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGBleHBvcnRzYCBvYmplY3QuXG4gIGZ1bmN0aW9uIHJ1bkluQ29udGV4dChjb250ZXh0LCBleHBvcnRzKSB7XG4gICAgY29udGV4dCB8fCAoY29udGV4dCA9IHJvb3RbXCJPYmplY3RcIl0oKSk7XG4gICAgZXhwb3J0cyB8fCAoZXhwb3J0cyA9IHJvb3RbXCJPYmplY3RcIl0oKSk7XG5cbiAgICAvLyBOYXRpdmUgY29uc3RydWN0b3IgYWxpYXNlcy5cbiAgICB2YXIgTnVtYmVyID0gY29udGV4dFtcIk51bWJlclwiXSB8fCByb290W1wiTnVtYmVyXCJdLFxuICAgICAgICBTdHJpbmcgPSBjb250ZXh0W1wiU3RyaW5nXCJdIHx8IHJvb3RbXCJTdHJpbmdcIl0sXG4gICAgICAgIE9iamVjdCA9IGNvbnRleHRbXCJPYmplY3RcIl0gfHwgcm9vdFtcIk9iamVjdFwiXSxcbiAgICAgICAgRGF0ZSA9IGNvbnRleHRbXCJEYXRlXCJdIHx8IHJvb3RbXCJEYXRlXCJdLFxuICAgICAgICBTeW50YXhFcnJvciA9IGNvbnRleHRbXCJTeW50YXhFcnJvclwiXSB8fCByb290W1wiU3ludGF4RXJyb3JcIl0sXG4gICAgICAgIFR5cGVFcnJvciA9IGNvbnRleHRbXCJUeXBlRXJyb3JcIl0gfHwgcm9vdFtcIlR5cGVFcnJvclwiXSxcbiAgICAgICAgTWF0aCA9IGNvbnRleHRbXCJNYXRoXCJdIHx8IHJvb3RbXCJNYXRoXCJdLFxuICAgICAgICBuYXRpdmVKU09OID0gY29udGV4dFtcIkpTT05cIl0gfHwgcm9vdFtcIkpTT05cIl07XG5cbiAgICAvLyBEZWxlZ2F0ZSB0byB0aGUgbmF0aXZlIGBzdHJpbmdpZnlgIGFuZCBgcGFyc2VgIGltcGxlbWVudGF0aW9ucy5cbiAgICBpZiAodHlwZW9mIG5hdGl2ZUpTT04gPT0gXCJvYmplY3RcIiAmJiBuYXRpdmVKU09OKSB7XG4gICAgICBleHBvcnRzLnN0cmluZ2lmeSA9IG5hdGl2ZUpTT04uc3RyaW5naWZ5O1xuICAgICAgZXhwb3J0cy5wYXJzZSA9IG5hdGl2ZUpTT04ucGFyc2U7XG4gICAgfVxuXG4gICAgLy8gQ29udmVuaWVuY2UgYWxpYXNlcy5cbiAgICB2YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlLFxuICAgICAgICBnZXRDbGFzcyA9IG9iamVjdFByb3RvLnRvU3RyaW5nLFxuICAgICAgICBpc1Byb3BlcnR5LCBmb3JFYWNoLCB1bmRlZjtcblxuICAgIC8vIFRlc3QgdGhlIGBEYXRlI2dldFVUQypgIG1ldGhvZHMuIEJhc2VkIG9uIHdvcmsgYnkgQFlhZmZsZS5cbiAgICB2YXIgaXNFeHRlbmRlZCA9IG5ldyBEYXRlKC0zNTA5ODI3MzM0NTczMjkyKTtcbiAgICB0cnkge1xuICAgICAgLy8gVGhlIGBnZXRVVENGdWxsWWVhcmAsIGBNb250aGAsIGFuZCBgRGF0ZWAgbWV0aG9kcyByZXR1cm4gbm9uc2Vuc2ljYWxcbiAgICAgIC8vIHJlc3VsdHMgZm9yIGNlcnRhaW4gZGF0ZXMgaW4gT3BlcmEgPj0gMTAuNTMuXG4gICAgICBpc0V4dGVuZGVkID0gaXNFeHRlbmRlZC5nZXRVVENGdWxsWWVhcigpID09IC0xMDkyNTIgJiYgaXNFeHRlbmRlZC5nZXRVVENNb250aCgpID09PSAwICYmIGlzRXh0ZW5kZWQuZ2V0VVRDRGF0ZSgpID09PSAxICYmXG4gICAgICAgIC8vIFNhZmFyaSA8IDIuMC4yIHN0b3JlcyB0aGUgaW50ZXJuYWwgbWlsbGlzZWNvbmQgdGltZSB2YWx1ZSBjb3JyZWN0bHksXG4gICAgICAgIC8vIGJ1dCBjbGlwcyB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBkYXRlIG1ldGhvZHMgdG8gdGhlIHJhbmdlIG9mXG4gICAgICAgIC8vIHNpZ25lZCAzMi1iaXQgaW50ZWdlcnMgKFstMiAqKiAzMSwgMiAqKiAzMSAtIDFdKS5cbiAgICAgICAgaXNFeHRlbmRlZC5nZXRVVENIb3VycygpID09IDEwICYmIGlzRXh0ZW5kZWQuZ2V0VVRDTWludXRlcygpID09IDM3ICYmIGlzRXh0ZW5kZWQuZ2V0VVRDU2Vjb25kcygpID09IDYgJiYgaXNFeHRlbmRlZC5nZXRVVENNaWxsaXNlY29uZHMoKSA9PSA3MDg7XG4gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuXG4gICAgLy8gSW50ZXJuYWw6IERldGVybWluZXMgd2hldGhlciB0aGUgbmF0aXZlIGBKU09OLnN0cmluZ2lmeWAgYW5kIGBwYXJzZWBcbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgYXJlIHNwZWMtY29tcGxpYW50LiBCYXNlZCBvbiB3b3JrIGJ5IEtlbiBTbnlkZXIuXG4gICAgZnVuY3Rpb24gaGFzKG5hbWUpIHtcbiAgICAgIGlmIChoYXNbbmFtZV0gIT09IHVuZGVmKSB7XG4gICAgICAgIC8vIFJldHVybiBjYWNoZWQgZmVhdHVyZSB0ZXN0IHJlc3VsdC5cbiAgICAgICAgcmV0dXJuIGhhc1tuYW1lXTtcbiAgICAgIH1cbiAgICAgIHZhciBpc1N1cHBvcnRlZDtcbiAgICAgIGlmIChuYW1lID09IFwiYnVnLXN0cmluZy1jaGFyLWluZGV4XCIpIHtcbiAgICAgICAgLy8gSUUgPD0gNyBkb2Vzbid0IHN1cHBvcnQgYWNjZXNzaW5nIHN0cmluZyBjaGFyYWN0ZXJzIHVzaW5nIHNxdWFyZVxuICAgICAgICAvLyBicmFja2V0IG5vdGF0aW9uLiBJRSA4IG9ubHkgc3VwcG9ydHMgdGhpcyBmb3IgcHJpbWl0aXZlcy5cbiAgICAgICAgaXNTdXBwb3J0ZWQgPSBcImFcIlswXSAhPSBcImFcIjtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBcImpzb25cIikge1xuICAgICAgICAvLyBJbmRpY2F0ZXMgd2hldGhlciBib3RoIGBKU09OLnN0cmluZ2lmeWAgYW5kIGBKU09OLnBhcnNlYCBhcmVcbiAgICAgICAgLy8gc3VwcG9ydGVkLlxuICAgICAgICBpc1N1cHBvcnRlZCA9IGhhcyhcImpzb24tc3RyaW5naWZ5XCIpICYmIGhhcyhcImpzb24tcGFyc2VcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdmFsdWUsIHNlcmlhbGl6ZWQgPSAne1wiYVwiOlsxLHRydWUsZmFsc2UsbnVsbCxcIlxcXFx1MDAwMFxcXFxiXFxcXG5cXFxcZlxcXFxyXFxcXHRcIl19JztcbiAgICAgICAgLy8gVGVzdCBgSlNPTi5zdHJpbmdpZnlgLlxuICAgICAgICBpZiAobmFtZSA9PSBcImpzb24tc3RyaW5naWZ5XCIpIHtcbiAgICAgICAgICB2YXIgc3RyaW5naWZ5ID0gZXhwb3J0cy5zdHJpbmdpZnksIHN0cmluZ2lmeVN1cHBvcnRlZCA9IHR5cGVvZiBzdHJpbmdpZnkgPT0gXCJmdW5jdGlvblwiICYmIGlzRXh0ZW5kZWQ7XG4gICAgICAgICAgaWYgKHN0cmluZ2lmeVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgLy8gQSB0ZXN0IGZ1bmN0aW9uIG9iamVjdCB3aXRoIGEgY3VzdG9tIGB0b0pTT05gIG1ldGhvZC5cbiAgICAgICAgICAgICh2YWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9KS50b0pTT04gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHN0cmluZ2lmeVN1cHBvcnRlZCA9XG4gICAgICAgICAgICAgICAgLy8gRmlyZWZveCAzLjFiMSBhbmQgYjIgc2VyaWFsaXplIHN0cmluZywgbnVtYmVyLCBhbmQgYm9vbGVhblxuICAgICAgICAgICAgICAgIC8vIHByaW1pdGl2ZXMgYXMgb2JqZWN0IGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSgwKSA9PT0gXCIwXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgYjIsIGFuZCBKU09OIDIgc2VyaWFsaXplIHdyYXBwZWQgcHJpbWl0aXZlcyBhcyBvYmplY3RcbiAgICAgICAgICAgICAgICAvLyBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IE51bWJlcigpKSA9PT0gXCIwXCIgJiZcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IFN0cmluZygpKSA9PSAnXCJcIicgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgMiB0aHJvdyBhbiBlcnJvciBpZiB0aGUgdmFsdWUgaXMgYG51bGxgLCBgdW5kZWZpbmVkYCwgb3JcbiAgICAgICAgICAgICAgICAvLyBkb2VzIG5vdCBkZWZpbmUgYSBjYW5vbmljYWwgSlNPTiByZXByZXNlbnRhdGlvbiAodGhpcyBhcHBsaWVzIHRvXG4gICAgICAgICAgICAgICAgLy8gb2JqZWN0cyB3aXRoIGB0b0pTT05gIHByb3BlcnRpZXMgYXMgd2VsbCwgKnVubGVzcyogdGhleSBhcmUgbmVzdGVkXG4gICAgICAgICAgICAgICAgLy8gd2l0aGluIGFuIG9iamVjdCBvciBhcnJheSkuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KGdldENsYXNzKSA9PT0gdW5kZWYgJiZcbiAgICAgICAgICAgICAgICAvLyBJRSA4IHNlcmlhbGl6ZXMgYHVuZGVmaW5lZGAgYXMgYFwidW5kZWZpbmVkXCJgLiBTYWZhcmkgPD0gNS4xLjcgYW5kXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjMgcGFzcyB0aGlzIHRlc3QuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KHVuZGVmKSA9PT0gdW5kZWYgJiZcbiAgICAgICAgICAgICAgICAvLyBTYWZhcmkgPD0gNS4xLjcgYW5kIEZGIDMuMWIzIHRocm93IGBFcnJvcmBzIGFuZCBgVHlwZUVycm9yYHMsXG4gICAgICAgICAgICAgICAgLy8gcmVzcGVjdGl2ZWx5LCBpZiB0aGUgdmFsdWUgaXMgb21pdHRlZCBlbnRpcmVseS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoKSA9PT0gdW5kZWYgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgMiB0aHJvdyBhbiBlcnJvciBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgbm90IGEgbnVtYmVyLFxuICAgICAgICAgICAgICAgIC8vIHN0cmluZywgYXJyYXksIG9iamVjdCwgQm9vbGVhbiwgb3IgYG51bGxgIGxpdGVyYWwuIFRoaXMgYXBwbGllcyB0b1xuICAgICAgICAgICAgICAgIC8vIG9iamVjdHMgd2l0aCBjdXN0b20gYHRvSlNPTmAgbWV0aG9kcyBhcyB3ZWxsLCB1bmxlc3MgdGhleSBhcmUgbmVzdGVkXG4gICAgICAgICAgICAgICAgLy8gaW5zaWRlIG9iamVjdCBvciBhcnJheSBsaXRlcmFscy4gWVVJIDMuMC4wYjEgaWdub3JlcyBjdXN0b20gYHRvSlNPTmBcbiAgICAgICAgICAgICAgICAvLyBtZXRob2RzIGVudGlyZWx5LlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSh2YWx1ZSkgPT09IFwiMVwiICYmXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KFt2YWx1ZV0pID09IFwiWzFdXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBQcm90b3R5cGUgPD0gMS42LjEgc2VyaWFsaXplcyBgW3VuZGVmaW5lZF1gIGFzIGBcIltdXCJgIGluc3RlYWQgb2ZcbiAgICAgICAgICAgICAgICAvLyBgXCJbbnVsbF1cImAuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KFt1bmRlZl0pID09IFwiW251bGxdXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBZVUkgMy4wLjBiMSBmYWlscyB0byBzZXJpYWxpemUgYG51bGxgIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShudWxsKSA9PSBcIm51bGxcIiAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCAyIGhhbHRzIHNlcmlhbGl6YXRpb24gaWYgYW4gYXJyYXkgY29udGFpbnMgYSBmdW5jdGlvbjpcbiAgICAgICAgICAgICAgICAvLyBgWzEsIHRydWUsIGdldENsYXNzLCAxXWAgc2VyaWFsaXplcyBhcyBcIlsxLHRydWUsXSxcIi4gRkYgMy4xYjNcbiAgICAgICAgICAgICAgICAvLyBlbGlkZXMgbm9uLUpTT04gdmFsdWVzIGZyb20gb2JqZWN0cyBhbmQgYXJyYXlzLCB1bmxlc3MgdGhleVxuICAgICAgICAgICAgICAgIC8vIGRlZmluZSBjdXN0b20gYHRvSlNPTmAgbWV0aG9kcy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoW3VuZGVmLCBnZXRDbGFzcywgbnVsbF0pID09IFwiW251bGwsbnVsbCxudWxsXVwiICYmXG4gICAgICAgICAgICAgICAgLy8gU2ltcGxlIHNlcmlhbGl6YXRpb24gdGVzdC4gRkYgMy4xYjEgdXNlcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZXNcbiAgICAgICAgICAgICAgICAvLyB3aGVyZSBjaGFyYWN0ZXIgZXNjYXBlIGNvZGVzIGFyZSBleHBlY3RlZCAoZS5nLiwgYFxcYmAgPT4gYFxcdTAwMDhgKS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoeyBcImFcIjogW3ZhbHVlLCB0cnVlLCBmYWxzZSwgbnVsbCwgXCJcXHgwMFxcYlxcblxcZlxcclxcdFwiXSB9KSA9PSBzZXJpYWxpemVkICYmXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjEgYW5kIGIyIGlnbm9yZSB0aGUgYGZpbHRlcmAgYW5kIGB3aWR0aGAgYXJndW1lbnRzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShudWxsLCB2YWx1ZSkgPT09IFwiMVwiICYmXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KFsxLCAyXSwgbnVsbCwgMSkgPT0gXCJbXFxuIDEsXFxuIDJcXG5dXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBKU09OIDIsIFByb3RvdHlwZSA8PSAxLjcsIGFuZCBvbGRlciBXZWJLaXQgYnVpbGRzIGluY29ycmVjdGx5XG4gICAgICAgICAgICAgICAgLy8gc2VyaWFsaXplIGV4dGVuZGVkIHllYXJzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgRGF0ZSgtOC42NGUxNSkpID09ICdcIi0yNzE4MjEtMDQtMjBUMDA6MDA6MDAuMDAwWlwiJyAmJlxuICAgICAgICAgICAgICAgIC8vIFRoZSBtaWxsaXNlY29uZHMgYXJlIG9wdGlvbmFsIGluIEVTIDUsIGJ1dCByZXF1aXJlZCBpbiA1LjEuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBEYXRlKDguNjRlMTUpKSA9PSAnXCIrMjc1NzYwLTA5LTEzVDAwOjAwOjAwLjAwMFpcIicgJiZcbiAgICAgICAgICAgICAgICAvLyBGaXJlZm94IDw9IDExLjAgaW5jb3JyZWN0bHkgc2VyaWFsaXplcyB5ZWFycyBwcmlvciB0byAwIGFzIG5lZ2F0aXZlXG4gICAgICAgICAgICAgICAgLy8gZm91ci1kaWdpdCB5ZWFycyBpbnN0ZWFkIG9mIHNpeC1kaWdpdCB5ZWFycy4gQ3JlZGl0czogQFlhZmZsZS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IERhdGUoLTYyMTk4NzU1MmU1KSkgPT0gJ1wiLTAwMDAwMS0wMS0wMVQwMDowMDowMC4wMDBaXCInICYmXG4gICAgICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDUuMS41IGFuZCBPcGVyYSA+PSAxMC41MyBpbmNvcnJlY3RseSBzZXJpYWxpemUgbWlsbGlzZWNvbmRcbiAgICAgICAgICAgICAgICAvLyB2YWx1ZXMgbGVzcyB0aGFuIDEwMDAuIENyZWRpdHM6IEBZYWZmbGUuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBEYXRlKC0xKSkgPT0gJ1wiMTk2OS0xMi0zMVQyMzo1OTo1OS45OTlaXCInO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgIHN0cmluZ2lmeVN1cHBvcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpc1N1cHBvcnRlZCA9IHN0cmluZ2lmeVN1cHBvcnRlZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUZXN0IGBKU09OLnBhcnNlYC5cbiAgICAgICAgaWYgKG5hbWUgPT0gXCJqc29uLXBhcnNlXCIpIHtcbiAgICAgICAgICB2YXIgcGFyc2UgPSBleHBvcnRzLnBhcnNlO1xuICAgICAgICAgIGlmICh0eXBlb2YgcGFyc2UgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgYjIgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYSBiYXJlIGxpdGVyYWwgaXMgcHJvdmlkZWQuXG4gICAgICAgICAgICAgIC8vIENvbmZvcm1pbmcgaW1wbGVtZW50YXRpb25zIHNob3VsZCBhbHNvIGNvZXJjZSB0aGUgaW5pdGlhbCBhcmd1bWVudCB0b1xuICAgICAgICAgICAgICAvLyBhIHN0cmluZyBwcmlvciB0byBwYXJzaW5nLlxuICAgICAgICAgICAgICBpZiAocGFyc2UoXCIwXCIpID09PSAwICYmICFwYXJzZShmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBTaW1wbGUgcGFyc2luZyB0ZXN0LlxuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2Uoc2VyaWFsaXplZCk7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlU3VwcG9ydGVkID0gdmFsdWVbXCJhXCJdLmxlbmd0aCA9PSA1ICYmIHZhbHVlW1wiYVwiXVswXSA9PT0gMTtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyaSA8PSA1LjEuMiBhbmQgRkYgMy4xYjEgYWxsb3cgdW5lc2NhcGVkIHRhYnMgaW4gc3RyaW5ncy5cbiAgICAgICAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSAhcGFyc2UoJ1wiXFx0XCInKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge31cbiAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEZGIDQuMCBhbmQgNC4wLjEgYWxsb3cgbGVhZGluZyBgK2Agc2lnbnMgYW5kIGxlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAvLyBkZWNpbWFsIHBvaW50cy4gRkYgNC4wLCA0LjAuMSwgYW5kIElFIDktMTAgYWxzbyBhbGxvd1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGNlcnRhaW4gb2N0YWwgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSBwYXJzZShcIjAxXCIpICE9PSAxO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAocGFyc2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBGRiA0LjAsIDQuMC4xLCBhbmQgUmhpbm8gMS43UjMtUjQgYWxsb3cgdHJhaWxpbmcgZGVjaW1hbFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHBvaW50cy4gVGhlc2UgZW52aXJvbm1lbnRzLCBhbG9uZyB3aXRoIEZGIDMuMWIxIGFuZCAyLFxuICAgICAgICAgICAgICAgICAgICAgIC8vIGFsc28gYWxsb3cgdHJhaWxpbmcgY29tbWFzIGluIEpTT04gb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3VwcG9ydGVkID0gcGFyc2UoXCIxLlwiKSAhPT0gMTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgIHBhcnNlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlzU3VwcG9ydGVkID0gcGFyc2VTdXBwb3J0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNbbmFtZV0gPSAhIWlzU3VwcG9ydGVkO1xuICAgIH1cblxuICAgIGlmICghaGFzKFwianNvblwiKSkge1xuICAgICAgLy8gQ29tbW9uIGBbW0NsYXNzXV1gIG5hbWUgYWxpYXNlcy5cbiAgICAgIHZhciBmdW5jdGlvbkNsYXNzID0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiLFxuICAgICAgICAgIGRhdGVDbGFzcyA9IFwiW29iamVjdCBEYXRlXVwiLFxuICAgICAgICAgIG51bWJlckNsYXNzID0gXCJbb2JqZWN0IE51bWJlcl1cIixcbiAgICAgICAgICBzdHJpbmdDbGFzcyA9IFwiW29iamVjdCBTdHJpbmddXCIsXG4gICAgICAgICAgYXJyYXlDbGFzcyA9IFwiW29iamVjdCBBcnJheV1cIixcbiAgICAgICAgICBib29sZWFuQ2xhc3MgPSBcIltvYmplY3QgQm9vbGVhbl1cIjtcblxuICAgICAgLy8gRGV0ZWN0IGluY29tcGxldGUgc3VwcG9ydCBmb3IgYWNjZXNzaW5nIHN0cmluZyBjaGFyYWN0ZXJzIGJ5IGluZGV4LlxuICAgICAgdmFyIGNoYXJJbmRleEJ1Z2d5ID0gaGFzKFwiYnVnLXN0cmluZy1jaGFyLWluZGV4XCIpO1xuXG4gICAgICAvLyBEZWZpbmUgYWRkaXRpb25hbCB1dGlsaXR5IG1ldGhvZHMgaWYgdGhlIGBEYXRlYCBtZXRob2RzIGFyZSBidWdneS5cbiAgICAgIGlmICghaXNFeHRlbmRlZCkge1xuICAgICAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICAgICAgICAvLyBBIG1hcHBpbmcgYmV0d2VlbiB0aGUgbW9udGhzIG9mIHRoZSB5ZWFyIGFuZCB0aGUgbnVtYmVyIG9mIGRheXMgYmV0d2VlblxuICAgICAgICAvLyBKYW51YXJ5IDFzdCBhbmQgdGhlIGZpcnN0IG9mIHRoZSByZXNwZWN0aXZlIG1vbnRoLlxuICAgICAgICB2YXIgTW9udGhzID0gWzAsIDMxLCA1OSwgOTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0XTtcbiAgICAgICAgLy8gSW50ZXJuYWw6IENhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiBkYXlzIGJldHdlZW4gdGhlIFVuaXggZXBvY2ggYW5kIHRoZVxuICAgICAgICAvLyBmaXJzdCBkYXkgb2YgdGhlIGdpdmVuIG1vbnRoLlxuICAgICAgICB2YXIgZ2V0RGF5ID0gZnVuY3Rpb24gKHllYXIsIG1vbnRoKSB7XG4gICAgICAgICAgcmV0dXJuIE1vbnRoc1ttb250aF0gKyAzNjUgKiAoeWVhciAtIDE5NzApICsgZmxvb3IoKHllYXIgLSAxOTY5ICsgKG1vbnRoID0gKyhtb250aCA+IDEpKSkgLyA0KSAtIGZsb29yKCh5ZWFyIC0gMTkwMSArIG1vbnRoKSAvIDEwMCkgKyBmbG9vcigoeWVhciAtIDE2MDEgKyBtb250aCkgLyA0MDApO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBJbnRlcm5hbDogRGV0ZXJtaW5lcyBpZiBhIHByb3BlcnR5IGlzIGEgZGlyZWN0IHByb3BlcnR5IG9mIHRoZSBnaXZlblxuICAgICAgLy8gb2JqZWN0LiBEZWxlZ2F0ZXMgdG8gdGhlIG5hdGl2ZSBgT2JqZWN0I2hhc093blByb3BlcnR5YCBtZXRob2QuXG4gICAgICBpZiAoIShpc1Byb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHkpKSB7XG4gICAgICAgIGlzUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICB2YXIgbWVtYmVycyA9IHt9LCBjb25zdHJ1Y3RvcjtcbiAgICAgICAgICBpZiAoKG1lbWJlcnMuX19wcm90b19fID0gbnVsbCwgbWVtYmVycy5fX3Byb3RvX18gPSB7XG4gICAgICAgICAgICAvLyBUaGUgKnByb3RvKiBwcm9wZXJ0eSBjYW5ub3QgYmUgc2V0IG11bHRpcGxlIHRpbWVzIGluIHJlY2VudFxuICAgICAgICAgICAgLy8gdmVyc2lvbnMgb2YgRmlyZWZveCBhbmQgU2VhTW9ua2V5LlxuICAgICAgICAgICAgXCJ0b1N0cmluZ1wiOiAxXG4gICAgICAgICAgfSwgbWVtYmVycykudG9TdHJpbmcgIT0gZ2V0Q2xhc3MpIHtcbiAgICAgICAgICAgIC8vIFNhZmFyaSA8PSAyLjAuMyBkb2Vzbid0IGltcGxlbWVudCBgT2JqZWN0I2hhc093blByb3BlcnR5YCwgYnV0XG4gICAgICAgICAgICAvLyBzdXBwb3J0cyB0aGUgbXV0YWJsZSAqcHJvdG8qIHByb3BlcnR5LlxuICAgICAgICAgICAgaXNQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAvLyBDYXB0dXJlIGFuZCBicmVhayB0aGUgb2JqZWN0J3MgcHJvdG90eXBlIGNoYWluIChzZWUgc2VjdGlvbiA4LjYuMlxuICAgICAgICAgICAgICAvLyBvZiB0aGUgRVMgNS4xIHNwZWMpLiBUaGUgcGFyZW50aGVzaXplZCBleHByZXNzaW9uIHByZXZlbnRzIGFuXG4gICAgICAgICAgICAgIC8vIHVuc2FmZSB0cmFuc2Zvcm1hdGlvbiBieSB0aGUgQ2xvc3VyZSBDb21waWxlci5cbiAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsID0gdGhpcy5fX3Byb3RvX18sIHJlc3VsdCA9IHByb3BlcnR5IGluICh0aGlzLl9fcHJvdG9fXyA9IG51bGwsIHRoaXMpO1xuICAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBwcm90b3R5cGUgY2hhaW4uXG4gICAgICAgICAgICAgIHRoaXMuX19wcm90b19fID0gb3JpZ2luYWw7XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDYXB0dXJlIGEgcmVmZXJlbmNlIHRvIHRoZSB0b3AtbGV2ZWwgYE9iamVjdGAgY29uc3RydWN0b3IuXG4gICAgICAgICAgICBjb25zdHJ1Y3RvciA9IG1lbWJlcnMuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIGBjb25zdHJ1Y3RvcmAgcHJvcGVydHkgdG8gc2ltdWxhdGUgYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAgaW5cbiAgICAgICAgICAgIC8vIG90aGVyIGVudmlyb25tZW50cy5cbiAgICAgICAgICAgIGlzUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudCA9ICh0aGlzLmNvbnN0cnVjdG9yIHx8IGNvbnN0cnVjdG9yKS5wcm90b3R5cGU7XG4gICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eSBpbiB0aGlzICYmICEocHJvcGVydHkgaW4gcGFyZW50ICYmIHRoaXNbcHJvcGVydHldID09PSBwYXJlbnRbcHJvcGVydHldKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIG1lbWJlcnMgPSBudWxsO1xuICAgICAgICAgIHJldHVybiBpc1Byb3BlcnR5LmNhbGwodGhpcywgcHJvcGVydHkpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBJbnRlcm5hbDogTm9ybWFsaXplcyB0aGUgYGZvci4uLmluYCBpdGVyYXRpb24gYWxnb3JpdGhtIGFjcm9zc1xuICAgICAgLy8gZW52aXJvbm1lbnRzLiBFYWNoIGVudW1lcmF0ZWQga2V5IGlzIHlpZWxkZWQgdG8gYSBgY2FsbGJhY2tgIGZ1bmN0aW9uLlxuICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBzaXplID0gMCwgUHJvcGVydGllcywgbWVtYmVycywgcHJvcGVydHk7XG5cbiAgICAgICAgLy8gVGVzdHMgZm9yIGJ1Z3MgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQncyBgZm9yLi4uaW5gIGFsZ29yaXRobS4gVGhlXG4gICAgICAgIC8vIGB2YWx1ZU9mYCBwcm9wZXJ0eSBpbmhlcml0cyB0aGUgbm9uLWVudW1lcmFibGUgZmxhZyBmcm9tXG4gICAgICAgIC8vIGBPYmplY3QucHJvdG90eXBlYCBpbiBvbGRlciB2ZXJzaW9ucyBvZiBJRSwgTmV0c2NhcGUsIGFuZCBNb3ppbGxhLlxuICAgICAgICAoUHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlT2YgPSAwO1xuICAgICAgICB9KS5wcm90b3R5cGUudmFsdWVPZiA9IDA7XG5cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBgUHJvcGVydGllc2AgY2xhc3MuXG4gICAgICAgIG1lbWJlcnMgPSBuZXcgUHJvcGVydGllcygpO1xuICAgICAgICBmb3IgKHByb3BlcnR5IGluIG1lbWJlcnMpIHtcbiAgICAgICAgICAvLyBJZ25vcmUgYWxsIHByb3BlcnRpZXMgaW5oZXJpdGVkIGZyb20gYE9iamVjdC5wcm90b3R5cGVgLlxuICAgICAgICAgIGlmIChpc1Byb3BlcnR5LmNhbGwobWVtYmVycywgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICBzaXplKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFByb3BlcnRpZXMgPSBtZW1iZXJzID0gbnVsbDtcblxuICAgICAgICAvLyBOb3JtYWxpemUgdGhlIGl0ZXJhdGlvbiBhbGdvcml0aG0uXG4gICAgICAgIGlmICghc2l6ZSkge1xuICAgICAgICAgIC8vIEEgbGlzdCBvZiBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGluaGVyaXRlZCBmcm9tIGBPYmplY3QucHJvdG90eXBlYC5cbiAgICAgICAgICBtZW1iZXJzID0gW1widmFsdWVPZlwiLCBcInRvU3RyaW5nXCIsIFwidG9Mb2NhbGVTdHJpbmdcIiwgXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLCBcImlzUHJvdG90eXBlT2ZcIiwgXCJoYXNPd25Qcm9wZXJ0eVwiLCBcImNvbnN0cnVjdG9yXCJdO1xuICAgICAgICAgIC8vIElFIDw9IDgsIE1vemlsbGEgMS4wLCBhbmQgTmV0c2NhcGUgNi4yIGlnbm9yZSBzaGFkb3dlZCBub24tZW51bWVyYWJsZVxuICAgICAgICAgIC8vIHByb3BlcnRpZXMuXG4gICAgICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IGdldENsYXNzLmNhbGwob2JqZWN0KSA9PSBmdW5jdGlvbkNsYXNzLCBwcm9wZXJ0eSwgbGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGhhc1Byb3BlcnR5ID0gIWlzRnVuY3Rpb24gJiYgdHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciAhPSBcImZ1bmN0aW9uXCIgJiYgb2JqZWN0VHlwZXNbdHlwZW9mIG9iamVjdC5oYXNPd25Qcm9wZXJ0eV0gJiYgb2JqZWN0Lmhhc093blByb3BlcnR5IHx8IGlzUHJvcGVydHk7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAvLyBHZWNrbyA8PSAxLjAgZW51bWVyYXRlcyB0aGUgYHByb3RvdHlwZWAgcHJvcGVydHkgb2YgZnVuY3Rpb25zIHVuZGVyXG4gICAgICAgICAgICAgIC8vIGNlcnRhaW4gY29uZGl0aW9uczsgSUUgZG9lcyBub3QuXG4gICAgICAgICAgICAgIGlmICghKGlzRnVuY3Rpb24gJiYgcHJvcGVydHkgPT0gXCJwcm90b3R5cGVcIikgJiYgaGFzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTWFudWFsbHkgaW52b2tlIHRoZSBjYWxsYmFjayBmb3IgZWFjaCBub24tZW51bWVyYWJsZSBwcm9wZXJ0eS5cbiAgICAgICAgICAgIGZvciAobGVuZ3RoID0gbWVtYmVycy5sZW5ndGg7IHByb3BlcnR5ID0gbWVtYmVyc1stLWxlbmd0aF07IGhhc1Byb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkgJiYgY2FsbGJhY2socHJvcGVydHkpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHNpemUgPT0gMikge1xuICAgICAgICAgIC8vIFNhZmFyaSA8PSAyLjAuNCBlbnVtZXJhdGVzIHNoYWRvd2VkIHByb3BlcnRpZXMgdHdpY2UuXG4gICAgICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBzZXQgb2YgaXRlcmF0ZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgIHZhciBtZW1iZXJzID0ge30sIGlzRnVuY3Rpb24gPSBnZXRDbGFzcy5jYWxsKG9iamVjdCkgPT0gZnVuY3Rpb25DbGFzcywgcHJvcGVydHk7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAvLyBTdG9yZSBlYWNoIHByb3BlcnR5IG5hbWUgdG8gcHJldmVudCBkb3VibGUgZW51bWVyYXRpb24uIFRoZVxuICAgICAgICAgICAgICAvLyBgcHJvdG90eXBlYCBwcm9wZXJ0eSBvZiBmdW5jdGlvbnMgaXMgbm90IGVudW1lcmF0ZWQgZHVlIHRvIGNyb3NzLVxuICAgICAgICAgICAgICAvLyBlbnZpcm9ubWVudCBpbmNvbnNpc3RlbmNpZXMuXG4gICAgICAgICAgICAgIGlmICghKGlzRnVuY3Rpb24gJiYgcHJvcGVydHkgPT0gXCJwcm90b3R5cGVcIikgJiYgIWlzUHJvcGVydHkuY2FsbChtZW1iZXJzLCBwcm9wZXJ0eSkgJiYgKG1lbWJlcnNbcHJvcGVydHldID0gMSkgJiYgaXNQcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2socHJvcGVydHkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBObyBidWdzIGRldGVjdGVkOyB1c2UgdGhlIHN0YW5kYXJkIGBmb3IuLi5pbmAgYWxnb3JpdGhtLlxuICAgICAgICAgIGZvckVhY2ggPSBmdW5jdGlvbiAob2JqZWN0LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIGlzRnVuY3Rpb24gPSBnZXRDbGFzcy5jYWxsKG9iamVjdCkgPT0gZnVuY3Rpb25DbGFzcywgcHJvcGVydHksIGlzQ29uc3RydWN0b3I7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICBpZiAoIShpc0Z1bmN0aW9uICYmIHByb3BlcnR5ID09IFwicHJvdG90eXBlXCIpICYmIGlzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSAmJiAhKGlzQ29uc3RydWN0b3IgPSBwcm9wZXJ0eSA9PT0gXCJjb25zdHJ1Y3RvclwiKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTWFudWFsbHkgaW52b2tlIHRoZSBjYWxsYmFjayBmb3IgdGhlIGBjb25zdHJ1Y3RvcmAgcHJvcGVydHkgZHVlIHRvXG4gICAgICAgICAgICAvLyBjcm9zcy1lbnZpcm9ubWVudCBpbmNvbnNpc3RlbmNpZXMuXG4gICAgICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvciB8fCBpc1Byb3BlcnR5LmNhbGwob2JqZWN0LCAocHJvcGVydHkgPSBcImNvbnN0cnVjdG9yXCIpKSkge1xuICAgICAgICAgICAgICBjYWxsYmFjayhwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9yRWFjaChvYmplY3QsIGNhbGxiYWNrKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFB1YmxpYzogU2VyaWFsaXplcyBhIEphdmFTY3JpcHQgYHZhbHVlYCBhcyBhIEpTT04gc3RyaW5nLiBUaGUgb3B0aW9uYWxcbiAgICAgIC8vIGBmaWx0ZXJgIGFyZ3VtZW50IG1heSBzcGVjaWZ5IGVpdGhlciBhIGZ1bmN0aW9uIHRoYXQgYWx0ZXJzIGhvdyBvYmplY3QgYW5kXG4gICAgICAvLyBhcnJheSBtZW1iZXJzIGFyZSBzZXJpYWxpemVkLCBvciBhbiBhcnJheSBvZiBzdHJpbmdzIGFuZCBudW1iZXJzIHRoYXRcbiAgICAgIC8vIGluZGljYXRlcyB3aGljaCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBzZXJpYWxpemVkLiBUaGUgb3B0aW9uYWwgYHdpZHRoYFxuICAgICAgLy8gYXJndW1lbnQgbWF5IGJlIGVpdGhlciBhIHN0cmluZyBvciBudW1iZXIgdGhhdCBzcGVjaWZpZXMgdGhlIGluZGVudGF0aW9uXG4gICAgICAvLyBsZXZlbCBvZiB0aGUgb3V0cHV0LlxuICAgICAgaWYgKCFoYXMoXCJqc29uLXN0cmluZ2lmeVwiKSkge1xuICAgICAgICAvLyBJbnRlcm5hbDogQSBtYXAgb2YgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCB0aGVpciBlc2NhcGVkIGVxdWl2YWxlbnRzLlxuICAgICAgICB2YXIgRXNjYXBlcyA9IHtcbiAgICAgICAgICA5MjogXCJcXFxcXFxcXFwiLFxuICAgICAgICAgIDM0OiAnXFxcXFwiJyxcbiAgICAgICAgICA4OiBcIlxcXFxiXCIsXG4gICAgICAgICAgMTI6IFwiXFxcXGZcIixcbiAgICAgICAgICAxMDogXCJcXFxcblwiLFxuICAgICAgICAgIDEzOiBcIlxcXFxyXCIsXG4gICAgICAgICAgOTogXCJcXFxcdFwiXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IENvbnZlcnRzIGB2YWx1ZWAgaW50byBhIHplcm8tcGFkZGVkIHN0cmluZyBzdWNoIHRoYXQgaXRzXG4gICAgICAgIC8vIGxlbmd0aCBpcyBhdCBsZWFzdCBlcXVhbCB0byBgd2lkdGhgLiBUaGUgYHdpZHRoYCBtdXN0IGJlIDw9IDYuXG4gICAgICAgIHZhciBsZWFkaW5nWmVyb2VzID0gXCIwMDAwMDBcIjtcbiAgICAgICAgdmFyIHRvUGFkZGVkU3RyaW5nID0gZnVuY3Rpb24gKHdpZHRoLCB2YWx1ZSkge1xuICAgICAgICAgIC8vIFRoZSBgfHwgMGAgZXhwcmVzc2lvbiBpcyBuZWNlc3NhcnkgdG8gd29yayBhcm91bmQgYSBidWcgaW5cbiAgICAgICAgICAvLyBPcGVyYSA8PSA3LjU0dTIgd2hlcmUgYDAgPT0gLTBgLCBidXQgYFN0cmluZygtMCkgIT09IFwiMFwiYC5cbiAgICAgICAgICByZXR1cm4gKGxlYWRpbmdaZXJvZXMgKyAodmFsdWUgfHwgMCkpLnNsaWNlKC13aWR0aCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IERvdWJsZS1xdW90ZXMgYSBzdHJpbmcgYHZhbHVlYCwgcmVwbGFjaW5nIGFsbCBBU0NJSSBjb250cm9sXG4gICAgICAgIC8vIGNoYXJhY3RlcnMgKGNoYXJhY3RlcnMgd2l0aCBjb2RlIHVuaXQgdmFsdWVzIGJldHdlZW4gMCBhbmQgMzEpIHdpdGhcbiAgICAgICAgLy8gdGhlaXIgZXNjYXBlZCBlcXVpdmFsZW50cy4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGVcbiAgICAgICAgLy8gYFF1b3RlKHZhbHVlKWAgb3BlcmF0aW9uIGRlZmluZWQgaW4gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMy5cbiAgICAgICAgdmFyIHVuaWNvZGVQcmVmaXggPSBcIlxcXFx1MDBcIjtcbiAgICAgICAgdmFyIHF1b3RlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9ICdcIicsIGluZGV4ID0gMCwgbGVuZ3RoID0gdmFsdWUubGVuZ3RoLCB1c2VDaGFySW5kZXggPSAhY2hhckluZGV4QnVnZ3kgfHwgbGVuZ3RoID4gMTA7XG4gICAgICAgICAgdmFyIHN5bWJvbHMgPSB1c2VDaGFySW5kZXggJiYgKGNoYXJJbmRleEJ1Z2d5ID8gdmFsdWUuc3BsaXQoXCJcIikgOiB2YWx1ZSk7XG4gICAgICAgICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICB2YXIgY2hhckNvZGUgPSB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgaXMgYSBjb250cm9sIGNoYXJhY3RlciwgYXBwZW5kIGl0cyBVbmljb2RlIG9yXG4gICAgICAgICAgICAvLyBzaG9ydGhhbmQgZXNjYXBlIHNlcXVlbmNlOyBvdGhlcndpc2UsIGFwcGVuZCB0aGUgY2hhcmFjdGVyIGFzLWlzLlxuICAgICAgICAgICAgc3dpdGNoIChjaGFyQ29kZSkge1xuICAgICAgICAgICAgICBjYXNlIDg6IGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMjogY2FzZSAxMzogY2FzZSAzNDogY2FzZSA5MjpcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gRXNjYXBlc1tjaGFyQ29kZV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB1bmljb2RlUHJlZml4ICsgdG9QYWRkZWRTdHJpbmcoMiwgY2hhckNvZGUudG9TdHJpbmcoMTYpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gdXNlQ2hhckluZGV4ID8gc3ltYm9sc1tpbmRleF0gOiB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ1wiJztcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmVjdXJzaXZlbHkgc2VyaWFsaXplcyBhbiBvYmplY3QuIEltcGxlbWVudHMgdGhlXG4gICAgICAgIC8vIGBTdHIoa2V5LCBob2xkZXIpYCwgYEpPKHZhbHVlKWAsIGFuZCBgSkEodmFsdWUpYCBvcGVyYXRpb25zLlxuICAgICAgICB2YXIgc2VyaWFsaXplID0gZnVuY3Rpb24gKHByb3BlcnR5LCBvYmplY3QsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCB3aGl0ZXNwYWNlLCBpbmRlbnRhdGlvbiwgc3RhY2spIHtcbiAgICAgICAgICB2YXIgdmFsdWUsIGNsYXNzTmFtZSwgeWVhciwgbW9udGgsIGRhdGUsIHRpbWUsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIHJlc3VsdHMsIGVsZW1lbnQsIGluZGV4LCBsZW5ndGgsIHByZWZpeCwgcmVzdWx0O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBOZWNlc3NhcnkgZm9yIGhvc3Qgb2JqZWN0IHN1cHBvcnQuXG4gICAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lID0gZ2V0Q2xhc3MuY2FsbCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IGRhdGVDbGFzcyAmJiAhaXNQcm9wZXJ0eS5jYWxsKHZhbHVlLCBcInRvSlNPTlwiKSkge1xuICAgICAgICAgICAgICBpZiAodmFsdWUgPiAtMSAvIDAgJiYgdmFsdWUgPCAxIC8gMCkge1xuICAgICAgICAgICAgICAgIC8vIERhdGVzIGFyZSBzZXJpYWxpemVkIGFjY29yZGluZyB0byB0aGUgYERhdGUjdG9KU09OYCBtZXRob2RcbiAgICAgICAgICAgICAgICAvLyBzcGVjaWZpZWQgaW4gRVMgNS4xIHNlY3Rpb24gMTUuOS41LjQ0LiBTZWUgc2VjdGlvbiAxNS45LjEuMTVcbiAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIElTTyA4NjAxIGRhdGUgdGltZSBzdHJpbmcgZm9ybWF0LlxuICAgICAgICAgICAgICAgIGlmIChnZXREYXkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIE1hbnVhbGx5IGNvbXB1dGUgdGhlIHllYXIsIG1vbnRoLCBkYXRlLCBob3VycywgbWludXRlcyxcbiAgICAgICAgICAgICAgICAgIC8vIHNlY29uZHMsIGFuZCBtaWxsaXNlY29uZHMgaWYgdGhlIGBnZXRVVEMqYCBtZXRob2RzIGFyZVxuICAgICAgICAgICAgICAgICAgLy8gYnVnZ3kuIEFkYXB0ZWQgZnJvbSBAWWFmZmxlJ3MgYGRhdGUtc2hpbWAgcHJvamVjdC5cbiAgICAgICAgICAgICAgICAgIGRhdGUgPSBmbG9vcih2YWx1ZSAvIDg2NGU1KTtcbiAgICAgICAgICAgICAgICAgIGZvciAoeWVhciA9IGZsb29yKGRhdGUgLyAzNjUuMjQyNSkgKyAxOTcwIC0gMTsgZ2V0RGF5KHllYXIgKyAxLCAwKSA8PSBkYXRlOyB5ZWFyKyspO1xuICAgICAgICAgICAgICAgICAgZm9yIChtb250aCA9IGZsb29yKChkYXRlIC0gZ2V0RGF5KHllYXIsIDApKSAvIDMwLjQyKTsgZ2V0RGF5KHllYXIsIG1vbnRoICsgMSkgPD0gZGF0ZTsgbW9udGgrKyk7XG4gICAgICAgICAgICAgICAgICBkYXRlID0gMSArIGRhdGUgLSBnZXREYXkoeWVhciwgbW9udGgpO1xuICAgICAgICAgICAgICAgICAgLy8gVGhlIGB0aW1lYCB2YWx1ZSBzcGVjaWZpZXMgdGhlIHRpbWUgd2l0aGluIHRoZSBkYXkgKHNlZSBFU1xuICAgICAgICAgICAgICAgICAgLy8gNS4xIHNlY3Rpb24gMTUuOS4xLjIpLiBUaGUgZm9ybXVsYSBgKEEgJSBCICsgQikgJSBCYCBpcyB1c2VkXG4gICAgICAgICAgICAgICAgICAvLyB0byBjb21wdXRlIGBBIG1vZHVsbyBCYCwgYXMgdGhlIGAlYCBvcGVyYXRvciBkb2VzIG5vdFxuICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZCB0byB0aGUgYG1vZHVsb2Agb3BlcmF0aW9uIGZvciBuZWdhdGl2ZSBudW1iZXJzLlxuICAgICAgICAgICAgICAgICAgdGltZSA9ICh2YWx1ZSAlIDg2NGU1ICsgODY0ZTUpICUgODY0ZTU7XG4gICAgICAgICAgICAgICAgICAvLyBUaGUgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBtaWxsaXNlY29uZHMgYXJlIG9idGFpbmVkIGJ5XG4gICAgICAgICAgICAgICAgICAvLyBkZWNvbXBvc2luZyB0aGUgdGltZSB3aXRoaW4gdGhlIGRheS4gU2VlIHNlY3Rpb24gMTUuOS4xLjEwLlxuICAgICAgICAgICAgICAgICAgaG91cnMgPSBmbG9vcih0aW1lIC8gMzZlNSkgJSAyNDtcbiAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBmbG9vcih0aW1lIC8gNmU0KSAlIDYwO1xuICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IGZsb29yKHRpbWUgLyAxZTMpICUgNjA7XG4gICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aW1lICUgMWUzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB5ZWFyID0gdmFsdWUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICAgIG1vbnRoID0gdmFsdWUuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICAgICAgICAgIGRhdGUgPSB2YWx1ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgICAgICAgICAgICBob3VycyA9IHZhbHVlLmdldFVUQ0hvdXJzKCk7XG4gICAgICAgICAgICAgICAgICBtaW51dGVzID0gdmFsdWUuZ2V0VVRDTWludXRlcygpO1xuICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IHZhbHVlLmdldFVUQ1NlY29uZHMoKTtcbiAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IHZhbHVlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTZXJpYWxpemUgZXh0ZW5kZWQgeWVhcnMgY29ycmVjdGx5LlxuICAgICAgICAgICAgICAgIHZhbHVlID0gKHllYXIgPD0gMCB8fCB5ZWFyID49IDFlNCA/ICh5ZWFyIDwgMCA/IFwiLVwiIDogXCIrXCIpICsgdG9QYWRkZWRTdHJpbmcoNiwgeWVhciA8IDAgPyAteWVhciA6IHllYXIpIDogdG9QYWRkZWRTdHJpbmcoNCwgeWVhcikpICtcbiAgICAgICAgICAgICAgICAgIFwiLVwiICsgdG9QYWRkZWRTdHJpbmcoMiwgbW9udGggKyAxKSArIFwiLVwiICsgdG9QYWRkZWRTdHJpbmcoMiwgZGF0ZSkgK1xuICAgICAgICAgICAgICAgICAgLy8gTW9udGhzLCBkYXRlcywgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzIHNob3VsZCBoYXZlIHR3b1xuICAgICAgICAgICAgICAgICAgLy8gZGlnaXRzOyBtaWxsaXNlY29uZHMgc2hvdWxkIGhhdmUgdGhyZWUuXG4gICAgICAgICAgICAgICAgICBcIlRcIiArIHRvUGFkZGVkU3RyaW5nKDIsIGhvdXJzKSArIFwiOlwiICsgdG9QYWRkZWRTdHJpbmcoMiwgbWludXRlcykgKyBcIjpcIiArIHRvUGFkZGVkU3RyaW5nKDIsIHNlY29uZHMpICtcbiAgICAgICAgICAgICAgICAgIC8vIE1pbGxpc2Vjb25kcyBhcmUgb3B0aW9uYWwgaW4gRVMgNS4wLCBidXQgcmVxdWlyZWQgaW4gNS4xLlxuICAgICAgICAgICAgICAgICAgXCIuXCIgKyB0b1BhZGRlZFN0cmluZygzLCBtaWxsaXNlY29uZHMpICsgXCJaXCI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZS50b0pTT04gPT0gXCJmdW5jdGlvblwiICYmICgoY2xhc3NOYW1lICE9IG51bWJlckNsYXNzICYmIGNsYXNzTmFtZSAhPSBzdHJpbmdDbGFzcyAmJiBjbGFzc05hbWUgIT0gYXJyYXlDbGFzcykgfHwgaXNQcm9wZXJ0eS5jYWxsKHZhbHVlLCBcInRvSlNPTlwiKSkpIHtcbiAgICAgICAgICAgICAgLy8gUHJvdG90eXBlIDw9IDEuNi4xIGFkZHMgbm9uLXN0YW5kYXJkIGB0b0pTT05gIG1ldGhvZHMgdG8gdGhlXG4gICAgICAgICAgICAgIC8vIGBOdW1iZXJgLCBgU3RyaW5nYCwgYERhdGVgLCBhbmQgYEFycmF5YCBwcm90b3R5cGVzLiBKU09OIDNcbiAgICAgICAgICAgICAgLy8gaWdub3JlcyBhbGwgYHRvSlNPTmAgbWV0aG9kcyBvbiB0aGVzZSBvYmplY3RzIHVubGVzcyB0aGV5IGFyZVxuICAgICAgICAgICAgICAvLyBkZWZpbmVkIGRpcmVjdGx5IG9uIGFuIGluc3RhbmNlLlxuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gSWYgYSByZXBsYWNlbWVudCBmdW5jdGlvbiB3YXMgcHJvdmlkZWQsIGNhbGwgaXQgdG8gb2J0YWluIHRoZSB2YWx1ZVxuICAgICAgICAgICAgLy8gZm9yIHNlcmlhbGl6YXRpb24uXG4gICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrLmNhbGwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2xhc3NOYW1lID0gZ2V0Q2xhc3MuY2FsbCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBib29sZWFuQ2xhc3MpIHtcbiAgICAgICAgICAgIC8vIEJvb2xlYW5zIGFyZSByZXByZXNlbnRlZCBsaXRlcmFsbHkuXG4gICAgICAgICAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IG51bWJlckNsYXNzKSB7XG4gICAgICAgICAgICAvLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5pdGUuIGBJbmZpbml0eWAgYW5kIGBOYU5gIGFyZSBzZXJpYWxpemVkIGFzXG4gICAgICAgICAgICAvLyBgXCJudWxsXCJgLlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID4gLTEgLyAwICYmIHZhbHVlIDwgMSAvIDAgPyBcIlwiICsgdmFsdWUgOiBcIm51bGxcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSA9PSBzdHJpbmdDbGFzcykge1xuICAgICAgICAgICAgLy8gU3RyaW5ncyBhcmUgZG91YmxlLXF1b3RlZCBhbmQgZXNjYXBlZC5cbiAgICAgICAgICAgIHJldHVybiBxdW90ZShcIlwiICsgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXJpYWxpemUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGlzIGlzIGEgbGluZWFyIHNlYXJjaDsgcGVyZm9ybWFuY2VcbiAgICAgICAgICAgIC8vIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiB1bmlxdWUgbmVzdGVkIG9iamVjdHMuXG4gICAgICAgICAgICBmb3IgKGxlbmd0aCA9IHN0YWNrLmxlbmd0aDsgbGVuZ3RoLS07KSB7XG4gICAgICAgICAgICAgIGlmIChzdGFja1tsZW5ndGhdID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIEN5Y2xpYyBzdHJ1Y3R1cmVzIGNhbm5vdCBiZSBzZXJpYWxpemVkIGJ5IGBKU09OLnN0cmluZ2lmeWAuXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAgICAgICAgIHN0YWNrLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgY3VycmVudCBpbmRlbnRhdGlvbiBsZXZlbCBhbmQgaW5kZW50IG9uZSBhZGRpdGlvbmFsIGxldmVsLlxuICAgICAgICAgICAgcHJlZml4ID0gaW5kZW50YXRpb247XG4gICAgICAgICAgICBpbmRlbnRhdGlvbiArPSB3aGl0ZXNwYWNlO1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBhcnJheUNsYXNzKSB7XG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNlcmlhbGl6ZSBhcnJheSBlbGVtZW50cy5cbiAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gc2VyaWFsaXplKGluZGV4LCB2YWx1ZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIGluZGVudGF0aW9uLCBzdGFjayk7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVsZW1lbnQgPT09IHVuZGVmID8gXCJudWxsXCIgOiBlbGVtZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRzLmxlbmd0aCA/ICh3aGl0ZXNwYWNlID8gXCJbXFxuXCIgKyBpbmRlbnRhdGlvbiArIHJlc3VsdHMuam9pbihcIixcXG5cIiArIGluZGVudGF0aW9uKSArIFwiXFxuXCIgKyBwcmVmaXggKyBcIl1cIiA6IChcIltcIiArIHJlc3VsdHMuam9pbihcIixcIikgKyBcIl1cIikpIDogXCJbXVwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgc2VyaWFsaXplIG9iamVjdCBtZW1iZXJzLiBNZW1iZXJzIGFyZSBzZWxlY3RlZCBmcm9tXG4gICAgICAgICAgICAgIC8vIGVpdGhlciBhIHVzZXItc3BlY2lmaWVkIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMsIG9yIHRoZSBvYmplY3RcbiAgICAgICAgICAgICAgLy8gaXRzZWxmLlxuICAgICAgICAgICAgICBmb3JFYWNoKHByb3BlcnRpZXMgfHwgdmFsdWUsIGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gc2VyaWFsaXplKHByb3BlcnR5LCB2YWx1ZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIGluZGVudGF0aW9uLCBzdGFjayk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT09IHVuZGVmKSB7XG4gICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMzogXCJJZiBgZ2FwYCB7d2hpdGVzcGFjZX1cbiAgICAgICAgICAgICAgICAgIC8vIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgYG1lbWJlcmAge3F1b3RlKHByb3BlcnR5KSArIFwiOlwifVxuICAgICAgICAgICAgICAgICAgLy8gYmUgdGhlIGNvbmNhdGVuYXRpb24gb2YgYG1lbWJlcmAgYW5kIHRoZSBgc3BhY2VgIGNoYXJhY3Rlci5cIlxuICAgICAgICAgICAgICAgICAgLy8gVGhlIFwiYHNwYWNlYCBjaGFyYWN0ZXJcIiByZWZlcnMgdG8gdGhlIGxpdGVyYWwgc3BhY2VcbiAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3Rlciwgbm90IHRoZSBgc3BhY2VgIHt3aWR0aH0gYXJndW1lbnQgcHJvdmlkZWQgdG9cbiAgICAgICAgICAgICAgICAgIC8vIGBKU09OLnN0cmluZ2lmeWAuXG4gICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocXVvdGUocHJvcGVydHkpICsgXCI6XCIgKyAod2hpdGVzcGFjZSA/IFwiIFwiIDogXCJcIikgKyBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRzLmxlbmd0aCA/ICh3aGl0ZXNwYWNlID8gXCJ7XFxuXCIgKyBpbmRlbnRhdGlvbiArIHJlc3VsdHMuam9pbihcIixcXG5cIiArIGluZGVudGF0aW9uKSArIFwiXFxuXCIgKyBwcmVmaXggKyBcIn1cIiA6IChcIntcIiArIHJlc3VsdHMuam9pbihcIixcIikgKyBcIn1cIikpIDogXCJ7fVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGUgdHJhdmVyc2VkIG9iamVjdCBzdGFjay5cbiAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUHVibGljOiBgSlNPTi5zdHJpbmdpZnlgLiBTZWUgRVMgNS4xIHNlY3Rpb24gMTUuMTIuMy5cbiAgICAgICAgZXhwb3J0cy5zdHJpbmdpZnkgPSBmdW5jdGlvbiAoc291cmNlLCBmaWx0ZXIsIHdpZHRoKSB7XG4gICAgICAgICAgdmFyIHdoaXRlc3BhY2UsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCBjbGFzc05hbWU7XG4gICAgICAgICAgaWYgKG9iamVjdFR5cGVzW3R5cGVvZiBmaWx0ZXJdICYmIGZpbHRlcikge1xuICAgICAgICAgICAgaWYgKChjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKGZpbHRlcikpID09IGZ1bmN0aW9uQ2xhc3MpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmaWx0ZXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSA9PSBhcnJheUNsYXNzKSB7XG4gICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVzIGFycmF5IGludG8gYSBtYWtlc2hpZnQgc2V0LlxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0gZmlsdGVyLmxlbmd0aCwgdmFsdWU7IGluZGV4IDwgbGVuZ3RoOyB2YWx1ZSA9IGZpbHRlcltpbmRleCsrXSwgKChjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKHZhbHVlKSksIGNsYXNzTmFtZSA9PSBzdHJpbmdDbGFzcyB8fCBjbGFzc05hbWUgPT0gbnVtYmVyQ2xhc3MpICYmIChwcm9wZXJ0aWVzW3ZhbHVlXSA9IDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHdpZHRoKSB7XG4gICAgICAgICAgICBpZiAoKGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwod2lkdGgpKSA9PSBudW1iZXJDbGFzcykge1xuICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBgd2lkdGhgIHRvIGFuIGludGVnZXIgYW5kIGNyZWF0ZSBhIHN0cmluZyBjb250YWluaW5nXG4gICAgICAgICAgICAgIC8vIGB3aWR0aGAgbnVtYmVyIG9mIHNwYWNlIGNoYXJhY3RlcnMuXG4gICAgICAgICAgICAgIGlmICgod2lkdGggLT0gd2lkdGggJSAxKSA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKHdoaXRlc3BhY2UgPSBcIlwiLCB3aWR0aCA+IDEwICYmICh3aWR0aCA9IDEwKTsgd2hpdGVzcGFjZS5sZW5ndGggPCB3aWR0aDsgd2hpdGVzcGFjZSArPSBcIiBcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IHN0cmluZ0NsYXNzKSB7XG4gICAgICAgICAgICAgIHdoaXRlc3BhY2UgPSB3aWR0aC5sZW5ndGggPD0gMTAgPyB3aWR0aCA6IHdpZHRoLnNsaWNlKDAsIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gT3BlcmEgPD0gNy41NHUyIGRpc2NhcmRzIHRoZSB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGVtcHR5IHN0cmluZyBrZXlzXG4gICAgICAgICAgLy8gKGBcIlwiYCkgb25seSBpZiB0aGV5IGFyZSB1c2VkIGRpcmVjdGx5IHdpdGhpbiBhbiBvYmplY3QgbWVtYmVyIGxpc3RcbiAgICAgICAgICAvLyAoZS5nLiwgYCEoXCJcIiBpbiB7IFwiXCI6IDF9KWApLlxuICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoXCJcIiwgKHZhbHVlID0ge30sIHZhbHVlW1wiXCJdID0gc291cmNlLCB2YWx1ZSksIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCB3aGl0ZXNwYWNlLCBcIlwiLCBbXSk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFB1YmxpYzogUGFyc2VzIGEgSlNPTiBzb3VyY2Ugc3RyaW5nLlxuICAgICAgaWYgKCFoYXMoXCJqc29uLXBhcnNlXCIpKSB7XG4gICAgICAgIHZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXG4gICAgICAgIC8vIEludGVybmFsOiBBIG1hcCBvZiBlc2NhcGVkIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgdGhlaXIgdW5lc2NhcGVkXG4gICAgICAgIC8vIGVxdWl2YWxlbnRzLlxuICAgICAgICB2YXIgVW5lc2NhcGVzID0ge1xuICAgICAgICAgIDkyOiBcIlxcXFxcIixcbiAgICAgICAgICAzNDogJ1wiJyxcbiAgICAgICAgICA0NzogXCIvXCIsXG4gICAgICAgICAgOTg6IFwiXFxiXCIsXG4gICAgICAgICAgMTE2OiBcIlxcdFwiLFxuICAgICAgICAgIDExMDogXCJcXG5cIixcbiAgICAgICAgICAxMDI6IFwiXFxmXCIsXG4gICAgICAgICAgMTE0OiBcIlxcclwiXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFN0b3JlcyB0aGUgcGFyc2VyIHN0YXRlLlxuICAgICAgICB2YXIgSW5kZXgsIFNvdXJjZTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmVzZXRzIHRoZSBwYXJzZXIgc3RhdGUgYW5kIHRocm93cyBhIGBTeW50YXhFcnJvcmAuXG4gICAgICAgIHZhciBhYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBJbmRleCA9IFNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgdGhyb3cgU3ludGF4RXJyb3IoKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmV0dXJucyB0aGUgbmV4dCB0b2tlbiwgb3IgYFwiJFwiYCBpZiB0aGUgcGFyc2VyIGhhcyByZWFjaGVkXG4gICAgICAgIC8vIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBzdHJpbmcuIEEgdG9rZW4gbWF5IGJlIGEgc3RyaW5nLCBudW1iZXIsIGBudWxsYFxuICAgICAgICAvLyBsaXRlcmFsLCBvciBCb29sZWFuIGxpdGVyYWwuXG4gICAgICAgIHZhciBsZXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIHNvdXJjZSA9IFNvdXJjZSwgbGVuZ3RoID0gc291cmNlLmxlbmd0aCwgdmFsdWUsIGJlZ2luLCBwb3NpdGlvbiwgaXNTaWduZWQsIGNoYXJDb2RlO1xuICAgICAgICAgIHdoaWxlIChJbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7XG4gICAgICAgICAgICAgIGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHdoaXRlc3BhY2UgdG9rZW5zLCBpbmNsdWRpbmcgdGFicywgY2FycmlhZ2UgcmV0dXJucywgbGluZVxuICAgICAgICAgICAgICAgIC8vIGZlZWRzLCBhbmQgc3BhY2UgY2hhcmFjdGVycy5cbiAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDEyMzogY2FzZSAxMjU6IGNhc2UgOTE6IGNhc2UgOTM6IGNhc2UgNTg6IGNhc2UgNDQ6XG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgYSBwdW5jdHVhdG9yIHRva2VuIChge2AsIGB9YCwgYFtgLCBgXWAsIGA6YCwgb3IgYCxgKSBhdFxuICAgICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuICAgICAgICAgICAgICAgIHZhbHVlID0gY2hhckluZGV4QnVnZ3kgPyBzb3VyY2UuY2hhckF0KEluZGV4KSA6IHNvdXJjZVtJbmRleF07XG4gICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICAgICAgLy8gYFwiYCBkZWxpbWl0cyBhIEpTT04gc3RyaW5nOyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNoYXJhY3RlciBhbmRcbiAgICAgICAgICAgICAgICAvLyBiZWdpbiBwYXJzaW5nIHRoZSBzdHJpbmcuIFN0cmluZyB0b2tlbnMgYXJlIHByZWZpeGVkIHdpdGggdGhlXG4gICAgICAgICAgICAgICAgLy8gc2VudGluZWwgYEBgIGNoYXJhY3RlciB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20gcHVuY3R1YXRvcnMgYW5kXG4gICAgICAgICAgICAgICAgLy8gZW5kLW9mLXN0cmluZyB0b2tlbnMuXG4gICAgICAgICAgICAgICAgZm9yICh2YWx1ZSA9IFwiQFwiLCBJbmRleCsrOyBJbmRleCA8IGxlbmd0aDspIHtcbiAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVW5lc2NhcGVkIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycyAodGhvc2Ugd2l0aCBhIGNvZGUgdW5pdFxuICAgICAgICAgICAgICAgICAgICAvLyBsZXNzIHRoYW4gdGhlIHNwYWNlIGNoYXJhY3RlcikgYXJlIG5vdCBwZXJtaXR0ZWQuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYXJDb2RlID09IDkyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgcmV2ZXJzZSBzb2xpZHVzIChgXFxgKSBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIGFuIGVzY2FwZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbCBjaGFyYWN0ZXIgKGluY2x1ZGluZyBgXCJgLCBgXFxgLCBhbmQgYC9gKSBvciBVbmljb2RlXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaGFyQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTI6IGNhc2UgMzQ6IGNhc2UgNDc6IGNhc2UgOTg6IGNhc2UgMTE2OiBjYXNlIDExMDogY2FzZSAxMDI6IGNhc2UgMTE0OlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2aXZlIGVzY2FwZWQgY29udHJvbCBjaGFyYWN0ZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gVW5lc2NhcGVzW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDExNzpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGBcXHVgIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYSBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgdmFsaWRhdGUgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VyLWRpZ2l0IGNvZGUgcG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiA9ICsrSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHBvc2l0aW9uID0gSW5kZXggKyA0OyBJbmRleCA8IHBvc2l0aW9uOyBJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHZhbGlkIHNlcXVlbmNlIGNvbXByaXNlcyBmb3VyIGhleGRpZ2l0cyAoY2FzZS1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5zZW5zaXRpdmUpIHRoYXQgZm9ybSBhIHNpbmdsZSBoZXhhZGVjaW1hbCB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcgfHwgY2hhckNvZGUgPj0gOTcgJiYgY2hhckNvZGUgPD0gMTAyIHx8IGNoYXJDb2RlID49IDY1ICYmIGNoYXJDb2RlIDw9IDcwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludmFsaWQgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2aXZlIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGZyb21DaGFyQ29kZShcIjB4XCIgKyBzb3VyY2Uuc2xpY2UoYmVnaW4sIEluZGV4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UuXG4gICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gMzQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBBbiB1bmVzY2FwZWQgZG91YmxlLXF1b3RlIGNoYXJhY3RlciBtYXJrcyB0aGUgZW5kIG9mIHRoZVxuICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cmluZy5cbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW4gPSBJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgLy8gT3B0aW1pemUgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBhIHN0cmluZyBpcyB2YWxpZC5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJDb2RlID49IDMyICYmIGNoYXJDb2RlICE9IDkyICYmIGNoYXJDb2RlICE9IDM0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIHN0cmluZyBhcy1pcy5cbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gc291cmNlLnNsaWNlKGJlZ2luLCBJbmRleCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChJbmRleCkgPT0gMzQpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgY2hhcmFjdGVyIGFuZCByZXR1cm4gdGhlIHJldml2ZWQgc3RyaW5nLlxuICAgICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVW50ZXJtaW5hdGVkIHN0cmluZy5cbiAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIC8vIFBhcnNlIG51bWJlcnMgYW5kIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIGJlZ2luID0gSW5kZXg7XG4gICAgICAgICAgICAgICAgLy8gQWR2YW5jZSBwYXN0IHRoZSBuZWdhdGl2ZSBzaWduLCBpZiBvbmUgaXMgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSA0NSkge1xuICAgICAgICAgICAgICAgICAgaXNTaWduZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgYW4gaW50ZWdlciBvciBmbG9hdGluZy1wb2ludCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpIHtcbiAgICAgICAgICAgICAgICAgIC8vIExlYWRpbmcgemVyb2VzIGFyZSBpbnRlcnByZXRlZCBhcyBvY3RhbCBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSA0OCAmJiAoKGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXggKyAxKSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsIG9jdGFsIGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpc1NpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGhlIGludGVnZXIgY29tcG9uZW50LlxuICAgICAgICAgICAgICAgICAgZm9yICg7IEluZGV4IDwgbGVuZ3RoICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCkpLCBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nyk7IEluZGV4KyspO1xuICAgICAgICAgICAgICAgICAgLy8gRmxvYXRzIGNhbm5vdCBjb250YWluIGEgbGVhZGluZyBkZWNpbWFsIHBvaW50OyBob3dldmVyLCB0aGlzXG4gICAgICAgICAgICAgICAgICAvLyBjYXNlIGlzIGFscmVhZHkgYWNjb3VudGVkIGZvciBieSB0aGUgcGFyc2VyLlxuICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KSA9PSA0Nikge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9ICsrSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIHRoZSBkZWNpbWFsIGNvbXBvbmVudC5cbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IHBvc2l0aW9uIDwgbGVuZ3RoICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChwb3NpdGlvbikpLCBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nyk7IHBvc2l0aW9uKyspO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsIHRyYWlsaW5nIGRlY2ltYWwuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBJbmRleCA9IHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgZXhwb25lbnRzLiBUaGUgYGVgIGRlbm90aW5nIHRoZSBleHBvbmVudCBpc1xuICAgICAgICAgICAgICAgICAgLy8gY2FzZS1pbnNlbnNpdGl2ZS5cbiAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDEwMSB8fCBjaGFyQ29kZSA9PSA2OSkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIHBhc3QgdGhlIHNpZ24gZm9sbG93aW5nIHRoZSBleHBvbmVudCwgaWYgb25lIGlzXG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDQzIHx8IGNoYXJDb2RlID09IDQ1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBQYXJzZSB0aGUgZXhwb25lbnRpYWwgY29tcG9uZW50LlxuICAgICAgICAgICAgICAgICAgICBmb3IgKHBvc2l0aW9uID0gSW5kZXg7IHBvc2l0aW9uIDwgbGVuZ3RoICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChwb3NpdGlvbikpLCBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nyk7IHBvc2l0aW9uKyspO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsIGVtcHR5IGV4cG9uZW50LlxuICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgSW5kZXggPSBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIENvZXJjZSB0aGUgcGFyc2VkIHZhbHVlIHRvIGEgSmF2YVNjcmlwdCBudW1iZXIuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gK3NvdXJjZS5zbGljZShiZWdpbiwgSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBIG5lZ2F0aXZlIHNpZ24gbWF5IG9ubHkgcHJlY2VkZSBudW1iZXJzLlxuICAgICAgICAgICAgICAgIGlmIChpc1NpZ25lZCkge1xuICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYHRydWVgLCBgZmFsc2VgLCBhbmQgYG51bGxgIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uuc2xpY2UoSW5kZXgsIEluZGV4ICsgNCkgPT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgIEluZGV4ICs9IDQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZS5zbGljZShJbmRleCwgSW5kZXggKyA1KSA9PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgICAgICAgIEluZGV4ICs9IDU7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2Uuc2xpY2UoSW5kZXgsIEluZGV4ICsgNCkgPT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgICAgIEluZGV4ICs9IDQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVW5yZWNvZ25pemVkIHRva2VuLlxuICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJldHVybiB0aGUgc2VudGluZWwgYCRgIGNoYXJhY3RlciBpZiB0aGUgcGFyc2VyIGhhcyByZWFjaGVkIHRoZSBlbmRcbiAgICAgICAgICAvLyBvZiB0aGUgc291cmNlIHN0cmluZy5cbiAgICAgICAgICByZXR1cm4gXCIkXCI7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFBhcnNlcyBhIEpTT04gYHZhbHVlYCB0b2tlbi5cbiAgICAgICAgdmFyIGdldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHZhciByZXN1bHRzLCBoYXNNZW1iZXJzO1xuICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIiRcIikge1xuICAgICAgICAgICAgLy8gVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQuXG4gICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGlmICgoY2hhckluZGV4QnVnZ3kgPyB2YWx1ZS5jaGFyQXQoMCkgOiB2YWx1ZVswXSkgPT0gXCJAXCIpIHtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzZW50aW5lbCBgQGAgY2hhcmFjdGVyLlxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuc2xpY2UoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBQYXJzZSBvYmplY3QgYW5kIGFycmF5IGxpdGVyYWxzLlxuICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiW1wiKSB7XG4gICAgICAgICAgICAgIC8vIFBhcnNlcyBhIEpTT04gYXJyYXksIHJldHVybmluZyBhIG5ldyBKYXZhU2NyaXB0IGFycmF5LlxuICAgICAgICAgICAgICByZXN1bHRzID0gW107XG4gICAgICAgICAgICAgIGZvciAoOzsgaGFzTWVtYmVycyB8fCAoaGFzTWVtYmVycyA9IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAvLyBBIGNsb3Npbmcgc3F1YXJlIGJyYWNrZXQgbWFya3MgdGhlIGVuZCBvZiB0aGUgYXJyYXkgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJdXCIpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYXJyYXkgbGl0ZXJhbCBjb250YWlucyBlbGVtZW50cywgdGhlIGN1cnJlbnQgdG9rZW5cbiAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUgYSBjb21tYSBzZXBhcmF0aW5nIHRoZSBwcmV2aW91cyBlbGVtZW50IGZyb20gdGhlXG4gICAgICAgICAgICAgICAgLy8gbmV4dC5cbiAgICAgICAgICAgICAgICBpZiAoaGFzTWVtYmVycykge1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiLFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIl1cIikge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdHJhaWxpbmcgYCxgIGluIGFycmF5IGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBgLGAgbXVzdCBzZXBhcmF0ZSBlYWNoIGFycmF5IGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEVsaXNpb25zIGFuZCBsZWFkaW5nIGNvbW1hcyBhcmUgbm90IHBlcm1pdHRlZC5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChnZXQodmFsdWUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gXCJ7XCIpIHtcbiAgICAgICAgICAgICAgLy8gUGFyc2VzIGEgSlNPTiBvYmplY3QsIHJldHVybmluZyBhIG5ldyBKYXZhU2NyaXB0IG9iamVjdC5cbiAgICAgICAgICAgICAgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICBmb3IgKDs7IGhhc01lbWJlcnMgfHwgKGhhc01lbWJlcnMgPSB0cnVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgLy8gQSBjbG9zaW5nIGN1cmx5IGJyYWNlIG1hcmtzIHRoZSBlbmQgb2YgdGhlIG9iamVjdCBsaXRlcmFsLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIn1cIikge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgbGl0ZXJhbCBjb250YWlucyBtZW1iZXJzLCB0aGUgY3VycmVudCB0b2tlblxuICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBhIGNvbW1hIHNlcGFyYXRvci5cbiAgICAgICAgICAgICAgICBpZiAoaGFzTWVtYmVycykge1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiLFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIn1cIikge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdHJhaWxpbmcgYCxgIGluIG9iamVjdCBsaXRlcmFsLlxuICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgYCxgIG11c3Qgc2VwYXJhdGUgZWFjaCBvYmplY3QgbWVtYmVyLlxuICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBMZWFkaW5nIGNvbW1hcyBhcmUgbm90IHBlcm1pdHRlZCwgb2JqZWN0IHByb3BlcnR5IG5hbWVzIG11c3QgYmVcbiAgICAgICAgICAgICAgICAvLyBkb3VibGUtcXVvdGVkIHN0cmluZ3MsIGFuZCBhIGA6YCBtdXN0IHNlcGFyYXRlIGVhY2ggcHJvcGVydHlcbiAgICAgICAgICAgICAgICAvLyBuYW1lIGFuZCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIgfHwgdHlwZW9mIHZhbHVlICE9IFwic3RyaW5nXCIgfHwgKGNoYXJJbmRleEJ1Z2d5ID8gdmFsdWUuY2hhckF0KDApIDogdmFsdWVbMF0pICE9IFwiQFwiIHx8IGxleCgpICE9IFwiOlwiKSB7XG4gICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW3ZhbHVlLnNsaWNlKDEpXSA9IGdldChsZXgoKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBVbmV4cGVjdGVkIHRva2VuIGVuY291bnRlcmVkLlxuICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBVcGRhdGVzIGEgdHJhdmVyc2VkIG9iamVjdCBtZW1iZXIuXG4gICAgICAgIHZhciB1cGRhdGUgPSBmdW5jdGlvbiAoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgZWxlbWVudCA9IHdhbGsoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spO1xuICAgICAgICAgIGlmIChlbGVtZW50ID09PSB1bmRlZikge1xuICAgICAgICAgICAgZGVsZXRlIHNvdXJjZVtwcm9wZXJ0eV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNvdXJjZVtwcm9wZXJ0eV0gPSBlbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmVjdXJzaXZlbHkgdHJhdmVyc2VzIGEgcGFyc2VkIEpTT04gb2JqZWN0LCBpbnZva2luZyB0aGVcbiAgICAgICAgLy8gYGNhbGxiYWNrYCBmdW5jdGlvbiBmb3IgZWFjaCB2YWx1ZS4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGVcbiAgICAgICAgLy8gYFdhbGsoaG9sZGVyLCBuYW1lKWAgb3BlcmF0aW9uIGRlZmluZWQgaW4gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMi5cbiAgICAgICAgdmFyIHdhbGsgPSBmdW5jdGlvbiAoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBzb3VyY2VbcHJvcGVydHldLCBsZW5ndGg7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAvLyBgZm9yRWFjaGAgY2FuJ3QgYmUgdXNlZCB0byB0cmF2ZXJzZSBhbiBhcnJheSBpbiBPcGVyYSA8PSA4LjU0XG4gICAgICAgICAgICAvLyBiZWNhdXNlIGl0cyBgT2JqZWN0I2hhc093blByb3BlcnR5YCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGBmYWxzZWBcbiAgICAgICAgICAgIC8vIGZvciBhcnJheSBpbmRpY2VzIChlLmcuLCBgIVsxLCAyLCAzXS5oYXNPd25Qcm9wZXJ0eShcIjBcIilgKS5cbiAgICAgICAgICAgIGlmIChnZXRDbGFzcy5jYWxsKHZhbHVlKSA9PSBhcnJheUNsYXNzKSB7XG4gICAgICAgICAgICAgIGZvciAobGVuZ3RoID0gdmFsdWUubGVuZ3RoOyBsZW5ndGgtLTspIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUodmFsdWUsIGxlbmd0aCwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUodmFsdWUsIHByb3BlcnR5LCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChzb3VyY2UsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUHVibGljOiBgSlNPTi5wYXJzZWAuIFNlZSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4yLlxuICAgICAgICBleHBvcnRzLnBhcnNlID0gZnVuY3Rpb24gKHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgcmVzdWx0LCB2YWx1ZTtcbiAgICAgICAgICBJbmRleCA9IDA7XG4gICAgICAgICAgU291cmNlID0gXCJcIiArIHNvdXJjZTtcbiAgICAgICAgICByZXN1bHQgPSBnZXQobGV4KCkpO1xuICAgICAgICAgIC8vIElmIGEgSlNPTiBzdHJpbmcgY29udGFpbnMgbXVsdGlwbGUgdG9rZW5zLCBpdCBpcyBpbnZhbGlkLlxuICAgICAgICAgIGlmIChsZXgoKSAhPSBcIiRcIikge1xuICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmVzZXQgdGhlIHBhcnNlciBzdGF0ZS5cbiAgICAgICAgICBJbmRleCA9IFNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrICYmIGdldENsYXNzLmNhbGwoY2FsbGJhY2spID09IGZ1bmN0aW9uQ2xhc3MgPyB3YWxrKCh2YWx1ZSA9IHt9LCB2YWx1ZVtcIlwiXSA9IHJlc3VsdCwgdmFsdWUpLCBcIlwiLCBjYWxsYmFjaykgOiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0c1tcInJ1bkluQ29udGV4dFwiXSA9IHJ1bkluQ29udGV4dDtcbiAgICByZXR1cm4gZXhwb3J0cztcbiAgfVxuXG4gIGlmIChmcmVlRXhwb3J0cyAmJiAhaXNMb2FkZXIpIHtcbiAgICAvLyBFeHBvcnQgZm9yIENvbW1vbkpTIGVudmlyb25tZW50cy5cbiAgICBydW5JbkNvbnRleHQocm9vdCwgZnJlZUV4cG9ydHMpO1xuICB9IGVsc2Uge1xuICAgIC8vIEV4cG9ydCBmb3Igd2ViIGJyb3dzZXJzIGFuZCBKYXZhU2NyaXB0IGVuZ2luZXMuXG4gICAgdmFyIG5hdGl2ZUpTT04gPSByb290LkpTT04sXG4gICAgICAgIHByZXZpb3VzSlNPTiA9IHJvb3RbXCJKU09OM1wiXSxcbiAgICAgICAgaXNSZXN0b3JlZCA9IGZhbHNlO1xuXG4gICAgdmFyIEpTT04zID0gcnVuSW5Db250ZXh0KHJvb3QsIChyb290W1wiSlNPTjNcIl0gPSB7XG4gICAgICAvLyBQdWJsaWM6IFJlc3RvcmVzIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgZ2xvYmFsIGBKU09OYCBvYmplY3QgYW5kXG4gICAgICAvLyByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBgSlNPTjNgIG9iamVjdC5cbiAgICAgIFwibm9Db25mbGljdFwiOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghaXNSZXN0b3JlZCkge1xuICAgICAgICAgIGlzUmVzdG9yZWQgPSB0cnVlO1xuICAgICAgICAgIHJvb3QuSlNPTiA9IG5hdGl2ZUpTT047XG4gICAgICAgICAgcm9vdFtcIkpTT04zXCJdID0gcHJldmlvdXNKU09OO1xuICAgICAgICAgIG5hdGl2ZUpTT04gPSBwcmV2aW91c0pTT04gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OMztcbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgICByb290LkpTT04gPSB7XG4gICAgICBcInBhcnNlXCI6IEpTT04zLnBhcnNlLFxuICAgICAgXCJzdHJpbmdpZnlcIjogSlNPTjMuc3RyaW5naWZ5XG4gICAgfTtcbiAgfVxuXG4gIC8vIEV4cG9ydCBmb3IgYXN5bmNocm9ub3VzIG1vZHVsZSBsb2FkZXJzLlxuICBpZiAoaXNMb2FkZXIpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEpTT04zO1xuICAgIH0pO1xuICB9XG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrLWdlbmVyYXRvcicsIFsnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc3RhY2tmcmFtZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrR2VuZXJhdG9yID0gZmFjdG9yeShyb290LlN0YWNrRnJhbWUpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24oU3RhY2tGcmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGJhY2t0cmFjZTogZnVuY3Rpb24gU3RhY2tHZW5lcmF0b3IkJGJhY2t0cmFjZShvcHRzKSB7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICAgICAgICAgIHZhciBtYXhTdGFja1NpemUgPSAxMDtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3B0cy5tYXhTdGFja1NpemUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgbWF4U3RhY2tTaXplID0gb3B0cy5tYXhTdGFja1NpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjdXJyID0gYXJndW1lbnRzLmNhbGxlZTtcbiAgICAgICAgICAgIHdoaWxlIChjdXJyICYmIHN0YWNrLmxlbmd0aCA8IG1heFN0YWNrU2l6ZSAmJiBjdXJyWydhcmd1bWVudHMnXSkge1xuICAgICAgICAgICAgICAgIC8vIEFsbG93IFY4IG9wdGltaXphdGlvbnNcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShjdXJyWydhcmd1bWVudHMnXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gY3VyclsnYXJndW1lbnRzJ11baV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgvZnVuY3Rpb24oPzpcXHMrKFtcXHckXSspKStcXHMqXFwoLy50ZXN0KGN1cnIudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh7ZnVuY3Rpb25OYW1lOiBSZWdFeHAuJDEgfHwgdW5kZWZpbmVkLCBhcmdzOiBhcmdzfSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3IFN0YWNrRnJhbWUoe2FyZ3M6IGFyZ3N9KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIuY2FsbGVyO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0YWNrO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrZnJhbWUnLCBbXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja0ZyYW1lID0gZmFjdG9yeSgpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24oKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIGZ1bmN0aW9uIF9pc051bWJlcihuKSB7XG4gICAgICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2NhcGl0YWxpemUoc3RyKSB7XG4gICAgICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9nZXR0ZXIocCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1twXTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgYm9vbGVhblByb3BzID0gWydpc0NvbnN0cnVjdG9yJywgJ2lzRXZhbCcsICdpc05hdGl2ZScsICdpc1RvcGxldmVsJ107XG4gICAgdmFyIG51bWVyaWNQcm9wcyA9IFsnY29sdW1uTnVtYmVyJywgJ2xpbmVOdW1iZXInXTtcbiAgICB2YXIgc3RyaW5nUHJvcHMgPSBbJ2ZpbGVOYW1lJywgJ2Z1bmN0aW9uTmFtZScsICdzb3VyY2UnXTtcbiAgICB2YXIgYXJyYXlQcm9wcyA9IFsnYXJncyddO1xuXG4gICAgdmFyIHByb3BzID0gYm9vbGVhblByb3BzLmNvbmNhdChudW1lcmljUHJvcHMsIHN0cmluZ1Byb3BzLCBhcnJheVByb3BzKTtcblxuICAgIGZ1bmN0aW9uIFN0YWNrRnJhbWUob2JqKSB7XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3BzW2ldKSAmJiBvYmpbcHJvcHNbaV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snc2V0JyArIF9jYXBpdGFsaXplKHByb3BzW2ldKV0ob2JqW3Byb3BzW2ldXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgU3RhY2tGcmFtZS5wcm90b3R5cGUgPSB7XG4gICAgICAgIGdldEFyZ3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJncztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0QXJnczogZnVuY3Rpb24odikge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSAhPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3MgbXVzdCBiZSBhbiBBcnJheScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcmdzID0gdjtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRFdmFsT3JpZ2luOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2YWxPcmlnaW47XG4gICAgICAgIH0sXG4gICAgICAgIHNldEV2YWxPcmlnaW46IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgU3RhY2tGcmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZhbE9yaWdpbiA9IHY7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2YWxPcmlnaW4gPSBuZXcgU3RhY2tGcmFtZSh2KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXZhbCBPcmlnaW4gbXVzdCBiZSBhbiBPYmplY3Qgb3IgU3RhY2tGcmFtZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0aGlzLmdldEZ1bmN0aW9uTmFtZSgpIHx8ICd7YW5vbnltb3VzfSc7XG4gICAgICAgICAgICB2YXIgYXJncyA9ICcoJyArICh0aGlzLmdldEFyZ3MoKSB8fCBbXSkuam9pbignLCcpICsgJyknO1xuICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gdGhpcy5nZXRGaWxlTmFtZSgpID8gKCdAJyArIHRoaXMuZ2V0RmlsZU5hbWUoKSkgOiAnJztcbiAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gX2lzTnVtYmVyKHRoaXMuZ2V0TGluZU51bWJlcigpKSA/ICgnOicgKyB0aGlzLmdldExpbmVOdW1iZXIoKSkgOiAnJztcbiAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSBfaXNOdW1iZXIodGhpcy5nZXRDb2x1bW5OdW1iZXIoKSkgPyAoJzonICsgdGhpcy5nZXRDb2x1bW5OdW1iZXIoKSkgOiAnJztcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbk5hbWUgKyBhcmdzICsgZmlsZU5hbWUgKyBsaW5lTnVtYmVyICsgY29sdW1uTnVtYmVyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9vbGVhblByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUoYm9vbGVhblByb3BzW2ldKV0gPSBfZ2V0dGVyKGJvb2xlYW5Qcm9wc1tpXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUoYm9vbGVhblByb3BzW2ldKV0gPSAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gQm9vbGVhbih2KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKGJvb2xlYW5Qcm9wc1tpXSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1lcmljUHJvcHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShudW1lcmljUHJvcHNbal0pXSA9IF9nZXR0ZXIobnVtZXJpY1Byb3BzW2pdKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShudW1lcmljUHJvcHNbal0pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIGlmICghX2lzTnVtYmVyKHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IocCArICcgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gTnVtYmVyKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkobnVtZXJpY1Byb3BzW2pdKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IHN0cmluZ1Byb3BzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUoc3RyaW5nUHJvcHNba10pXSA9IF9nZXR0ZXIoc3RyaW5nUHJvcHNba10pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKHN0cmluZ1Byb3BzW2tdKV0gPSAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gU3RyaW5nKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoc3RyaW5nUHJvcHNba10pO1xuICAgIH1cblxuICAgIHJldHVybiBTdGFja0ZyYW1lO1xufSkpO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3XG4gKiBtZW1iZXIgaXMgTygxKSwgdGVzdGluZyBmb3IgbWVtYmVyc2hpcCBpcyBPKDEpLCBhbmQgZmluZGluZyB0aGUgaW5kZXggb2YgYW5cbiAqIGVsZW1lbnQgaXMgTygxKS4gUmVtb3ZpbmcgZWxlbWVudHMgZnJvbSB0aGUgc2V0IGlzIG5vdCBzdXBwb3J0ZWQuIE9ubHlcbiAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgbWVtYmVyc2hpcC5cbiAqL1xuZnVuY3Rpb24gQXJyYXlTZXQoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8qKlxuICogU3RhdGljIG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gKi9cbkFycmF5U2V0LmZyb21BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X2Zyb21BcnJheShhQXJyYXksIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYUFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgc2V0LmFkZChhQXJyYXlbaV0sIGFBbGxvd0R1cGxpY2F0ZXMpO1xuICB9XG4gIHJldHVybiBzZXQ7XG59O1xuXG4vKipcbiAqIFJldHVybiBob3cgbWFueSB1bmlxdWUgaXRlbXMgYXJlIGluIHRoaXMgQXJyYXlTZXQuIElmIGR1cGxpY2F0ZXMgaGF2ZSBiZWVuXG4gKiBhZGRlZCwgdGhhbiB0aG9zZSBkbyBub3QgY291bnQgdG93YXJkcyB0aGUgc2l6ZS5cbiAqXG4gKiBAcmV0dXJucyBOdW1iZXJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiBBcnJheVNldF9zaXplKCkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fc2V0KS5sZW5ndGg7XG59O1xuXG4vKipcbiAqIEFkZCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoaXMgc2V0LlxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gQXJyYXlTZXRfYWRkKGFTdHIsIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICB2YXIgaXNEdXBsaWNhdGUgPSBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB2YXIgaWR4ID0gdGhpcy5fYXJyYXkubGVuZ3RoO1xuICBpZiAoIWlzRHVwbGljYXRlIHx8IGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICB0aGlzLl9hcnJheS5wdXNoKGFTdHIpO1xuICB9XG4gIGlmICghaXNEdXBsaWNhdGUpIHtcbiAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gIH1cbn07XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIHN0cmluZyBhIG1lbWJlciBvZiB0aGlzIHNldD9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIEFycmF5U2V0X2hhcyhhU3RyKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgcmV0dXJuIGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIGlmIChoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgaW50VG9DaGFyTWFwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcblxuLyoqXG4gKiBFbmNvZGUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMCB0byA2MyB0byBhIHNpbmdsZSBiYXNlIDY0IGRpZ2l0LlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgaWYgKDAgPD0gbnVtYmVyICYmIG51bWJlciA8IGludFRvQ2hhck1hcC5sZW5ndGgpIHtcbiAgICByZXR1cm4gaW50VG9DaGFyTWFwW251bWJlcl07XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogXCIgKyBudW1iZXIpO1xufTtcblxuLyoqXG4gKiBEZWNvZGUgYSBzaW5nbGUgYmFzZSA2NCBjaGFyYWN0ZXIgY29kZSBkaWdpdCB0byBhbiBpbnRlZ2VyLiBSZXR1cm5zIC0xIG9uXG4gKiBmYWlsdXJlLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIChjaGFyQ29kZSkge1xuICB2YXIgYmlnQSA9IDY1OyAgICAgLy8gJ0EnXG4gIHZhciBiaWdaID0gOTA7ICAgICAvLyAnWidcblxuICB2YXIgbGl0dGxlQSA9IDk3OyAgLy8gJ2EnXG4gIHZhciBsaXR0bGVaID0gMTIyOyAvLyAneidcblxuICB2YXIgemVybyA9IDQ4OyAgICAgLy8gJzAnXG4gIHZhciBuaW5lID0gNTc7ICAgICAvLyAnOSdcblxuICB2YXIgcGx1cyA9IDQzOyAgICAgLy8gJysnXG4gIHZhciBzbGFzaCA9IDQ3OyAgICAvLyAnLydcblxuICB2YXIgbGl0dGxlT2Zmc2V0ID0gMjY7XG4gIHZhciBudW1iZXJPZmZzZXQgPSA1MjtcblxuICAvLyAwIC0gMjU6IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXG4gIGlmIChiaWdBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGJpZ1opIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gYmlnQSk7XG4gIH1cblxuICAvLyAyNiAtIDUxOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuICBpZiAobGl0dGxlQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBsaXR0bGVaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGxpdHRsZUEgKyBsaXR0bGVPZmZzZXQpO1xuICB9XG5cbiAgLy8gNTIgLSA2MTogMDEyMzQ1Njc4OVxuICBpZiAoemVybyA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBuaW5lKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIHplcm8gKyBudW1iZXJPZmZzZXQpO1xuICB9XG5cbiAgLy8gNjI6ICtcbiAgaWYgKGNoYXJDb2RlID09IHBsdXMpIHtcbiAgICByZXR1cm4gNjI7XG4gIH1cblxuICAvLyA2MzogL1xuICBpZiAoY2hhckNvZGUgPT0gc2xhc2gpIHtcbiAgICByZXR1cm4gNjM7XG4gIH1cblxuICAvLyBJbnZhbGlkIGJhc2U2NCBkaWdpdC5cbiAgcmV0dXJuIC0xO1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5leHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBSZWN1cnNpdmUgaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaC5cbiAqXG4gKiBAcGFyYW0gYUxvdyBJbmRpY2VzIGhlcmUgYW5kIGxvd2VyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYUhpZ2ggSW5kaWNlcyBoZXJlIGFuZCBoaWdoZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IGJlaW5nIHNlYXJjaGVkIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIG5vbi1lbXB0eSBhcnJheSBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBGdW5jdGlvbiB3aGljaCB0YWtlcyB0d28gZWxlbWVudHMgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgLy9cbiAgLy8gICAxLiBXZSBmaW5kIHRoZSBleGFjdCBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgLy9cbiAgLy8gICAyLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGJ1dCB3ZSBjYW4gcmV0dXJuIHRoZSBpbmRleCBvZlxuICAvLyAgICAgIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudC5cbiAgLy9cbiAgLy8gICAzLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGFuZCB0aGVyZSBpcyBubyBuZXh0LWNsb3Nlc3RcbiAgLy8gICAgICBlbGVtZW50IHRoYW4gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgc28gd2UgcmV0dXJuIC0xLlxuICB2YXIgbWlkID0gTWF0aC5mbG9vcigoYUhpZ2ggLSBhTG93KSAvIDIpICsgYUxvdztcbiAgdmFyIGNtcCA9IGFDb21wYXJlKGFOZWVkbGUsIGFIYXlzdGFja1ttaWRdLCB0cnVlKTtcbiAgaWYgKGNtcCA9PT0gMCkge1xuICAgIC8vIEZvdW5kIHRoZSBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgICByZXR1cm4gbWlkO1xuICB9XG4gIGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGdyZWF0ZXIgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAoYUhpZ2ggLSBtaWQgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgdXBwZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2gobWlkLCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIFRoZSBleGFjdCBuZWVkbGUgZWxlbWVudCB3YXMgbm90IGZvdW5kIGluIHRoaXMgaGF5c3RhY2suIERldGVybWluZSBpZlxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBhSGlnaCA8IGFIYXlzdGFjay5sZW5ndGggPyBhSGlnaCA6IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGxlc3MgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAobWlkIC0gYUxvdyA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSBsb3dlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBtaWQsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYUxvdyA8IDAgPyAtMSA6IGFMb3c7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoIHdoaWNoIHdpbGwgYWx3YXlzIHRyeSBhbmQgcmV0dXJuXG4gKiB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgZWxlbWVudCBpZiB0aGVyZSBpcyBubyBleGFjdCBoaXQuIFRoaXMgaXMgYmVjYXVzZVxuICogbWFwcGluZ3MgYmV0d2VlbiBvcmlnaW5hbCBhbmQgZ2VuZXJhdGVkIGxpbmUvY29sIHBhaXJzIGFyZSBzaW5nbGUgcG9pbnRzLFxuICogYW5kIHRoZXJlIGlzIGFuIGltcGxpY2l0IHJlZ2lvbiBiZXR3ZWVuIGVhY2ggb2YgdGhlbSwgc28gYSBtaXNzIGp1c3QgbWVhbnNcbiAqIHRoYXQgeW91IGFyZW4ndCBvbiB0aGUgdmVyeSBzdGFydCBvZiBhIHJlZ2lvbi5cbiAqXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCB5b3UgYXJlIGxvb2tpbmcgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgYXJyYXkgdGhhdCBpcyBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBuZWVkbGUgYW5kIGFuIGVsZW1lbnQgaW4gdGhlXG4gKiAgICAgYXJyYXkgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5lZWRsZSBpcyBsZXNzXG4gKiAgICAgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgZWxlbWVudCwgcmVzcGVjdGl2ZWx5LlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICovXG5leHBvcnRzLnNlYXJjaCA9IGZ1bmN0aW9uIHNlYXJjaChhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICBpZiAoYUhheXN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHJlY3Vyc2l2ZVNlYXJjaCgtMSwgYUhheXN0YWNrLmxlbmd0aCwgYU5lZWRsZSwgYUhheXN0YWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbXBhcmUsIGFCaWFzIHx8IGV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLy8gV2UgaGF2ZSBmb3VuZCBlaXRoZXIgdGhlIGV4YWN0IGVsZW1lbnQsIG9yIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudCB0aGFuXG4gIC8vIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIHN1Y2hcbiAgLy8gZWxlbWVudC4gTWFrZSBzdXJlIHdlIGFsd2F5cyByZXR1cm4gdGhlIHNtYWxsZXN0IG9mIHRoZXNlLlxuICB3aGlsZSAoaW5kZXggLSAxID49IDApIHtcbiAgICBpZiAoYUNvbXBhcmUoYUhheXN0YWNrW2luZGV4XSwgYUhheXN0YWNrW2luZGV4IC0gMV0sIHRydWUpICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLS1pbmRleDtcbiAgfVxuXG4gIHJldHVybiBpbmRleDtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGdldHRpbmcgdmFsdWVzIGZyb20gcGFyYW1ldGVyL29wdGlvbnNcbiAqIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGFyZ3MgVGhlIG9iamVjdCB3ZSBhcmUgZXh0cmFjdGluZyB2YWx1ZXMgZnJvbVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdlIGFyZSBnZXR0aW5nLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBBbiBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmdcbiAqIGZyb20gdGhlIG9iamVjdC4gSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkIGFuZCB0aGUgcHJvcGVydHkgaXMgbWlzc2luZywgYW5cbiAqIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICovXG5mdW5jdGlvbiBnZXRBcmcoYUFyZ3MsIGFOYW1lLCBhRGVmYXVsdFZhbHVlKSB7XG4gIGlmIChhTmFtZSBpbiBhQXJncykge1xuICAgIHJldHVybiBhQXJnc1thTmFtZV07XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBhRGVmYXVsdFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYU5hbWUgKyAnXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKTtcbiAgfVxufVxuZXhwb3J0cy5nZXRBcmcgPSBnZXRBcmc7XG5cbnZhciB1cmxSZWdleHAgPSAvXig/OihbXFx3K1xcLS5dKyk6KT9cXC9cXC8oPzooXFx3KzpcXHcrKUApPyhbXFx3Ll0qKSg/OjooXFxkKykpPyhcXFMqKSQvO1xudmFyIGRhdGFVcmxSZWdleHAgPSAvXmRhdGE6LitcXCwuKyQvO1xuXG5mdW5jdGlvbiB1cmxQYXJzZShhVXJsKSB7XG4gIHZhciBtYXRjaCA9IGFVcmwubWF0Y2godXJsUmVnZXhwKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NoZW1lOiBtYXRjaFsxXSxcbiAgICBhdXRoOiBtYXRjaFsyXSxcbiAgICBob3N0OiBtYXRjaFszXSxcbiAgICBwb3J0OiBtYXRjaFs0XSxcbiAgICBwYXRoOiBtYXRjaFs1XVxuICB9O1xufVxuZXhwb3J0cy51cmxQYXJzZSA9IHVybFBhcnNlO1xuXG5mdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFyc2VkVXJsKSB7XG4gIHZhciB1cmwgPSAnJztcbiAgaWYgKGFQYXJzZWRVcmwuc2NoZW1lKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuc2NoZW1lICsgJzonO1xuICB9XG4gIHVybCArPSAnLy8nO1xuICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuYXV0aCArICdAJztcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuaG9zdDtcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7XG4gICAgdXJsICs9IFwiOlwiICsgYVBhcnNlZFVybC5wb3J0XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucGF0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnBhdGg7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cbmV4cG9ydHMudXJsR2VuZXJhdGUgPSB1cmxHZW5lcmF0ZTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGF0aCwgb3IgdGhlIHBhdGggcG9ydGlvbiBvZiBhIFVSTDpcbiAqXG4gKiAtIFJlcGxhY2VzIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aCBvbmUgc2xhc2guXG4gKiAtIFJlbW92ZXMgdW5uZWNlc3NhcnkgJy4nIHBhcnRzLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICc8ZGlyPi8uLicgcGFydHMuXG4gKlxuICogQmFzZWQgb24gY29kZSBpbiB0aGUgTm9kZS5qcyAncGF0aCcgY29yZSBtb2R1bGUuXG4gKlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIHVybCB0byBub3JtYWxpemUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhUGF0aCkge1xuICB2YXIgcGF0aCA9IGFQYXRoO1xuICB2YXIgdXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICBpZiAodXJsKSB7XG4gICAgaWYgKCF1cmwucGF0aCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cbiAgICBwYXRoID0gdXJsLnBhdGg7XG4gIH1cbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCk7XG5cbiAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuICBmb3IgKHZhciBwYXJ0LCB1cCA9IDAsIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHBhcnQgPSBwYXJ0c1tpXTtcbiAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXAgPiAwKSB7XG4gICAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYmxhbmsgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuIFRyeWluZyB0byBnb1xuICAgICAgICAvLyBhYm92ZSB0aGUgcm9vdCBpcyBhIG5vLW9wLiBUaGVyZWZvcmUgd2UgY2FuIHJlbW92ZSBhbGwgJy4uJyBwYXJ0c1xuICAgICAgICAvLyBkaXJlY3RseSBhZnRlciB0aGUgcm9vdC5cbiAgICAgICAgcGFydHMuc3BsaWNlKGkgKyAxLCB1cCk7XG4gICAgICAgIHVwID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShpLCAyKTtcbiAgICAgICAgdXAtLTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcblxuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICBwYXRoID0gaXNBYnNvbHV0ZSA/ICcvJyA6ICcuJztcbiAgfVxuXG4gIGlmICh1cmwpIHtcbiAgICB1cmwucGF0aCA9IHBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKHVybCk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcblxuLyoqXG4gKiBKb2lucyB0d28gcGF0aHMvVVJMcy5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIGpvaW5lZCB3aXRoIHRoZSByb290LlxuICpcbiAqIC0gSWYgYVBhdGggaXMgYSBVUkwgb3IgYSBkYXRhIFVSSSwgYVBhdGggaXMgcmV0dXJuZWQsIHVubGVzcyBhUGF0aCBpcyBhXG4gKiAgIHNjaGVtZS1yZWxhdGl2ZSBVUkw6IFRoZW4gdGhlIHNjaGVtZSBvZiBhUm9vdCwgaWYgYW55LCBpcyBwcmVwZW5kZWRcbiAqICAgZmlyc3QuXG4gKiAtIE90aGVyd2lzZSBhUGF0aCBpcyBhIHBhdGguIElmIGFSb290IGlzIGEgVVJMLCB0aGVuIGl0cyBwYXRoIHBvcnRpb25cbiAqICAgaXMgdXBkYXRlZCB3aXRoIHRoZSByZXN1bHQgYW5kIGFSb290IGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhlIHJlc3VsdFxuICogICBpcyByZXR1cm5lZC5cbiAqICAgLSBJZiBhUGF0aCBpcyBhYnNvbHV0ZSwgdGhlIHJlc3VsdCBpcyBhUGF0aC5cbiAqICAgLSBPdGhlcndpc2UgdGhlIHR3byBwYXRocyBhcmUgam9pbmVkIHdpdGggYSBzbGFzaC5cbiAqIC0gSm9pbmluZyBmb3IgZXhhbXBsZSAnaHR0cDovLycgYW5kICd3d3cuZXhhbXBsZS5jb20nIGlzIGFsc28gc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBqb2luKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG4gIGlmIChhUGF0aCA9PT0gXCJcIikge1xuICAgIGFQYXRoID0gXCIuXCI7XG4gIH1cbiAgdmFyIGFQYXRoVXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICB2YXIgYVJvb3RVcmwgPSB1cmxQYXJzZShhUm9vdCk7XG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290ID0gYVJvb3RVcmwucGF0aCB8fCAnLyc7XG4gIH1cblxuICAvLyBgam9pbihmb28sICcvL3d3dy5leGFtcGxlLm9yZycpYFxuICBpZiAoYVBhdGhVcmwgJiYgIWFQYXRoVXJsLnNjaGVtZSkge1xuICAgIGlmIChhUm9vdFVybCkge1xuICAgICAgYVBhdGhVcmwuc2NoZW1lID0gYVJvb3RVcmwuc2NoZW1lO1xuICAgIH1cbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVBhdGhVcmwpO1xuICB9XG5cbiAgaWYgKGFQYXRoVXJsIHx8IGFQYXRoLm1hdGNoKGRhdGFVcmxSZWdleHApKSB7XG4gICAgcmV0dXJuIGFQYXRoO1xuICB9XG5cbiAgLy8gYGpvaW4oJ2h0dHA6Ly8nLCAnd3d3LmV4YW1wbGUuY29tJylgXG4gIGlmIChhUm9vdFVybCAmJiAhYVJvb3RVcmwuaG9zdCAmJiAhYVJvb3RVcmwucGF0aCkge1xuICAgIGFSb290VXJsLmhvc3QgPSBhUGF0aDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG5cbiAgdmFyIGpvaW5lZCA9IGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgPyBhUGF0aFxuICAgIDogbm9ybWFsaXplKGFSb290LnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgYVBhdGgpO1xuXG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290VXJsLnBhdGggPSBqb2luZWQ7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuICByZXR1cm4gam9pbmVkO1xufVxuZXhwb3J0cy5qb2luID0gam9pbjtcblxuZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24gKGFQYXRoKSB7XG4gIHJldHVybiBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJyB8fCAhIWFQYXRoLm1hdGNoKHVybFJlZ2V4cCk7XG59O1xuXG4vKipcbiAqIE1ha2UgYSBwYXRoIHJlbGF0aXZlIHRvIGEgVVJMIG9yIGFub3RoZXIgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIG1hZGUgcmVsYXRpdmUgdG8gYVJvb3QuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0aXZlKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG5cbiAgYVJvb3QgPSBhUm9vdC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgcGF0aCB0byBiZSBhYm92ZSB0aGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBzaW1wbHlcbiAgLy8gY2hlY2tpbmcgd2hldGhlciB0aGUgcm9vdCBpcyBhIHByZWZpeCBvZiB0aGUgcGF0aCB3b24ndCB3b3JrLiBJbnN0ZWFkLCB3ZVxuICAvLyBuZWVkIHRvIHJlbW92ZSBjb21wb25lbnRzIGZyb20gdGhlIHJvb3Qgb25lIGJ5IG9uZSwgdW50aWwgZWl0aGVyIHdlIGZpbmRcbiAgLy8gYSBwcmVmaXggdGhhdCBmaXRzLCBvciB3ZSBydW4gb3V0IG9mIGNvbXBvbmVudHMgdG8gcmVtb3ZlLlxuICB2YXIgbGV2ZWwgPSAwO1xuICB3aGlsZSAoYVBhdGguaW5kZXhPZihhUm9vdCArICcvJykgIT09IDApIHtcbiAgICB2YXIgaW5kZXggPSBhUm9vdC5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBvbmx5IHBhcnQgb2YgdGhlIHJvb3QgdGhhdCBpcyBsZWZ0IGlzIHRoZSBzY2hlbWUgKGkuZS4gaHR0cDovLyxcbiAgICAvLyBmaWxlOi8vLywgZXRjLiksIG9uZSBvciBtb3JlIHNsYXNoZXMgKC8pLCBvciBzaW1wbHkgbm90aGluZyBhdCBhbGwsIHdlXG4gICAgLy8gaGF2ZSBleGhhdXN0ZWQgYWxsIGNvbXBvbmVudHMsIHNvIHRoZSBwYXRoIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcm9vdC5cbiAgICBhUm9vdCA9IGFSb290LnNsaWNlKDAsIGluZGV4KTtcbiAgICBpZiAoYVJvb3QubWF0Y2goL14oW15cXC9dKzpcXC8pP1xcLyokLykpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICArK2xldmVsO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGFkZCBhIFwiLi4vXCIgZm9yIGVhY2ggY29tcG9uZW50IHdlIHJlbW92ZWQgZnJvbSB0aGUgcm9vdC5cbiAgcmV0dXJuIEFycmF5KGxldmVsICsgMSkuam9pbihcIi4uL1wiKSArIGFQYXRoLnN1YnN0cihhUm9vdC5sZW5ndGggKyAxKTtcbn1cbmV4cG9ydHMucmVsYXRpdmUgPSByZWxhdGl2ZTtcblxudmFyIHN1cHBvcnRzTnVsbFByb3RvID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAhKCdfX3Byb3RvX18nIGluIG9iaik7XG59KCkpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSAocykge1xuICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBCZWNhdXNlIGJlaGF2aW9yIGdvZXMgd2Fja3kgd2hlbiB5b3Ugc2V0IGBfX3Byb3RvX19gIG9uIG9iamVjdHMsIHdlXG4gKiBoYXZlIHRvIHByZWZpeCBhbGwgdGhlIHN0cmluZ3MgaW4gb3VyIHNldCB3aXRoIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXIuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvcHVsbC8zMSBhbmRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzMwXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbmZ1bmN0aW9uIHRvU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gJyQnICsgYVN0cjtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy50b1NldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiB0b1NldFN0cmluZztcblxuZnVuY3Rpb24gZnJvbVNldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuIGFTdHIuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMuZnJvbVNldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiBmcm9tU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBpc1Byb3RvU3RyaW5nKHMpIHtcbiAgaWYgKCFzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IHMubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPCA5IC8qIFwiX19wcm90b19fXCIubGVuZ3RoICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHMuY2hhckNvZGVBdChsZW5ndGggLSAxKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDIpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMykgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA0KSAhPT0gMTE2IC8qICd0JyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDUpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNikgIT09IDExNCAvKiAncicgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA3KSAhPT0gMTEyIC8qICdwJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDgpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOSkgIT09IDk1ICAvKiAnXycgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gbGVuZ3RoIC0gMTA7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHMuY2hhckNvZGVBdChpKSAhPT0gMzYgLyogJyQnICovKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiwgYnV0IGRpZmZlcmVudCBnZW5lcmF0ZWRcbiAqIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhIG1hcHBpbmcgd2l0aCBhXG4gKiBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyhtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGRlZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBpbmRpY2VzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICogbWFwcGluZyB3aXRoIGEgc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQ7XG5cbmZ1bmN0aW9uIHN0cmNtcChhU3RyMSwgYVN0cjIpIHtcbiAgaWYgKGFTdHIxID09PSBhU3RyMikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKGFTdHIxID4gYVN0cjIpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggaW5mbGF0ZWQgc291cmNlIGFuZCBuYW1lIHN0cmluZ3Mgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gc3RyY21wKG1hcHBpbmdBLnNvdXJjZSwgbWFwcGluZ0Iuc291cmNlKTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gc3RyY21wKG1hcHBpbmdBLm5hbWUsIG1hcHBpbmdCLm5hbWUpO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZS1ncHMnLCBbJ3NvdXJjZS1tYXAnLCAnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc291cmNlLW1hcC9saWIvc291cmNlLW1hcC1jb25zdW1lcicpLCByZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tUcmFjZUdQUyA9IGZhY3Rvcnkocm9vdC5Tb3VyY2VNYXAgfHwgcm9vdC5zb3VyY2VNYXAsIHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTb3VyY2VNYXAsIFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBNYWtlIGEgWC1Eb21haW4gcmVxdWVzdCB0byB1cmwgYW5kIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB3aXRoIHJlc3BvbnNlIHRleHQgaWYgZnVsZmlsbGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gX3hkcih1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgcmVxLm9wZW4oJ2dldCcsIHVybCk7XG4gICAgICAgICAgICByZXEub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocmVxLnN0YXR1cyA+PSAyMDAgJiYgcmVxLnN0YXR1cyA8IDMwMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICh1cmwuc3Vic3RyKDAsIDcpID09PSAnZmlsZTovLycgJiYgcmVxLnJlc3BvbnNlVGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVxLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdIVFRQIHN0YXR1czogJyArIHJlcS5zdGF0dXMgKyAnIHJldHJpZXZpbmcgJyArIHVybCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcS5zZW5kKCk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIEJhc2U2NC1lbmNvZGVkIHN0cmluZyBpbnRvIGl0cyBvcmlnaW5hbCByZXByZXNlbnRhdGlvbi5cbiAgICAgKiBVc2VkIGZvciBpbmxpbmUgc291cmNlbWFwcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiNjRzdHIgQmFzZS02NCBlbmNvZGVkIHN0cmluZ1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gX2F0b2IoYjY0c3RyKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuYXRvYikge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5hdG9iKGI2NHN0cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciB3aW5kb3cuYXRvYiBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcGFyc2VKc29uKHN0cmluZykge1xuICAgICAgICBpZiAodHlwZW9mIEpTT04gIT09ICd1bmRlZmluZWQnICYmIEpTT04ucGFyc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciBKU09OLnBhcnNlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlci8qLCBjb2x1bW5OdW1iZXIqLykge1xuICAgICAgICB2YXIgc3ludGF4ZXMgPSBbXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSBmdW5jdGlvbiAoe2FyZ3N9KSBUT0RPIGFyZ3MgY2FwdHVyZVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqZnVuY3Rpb25cXGIvLFxuICAgICAgICAgICAgLy8gZnVuY3Rpb24ge25hbWV9KHthcmdzfSkgbVsxXT1uYW1lIG1bMl09YXJnc1xuICAgICAgICAgICAgL2Z1bmN0aW9uXFxzKyhbXignXCJgXSo/KVxccypcXCgoW14pXSopXFwpLyxcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGV2YWwoKVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqKD86ZXZhbHxuZXcgRnVuY3Rpb24pXFxiLyxcbiAgICAgICAgICAgIC8vIGZuX25hbWUoKSB7XG4gICAgICAgICAgICAvXFxiKD8hKD86aWZ8Zm9yfHN3aXRjaHx3aGlsZXx3aXRofGNhdGNoKVxcYikoPzooPzpzdGF0aWMpXFxzKyk/KFxcUyspXFxzKlxcKC4qP1xcKVxccypcXHsvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gKCkgPT4ge1xuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqXFwoLio/XFwpXFxzKj0+L1xuICAgICAgICBdO1xuICAgICAgICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoJ1xcbicpO1xuXG4gICAgICAgIC8vIFdhbGsgYmFja3dhcmRzIGluIHRoZSBzb3VyY2UgbGluZXMgdW50aWwgd2UgZmluZCB0aGUgbGluZSB3aGljaCBtYXRjaGVzIG9uZSBvZiB0aGUgcGF0dGVybnMgYWJvdmVcbiAgICAgICAgdmFyIGNvZGUgPSAnJztcbiAgICAgICAgdmFyIG1heExpbmVzID0gTWF0aC5taW4obGluZU51bWJlciwgMjApO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heExpbmVzOyArK2kpIHtcbiAgICAgICAgICAgIC8vIGxpbmVObyBpcyAxLWJhc2VkLCBzb3VyY2VbXSBpcyAwLWJhc2VkXG4gICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVzW2xpbmVOdW1iZXIgLSBpIC0gMV07XG4gICAgICAgICAgICB2YXIgY29tbWVudFBvcyA9IGxpbmUuaW5kZXhPZignLy8nKTtcbiAgICAgICAgICAgIGlmIChjb21tZW50UG9zID49IDApIHtcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHIoMCwgY29tbWVudFBvcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgY29kZSA9IGxpbmUgKyBjb2RlO1xuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBzeW50YXhlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHN5bnRheGVzW2luZGV4XS5leGVjKGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5jcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNvbnN1bWUgc291cmNlIG1hcHMgaW4gb2xkZXIgYnJvd3NlcnMnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhY2tmcmFtZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIFN0YWNrRnJhbWUgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmZpbGVOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gZmlsZSBuYW1lIGlzIG5vdCBhIFN0cmluZycpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBsaW5lIG51bWJlciBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICUgMSAhPT0gMCB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBjb2x1bW4gbnVtYmVyIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kU291cmNlTWFwcGluZ1VSTChzb3VyY2UpIHtcbiAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmdVcmxSZWdFeHAgPSAvXFwvXFwvWyNAXSA/c291cmNlTWFwcGluZ1VSTD0oW15cXHMnXCJdKylcXHMqJC9tZztcbiAgICAgICAgdmFyIGxhc3RTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB2YXIgbWF0Y2hTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB3aGlsZSAobWF0Y2hTb3VyY2VNYXBwaW5nVXJsID0gc291cmNlTWFwcGluZ1VybFJlZ0V4cC5leGVjKHNvdXJjZSkpIHsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgICAgICBsYXN0U291cmNlTWFwcGluZ1VybCA9IG1hdGNoU291cmNlTWFwcGluZ1VybFsxXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGFzdFNvdXJjZU1hcHBpbmdVcmwpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0U291cmNlTWFwcGluZ1VybDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc291cmNlTWFwcGluZ1VSTCBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9leHRyYWN0TG9jYXRpb25JbmZvRnJvbVNvdXJjZU1hcFNvdXJjZShzdGFja2ZyYW1lLCBzb3VyY2VNYXBDb25zdW1lciwgc291cmNlQ2FjaGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIGxvYyA9IHNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgICAgICAgIGxpbmU6IHN0YWNrZnJhbWUubGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGxvYy5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWNoZSBtYXBwZWQgc291cmNlc1xuICAgICAgICAgICAgICAgIHZhciBtYXBwZWRTb3VyY2UgPSBzb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGxvYy5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIGlmIChtYXBwZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlQ2FjaGVbbG9jLnNvdXJjZV0gPSBtYXBwZWRTb3VyY2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2l2ZW4gc3RhY2tmcmFtZSBhbmQgc291cmNlIGxvY2F0aW9uLCB1cGRhdGUgc3RhY2tmcmFtZVxuICAgICAgICAgICAgICAgICAgICBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGxvYy5uYW1lIHx8IHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogc3RhY2tmcmFtZS5hcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvYy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2MubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jLmNvbHVtblxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgb3JpZ2luYWwgc291cmNlIGZvciBnaXZlbiBzdGFja2ZyYW1lIGFuZCBzb3VyY2UgbWFwJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAqICAgICAgb3B0cy5zb3VyY2VDYWNoZSA9IHt1cmw6IFwiU291cmNlIFN0cmluZ1wifSA9PiBwcmVsb2FkIHNvdXJjZSBjYWNoZVxuICAgICAqICAgICAgb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gey9wYXRoL2ZpbGUuanMubWFwOiBTb3VyY2VNYXBDb25zdW1lcn1cbiAgICAgKiAgICAgIG9wdHMub2ZmbGluZSA9IFRydWUgdG8gcHJldmVudCBuZXR3b3JrIHJlcXVlc3RzLlxuICAgICAqICAgICAgICAgICAgICBCZXN0IGVmZm9ydCB3aXRob3V0IHNvdXJjZXMgb3Igc291cmNlIG1hcHMuXG4gICAgICogICAgICBvcHRzLmFqYXggPSBQcm9taXNlIHJldHVybmluZyBmdW5jdGlvbiB0byBtYWtlIFgtRG9tYWluIHJlcXVlc3RzXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMob3B0cykge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3RhY2tUcmFjZUdQUykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlID0gb3B0cy5zb3VyY2VDYWNoZSB8fCB7fTtcbiAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuYWpheCA9IG9wdHMuYWpheCB8fCBfeGRyO1xuXG4gICAgICAgIHRoaXMuX2F0b2IgPSBvcHRzLmF0b2IgfHwgX2F0b2I7XG5cbiAgICAgICAgdGhpcy5fZ2V0ID0gZnVuY3Rpb24gX2dldChsb2NhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBsb2NhdGlvbi5zdWJzdHIoMCwgNSkgPT09ICdkYXRhOic7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0cy5vZmZsaW5lICYmICFpc0RhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ2Fubm90IG1ha2UgbmV0d29yayByZXF1ZXN0cyBpbiBvZmZsaW5lIG1vZGUnKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF0YSBVUkxzIGNhbiBoYXZlIHBhcmFtZXRlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM5N1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1cHBvcnRlZEVuY29kaW5nUmVnZXhwID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXmRhdGE6YXBwbGljYXRpb25cXC9qc29uOyhbXFx3PTpcIi1dKzspKmJhc2U2NCwvO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbG9jYXRpb24ubWF0Y2goc3VwcG9ydGVkRW5jb2RpbmdSZWdleHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcFN0YXJ0ID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGVkU291cmNlID0gbG9jYXRpb24uc3Vic3RyKHNvdXJjZU1hcFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fYXRvYihlbmNvZGVkU291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSA9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RoZSBlbmNvZGluZyBvZiB0aGUgaW5saW5lIHNvdXJjZW1hcCBpcyBub3Qgc3VwcG9ydGVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhoclByb21pc2UgPSB0aGlzLmFqYXgobG9jYXRpb24sIHttZXRob2Q6ICdnZXQnfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZSB0aGUgUHJvbWlzZSB0byBwcmV2ZW50IGR1cGxpY2F0ZSBpbi1mbGlnaHQgcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0geGhyUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclByb21pc2UudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRpbmcgU291cmNlTWFwQ29uc3VtZXJzIGlzIGV4cGVuc2l2ZSwgc28gdGhpcyB3cmFwcyB0aGUgY3JlYXRpb24gb2YgYVxuICAgICAgICAgKiBTb3VyY2VNYXBDb25zdW1lciBpbiBhIHBlci1pbnN0YW5jZSBjYWNoZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZU1hcHBpbmdVUkwgPSBVUkwgdG8gZmV0Y2ggc291cmNlIG1hcCBmcm9tXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBkZWZhdWx0U291cmNlUm9vdCA9IERlZmF1bHQgc291cmNlIHJvb3QgZm9yIHNvdXJjZSBtYXAgaWYgdW5kZWZpbmVkXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIGEgU291cmNlTWFwQ29uc3VtZXJcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyID0gZnVuY3Rpb24gX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldChzb3VyY2VNYXBwaW5nVVJMKS50aGVuKGZ1bmN0aW9uKHNvdXJjZU1hcFNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlTWFwU291cmNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBTb3VyY2UgPSBfcGFyc2VKc29uKHNvdXJjZU1hcFNvdXJjZS5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlTWFwU291cmNlLnNvdXJjZVJvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcFNvdXJjZS5zb3VyY2VSb290ID0gZGVmYXVsdFNvdXJjZVJvb3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU291cmNlTWFwLlNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcFNvdXJjZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdID0gc291cmNlTWFwQ29uc3VtZXJQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBlbmhhbmNlIGZ1bmN0aW9uIG5hbWUgYW5kIHVzZSBzb3VyY2UgbWFwcyBmb3IgYVxuICAgICAgICAgKiBiZXR0ZXIgU3RhY2tGcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lIG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHdpdGggc291cmNlLW1hcHBlZCBTdGFja0ZyYW1lXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBpbnBvaW50ID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkcGlucG9pbnQoc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkudGhlbihmdW5jdGlvbihtYXBwZWRTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVNYXBwZWRTdGFja0ZyYW1lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtYXBwZWRTdGFja0ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZEZ1bmN0aW9uTmFtZShtYXBwZWRTdGFja0ZyYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSwgcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ2NhdGNoJ10ocmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgZ3Vlc3MgZnVuY3Rpb24gbmFtZSBmcm9tIGxvY2F0aW9uIGluZm9ybWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWVcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBlbmhhbmNlZCBTdGFja0ZyYW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZmluZEZ1bmN0aW9uTmFtZShzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChzdGFja2ZyYW1lLmZpbGVOYW1lKS50aGVuKGZ1bmN0aW9uIGdldFNvdXJjZUNhbGxiYWNrKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHN0YWNrZnJhbWUubGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ3Vlc3NlZEZ1bmN0aW9uTmFtZSA9IF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZXBsYWNlIGZ1bmN0aW9uTmFtZSBpZiB3ZSBmb3VuZCBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICAgICAgaWYgKGd1ZXNzZWRGdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZ3Vlc3NlZEZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBzdGFja2ZyYW1lLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IHN0YWNrZnJhbWUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgc2VlayBzb3VyY2UtbWFwcGVkIGxvY2F0aW9uIGFuZCByZXR1cm4gbmV3IGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdldE1hcHBlZExvY2F0aW9uID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKTtcblxuICAgICAgICAgICAgICAgIHZhciBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGU7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gc3RhY2tmcmFtZS5maWxlTmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXQoZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VNYXBwaW5nVVJMID0gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBzb3VyY2VNYXBwaW5nVVJMLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRTb3VyY2VSb290ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlTWFwcGluZ1VSTFswXSAhPT0gJy8nICYmICFpc0RhdGFVcmwgJiYgISgvXmh0dHBzPzpcXC9cXC98XlxcL1xcLy9pKS50ZXN0KHNvdXJjZU1hcHBpbmdVUkwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBwaW5nVVJMID0gZGVmYXVsdFNvdXJjZVJvb3QgKyBzb3VyY2VNYXBwaW5nVVJMO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oc291cmNlTWFwQ29uc3VtZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwU291cmNlKHN0YWNrZnJhbWUsIHNvdXJjZU1hcENvbnN1bWVyLCBzb3VyY2VDYWNoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSlbJ2NhdGNoJ10oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbn0pKTtcbiIsIi8vIFBvbHlmaWxsIGZvciBvbGQgYnJvd3NlcnNcbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5XG5pZiAoIUFycmF5LmlzQXJyYXkpIHtcbiAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xufVxuXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgRVM2UHJvbWlzZS5wb2x5ZmlsbCgpO1xufVxuXG4vLyBFUzUgUG9seWZpbGxzXG4vLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRnVuY3Rpb24vYmluZFxuaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkge1xuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24ob1RoaXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCAtIHdoYXQgaXMgdHJ5aW5nIHRvIGJlIGJvdW5kIGlzIG5vdCBjYWxsYWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgdmFyIGZUb0JpbmQgPSB0aGlzO1xuICAgICAgICB2YXIgTm9PcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZkJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gZlRvQmluZC5hcHBseSh0aGlzIGluc3RhbmNlb2YgTm9PcCAmJiBvVGhpcyA/IHRoaXMgOiBvVGhpcyxcbiAgICAgICAgICAgICAgICBhQXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIE5vT3AucHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG4gICAgICAgIGZCb3VuZC5wcm90b3R5cGUgPSBuZXcgTm9PcCgpO1xuXG4gICAgICAgIHJldHVybiBmQm91bmQ7XG4gICAgfTtcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L21hcFxuaWYgKCFBcnJheS5wcm90b3R5cGUubWFwKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgIGlmICh0aGlzID09PSB2b2lkIDAgfHwgdGhpcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIE8gPSBPYmplY3QodGhpcyk7XG4gICAgICAgIHZhciBsZW4gPSBPLmxlbmd0aCA+Pj4gMDtcbiAgICAgICAgdmFyIFQ7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBUID0gdGhpc0FyZztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBBID0gbmV3IEFycmF5KGxlbik7XG4gICAgICAgIHZhciBrID0gMDtcblxuICAgICAgICB3aGlsZSAoayA8IGxlbikge1xuICAgICAgICAgICAgdmFyIGtWYWx1ZTtcbiAgICAgICAgICAgIHZhciBtYXBwZWRWYWx1ZTtcbiAgICAgICAgICAgIGlmIChrIGluIE8pIHtcbiAgICAgICAgICAgICAgICBrVmFsdWUgPSBPW2tdO1xuICAgICAgICAgICAgICAgIG1hcHBlZFZhbHVlID0gY2FsbGJhY2suY2FsbChULCBrVmFsdWUsIGssIE8pO1xuICAgICAgICAgICAgICAgIEFba10gPSBtYXBwZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBBO1xuICAgIH07XG59XG5cbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9maWx0ZXJcbmlmICghQXJyYXkucHJvdG90eXBlLmZpbHRlcikge1xuICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbihjYWxsYmFjay8qLCB0aGlzQXJnKi8pIHtcbiAgICAgICAgaWYgKHRoaXMgPT09IHZvaWQgMCB8fCB0aGlzID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0aGlzIGlzIG51bGwgb3Igbm90IGRlZmluZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpO1xuICAgICAgICB2YXIgbGVuID0gdC5sZW5ndGggPj4+IDA7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyID8gYXJndW1lbnRzWzFdIDogdm9pZCAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSBpbiB0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRbaV07XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2ZvckVhY2hcbmlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgIHZhciBUO1xuICAgICAgICB2YXIgaztcbiAgICAgICAgaWYgKHRoaXMgPT09IG51bGwgfHwgdGhpcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcgdGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgTyA9IE9iamVjdCh0aGlzKTtcbiAgICAgICAgdmFyIGxlbiA9IE8ubGVuZ3RoID4+PiAwO1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBUID0gdGhpc0FyZztcbiAgICAgICAgfVxuICAgICAgICBrID0gMDtcbiAgICAgICAgd2hpbGUgKGsgPCBsZW4pIHtcbiAgICAgICAgICAgIHZhciBrVmFsdWU7XG4gICAgICAgICAgICBpZiAoayBpbiBPKSB7XG4gICAgICAgICAgICAgICAga1ZhbHVlID0gT1trXTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKFQsIGtWYWx1ZSwgaywgTyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrKys7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZScsIFsnZXJyb3Itc3RhY2stcGFyc2VyJywgJ3N0YWNrLWdlbmVyYXRvcicsICdzdGFja3RyYWNlLWdwcyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnZXJyb3Itc3RhY2stcGFyc2VyJyksIHJlcXVpcmUoJ3N0YWNrLWdlbmVyYXRvcicpLCByZXF1aXJlKCdzdGFja3RyYWNlLWdwcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2UgPSBmYWN0b3J5KHJvb3QuRXJyb3JTdGFja1BhcnNlciwgcm9vdC5TdGFja0dlbmVyYXRvciwgcm9vdC5TdGFja1RyYWNlR1BTKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIFN0YWNrVHJhY2UoRXJyb3JTdGFja1BhcnNlciwgU3RhY2tHZW5lcmF0b3IsIFN0YWNrVHJhY2VHUFMpIHtcbiAgICB2YXIgX29wdGlvbnMgPSB7XG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBzdGFja2ZyYW1lcyBmb3IgdGhpcyBsaWJyYXJ5IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2UkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignRXJyb3JTdGFja1BhcnNlciQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlR1BTJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrR2VuZXJhdG9yJCQnKSA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZUNhY2hlOiB7fVxuICAgIH07XG5cbiAgICB2YXIgX2dlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRHZW5lcmF0ZUVycm9yKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRXJyb3IgbXVzdCBiZSB0aHJvd24gdG8gZ2V0IHN0YWNrIGluIElFXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdlIDIgZ2l2ZW4gT2JqZWN0cy4gSWYgYSBjb25mbGljdCBvY2N1cnMgdGhlIHNlY29uZCBvYmplY3Qgd2lucy5cbiAgICAgKiBEb2VzIG5vdCBkbyBkZWVwIG1lcmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaXJzdCBiYXNlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWNvbmQgb3ZlcnJpZGVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gbWVyZ2VkIGZpcnN0IGFuZCBzZWNvbmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tZXJnZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcblxuICAgICAgICBbZmlyc3QsIHNlY29uZF0uZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVyci5zdGFjayB8fCBlcnJbJ29wZXJhI3NvdXJjZWxvYyddO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXJlZChzdGFja2ZyYW1lcywgZmlsdGVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXMuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrZnJhbWVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0KG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikgPyB0aGlzLmZyb21FcnJvcihlcnIsIG9wdHMpIDogdGhpcy5nZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgYmFja3RyYWNlIGZyb20gaW52b2NhdGlvbiBwb2ludC5cbiAgICAgICAgICogSU1QT1JUQU5UOiBEb2VzIG5vdCBoYW5kbGUgc291cmNlIG1hcHMgb3IgZ3Vlc3MgZnVuY3Rpb24gbmFtZXMhXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0U3luYzogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0U3luYyhvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyKSA6IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyZWQoc3RhY2ssIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3Igb2JqZWN0LCBwYXJzZSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmb3IgQXJyYXlbU3RhY2tGcmFtZX1cbiAgICAgICAgICovXG4gICAgICAgIGZyb21FcnJvcjogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZnJvbUVycm9yKGVycm9yLCBvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBncHMgPSBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrZnJhbWVzID0gX2ZpbHRlcmVkKEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyb3IpLCBvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShQcm9taXNlLmFsbChzdGFja2ZyYW1lcy5tYXAoZnVuY3Rpb24oc2YpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVPcmlnaW5hbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ3BzLnBpbnBvaW50KHNmKS50aGVuKHJlc29sdmUsIHJlc29sdmVPcmlnaW5hbClbJ2NhdGNoJ10ocmVzb2x2ZU9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBTdGFja0dlbmVyYXRvciB0byBnZW5lcmF0ZSBhIGJhY2t0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IG9mIEFycmF5W1N0YWNrRnJhbWVdXG4gICAgICAgICAqL1xuICAgICAgICBnZW5lcmF0ZUFydGlmaWNpYWxseTogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2VuZXJhdGVBcnRpZmljaWFsbHkob3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgc3RhY2tGcmFtZXMgPSBTdGFja0dlbmVyYXRvci5iYWNrdHJhY2Uob3B0cyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgc3RhY2tGcmFtZXMgPSBzdGFja0ZyYW1lcy5maWx0ZXIob3B0cy5maWx0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGFja0ZyYW1lcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24sIHdyYXAgaXQgc3VjaCB0aGF0IGludm9jYXRpb25zIHRyaWdnZXIgYSBjYWxsYmFjayB0aGF0XG4gICAgICAgICAqIGlzIGNhbGxlZCB3aXRoIGEgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGluc3RydW1lbnRlZFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdpdGggYSBzdGFjayB0cmFjZSBvbiBpbnZvY2F0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVycmJhY2sgb3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGVycm9yIGlmIHVuYWJsZSB0byBnZXQgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIG9wdGlvbmFsIGNvbnRleHQgb2JqZWN0IChlLmcuIHdpbmRvdylcbiAgICAgICAgICovXG4gICAgICAgIGluc3RydW1lbnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnQoZm4sIGNhbGxiYWNrLCBlcnJiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBpbnN0cnVtZW50ZWQsIHJldHVybiBnaXZlbiBGdW5jdGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGluc3RydW1lbnRlZCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnRlZCgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCgpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZyB8fCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb21FcnJvcihlKS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrKVsnY2F0Y2gnXShlcnJiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGluc3RydW1lbnRlZC5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID0gZm47XG5cbiAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50ZWQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBpbnN0cnVtZW50ZWQsXG4gICAgICAgICAqIHJldmVydCB0aGUgZnVuY3Rpb24gdG8gaXQncyBvcmlnaW5hbCAobm9uLWluc3RydW1lbnRlZCkgc3RhdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGRlLWluc3RydW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGRlaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZGVpbnN0cnVtZW50KGZuKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGUtaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIG5vdCBpbnN0cnVtZW50ZWQsIHJldHVybiBvcmlnaW5hbFxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3IgbWVzc2FnZSBhbmQgQXJyYXkgb2YgU3RhY2tGcmFtZXMsIHNlcmlhbGl6ZSBhbmQgUE9TVCB0byBnaXZlbiBVUkwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrZnJhbWVzXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVycm9yTXNnXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0T3B0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgcmVwb3J0OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRyZXBvcnQoc3RhY2tmcmFtZXMsIHVybCwgZXJyb3JNc2csIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPj0gMjAwICYmIHJlcS5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdQT1NUIHRvICcgKyB1cmwgKyAnIGZhaWxlZCB3aXRoIHN0YXR1czogJyArIHJlcS5zdGF0dXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVxLm9wZW4oJ3Bvc3QnLCB1cmwpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHJlcXVlc3QgaGVhZGVyc1xuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucyAmJiB0eXBlb2YgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgaGVhZGVyc1toZWFkZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZXBvcnRQYXlsb2FkID0ge3N0YWNrOiBzdGFja2ZyYW1lc307XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQgJiYgZXJyb3JNc2cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0UGF5bG9hZC5tZXNzYWdlID0gZXJyb3JNc2c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVwb3J0UGF5bG9hZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIl19 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9lcnJvci1zdGFjay1wYXJzZXIvbm9kZV9tb2R1bGVzL3N0YWNrZnJhbWUvc3RhY2tmcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9lczYtcHJvbWlzZS9kaXN0L2VzNi1wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2pzb24zL2xpYi9qc29uMy5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYXJyYXktc2V0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2Jhc2U2NC12bHEuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2JpbmFyeS1zZWFyY2guanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvcXVpY2stc29ydC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyLmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3V0aWwuanMiLCJub2RlX21vZHVsZXMvc3RhY2stZ2VuZXJhdG9yL3N0YWNrLWdlbmVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja3RyYWNlLWdwcy9zdGFja3RyYWNlLWdwcy5qcyIsInBvbHlmaWxscy5qcyIsInN0YWNrdHJhY2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQy9JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2pvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDdDRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWpDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2phQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnZXJyb3Itc3RhY2stcGFyc2VyJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuRXJyb3JTdGFja1BhcnNlciA9IGZhY3Rvcnkocm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIoU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFAgPSAvKF58QClcXFMrXFw6XFxkKy87XG4gICAgdmFyIENIUk9NRV9JRV9TVEFDS19SRUdFWFAgPSAvXlxccyphdCAuKihcXFMrXFw6XFxkK3xcXChuYXRpdmVcXCkpL207XG4gICAgdmFyIFNBRkFSSV9OQVRJVkVfQ09ERV9SRUdFWFAgPSAvXihldmFsQCk/KFxcW25hdGl2ZSBjb2RlXFxdKT8kLztcblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhbiBFcnJvciBvYmplY3QsIGV4dHJhY3QgdGhlIG1vc3QgaW5mb3JtYXRpb24gZnJvbSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBvZiBTdGFja0ZyYW1lc1xuICAgICAgICAgKi9cbiAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVycm9yLnN0YWNrdHJhY2UgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBlcnJvclsnb3BlcmEjc291cmNlbG9jJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YWNrICYmIGVycm9yLnN0YWNrLm1hdGNoKENIUk9NRV9JRV9TVEFDS19SRUdFWFApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VWOE9ySUUoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRkZPclNhZmFyaShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIGdpdmVuIEVycm9yIG9iamVjdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFNlcGFyYXRlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGZyb20gYSBzdHJpbmcgb2YgdGhlIGZvcm06IChVUkk6TGluZTpDb2x1bW4pXG4gICAgICAgIGV4dHJhY3RMb2NhdGlvbjogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkZXh0cmFjdExvY2F0aW9uKHVybExpa2UpIHtcbiAgICAgICAgICAgIC8vIEZhaWwtZmFzdCBidXQgcmV0dXJuIGxvY2F0aW9ucyBsaWtlIFwiKG5hdGl2ZSlcIlxuICAgICAgICAgICAgaWYgKHVybExpa2UuaW5kZXhPZignOicpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbdXJsTGlrZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByZWdFeHAgPSAvKC4rPykoPzpcXDooXFxkKykpPyg/OlxcOihcXGQrKSk/JC87XG4gICAgICAgICAgICB2YXIgcGFydHMgPSByZWdFeHAuZXhlYyh1cmxMaWtlLnJlcGxhY2UoL1tcXChcXCldL2csICcnKSk7XG4gICAgICAgICAgICByZXR1cm4gW3BhcnRzWzFdLCBwYXJ0c1syXSB8fCB1bmRlZmluZWQsIHBhcnRzWzNdIHx8IHVuZGVmaW5lZF07XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VWOE9ySUU6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlVjhPcklFKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFsaW5lLm1hdGNoKENIUk9NRV9JRV9TVEFDS19SRUdFWFApO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJyhldmFsICcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSBldmFsIGluZm9ybWF0aW9uIHVudGlsIHdlIGltcGxlbWVudCBzdGFja3RyYWNlLmpzL3N0YWNrZnJhbWUjOFxuICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC9ldmFsIGNvZGUvZywgJ2V2YWwnKS5yZXBsYWNlKC8oXFwoZXZhbCBhdCBbXlxcKCldKil8KFxcKVxcLC4qJCkvZywgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgc2FuaXRpemVkTGluZSA9IGxpbmUucmVwbGFjZSgvXlxccysvLCAnJykucmVwbGFjZSgvXFwoZXZhbCBjb2RlL2csICcoJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBjYXB0dXJlIGFuZCBwcmVzZXZlIHRoZSBwYXJlbnRoZXNpemVkIGxvY2F0aW9uIFwiKC9mb28vbXkgYmFyLmpzOjEyOjg3KVwiIGluXG4gICAgICAgICAgICAgICAgLy8gY2FzZSBpdCBoYXMgc3BhY2VzIGluIGl0LCBhcyB0aGUgc3RyaW5nIGlzIHNwbGl0IG9uIFxccysgbGF0ZXIgb25cbiAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24gPSBzYW5pdGl6ZWRMaW5lLm1hdGNoKC8gKFxcKCguKyk6KFxcZCspOihcXGQrKVxcKSQpLyk7XG5cbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIHBhcmVudGhlc2l6ZWQgbG9jYXRpb24gZnJvbSB0aGUgbGluZSwgaWYgaXQgd2FzIG1hdGNoZWRcbiAgICAgICAgICAgICAgICBzYW5pdGl6ZWRMaW5lID0gbG9jYXRpb24gPyBzYW5pdGl6ZWRMaW5lLnJlcGxhY2UobG9jYXRpb25bMF0sICcnKSA6IHNhbml0aXplZExpbmU7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gc2FuaXRpemVkTGluZS5zcGxpdCgvXFxzKy8pLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIC8vIGlmIGEgbG9jYXRpb24gd2FzIG1hdGNoZWQsIHBhc3MgaXQgdG8gZXh0cmFjdExvY2F0aW9uKCkgb3RoZXJ3aXNlIHBvcCB0aGUgbGFzdCB0b2tlblxuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24obG9jYXRpb24gPyBsb2NhdGlvblsxXSA6IHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRva2Vucy5qb2luKCcgJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IFsnZXZhbCcsICc8YW5vbnltb3VzPiddLmluZGV4T2YobG9jYXRpb25QYXJ0c1swXSkgPiAtMSA/IHVuZGVmaW5lZCA6IGxvY2F0aW9uUGFydHNbMF07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VGRk9yU2FmYXJpOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZUZGT3JTYWZhcmkoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhbGluZS5tYXRjaChTQUZBUklfTkFUSVZFX0NPREVfUkVHRVhQKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IGV2YWwgaW5mb3JtYXRpb24gdW50aWwgd2UgaW1wbGVtZW50IHN0YWNrdHJhY2UuanMvc3RhY2tmcmFtZSM4XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignID4gZXZhbCcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvIGxpbmUgKFxcZCspKD86ID4gZXZhbCBsaW5lIFxcZCspKiA+IGV2YWxcXDpcXGQrXFw6XFxkKy9nLCAnOiQxJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignQCcpID09PSAtMSAmJiBsaW5lLmluZGV4T2YoJzonKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIGV2YWwgZnJhbWVzIG9ubHkgaGF2ZSBmdW5jdGlvbiBuYW1lcyBhbmQgbm90aGluZyBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGxpbmVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZVJlZ2V4ID0gLygoLipcIi4rXCJbXkBdKik/W15AXSopKD86QCkvO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IGxpbmUubWF0Y2goZnVuY3Rpb25OYW1lUmVnZXgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gbWF0Y2hlcyAmJiBtYXRjaGVzWzFdID8gbWF0Y2hlc1sxXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbihsaW5lLnJlcGxhY2UoZnVuY3Rpb25OYW1lUmVnZXgsICcnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmEoZSkge1xuICAgICAgICAgICAgaWYgKCFlLnN0YWNrdHJhY2UgfHwgKGUubWVzc2FnZS5pbmRleE9mKCdcXG4nKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlLnNwbGl0KCdcXG4nKS5sZW5ndGggPiBlLnN0YWNrdHJhY2Uuc3BsaXQoJ1xcbicpLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhOShlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWUuc3RhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTAoZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmExMShlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhOTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTkoZSkge1xuICAgICAgICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspL2k7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBlLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMiwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lUkUuZXhlYyhsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lc1tpXVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmExMDogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTEwKGUpIHtcbiAgICAgICAgICAgIHZhciBsaW5lUkUgPSAvTGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKSg/OjogSW4gZnVuY3Rpb24gKFxcUyspKT8kL2k7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBlLnN0YWNrdHJhY2Uuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lUkUuZXhlYyhsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbWF0Y2hbM10gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVzW2ldXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBPcGVyYSAxMC42NSsgRXJyb3Iuc3RhY2sgdmVyeSBzaW1pbGFyIHRvIEZGL1NhZmFyaVxuICAgICAgICBwYXJzZU9wZXJhMTE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFApICYmICFsaW5lLm1hdGNoKC9eRXJyb3IgY3JlYXRlZCBhdC8pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBsaW5lLnNwbGl0KCdAJyk7XG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbih0b2tlbnMucG9wKCkpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbkNhbGwgPSAodG9rZW5zLnNoaWZ0KCkgfHwgJycpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbkNhbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88YW5vbnltb3VzIGZ1bmN0aW9uKDogKFxcdyspKT8+LywgJyQyJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXChbXlxcKV0qXFwpL2csICcnKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3NSYXc7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uQ2FsbC5tYXRjaCgvXFwoKFteXFwpXSopXFwpLykpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1JhdyA9IGZ1bmN0aW9uQ2FsbC5yZXBsYWNlKC9eW15cXChdK1xcKChbXlxcKV0qKVxcKSQvLCAnJDEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSAoYXJnc1JhdyA9PT0gdW5kZWZpbmVkIHx8IGFyZ3NSYXcgPT09ICdbYXJndW1lbnRzIG5vdCBhdmFpbGFibGVdJykgP1xuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgOiBhcmdzUmF3LnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG59KSk7XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFja2ZyYW1lJywgW10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tGcmFtZSA9IGZhY3RvcnkoKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uKCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICBmdW5jdGlvbiBfaXNOdW1iZXIobikge1xuICAgICAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQobikpICYmIGlzRmluaXRlKG4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9jYXBpdGFsaXplKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZ2V0dGVyKHApIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbcF07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGJvb2xlYW5Qcm9wcyA9IFsnaXNDb25zdHJ1Y3RvcicsICdpc0V2YWwnLCAnaXNOYXRpdmUnLCAnaXNUb3BsZXZlbCddO1xuICAgIHZhciBudW1lcmljUHJvcHMgPSBbJ2NvbHVtbk51bWJlcicsICdsaW5lTnVtYmVyJ107XG4gICAgdmFyIHN0cmluZ1Byb3BzID0gWydmaWxlTmFtZScsICdmdW5jdGlvbk5hbWUnLCAnc291cmNlJ107XG4gICAgdmFyIGFycmF5UHJvcHMgPSBbJ2FyZ3MnXTtcblxuICAgIHZhciBwcm9wcyA9IGJvb2xlYW5Qcm9wcy5jb25jYXQobnVtZXJpY1Byb3BzLCBzdHJpbmdQcm9wcywgYXJyYXlQcm9wcyk7XG5cbiAgICBmdW5jdGlvbiBTdGFja0ZyYW1lKG9iaikge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wc1tpXSkgJiYgb2JqW3Byb3BzW2ldXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbJ3NldCcgKyBfY2FwaXRhbGl6ZShwcm9wc1tpXSldKG9ialtwcm9wc1tpXV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIFN0YWNrRnJhbWUucHJvdG90eXBlID0ge1xuICAgICAgICBnZXRBcmdzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFyZ3M7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEFyZ3M6IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodikgIT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmdzIG11c3QgYmUgYW4gQXJyYXknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXJncyA9IHY7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0RXZhbE9yaWdpbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmFsT3JpZ2luO1xuICAgICAgICB9LFxuICAgICAgICBzZXRFdmFsT3JpZ2luOiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICBpZiAodiBpbnN0YW5jZW9mIFN0YWNrRnJhbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2YWxPcmlnaW4gPSB2O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2IGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsT3JpZ2luID0gbmV3IFN0YWNrRnJhbWUodik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V2YWwgT3JpZ2luIG11c3QgYmUgYW4gT2JqZWN0IG9yIFN0YWNrRnJhbWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSB0aGlzLmdldEZpbGVOYW1lKCkgfHwgJyc7XG4gICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHRoaXMuZ2V0TGluZU51bWJlcigpIHx8ICcnO1xuICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHRoaXMuZ2V0Q29sdW1uTnVtYmVyKCkgfHwgJyc7XG4gICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gdGhpcy5nZXRGdW5jdGlvbk5hbWUoKSB8fCAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLmdldElzRXZhbCgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW2V2YWxdICgnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJzonICsgY29sdW1uTnVtYmVyICsgJyknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tldmFsXTonICsgbGluZU51bWJlciArICc6JyArIGNvbHVtbk51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25OYW1lICsgJyAoJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICc6JyArIGNvbHVtbk51bWJlciArICcpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnOicgKyBjb2x1bW5OdW1iZXI7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgU3RhY2tGcmFtZS5mcm9tU3RyaW5nID0gZnVuY3Rpb24gU3RhY2tGcmFtZSQkZnJvbVN0cmluZyhzdHIpIHtcbiAgICAgICAgdmFyIGFyZ3NTdGFydEluZGV4ID0gc3RyLmluZGV4T2YoJygnKTtcbiAgICAgICAgdmFyIGFyZ3NFbmRJbmRleCA9IHN0ci5sYXN0SW5kZXhPZignKScpO1xuXG4gICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBzdHIuc3Vic3RyaW5nKDAsIGFyZ3NTdGFydEluZGV4KTtcbiAgICAgICAgdmFyIGFyZ3MgPSBzdHIuc3Vic3RyaW5nKGFyZ3NTdGFydEluZGV4ICsgMSwgYXJnc0VuZEluZGV4KS5zcGxpdCgnLCcpO1xuICAgICAgICB2YXIgbG9jYXRpb25TdHJpbmcgPSBzdHIuc3Vic3RyaW5nKGFyZ3NFbmRJbmRleCArIDEpO1xuXG4gICAgICAgIGlmIChsb2NhdGlvblN0cmluZy5pbmRleE9mKCdAJykgPT09IDApIHtcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IC9AKC4rPykoPzo6KFxcZCspKT8oPzo6KFxcZCspKT8kLy5leGVjKGxvY2F0aW9uU3RyaW5nLCAnJyk7XG4gICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBwYXJ0c1sxXTtcbiAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gcGFydHNbMl07XG4gICAgICAgICAgICB2YXIgY29sdW1uTnVtYmVyID0gcGFydHNbM107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICBhcmdzOiBhcmdzIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBjb2x1bW5OdW1iZXIgfHwgdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvb2xlYW5Qcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKGJvb2xlYW5Qcm9wc1tpXSldID0gX2dldHRlcihib29sZWFuUHJvcHNbaV0pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKGJvb2xlYW5Qcm9wc1tpXSldID0gKGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgdGhpc1twXSA9IEJvb2xlYW4odik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShib29sZWFuUHJvcHNbaV0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtZXJpY1Byb3BzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUobnVtZXJpY1Byb3BzW2pdKV0gPSBfZ2V0dGVyKG51bWVyaWNQcm9wc1tqXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUobnVtZXJpY1Byb3BzW2pdKV0gPSAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc051bWJlcih2KSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHAgKyAnIG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpc1twXSA9IE51bWJlcih2KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKG51bWVyaWNQcm9wc1tqXSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBzdHJpbmdQcm9wcy5sZW5ndGg7IGsrKykge1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKHN0cmluZ1Byb3BzW2tdKV0gPSBfZ2V0dGVyKHN0cmluZ1Byb3BzW2tdKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShzdHJpbmdQcm9wc1trXSldID0gKGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgdGhpc1twXSA9IFN0cmluZyh2KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKHN0cmluZ1Byb3BzW2tdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RhY2tGcmFtZTtcbn0pKTtcbiIsIi8qIVxuICogQG92ZXJ2aWV3IGVzNi1wcm9taXNlIC0gYSB0aW55IGltcGxlbWVudGF0aW9uIG9mIFByb21pc2VzL0ErLlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTQgWWVodWRhIEthdHosIFRvbSBEYWxlLCBTdGVmYW4gUGVubmVyIGFuZCBjb250cmlidXRvcnMgKENvbnZlcnNpb24gdG8gRVM2IEFQSSBieSBKYWtlIEFyY2hpYmFsZClcbiAqIEBsaWNlbnNlICAgTGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2VcbiAqICAgICAgICAgICAgU2VlIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zdGVmYW5wZW5uZXIvZXM2LXByb21pc2UvbWFzdGVyL0xJQ0VOU0VcbiAqIEB2ZXJzaW9uICAgMy4zLjFcbiAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIChnbG9iYWwuRVM2UHJvbWlzZSA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gb2JqZWN0T3JGdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeCAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxudmFyIF9pc0FycmF5ID0gdW5kZWZpbmVkO1xuaWYgKCFBcnJheS5pc0FycmF5KSB7XG4gIF9pc0FycmF5ID0gZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xufSBlbHNlIHtcbiAgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xufVxuXG52YXIgaXNBcnJheSA9IF9pc0FycmF5O1xuXG52YXIgbGVuID0gMDtcbnZhciB2ZXJ0eE5leHQgPSB1bmRlZmluZWQ7XG52YXIgY3VzdG9tU2NoZWR1bGVyRm4gPSB1bmRlZmluZWQ7XG5cbnZhciBhc2FwID0gZnVuY3Rpb24gYXNhcChjYWxsYmFjaywgYXJnKSB7XG4gIHF1ZXVlW2xlbl0gPSBjYWxsYmFjaztcbiAgcXVldWVbbGVuICsgMV0gPSBhcmc7XG4gIGxlbiArPSAyO1xuICBpZiAobGVuID09PSAyKSB7XG4gICAgLy8gSWYgbGVuIGlzIDIsIHRoYXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHNjaGVkdWxlIGFuIGFzeW5jIGZsdXNoLlxuICAgIC8vIElmIGFkZGl0aW9uYWwgY2FsbGJhY2tzIGFyZSBxdWV1ZWQgYmVmb3JlIHRoZSBxdWV1ZSBpcyBmbHVzaGVkLCB0aGV5XG4gICAgLy8gd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhpcyBmbHVzaCB0aGF0IHdlIGFyZSBzY2hlZHVsaW5nLlxuICAgIGlmIChjdXN0b21TY2hlZHVsZXJGbikge1xuICAgICAgY3VzdG9tU2NoZWR1bGVyRm4oZmx1c2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2hlZHVsZUZsdXNoKCk7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBzZXRTY2hlZHVsZXIoc2NoZWR1bGVGbikge1xuICBjdXN0b21TY2hlZHVsZXJGbiA9IHNjaGVkdWxlRm47XG59XG5cbmZ1bmN0aW9uIHNldEFzYXAoYXNhcEZuKSB7XG4gIGFzYXAgPSBhc2FwRm47XG59XG5cbnZhciBicm93c2VyV2luZG93ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB1bmRlZmluZWQ7XG52YXIgYnJvd3Nlckdsb2JhbCA9IGJyb3dzZXJXaW5kb3cgfHwge307XG52YXIgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIgPSBicm93c2VyR2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgYnJvd3Nlckdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGlzTm9kZSA9IHR5cGVvZiBzZWxmID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHt9KS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXSc7XG5cbi8vIHRlc3QgZm9yIHdlYiB3b3JrZXIgYnV0IG5vdCBpbiBJRTEwXG52YXIgaXNXb3JrZXIgPSB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBub2RlXG5mdW5jdGlvbiB1c2VOZXh0VGljaygpIHtcbiAgLy8gbm9kZSB2ZXJzaW9uIDAuMTAueCBkaXNwbGF5cyBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2hlbiBuZXh0VGljayBpcyB1c2VkIHJlY3Vyc2l2ZWx5XG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY3Vqb2pzL3doZW4vaXNzdWVzLzQxMCBmb3IgZGV0YWlsc1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgfTtcbn1cblxuLy8gdmVydHhcbmZ1bmN0aW9uIHVzZVZlcnR4VGltZXIoKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmVydHhOZXh0KGZsdXNoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcigpIHtcbiAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpO1xuICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBub2RlLmRhdGEgPSBpdGVyYXRpb25zID0gKytpdGVyYXRpb25zICUgMjtcbiAgfTtcbn1cblxuLy8gd2ViIHdvcmtlclxuZnVuY3Rpb24gdXNlTWVzc2FnZUNoYW5uZWwoKSB7XG4gIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZmx1c2g7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVNldFRpbWVvdXQoKSB7XG4gIC8vIFN0b3JlIHNldFRpbWVvdXQgcmVmZXJlbmNlIHNvIGVzNi1wcm9taXNlIHdpbGwgYmUgdW5hZmZlY3RlZCBieVxuICAvLyBvdGhlciBjb2RlIG1vZGlmeWluZyBzZXRUaW1lb3V0IChsaWtlIHNpbm9uLnVzZUZha2VUaW1lcnMoKSlcbiAgdmFyIGdsb2JhbFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnbG9iYWxTZXRUaW1lb3V0KGZsdXNoLCAxKTtcbiAgfTtcbn1cblxudmFyIHF1ZXVlID0gbmV3IEFycmF5KDEwMDApO1xuZnVuY3Rpb24gZmx1c2goKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICB2YXIgY2FsbGJhY2sgPSBxdWV1ZVtpXTtcbiAgICB2YXIgYXJnID0gcXVldWVbaSArIDFdO1xuXG4gICAgY2FsbGJhY2soYXJnKTtcblxuICAgIHF1ZXVlW2ldID0gdW5kZWZpbmVkO1xuICAgIHF1ZXVlW2kgKyAxXSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxlbiA9IDA7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRWZXJ0eCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgciA9IHJlcXVpcmU7XG4gICAgdmFyIHZlcnR4ID0gcigndmVydHgnKTtcbiAgICB2ZXJ0eE5leHQgPSB2ZXJ0eC5ydW5Pbkxvb3AgfHwgdmVydHgucnVuT25Db250ZXh0O1xuICAgIHJldHVybiB1c2VWZXJ0eFRpbWVyKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdXNlU2V0VGltZW91dCgpO1xuICB9XG59XG5cbnZhciBzY2hlZHVsZUZsdXNoID0gdW5kZWZpbmVkO1xuLy8gRGVjaWRlIHdoYXQgYXN5bmMgbWV0aG9kIHRvIHVzZSB0byB0cmlnZ2VyaW5nIHByb2Nlc3Npbmcgb2YgcXVldWVkIGNhbGxiYWNrczpcbmlmIChpc05vZGUpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZU5leHRUaWNrKCk7XG59IGVsc2UgaWYgKEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNdXRhdGlvbk9ic2VydmVyKCk7XG59IGVsc2UgaWYgKGlzV29ya2VyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNZXNzYWdlQ2hhbm5lbCgpO1xufSBlbHNlIGlmIChicm93c2VyV2luZG93ID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IGF0dGVtcHRWZXJ0eCgpO1xufSBlbHNlIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZVNldFRpbWVvdXQoKTtcbn1cblxuZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX2FyZ3VtZW50cyA9IGFyZ3VtZW50cztcblxuICB2YXIgcGFyZW50ID0gdGhpcztcblxuICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcihub29wKTtcblxuICBpZiAoY2hpbGRbUFJPTUlTRV9JRF0gPT09IHVuZGVmaW5lZCkge1xuICAgIG1ha2VQcm9taXNlKGNoaWxkKTtcbiAgfVxuXG4gIHZhciBfc3RhdGUgPSBwYXJlbnQuX3N0YXRlO1xuXG4gIGlmIChfc3RhdGUpIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNhbGxiYWNrID0gX2FyZ3VtZW50c1tfc3RhdGUgLSAxXTtcbiAgICAgIGFzYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gaW52b2tlQ2FsbGJhY2soX3N0YXRlLCBjaGlsZCwgY2FsbGJhY2ssIHBhcmVudC5fcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pKCk7XG4gIH0gZWxzZSB7XG4gICAgc3Vic2NyaWJlKHBhcmVudCwgY2hpbGQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZDtcbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlc29sdmVgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgcmVzb2x2ZWQgd2l0aCB0aGVcbiAgcGFzc2VkIGB2YWx1ZWAuIEl0IGlzIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICByZXNvbHZlKDEpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGFib3ZlLCB5b3VyIGNvZGUgbm93IHNpbXBseSBiZWNvbWVzIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgxKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIHJlc29sdmVcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gdmFsdWUgdmFsdWUgdGhhdCB0aGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGhcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCB3aWxsIGJlY29tZSBmdWxmaWxsZWQgd2l0aCB0aGUgZ2l2ZW5cbiAgYHZhbHVlYFxuKi9cbmZ1bmN0aW9uIHJlc29sdmUob2JqZWN0KSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QuY29uc3RydWN0b3IgPT09IENvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVzb2x2ZShwcm9taXNlLCBvYmplY3QpO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIFBST01JU0VfSUQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpO1xuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIFBFTkRJTkcgPSB2b2lkIDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG5cbnZhciBHRVRfVEhFTl9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiBzZWxmRnVsZmlsbG1lbnQoKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZlwiKTtcbn1cblxuZnVuY3Rpb24gY2Fubm90UmV0dXJuT3duKCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcignQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLicpO1xufVxuXG5mdW5jdGlvbiBnZXRUaGVuKHByb21pc2UpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcHJvbWlzZS50aGVuO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIEdFVF9USEVOX0VSUk9SLmVycm9yID0gZXJyb3I7XG4gICAgcmV0dXJuIEdFVF9USEVOX0VSUk9SO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVRoZW4odGhlbiwgdmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcikge1xuICB0cnkge1xuICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSwgdGhlbikge1xuICBhc2FwKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgdmFyIHNlYWxlZCA9IGZhbHNlO1xuICAgIHZhciBlcnJvciA9IHRyeVRoZW4odGhlbiwgdGhlbmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkge1xuICAgICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoc2VhbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlYWxlZCA9IHRydWU7XG5cbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9LCAnU2V0dGxlOiAnICsgKHByb21pc2UuX2xhYmVsIHx8ICcgdW5rbm93biBwcm9taXNlJykpO1xuXG4gICAgaWYgKCFzZWFsZWQgJiYgZXJyb3IpIHtcbiAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9XG4gIH0sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSkge1xuICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBGVUxGSUxMRUQpIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2UgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZSh0aGVuYWJsZSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUsIHRoZW4kJCkge1xuICBpZiAobWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3RvciA9PT0gcHJvbWlzZS5jb25zdHJ1Y3RvciAmJiB0aGVuJCQgPT09IHRoZW4gJiYgbWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3Rvci5yZXNvbHZlID09PSByZXNvbHZlKSB7XG4gICAgaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRoZW4kJCA9PT0gR0VUX1RIRU5fRVJST1IpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgR0VUX1RIRU5fRVJST1IuZXJyb3IpO1xuICAgIH0gZWxzZSBpZiAodGhlbiQkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoZW4kJCkpIHtcbiAgICAgIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuJCQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHNlbGZGdWxmaWxsbWVudCgpKTtcbiAgfSBlbHNlIGlmIChvYmplY3RPckZ1bmN0aW9uKHZhbHVlKSkge1xuICAgIGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUsIGdldFRoZW4odmFsdWUpKTtcbiAgfSBlbHNlIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdWJsaXNoUmVqZWN0aW9uKHByb21pc2UpIHtcbiAgaWYgKHByb21pc2UuX29uZXJyb3IpIHtcbiAgICBwcm9taXNlLl9vbmVycm9yKHByb21pc2UuX3Jlc3VsdCk7XG4gIH1cblxuICBwdWJsaXNoKHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHByb21pc2UsIHZhbHVlKSB7XG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHByb21pc2UuX3Jlc3VsdCA9IHZhbHVlO1xuICBwcm9taXNlLl9zdGF0ZSA9IEZVTEZJTExFRDtcblxuICBpZiAocHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgYXNhcChwdWJsaXNoLCBwcm9taXNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVqZWN0KHByb21pc2UsIHJlYXNvbikge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJvbWlzZS5fc3RhdGUgPSBSRUpFQ1RFRDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gcmVhc29uO1xuXG4gIGFzYXAocHVibGlzaFJlamVjdGlvbiwgcHJvbWlzZSk7XG59XG5cbmZ1bmN0aW9uIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX3N1YnNjcmliZXJzID0gcGFyZW50Ll9zdWJzY3JpYmVycztcbiAgdmFyIGxlbmd0aCA9IF9zdWJzY3JpYmVycy5sZW5ndGg7XG5cbiAgcGFyZW50Ll9vbmVycm9yID0gbnVsbDtcblxuICBfc3Vic2NyaWJlcnNbbGVuZ3RoXSA9IGNoaWxkO1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgRlVMRklMTEVEXSA9IG9uRnVsZmlsbG1lbnQ7XG4gIF9zdWJzY3JpYmVyc1tsZW5ndGggKyBSRUpFQ1RFRF0gPSBvblJlamVjdGlvbjtcblxuICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHtcbiAgICBhc2FwKHB1Ymxpc2gsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaChwcm9taXNlKSB7XG4gIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJzO1xuICB2YXIgc2V0dGxlZCA9IHByb21pc2UuX3N0YXRlO1xuXG4gIGlmIChzdWJzY3JpYmVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY2hpbGQgPSB1bmRlZmluZWQsXG4gICAgICBjYWxsYmFjayA9IHVuZGVmaW5lZCxcbiAgICAgIGRldGFpbCA9IHByb21pc2UuX3Jlc3VsdDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgY2hpbGQgPSBzdWJzY3JpYmVyc1tpXTtcbiAgICBjYWxsYmFjayA9IHN1YnNjcmliZXJzW2kgKyBzZXR0bGVkXTtcblxuICAgIGlmIChjaGlsZCkge1xuICAgICAgaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgY2hpbGQsIGNhbGxiYWNrLCBkZXRhaWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhkZXRhaWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG59XG5cbmZ1bmN0aW9uIEVycm9yT2JqZWN0KCkge1xuICB0aGlzLmVycm9yID0gbnVsbDtcbn1cblxudmFyIFRSWV9DQVRDSF9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGRldGFpbCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBUUllfQ0FUQ0hfRVJST1IuZXJyb3IgPSBlO1xuICAgIHJldHVybiBUUllfQ0FUQ0hfRVJST1I7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgcHJvbWlzZSwgY2FsbGJhY2ssIGRldGFpbCkge1xuICB2YXIgaGFzQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKGNhbGxiYWNrKSxcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkLFxuICAgICAgZXJyb3IgPSB1bmRlZmluZWQsXG4gICAgICBzdWNjZWVkZWQgPSB1bmRlZmluZWQsXG4gICAgICBmYWlsZWQgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKGhhc0NhbGxiYWNrKSB7XG4gICAgdmFsdWUgPSB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gVFJZX0NBVENIX0VSUk9SKSB7XG4gICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgZXJyb3IgPSB2YWx1ZS5lcnJvcjtcbiAgICAgIHZhbHVlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgY2Fubm90UmV0dXJuT3duKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGRldGFpbDtcbiAgICBzdWNjZWVkZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgLy8gbm9vcFxuICB9IGVsc2UgaWYgKGhhc0NhbGxiYWNrICYmIHN1Y2NlZWRlZCkge1xuICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoZmFpbGVkKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9IGVsc2UgaWYgKHNldHRsZWQgPT09IEZVTEZJTExFRCkge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplUHJvbWlzZShwcm9taXNlLCByZXNvbHZlcikge1xuICB0cnkge1xuICAgIHJlc29sdmVyKGZ1bmN0aW9uIHJlc29sdmVQcm9taXNlKHZhbHVlKSB7XG4gICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gcmVqZWN0UHJvbWlzZShyZWFzb24pIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIF9yZWplY3QocHJvbWlzZSwgZSk7XG4gIH1cbn1cblxudmFyIGlkID0gMDtcbmZ1bmN0aW9uIG5leHRJZCgpIHtcbiAgcmV0dXJuIGlkKys7XG59XG5cbmZ1bmN0aW9uIG1ha2VQcm9taXNlKHByb21pc2UpIHtcbiAgcHJvbWlzZVtQUk9NSVNFX0lEXSA9IGlkKys7XG4gIHByb21pc2UuX3N0YXRlID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9yZXN1bHQgPSB1bmRlZmluZWQ7XG4gIHByb21pc2UuX3N1YnNjcmliZXJzID0gW107XG59XG5cbmZ1bmN0aW9uIEVudW1lcmF0b3IoQ29uc3RydWN0b3IsIGlucHV0KSB7XG4gIHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgdGhpcy5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuXG4gIGlmICghdGhpcy5wcm9taXNlW1BST01JU0VfSURdKSB7XG4gICAgbWFrZVByb21pc2UodGhpcy5wcm9taXNlKTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5sZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgdGhpcy5fcmVtYWluaW5nID0gaW5wdXQubGVuZ3RoO1xuXG4gICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGggfHwgMDtcbiAgICAgIHRoaXMuX2VudW1lcmF0ZSgpO1xuICAgICAgaWYgKHRoaXMuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICBmdWxmaWxsKHRoaXMucHJvbWlzZSwgdGhpcy5fcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgX3JlamVjdCh0aGlzLnByb21pc2UsIHZhbGlkYXRpb25FcnJvcigpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0aW9uRXJyb3IoKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0FycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheScpO1xufTtcblxuRW51bWVyYXRvci5wcm90b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICB2YXIgX2lucHV0ID0gdGhpcy5faW5wdXQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IHRoaXMuX3N0YXRlID09PSBQRU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHRoaXMuX2VhY2hFbnRyeShfaW5wdXRbaV0sIGkpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVudHJ5ID0gZnVuY3Rpb24gKGVudHJ5LCBpKSB7XG4gIHZhciBjID0gdGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcjtcbiAgdmFyIHJlc29sdmUkJCA9IGMucmVzb2x2ZTtcblxuICBpZiAocmVzb2x2ZSQkID09PSByZXNvbHZlKSB7XG4gICAgdmFyIF90aGVuID0gZ2V0VGhlbihlbnRyeSk7XG5cbiAgICBpZiAoX3RoZW4gPT09IHRoZW4gJiYgZW50cnkuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgICB0aGlzLl9zZXR0bGVkQXQoZW50cnkuX3N0YXRlLCBpLCBlbnRyeS5fcmVzdWx0KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBfdGhlbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fcmVtYWluaW5nLS07XG4gICAgICB0aGlzLl9yZXN1bHRbaV0gPSBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGMgPT09IFByb21pc2UpIHtcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IGMobm9vcCk7XG4gICAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIGVudHJ5LCBfdGhlbik7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQocHJvbWlzZSwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgYyhmdW5jdGlvbiAocmVzb2x2ZSQkKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlJCQoZW50cnkpO1xuICAgICAgfSksIGkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl93aWxsU2V0dGxlQXQocmVzb2x2ZSQkKGVudHJ5KSwgaSk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl9zZXR0bGVkQXQgPSBmdW5jdGlvbiAoc3RhdGUsIGksIHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gUEVORElORykge1xuICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuXG4gICAgaWYgKHN0YXRlID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jlc3VsdFtpXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbiAocHJvbWlzZSwgaSkge1xuICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgc3Vic2NyaWJlKHByb21pc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVudW1lcmF0b3IuX3NldHRsZWRBdChGVUxGSUxMRUQsIGksIHZhbHVlKTtcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoUkVKRUNURUQsIGksIHJlYXNvbik7XG4gIH0pO1xufTtcblxuLyoqXG4gIGBQcm9taXNlLmFsbGAgYWNjZXB0cyBhbiBhcnJheSBvZiBwcm9taXNlcywgYW5kIHJldHVybnMgYSBuZXcgcHJvbWlzZSB3aGljaFxuICBpcyBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSBvZiBmdWxmaWxsbWVudCB2YWx1ZXMgZm9yIHRoZSBwYXNzZWQgcHJvbWlzZXMsIG9yXG4gIHJlamVjdGVkIHdpdGggdGhlIHJlYXNvbiBvZiB0aGUgZmlyc3QgcGFzc2VkIHByb21pc2UgdG8gYmUgcmVqZWN0ZWQuIEl0IGNhc3RzIGFsbFxuICBlbGVtZW50cyBvZiB0aGUgcGFzc2VkIGl0ZXJhYmxlIHRvIHByb21pc2VzIGFzIGl0IHJ1bnMgdGhpcyBhbGdvcml0aG0uXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlc29sdmUoMik7XG4gIGxldCBwcm9taXNlMyA9IHJlc29sdmUoMyk7XG4gIGxldCBwcm9taXNlcyA9IFsgcHJvbWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdO1xuXG4gIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGFycmF5KXtcbiAgICAvLyBUaGUgYXJyYXkgaGVyZSB3b3VsZCBiZSBbIDEsIDIsIDMgXTtcbiAgfSk7XG4gIGBgYFxuXG4gIElmIGFueSBvZiB0aGUgYHByb21pc2VzYCBnaXZlbiB0byBgYWxsYCBhcmUgcmVqZWN0ZWQsIHRoZSBmaXJzdCBwcm9taXNlXG4gIHRoYXQgaXMgcmVqZWN0ZWQgd2lsbCBiZSBnaXZlbiBhcyBhbiBhcmd1bWVudCB0byB0aGUgcmV0dXJuZWQgcHJvbWlzZXMnc1xuICByZWplY3Rpb24gaGFuZGxlci4gRm9yIGV4YW1wbGU6XG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlamVjdChuZXcgRXJyb3IoXCIyXCIpKTtcbiAgbGV0IHByb21pc2UzID0gcmVqZWN0KG5ldyBFcnJvcihcIjNcIikpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gQ29kZSBoZXJlIG5ldmVyIHJ1bnMgYmVjYXVzZSB0aGVyZSBhcmUgcmVqZWN0ZWQgcHJvbWlzZXMhXG4gIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgLy8gZXJyb3IubWVzc2FnZSA9PT0gXCIyXCJcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgYWxsXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBcnJheX0gZW50cmllcyBhcnJheSBvZiBwcm9taXNlc1xuICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsIGBwcm9taXNlc2AgaGF2ZSBiZWVuXG4gIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQgaWYgYW55IG9mIHRoZW0gYmVjb21lIHJlamVjdGVkLlxuICBAc3RhdGljXG4qL1xuZnVuY3Rpb24gYWxsKGVudHJpZXMpIHtcbiAgcmV0dXJuIG5ldyBFbnVtZXJhdG9yKHRoaXMsIGVudHJpZXMpLnByb21pc2U7XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yYWNlYCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2ggaXMgc2V0dGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlXG4gIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIHNldHRsZS5cblxuICBFeGFtcGxlOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMicpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIHJlc3VsdCA9PT0gJ3Byb21pc2UgMicgYmVjYXVzZSBpdCB3YXMgcmVzb2x2ZWQgYmVmb3JlIHByb21pc2UxXG4gICAgLy8gd2FzIHJlc29sdmVkLlxuICB9KTtcbiAgYGBgXG5cbiAgYFByb21pc2UucmFjZWAgaXMgZGV0ZXJtaW5pc3RpYyBpbiB0aGF0IG9ubHkgdGhlIHN0YXRlIG9mIHRoZSBmaXJzdFxuICBzZXR0bGVkIHByb21pc2UgbWF0dGVycy4gRm9yIGV4YW1wbGUsIGV2ZW4gaWYgb3RoZXIgcHJvbWlzZXMgZ2l2ZW4gdG8gdGhlXG4gIGBwcm9taXNlc2AgYXJyYXkgYXJndW1lbnQgYXJlIHJlc29sdmVkLCBidXQgdGhlIGZpcnN0IHNldHRsZWQgcHJvbWlzZSBoYXNcbiAgYmVjb21lIHJlamVjdGVkIGJlZm9yZSB0aGUgb3RoZXIgcHJvbWlzZXMgYmVjYW1lIGZ1bGZpbGxlZCwgdGhlIHJldHVybmVkXG4gIHByb21pc2Ugd2lsbCBiZWNvbWUgcmVqZWN0ZWQ6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMScpO1xuICAgIH0sIDIwMCk7XG4gIH0pO1xuXG4gIGxldCBwcm9taXNlMiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcigncHJvbWlzZSAyJykpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgcHJvbWlzZSAyIGJlY2FtZSByZWplY3RlZCBiZWZvcmVcbiAgICAvLyBwcm9taXNlIDEgYmVjYW1lIGZ1bGZpbGxlZFxuICB9KTtcbiAgYGBgXG5cbiAgQW4gZXhhbXBsZSByZWFsLXdvcmxkIHVzZSBjYXNlIGlzIGltcGxlbWVudGluZyB0aW1lb3V0czpcblxuICBgYGBqYXZhc2NyaXB0XG4gIFByb21pc2UucmFjZShbYWpheCgnZm9vLmpzb24nKSwgdGltZW91dCg1MDAwKV0pXG4gIGBgYFxuXG4gIEBtZXRob2QgcmFjZVxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IHByb21pc2VzIGFycmF5IG9mIHByb21pc2VzIHRvIG9ic2VydmVcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2Ugd2hpY2ggc2V0dGxlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGZpcnN0IHBhc3NlZFxuICBwcm9taXNlIHRvIHNldHRsZS5cbiovXG5mdW5jdGlvbiByYWNlKGVudHJpZXMpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuICBpZiAoIWlzQXJyYXkoZW50cmllcykpIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChfLCByZWplY3QpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLicpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBsZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgQ29uc3RydWN0b3IucmVzb2x2ZShlbnRyaWVzW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlamVjdGAgcmV0dXJucyBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgcGFzc2VkIGByZWFzb25gLlxuICBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgcmVqZWN0KG5ldyBFcnJvcignV0hPT1BTJykpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCByZWplY3RcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gcmVhc29uIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCB3aXRoLlxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSByZWplY3RlZCB3aXRoIHRoZSBnaXZlbiBgcmVhc29uYC5cbiovXG5mdW5jdGlvbiByZWplY3QocmVhc29uKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBuZWVkc1Jlc29sdmVyKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yJyk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzTmV3KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xufVxuXG4vKipcbiAgUHJvbWlzZSBvYmplY3RzIHJlcHJlc2VudCB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFRoZVxuICBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaFxuICByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb25cbiAgd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG5cbiAgVGVybWlub2xvZ3lcbiAgLS0tLS0tLS0tLS1cblxuICAtIGBwcm9taXNlYCBpcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24gd2l0aCBhIGB0aGVuYCBtZXRob2Qgd2hvc2UgYmVoYXZpb3IgY29uZm9ybXMgdG8gdGhpcyBzcGVjaWZpY2F0aW9uLlxuICAtIGB0aGVuYWJsZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBhIGB0aGVuYCBtZXRob2QuXG4gIC0gYHZhbHVlYCBpcyBhbnkgbGVnYWwgSmF2YVNjcmlwdCB2YWx1ZSAoaW5jbHVkaW5nIHVuZGVmaW5lZCwgYSB0aGVuYWJsZSwgb3IgYSBwcm9taXNlKS5cbiAgLSBgZXhjZXB0aW9uYCBpcyBhIHZhbHVlIHRoYXQgaXMgdGhyb3duIHVzaW5nIHRoZSB0aHJvdyBzdGF0ZW1lbnQuXG4gIC0gYHJlYXNvbmAgaXMgYSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aHkgYSBwcm9taXNlIHdhcyByZWplY3RlZC5cbiAgLSBgc2V0dGxlZGAgdGhlIGZpbmFsIHJlc3Rpbmcgc3RhdGUgb2YgYSBwcm9taXNlLCBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG5cbiAgQSBwcm9taXNlIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOiBwZW5kaW5nLCBmdWxmaWxsZWQsIG9yIHJlamVjdGVkLlxuXG4gIFByb21pc2VzIHRoYXQgYXJlIGZ1bGZpbGxlZCBoYXZlIGEgZnVsZmlsbG1lbnQgdmFsdWUgYW5kIGFyZSBpbiB0aGUgZnVsZmlsbGVkXG4gIHN0YXRlLiAgUHJvbWlzZXMgdGhhdCBhcmUgcmVqZWN0ZWQgaGF2ZSBhIHJlamVjdGlvbiByZWFzb24gYW5kIGFyZSBpbiB0aGVcbiAgcmVqZWN0ZWQgc3RhdGUuICBBIGZ1bGZpbGxtZW50IHZhbHVlIGlzIG5ldmVyIGEgdGhlbmFibGUuXG5cbiAgUHJvbWlzZXMgY2FuIGFsc28gYmUgc2FpZCB0byAqcmVzb2x2ZSogYSB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgYWxzbyBhXG4gIHByb21pc2UsIHRoZW4gdGhlIG9yaWdpbmFsIHByb21pc2UncyBzZXR0bGVkIHN0YXRlIHdpbGwgbWF0Y2ggdGhlIHZhbHVlJ3NcbiAgc2V0dGxlZCBzdGF0ZS4gIFNvIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyB3aWxsXG4gIGl0c2VsZiByZWplY3QsIGFuZCBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpbGxcbiAgaXRzZWxmIGZ1bGZpbGwuXG5cblxuICBCYXNpYyBVc2FnZTpcbiAgLS0tLS0tLS0tLS0tXG5cbiAgYGBganNcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAvLyBvbiBzdWNjZXNzXG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG5cbiAgICAvLyBvbiBmYWlsdXJlXG4gICAgcmVqZWN0KHJlYXNvbik7XG4gIH0pO1xuXG4gIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgQWR2YW5jZWQgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLS0tLVxuXG4gIFByb21pc2VzIHNoaW5lIHdoZW4gYWJzdHJhY3RpbmcgYXdheSBhc3luY2hyb25vdXMgaW50ZXJhY3Rpb25zIHN1Y2ggYXNcbiAgYFhNTEh0dHBSZXF1ZXN0YHMuXG5cbiAgYGBganNcbiAgZnVuY3Rpb24gZ2V0SlNPTih1cmwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICAgIGxldCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7XG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHhoci5zZW5kKCk7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IHRoaXMuRE9ORSkge1xuICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdnZXRKU09OOiBgJyArIHVybCArICdgIGZhaWxlZCB3aXRoIHN0YXR1czogWycgKyB0aGlzLnN0YXR1cyArICddJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEpTT04oJy9wb3N0cy5qc29uJykudGhlbihmdW5jdGlvbihqc29uKSB7XG4gICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgLy8gb24gcmVqZWN0aW9uXG4gIH0pO1xuICBgYGBcblxuICBVbmxpa2UgY2FsbGJhY2tzLCBwcm9taXNlcyBhcmUgZ3JlYXQgY29tcG9zYWJsZSBwcmltaXRpdmVzLlxuXG4gIGBgYGpzXG4gIFByb21pc2UuYWxsKFtcbiAgICBnZXRKU09OKCcvcG9zdHMnKSxcbiAgICBnZXRKU09OKCcvY29tbWVudHMnKVxuICBdKS50aGVuKGZ1bmN0aW9uKHZhbHVlcyl7XG4gICAgdmFsdWVzWzBdIC8vID0+IHBvc3RzSlNPTlxuICAgIHZhbHVlc1sxXSAvLyA9PiBjb21tZW50c0pTT05cblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH0pO1xuICBgYGBcblxuICBAY2xhc3MgUHJvbWlzZVxuICBAcGFyYW0ge2Z1bmN0aW9ufSByZXNvbHZlclxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEBjb25zdHJ1Y3RvclxuKi9cbmZ1bmN0aW9uIFByb21pc2UocmVzb2x2ZXIpIHtcbiAgdGhpc1tQUk9NSVNFX0lEXSA9IG5leHRJZCgpO1xuICB0aGlzLl9yZXN1bHQgPSB0aGlzLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fc3Vic2NyaWJlcnMgPSBbXTtcblxuICBpZiAobm9vcCAhPT0gcmVzb2x2ZXIpIHtcbiAgICB0eXBlb2YgcmVzb2x2ZXIgIT09ICdmdW5jdGlvbicgJiYgbmVlZHNSZXNvbHZlcigpO1xuICAgIHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlID8gaW5pdGlhbGl6ZVByb21pc2UodGhpcywgcmVzb2x2ZXIpIDogbmVlZHNOZXcoKTtcbiAgfVxufVxuXG5Qcm9taXNlLmFsbCA9IGFsbDtcblByb21pc2UucmFjZSA9IHJhY2U7XG5Qcm9taXNlLnJlc29sdmUgPSByZXNvbHZlO1xuUHJvbWlzZS5yZWplY3QgPSByZWplY3Q7XG5Qcm9taXNlLl9zZXRTY2hlZHVsZXIgPSBzZXRTY2hlZHVsZXI7XG5Qcm9taXNlLl9zZXRBc2FwID0gc2V0QXNhcDtcblByb21pc2UuX2FzYXAgPSBhc2FwO1xuXG5Qcm9taXNlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFByb21pc2UsXG5cbiAgLyoqXG4gICAgVGhlIHByaW1hcnkgd2F5IG9mIGludGVyYWN0aW5nIHdpdGggYSBwcm9taXNlIGlzIHRocm91Z2ggaXRzIGB0aGVuYCBtZXRob2QsXG4gICAgd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGVcbiAgICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uKHVzZXIpe1xuICAgICAgLy8gdXNlciBpcyBhdmFpbGFibGVcbiAgICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gdXNlciBpcyB1bmF2YWlsYWJsZSwgYW5kIHlvdSBhcmUgZ2l2ZW4gdGhlIHJlYXNvbiB3aHlcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQ2hhaW5pbmdcbiAgICAtLS0tLS0tLVxuICBcbiAgICBUaGUgcmV0dXJuIHZhbHVlIG9mIGB0aGVuYCBpcyBpdHNlbGYgYSBwcm9taXNlLiAgVGhpcyBzZWNvbmQsICdkb3duc3RyZWFtJ1xuICAgIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmaXJzdCBwcm9taXNlJ3MgZnVsZmlsbG1lbnRcbiAgICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiB1c2VyLm5hbWU7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuICdkZWZhdWx0IG5hbWUnO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHVzZXJOYW1lKSB7XG4gICAgICAvLyBJZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHVzZXJOYW1lYCB3aWxsIGJlIHRoZSB1c2VyJ3MgbmFtZSwgb3RoZXJ3aXNlIGl0XG4gICAgICAvLyB3aWxsIGJlIGAnZGVmYXVsdCBuYW1lJ2BcbiAgICB9KTtcbiAgXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jyk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdyZSB1bmhhcHB5Jyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAvLyBpZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHJlYXNvbmAgd2lsbCBiZSAnRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknLlxuICAgICAgLy8gSWYgYGZpbmRVc2VyYCByZWplY3RlZCwgYHJlYXNvbmAgd2lsbCBiZSAnYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScuXG4gICAgfSk7XG4gICAgYGBgXG4gICAgSWYgdGhlIGRvd25zdHJlYW0gcHJvbWlzZSBkb2VzIG5vdCBzcGVjaWZ5IGEgcmVqZWN0aW9uIGhhbmRsZXIsIHJlamVjdGlvbiByZWFzb25zIHdpbGwgYmUgcHJvcGFnYXRlZCBmdXJ0aGVyIGRvd25zdHJlYW0uXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEFzc2ltaWxhdGlvblxuICAgIC0tLS0tLS0tLS0tLVxuICBcbiAgICBTb21ldGltZXMgdGhlIHZhbHVlIHlvdSB3YW50IHRvIHByb3BhZ2F0ZSB0byBhIGRvd25zdHJlYW0gcHJvbWlzZSBjYW4gb25seSBiZVxuICAgIHJldHJpZXZlZCBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpbiB0aGVcbiAgICBmdWxmaWxsbWVudCBvciByZWplY3Rpb24gaGFuZGxlci4gVGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIHRoZW4gYmUgcGVuZGluZ1xuICAgIHVudGlsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHNldHRsZWQuIFRoaXMgaXMgY2FsbGVkICphc3NpbWlsYXRpb24qLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBUaGUgdXNlcidzIGNvbW1lbnRzIGFyZSBub3cgYXZhaWxhYmxlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIElmIHRoZSBhc3NpbWxpYXRlZCBwcm9taXNlIHJlamVjdHMsIHRoZW4gdGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIGFsc28gcmVqZWN0LlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIGZ1bGZpbGxzLCB3ZSdsbCBoYXZlIHRoZSB2YWx1ZSBoZXJlXG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCByZWplY3RzLCB3ZSdsbCBoYXZlIHRoZSByZWFzb24gaGVyZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBTaW1wbGUgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCByZXN1bHQ7XG4gIFxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBmaW5kUmVzdWx0KCk7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9XG4gICAgYGBgXG4gIFxuICAgIEVycmJhY2sgRXhhbXBsZVxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRSZXN1bHQoZnVuY3Rpb24ocmVzdWx0LCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIFByb21pc2UgRXhhbXBsZTtcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGZpbmRSZXN1bHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQWR2YW5jZWQgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCBhdXRob3IsIGJvb2tzO1xuICBcbiAgICB0cnkge1xuICAgICAgYXV0aG9yID0gZmluZEF1dGhvcigpO1xuICAgICAgYm9va3MgID0gZmluZEJvb2tzQnlBdXRob3IoYXV0aG9yKTtcbiAgICAgIC8vIHN1Y2Nlc3NcbiAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgLy8gZmFpbHVyZVxuICAgIH1cbiAgICBgYGBcbiAgXG4gICAgRXJyYmFjayBFeGFtcGxlXG4gIFxuICAgIGBgYGpzXG4gIFxuICAgIGZ1bmN0aW9uIGZvdW5kQm9va3MoYm9va3MpIHtcbiAgXG4gICAgfVxuICBcbiAgICBmdW5jdGlvbiBmYWlsdXJlKHJlYXNvbikge1xuICBcbiAgICB9XG4gIFxuICAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgIC8vIGZhaWx1cmVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvdW5kQm9va3MoYm9va3MpO1xuICAgICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICAgIGZhaWx1cmUocmVhc29uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgUHJvbWlzZSBFeGFtcGxlO1xuICBcbiAgICBgYGBqYXZhc2NyaXB0XG4gICAgZmluZEF1dGhvcigpLlxuICAgICAgdGhlbihmaW5kQm9va3NCeUF1dGhvcikuXG4gICAgICB0aGVuKGZ1bmN0aW9uKGJvb2tzKXtcbiAgICAgICAgLy8gZm91bmQgYm9va3NcbiAgICB9KS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQG1ldGhvZCB0aGVuXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25GdWxmaWxsZWRcbiAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG4gIHRoZW46IHRoZW4sXG5cbiAgLyoqXG4gICAgYGNhdGNoYCBpcyBzaW1wbHkgc3VnYXIgZm9yIGB0aGVuKHVuZGVmaW5lZCwgb25SZWplY3Rpb24pYCB3aGljaCBtYWtlcyBpdCB0aGUgc2FtZVxuICAgIGFzIHRoZSBjYXRjaCBibG9jayBvZiBhIHRyeS9jYXRjaCBzdGF0ZW1lbnQuXG4gIFxuICAgIGBgYGpzXG4gICAgZnVuY3Rpb24gZmluZEF1dGhvcigpe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZG4ndCBmaW5kIHRoYXQgYXV0aG9yJyk7XG4gICAgfVxuICBcbiAgICAvLyBzeW5jaHJvbm91c1xuICAgIHRyeSB7XG4gICAgICBmaW5kQXV0aG9yKCk7XG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfVxuICBcbiAgICAvLyBhc3luYyB3aXRoIHByb21pc2VzXG4gICAgZmluZEF1dGhvcigpLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBAbWV0aG9kIGNhdGNoXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgQHJldHVybiB7UHJvbWlzZX1cbiAgKi9cbiAgJ2NhdGNoJzogZnVuY3Rpb24gX2NhdGNoKG9uUmVqZWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGlvbik7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHBvbHlmaWxsKCkge1xuICAgIHZhciBsb2NhbCA9IHVuZGVmaW5lZDtcblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IGdsb2JhbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvY2FsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBQID0gbG9jYWwuUHJvbWlzZTtcblxuICAgIGlmIChQKSB7XG4gICAgICAgIHZhciBwcm9taXNlVG9TdHJpbmcgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvbWlzZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFAucmVzb2x2ZSgpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gc2lsZW50bHkgaWdub3JlZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb21pc2VUb1N0cmluZyA9PT0gJ1tvYmplY3QgUHJvbWlzZV0nICYmICFQLmNhc3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvY2FsLlByb21pc2UgPSBQcm9taXNlO1xufVxuXG5wb2x5ZmlsbCgpO1xuLy8gU3RyYW5nZSBjb21wYXQuLlxuUHJvbWlzZS5wb2x5ZmlsbCA9IHBvbHlmaWxsO1xuUHJvbWlzZS5Qcm9taXNlID0gUHJvbWlzZTtcblxucmV0dXJuIFByb21pc2U7XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lczYtcHJvbWlzZS5tYXAiLCIvKiEgSlNPTiB2My4zLjIgfCBodHRwOi8vYmVzdGllanMuZ2l0aHViLmlvL2pzb24zIHwgQ29weXJpZ2h0IDIwMTItMjAxNCwgS2l0IENhbWJyaWRnZSB8IGh0dHA6Ly9raXQubWl0LWxpY2Vuc2Uub3JnICovXG47KGZ1bmN0aW9uICgpIHtcbiAgLy8gRGV0ZWN0IHRoZSBgZGVmaW5lYCBmdW5jdGlvbiBleHBvc2VkIGJ5IGFzeW5jaHJvbm91cyBtb2R1bGUgbG9hZGVycy4gVGhlXG4gIC8vIHN0cmljdCBgZGVmaW5lYCBjaGVjayBpcyBuZWNlc3NhcnkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBgci5qc2AuXG4gIHZhciBpc0xvYWRlciA9IHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kO1xuXG4gIC8vIEEgc2V0IG9mIHR5cGVzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggb2JqZWN0cyBmcm9tIHByaW1pdGl2ZXMuXG4gIHZhciBvYmplY3RUeXBlcyA9IHtcbiAgICBcImZ1bmN0aW9uXCI6IHRydWUsXG4gICAgXCJvYmplY3RcIjogdHJ1ZVxuICB9O1xuXG4gIC8vIERldGVjdCB0aGUgYGV4cG9ydHNgIG9iamVjdCBleHBvc2VkIGJ5IENvbW1vbkpTIGltcGxlbWVudGF0aW9ucy5cbiAgdmFyIGZyZWVFeHBvcnRzID0gb2JqZWN0VHlwZXNbdHlwZW9mIGV4cG9ydHNdICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuICAvLyBVc2UgdGhlIGBnbG9iYWxgIG9iamVjdCBleHBvc2VkIGJ5IE5vZGUgKGluY2x1ZGluZyBCcm93c2VyaWZ5IHZpYVxuICAvLyBgaW5zZXJ0LW1vZHVsZS1nbG9iYWxzYCksIE5hcndoYWwsIGFuZCBSaW5nbyBhcyB0aGUgZGVmYXVsdCBjb250ZXh0LFxuICAvLyBhbmQgdGhlIGB3aW5kb3dgIG9iamVjdCBpbiBicm93c2Vycy4gUmhpbm8gZXhwb3J0cyBhIGBnbG9iYWxgIGZ1bmN0aW9uXG4gIC8vIGluc3RlYWQuXG4gIHZhciByb290ID0gb2JqZWN0VHlwZXNbdHlwZW9mIHdpbmRvd10gJiYgd2luZG93IHx8IHRoaXMsXG4gICAgICBmcmVlR2xvYmFsID0gZnJlZUV4cG9ydHMgJiYgb2JqZWN0VHlwZXNbdHlwZW9mIG1vZHVsZV0gJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgdHlwZW9mIGdsb2JhbCA9PSBcIm9iamVjdFwiICYmIGdsb2JhbDtcblxuICBpZiAoZnJlZUdsb2JhbCAmJiAoZnJlZUdsb2JhbFtcImdsb2JhbFwiXSA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsW1wid2luZG93XCJdID09PSBmcmVlR2xvYmFsIHx8IGZyZWVHbG9iYWxbXCJzZWxmXCJdID09PSBmcmVlR2xvYmFsKSkge1xuICAgIHJvb3QgPSBmcmVlR2xvYmFsO1xuICB9XG5cbiAgLy8gUHVibGljOiBJbml0aWFsaXplcyBKU09OIDMgdXNpbmcgdGhlIGdpdmVuIGBjb250ZXh0YCBvYmplY3QsIGF0dGFjaGluZyB0aGVcbiAgLy8gYHN0cmluZ2lmeWAgYW5kIGBwYXJzZWAgZnVuY3Rpb25zIHRvIHRoZSBzcGVjaWZpZWQgYGV4cG9ydHNgIG9iamVjdC5cbiAgZnVuY3Rpb24gcnVuSW5Db250ZXh0KGNvbnRleHQsIGV4cG9ydHMpIHtcbiAgICBjb250ZXh0IHx8IChjb250ZXh0ID0gcm9vdFtcIk9iamVjdFwiXSgpKTtcbiAgICBleHBvcnRzIHx8IChleHBvcnRzID0gcm9vdFtcIk9iamVjdFwiXSgpKTtcblxuICAgIC8vIE5hdGl2ZSBjb25zdHJ1Y3RvciBhbGlhc2VzLlxuICAgIHZhciBOdW1iZXIgPSBjb250ZXh0W1wiTnVtYmVyXCJdIHx8IHJvb3RbXCJOdW1iZXJcIl0sXG4gICAgICAgIFN0cmluZyA9IGNvbnRleHRbXCJTdHJpbmdcIl0gfHwgcm9vdFtcIlN0cmluZ1wiXSxcbiAgICAgICAgT2JqZWN0ID0gY29udGV4dFtcIk9iamVjdFwiXSB8fCByb290W1wiT2JqZWN0XCJdLFxuICAgICAgICBEYXRlID0gY29udGV4dFtcIkRhdGVcIl0gfHwgcm9vdFtcIkRhdGVcIl0sXG4gICAgICAgIFN5bnRheEVycm9yID0gY29udGV4dFtcIlN5bnRheEVycm9yXCJdIHx8IHJvb3RbXCJTeW50YXhFcnJvclwiXSxcbiAgICAgICAgVHlwZUVycm9yID0gY29udGV4dFtcIlR5cGVFcnJvclwiXSB8fCByb290W1wiVHlwZUVycm9yXCJdLFxuICAgICAgICBNYXRoID0gY29udGV4dFtcIk1hdGhcIl0gfHwgcm9vdFtcIk1hdGhcIl0sXG4gICAgICAgIG5hdGl2ZUpTT04gPSBjb250ZXh0W1wiSlNPTlwiXSB8fCByb290W1wiSlNPTlwiXTtcblxuICAgIC8vIERlbGVnYXRlIHRvIHRoZSBuYXRpdmUgYHN0cmluZ2lmeWAgYW5kIGBwYXJzZWAgaW1wbGVtZW50YXRpb25zLlxuICAgIGlmICh0eXBlb2YgbmF0aXZlSlNPTiA9PSBcIm9iamVjdFwiICYmIG5hdGl2ZUpTT04pIHtcbiAgICAgIGV4cG9ydHMuc3RyaW5naWZ5ID0gbmF0aXZlSlNPTi5zdHJpbmdpZnk7XG4gICAgICBleHBvcnRzLnBhcnNlID0gbmF0aXZlSlNPTi5wYXJzZTtcbiAgICB9XG5cbiAgICAvLyBDb252ZW5pZW5jZSBhbGlhc2VzLlxuICAgIHZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgICAgIGdldENsYXNzID0gb2JqZWN0UHJvdG8udG9TdHJpbmcsXG4gICAgICAgIGlzUHJvcGVydHksIGZvckVhY2gsIHVuZGVmO1xuXG4gICAgLy8gVGVzdCB0aGUgYERhdGUjZ2V0VVRDKmAgbWV0aG9kcy4gQmFzZWQgb24gd29yayBieSBAWWFmZmxlLlxuICAgIHZhciBpc0V4dGVuZGVkID0gbmV3IERhdGUoLTM1MDk4MjczMzQ1NzMyOTIpO1xuICAgIHRyeSB7XG4gICAgICAvLyBUaGUgYGdldFVUQ0Z1bGxZZWFyYCwgYE1vbnRoYCwgYW5kIGBEYXRlYCBtZXRob2RzIHJldHVybiBub25zZW5zaWNhbFxuICAgICAgLy8gcmVzdWx0cyBmb3IgY2VydGFpbiBkYXRlcyBpbiBPcGVyYSA+PSAxMC41My5cbiAgICAgIGlzRXh0ZW5kZWQgPSBpc0V4dGVuZGVkLmdldFVUQ0Z1bGxZZWFyKCkgPT0gLTEwOTI1MiAmJiBpc0V4dGVuZGVkLmdldFVUQ01vbnRoKCkgPT09IDAgJiYgaXNFeHRlbmRlZC5nZXRVVENEYXRlKCkgPT09IDEgJiZcbiAgICAgICAgLy8gU2FmYXJpIDwgMi4wLjIgc3RvcmVzIHRoZSBpbnRlcm5hbCBtaWxsaXNlY29uZCB0aW1lIHZhbHVlIGNvcnJlY3RseSxcbiAgICAgICAgLy8gYnV0IGNsaXBzIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGRhdGUgbWV0aG9kcyB0byB0aGUgcmFuZ2Ugb2ZcbiAgICAgICAgLy8gc2lnbmVkIDMyLWJpdCBpbnRlZ2VycyAoWy0yICoqIDMxLCAyICoqIDMxIC0gMV0pLlxuICAgICAgICBpc0V4dGVuZGVkLmdldFVUQ0hvdXJzKCkgPT0gMTAgJiYgaXNFeHRlbmRlZC5nZXRVVENNaW51dGVzKCkgPT0gMzcgJiYgaXNFeHRlbmRlZC5nZXRVVENTZWNvbmRzKCkgPT0gNiAmJiBpc0V4dGVuZGVkLmdldFVUQ01pbGxpc2Vjb25kcygpID09IDcwODtcbiAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG5cbiAgICAvLyBJbnRlcm5hbDogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBuYXRpdmUgYEpTT04uc3RyaW5naWZ5YCBhbmQgYHBhcnNlYFxuICAgIC8vIGltcGxlbWVudGF0aW9ucyBhcmUgc3BlYy1jb21wbGlhbnQuIEJhc2VkIG9uIHdvcmsgYnkgS2VuIFNueWRlci5cbiAgICBmdW5jdGlvbiBoYXMobmFtZSkge1xuICAgICAgaWYgKGhhc1tuYW1lXSAhPT0gdW5kZWYpIHtcbiAgICAgICAgLy8gUmV0dXJuIGNhY2hlZCBmZWF0dXJlIHRlc3QgcmVzdWx0LlxuICAgICAgICByZXR1cm4gaGFzW25hbWVdO1xuICAgICAgfVxuICAgICAgdmFyIGlzU3VwcG9ydGVkO1xuICAgICAgaWYgKG5hbWUgPT0gXCJidWctc3RyaW5nLWNoYXItaW5kZXhcIikge1xuICAgICAgICAvLyBJRSA8PSA3IGRvZXNuJ3Qgc3VwcG9ydCBhY2Nlc3Npbmcgc3RyaW5nIGNoYXJhY3RlcnMgdXNpbmcgc3F1YXJlXG4gICAgICAgIC8vIGJyYWNrZXQgbm90YXRpb24uIElFIDggb25seSBzdXBwb3J0cyB0aGlzIGZvciBwcmltaXRpdmVzLlxuICAgICAgICBpc1N1cHBvcnRlZCA9IFwiYVwiWzBdICE9IFwiYVwiO1xuICAgICAgfSBlbHNlIGlmIChuYW1lID09IFwianNvblwiKSB7XG4gICAgICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIGJvdGggYEpTT04uc3RyaW5naWZ5YCBhbmQgYEpTT04ucGFyc2VgIGFyZVxuICAgICAgICAvLyBzdXBwb3J0ZWQuXG4gICAgICAgIGlzU3VwcG9ydGVkID0gaGFzKFwianNvbi1zdHJpbmdpZnlcIikgJiYgaGFzKFwianNvbi1wYXJzZVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB2YWx1ZSwgc2VyaWFsaXplZCA9ICd7XCJhXCI6WzEsdHJ1ZSxmYWxzZSxudWxsLFwiXFxcXHUwMDAwXFxcXGJcXFxcblxcXFxmXFxcXHJcXFxcdFwiXX0nO1xuICAgICAgICAvLyBUZXN0IGBKU09OLnN0cmluZ2lmeWAuXG4gICAgICAgIGlmIChuYW1lID09IFwianNvbi1zdHJpbmdpZnlcIikge1xuICAgICAgICAgIHZhciBzdHJpbmdpZnkgPSBleHBvcnRzLnN0cmluZ2lmeSwgc3RyaW5naWZ5U3VwcG9ydGVkID0gdHlwZW9mIHN0cmluZ2lmeSA9PSBcImZ1bmN0aW9uXCIgJiYgaXNFeHRlbmRlZDtcbiAgICAgICAgICBpZiAoc3RyaW5naWZ5U3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAvLyBBIHRlc3QgZnVuY3Rpb24gb2JqZWN0IHdpdGggYSBjdXN0b20gYHRvSlNPTmAgbWV0aG9kLlxuICAgICAgICAgICAgKHZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH0pLnRvSlNPTiA9IHZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc3RyaW5naWZ5U3VwcG9ydGVkID1cbiAgICAgICAgICAgICAgICAvLyBGaXJlZm94IDMuMWIxIGFuZCBiMiBzZXJpYWxpemUgc3RyaW5nLCBudW1iZXIsIGFuZCBib29sZWFuXG4gICAgICAgICAgICAgICAgLy8gcHJpbWl0aXZlcyBhcyBvYmplY3QgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KDApID09PSBcIjBcIiAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCBiMiwgYW5kIEpTT04gMiBzZXJpYWxpemUgd3JhcHBlZCBwcmltaXRpdmVzIGFzIG9iamVjdFxuICAgICAgICAgICAgICAgIC8vIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgTnVtYmVyKCkpID09PSBcIjBcIiAmJlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgU3RyaW5nKCkpID09ICdcIlwiJyAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCAyIHRocm93IGFuIGVycm9yIGlmIHRoZSB2YWx1ZSBpcyBgbnVsbGAsIGB1bmRlZmluZWRgLCBvclxuICAgICAgICAgICAgICAgIC8vIGRvZXMgbm90IGRlZmluZSBhIGNhbm9uaWNhbCBKU09OIHJlcHJlc2VudGF0aW9uICh0aGlzIGFwcGxpZXMgdG9cbiAgICAgICAgICAgICAgICAvLyBvYmplY3RzIHdpdGggYHRvSlNPTmAgcHJvcGVydGllcyBhcyB3ZWxsLCAqdW5sZXNzKiB0aGV5IGFyZSBuZXN0ZWRcbiAgICAgICAgICAgICAgICAvLyB3aXRoaW4gYW4gb2JqZWN0IG9yIGFycmF5KS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoZ2V0Q2xhc3MpID09PSB1bmRlZiAmJlxuICAgICAgICAgICAgICAgIC8vIElFIDggc2VyaWFsaXplcyBgdW5kZWZpbmVkYCBhcyBgXCJ1bmRlZmluZWRcImAuIFNhZmFyaSA8PSA1LjEuNyBhbmRcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMyBwYXNzIHRoaXMgdGVzdC5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkodW5kZWYpID09PSB1bmRlZiAmJlxuICAgICAgICAgICAgICAgIC8vIFNhZmFyaSA8PSA1LjEuNyBhbmQgRkYgMy4xYjMgdGhyb3cgYEVycm9yYHMgYW5kIGBUeXBlRXJyb3JgcyxcbiAgICAgICAgICAgICAgICAvLyByZXNwZWN0aXZlbHksIGlmIHRoZSB2YWx1ZSBpcyBvbWl0dGVkIGVudGlyZWx5LlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSgpID09PSB1bmRlZiAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCAyIHRocm93IGFuIGVycm9yIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBub3QgYSBudW1iZXIsXG4gICAgICAgICAgICAgICAgLy8gc3RyaW5nLCBhcnJheSwgb2JqZWN0LCBCb29sZWFuLCBvciBgbnVsbGAgbGl0ZXJhbC4gVGhpcyBhcHBsaWVzIHRvXG4gICAgICAgICAgICAgICAgLy8gb2JqZWN0cyB3aXRoIGN1c3RvbSBgdG9KU09OYCBtZXRob2RzIGFzIHdlbGwsIHVubGVzcyB0aGV5IGFyZSBuZXN0ZWRcbiAgICAgICAgICAgICAgICAvLyBpbnNpZGUgb2JqZWN0IG9yIGFycmF5IGxpdGVyYWxzLiBZVUkgMy4wLjBiMSBpZ25vcmVzIGN1c3RvbSBgdG9KU09OYFxuICAgICAgICAgICAgICAgIC8vIG1ldGhvZHMgZW50aXJlbHkuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KHZhbHVlKSA9PT0gXCIxXCIgJiZcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoW3ZhbHVlXSkgPT0gXCJbMV1cIiAmJlxuICAgICAgICAgICAgICAgIC8vIFByb3RvdHlwZSA8PSAxLjYuMSBzZXJpYWxpemVzIGBbdW5kZWZpbmVkXWAgYXMgYFwiW11cImAgaW5zdGVhZCBvZlxuICAgICAgICAgICAgICAgIC8vIGBcIltudWxsXVwiYC5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoW3VuZGVmXSkgPT0gXCJbbnVsbF1cIiAmJlxuICAgICAgICAgICAgICAgIC8vIFlVSSAzLjAuMGIxIGZhaWxzIHRvIHNlcmlhbGl6ZSBgbnVsbGAgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG51bGwpID09IFwibnVsbFwiICYmXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjEsIDIgaGFsdHMgc2VyaWFsaXphdGlvbiBpZiBhbiBhcnJheSBjb250YWlucyBhIGZ1bmN0aW9uOlxuICAgICAgICAgICAgICAgIC8vIGBbMSwgdHJ1ZSwgZ2V0Q2xhc3MsIDFdYCBzZXJpYWxpemVzIGFzIFwiWzEsdHJ1ZSxdLFwiLiBGRiAzLjFiM1xuICAgICAgICAgICAgICAgIC8vIGVsaWRlcyBub24tSlNPTiB2YWx1ZXMgZnJvbSBvYmplY3RzIGFuZCBhcnJheXMsIHVubGVzcyB0aGV5XG4gICAgICAgICAgICAgICAgLy8gZGVmaW5lIGN1c3RvbSBgdG9KU09OYCBtZXRob2RzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShbdW5kZWYsIGdldENsYXNzLCBudWxsXSkgPT0gXCJbbnVsbCxudWxsLG51bGxdXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBTaW1wbGUgc2VyaWFsaXphdGlvbiB0ZXN0LiBGRiAzLjFiMSB1c2VzIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlc1xuICAgICAgICAgICAgICAgIC8vIHdoZXJlIGNoYXJhY3RlciBlc2NhcGUgY29kZXMgYXJlIGV4cGVjdGVkIChlLmcuLCBgXFxiYCA9PiBgXFx1MDAwOGApLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSh7IFwiYVwiOiBbdmFsdWUsIHRydWUsIGZhbHNlLCBudWxsLCBcIlxceDAwXFxiXFxuXFxmXFxyXFx0XCJdIH0pID09IHNlcmlhbGl6ZWQgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSBhbmQgYjIgaWdub3JlIHRoZSBgZmlsdGVyYCBhbmQgYHdpZHRoYCBhcmd1bWVudHMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG51bGwsIHZhbHVlKSA9PT0gXCIxXCIgJiZcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoWzEsIDJdLCBudWxsLCAxKSA9PSBcIltcXG4gMSxcXG4gMlxcbl1cIiAmJlxuICAgICAgICAgICAgICAgIC8vIEpTT04gMiwgUHJvdG90eXBlIDw9IDEuNywgYW5kIG9sZGVyIFdlYktpdCBidWlsZHMgaW5jb3JyZWN0bHlcbiAgICAgICAgICAgICAgICAvLyBzZXJpYWxpemUgZXh0ZW5kZWQgeWVhcnMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBEYXRlKC04LjY0ZTE1KSkgPT0gJ1wiLTI3MTgyMS0wNC0yMFQwMDowMDowMC4wMDBaXCInICYmXG4gICAgICAgICAgICAgICAgLy8gVGhlIG1pbGxpc2Vjb25kcyBhcmUgb3B0aW9uYWwgaW4gRVMgNSwgYnV0IHJlcXVpcmVkIGluIDUuMS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IERhdGUoOC42NGUxNSkpID09ICdcIisyNzU3NjAtMDktMTNUMDA6MDA6MDAuMDAwWlwiJyAmJlxuICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggPD0gMTEuMCBpbmNvcnJlY3RseSBzZXJpYWxpemVzIHllYXJzIHByaW9yIHRvIDAgYXMgbmVnYXRpdmVcbiAgICAgICAgICAgICAgICAvLyBmb3VyLWRpZ2l0IHllYXJzIGluc3RlYWQgb2Ygc2l4LWRpZ2l0IHllYXJzLiBDcmVkaXRzOiBAWWFmZmxlLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgRGF0ZSgtNjIxOTg3NTUyZTUpKSA9PSAnXCItMDAwMDAxLTAxLTAxVDAwOjAwOjAwLjAwMFpcIicgJiZcbiAgICAgICAgICAgICAgICAvLyBTYWZhcmkgPD0gNS4xLjUgYW5kIE9wZXJhID49IDEwLjUzIGluY29ycmVjdGx5IHNlcmlhbGl6ZSBtaWxsaXNlY29uZFxuICAgICAgICAgICAgICAgIC8vIHZhbHVlcyBsZXNzIHRoYW4gMTAwMC4gQ3JlZGl0czogQFlhZmZsZS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IERhdGUoLTEpKSA9PSAnXCIxOTY5LTEyLTMxVDIzOjU5OjU5Ljk5OVpcIic7XG4gICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgc3RyaW5naWZ5U3VwcG9ydGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlzU3VwcG9ydGVkID0gc3RyaW5naWZ5U3VwcG9ydGVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRlc3QgYEpTT04ucGFyc2VgLlxuICAgICAgICBpZiAobmFtZSA9PSBcImpzb24tcGFyc2VcIikge1xuICAgICAgICAgIHZhciBwYXJzZSA9IGV4cG9ydHMucGFyc2U7XG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJzZSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCBiMiB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhIGJhcmUgbGl0ZXJhbCBpcyBwcm92aWRlZC5cbiAgICAgICAgICAgICAgLy8gQ29uZm9ybWluZyBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGFsc28gY29lcmNlIHRoZSBpbml0aWFsIGFyZ3VtZW50IHRvXG4gICAgICAgICAgICAgIC8vIGEgc3RyaW5nIHByaW9yIHRvIHBhcnNpbmcuXG4gICAgICAgICAgICAgIGlmIChwYXJzZShcIjBcIikgPT09IDAgJiYgIXBhcnNlKGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIC8vIFNpbXBsZSBwYXJzaW5nIHRlc3QuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZShzZXJpYWxpemVkKTtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VTdXBwb3J0ZWQgPSB2YWx1ZVtcImFcIl0ubGVuZ3RoID09IDUgJiYgdmFsdWVbXCJhXCJdWzBdID09PSAxO1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDUuMS4yIGFuZCBGRiAzLjFiMSBhbGxvdyB1bmVzY2FwZWQgdGFicyBpbiBzdHJpbmdzLlxuICAgICAgICAgICAgICAgICAgICBwYXJzZVN1cHBvcnRlZCA9ICFwYXJzZSgnXCJcXHRcIicpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gRkYgNC4wIGFuZCA0LjAuMSBhbGxvdyBsZWFkaW5nIGArYCBzaWducyBhbmQgbGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGRlY2ltYWwgcG9pbnRzLiBGRiA0LjAsIDQuMC4xLCBhbmQgSUUgOS0xMCBhbHNvIGFsbG93XG4gICAgICAgICAgICAgICAgICAgICAgLy8gY2VydGFpbiBvY3RhbCBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICAgICAgICBwYXJzZVN1cHBvcnRlZCA9IHBhcnNlKFwiMDFcIikgIT09IDE7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge31cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEZGIDQuMCwgNC4wLjEsIGFuZCBSaGlubyAxLjdSMy1SNCBhbGxvdyB0cmFpbGluZyBkZWNpbWFsXG4gICAgICAgICAgICAgICAgICAgICAgLy8gcG9pbnRzLiBUaGVzZSBlbnZpcm9ubWVudHMsIGFsb25nIHdpdGggRkYgMy4xYjEgYW5kIDIsXG4gICAgICAgICAgICAgICAgICAgICAgLy8gYWxzbyBhbGxvdyB0cmFpbGluZyBjb21tYXMgaW4gSlNPTiBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgICAgICAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSBwYXJzZShcIjEuXCIpICE9PSAxO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaXNTdXBwb3J0ZWQgPSBwYXJzZVN1cHBvcnRlZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc1tuYW1lXSA9ICEhaXNTdXBwb3J0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFoYXMoXCJqc29uXCIpKSB7XG4gICAgICAvLyBDb21tb24gYFtbQ2xhc3NdXWAgbmFtZSBhbGlhc2VzLlxuICAgICAgdmFyIGZ1bmN0aW9uQ2xhc3MgPSBcIltvYmplY3QgRnVuY3Rpb25dXCIsXG4gICAgICAgICAgZGF0ZUNsYXNzID0gXCJbb2JqZWN0IERhdGVdXCIsXG4gICAgICAgICAgbnVtYmVyQ2xhc3MgPSBcIltvYmplY3QgTnVtYmVyXVwiLFxuICAgICAgICAgIHN0cmluZ0NsYXNzID0gXCJbb2JqZWN0IFN0cmluZ11cIixcbiAgICAgICAgICBhcnJheUNsYXNzID0gXCJbb2JqZWN0IEFycmF5XVwiLFxuICAgICAgICAgIGJvb2xlYW5DbGFzcyA9IFwiW29iamVjdCBCb29sZWFuXVwiO1xuXG4gICAgICAvLyBEZXRlY3QgaW5jb21wbGV0ZSBzdXBwb3J0IGZvciBhY2Nlc3Npbmcgc3RyaW5nIGNoYXJhY3RlcnMgYnkgaW5kZXguXG4gICAgICB2YXIgY2hhckluZGV4QnVnZ3kgPSBoYXMoXCJidWctc3RyaW5nLWNoYXItaW5kZXhcIik7XG5cbiAgICAgIC8vIERlZmluZSBhZGRpdGlvbmFsIHV0aWxpdHkgbWV0aG9kcyBpZiB0aGUgYERhdGVgIG1ldGhvZHMgYXJlIGJ1Z2d5LlxuICAgICAgaWYgKCFpc0V4dGVuZGVkKSB7XG4gICAgICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG4gICAgICAgIC8vIEEgbWFwcGluZyBiZXR3ZWVuIHRoZSBtb250aHMgb2YgdGhlIHllYXIgYW5kIHRoZSBudW1iZXIgb2YgZGF5cyBiZXR3ZWVuXG4gICAgICAgIC8vIEphbnVhcnkgMXN0IGFuZCB0aGUgZmlyc3Qgb2YgdGhlIHJlc3BlY3RpdmUgbW9udGguXG4gICAgICAgIHZhciBNb250aHMgPSBbMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzRdO1xuICAgICAgICAvLyBJbnRlcm5hbDogQ2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIGRheXMgYmV0d2VlbiB0aGUgVW5peCBlcG9jaCBhbmQgdGhlXG4gICAgICAgIC8vIGZpcnN0IGRheSBvZiB0aGUgZ2l2ZW4gbW9udGguXG4gICAgICAgIHZhciBnZXREYXkgPSBmdW5jdGlvbiAoeWVhciwgbW9udGgpIHtcbiAgICAgICAgICByZXR1cm4gTW9udGhzW21vbnRoXSArIDM2NSAqICh5ZWFyIC0gMTk3MCkgKyBmbG9vcigoeWVhciAtIDE5NjkgKyAobW9udGggPSArKG1vbnRoID4gMSkpKSAvIDQpIC0gZmxvb3IoKHllYXIgLSAxOTAxICsgbW9udGgpIC8gMTAwKSArIGZsb29yKCh5ZWFyIC0gMTYwMSArIG1vbnRoKSAvIDQwMCk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEludGVybmFsOiBEZXRlcm1pbmVzIGlmIGEgcHJvcGVydHkgaXMgYSBkaXJlY3QgcHJvcGVydHkgb2YgdGhlIGdpdmVuXG4gICAgICAvLyBvYmplY3QuIERlbGVnYXRlcyB0byB0aGUgbmF0aXZlIGBPYmplY3QjaGFzT3duUHJvcGVydHlgIG1ldGhvZC5cbiAgICAgIGlmICghKGlzUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eSkpIHtcbiAgICAgICAgaXNQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgIHZhciBtZW1iZXJzID0ge30sIGNvbnN0cnVjdG9yO1xuICAgICAgICAgIGlmICgobWVtYmVycy5fX3Byb3RvX18gPSBudWxsLCBtZW1iZXJzLl9fcHJvdG9fXyA9IHtcbiAgICAgICAgICAgIC8vIFRoZSAqcHJvdG8qIHByb3BlcnR5IGNhbm5vdCBiZSBzZXQgbXVsdGlwbGUgdGltZXMgaW4gcmVjZW50XG4gICAgICAgICAgICAvLyB2ZXJzaW9ucyBvZiBGaXJlZm94IGFuZCBTZWFNb25rZXkuXG4gICAgICAgICAgICBcInRvU3RyaW5nXCI6IDFcbiAgICAgICAgICB9LCBtZW1iZXJzKS50b1N0cmluZyAhPSBnZXRDbGFzcykge1xuICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDIuMC4zIGRvZXNuJ3QgaW1wbGVtZW50IGBPYmplY3QjaGFzT3duUHJvcGVydHlgLCBidXRcbiAgICAgICAgICAgIC8vIHN1cHBvcnRzIHRoZSBtdXRhYmxlICpwcm90byogcHJvcGVydHkuXG4gICAgICAgICAgICBpc1Byb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIC8vIENhcHR1cmUgYW5kIGJyZWFrIHRoZSBvYmplY3QncyBwcm90b3R5cGUgY2hhaW4gKHNlZSBzZWN0aW9uIDguNi4yXG4gICAgICAgICAgICAgIC8vIG9mIHRoZSBFUyA1LjEgc3BlYykuIFRoZSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24gcHJldmVudHMgYW5cbiAgICAgICAgICAgICAgLy8gdW5zYWZlIHRyYW5zZm9ybWF0aW9uIGJ5IHRoZSBDbG9zdXJlIENvbXBpbGVyLlxuICAgICAgICAgICAgICB2YXIgb3JpZ2luYWwgPSB0aGlzLl9fcHJvdG9fXywgcmVzdWx0ID0gcHJvcGVydHkgaW4gKHRoaXMuX19wcm90b19fID0gbnVsbCwgdGhpcyk7XG4gICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb3RvdHlwZSBjaGFpbi5cbiAgICAgICAgICAgICAgdGhpcy5fX3Byb3RvX18gPSBvcmlnaW5hbDtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENhcHR1cmUgYSByZWZlcmVuY2UgdG8gdGhlIHRvcC1sZXZlbCBgT2JqZWN0YCBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gbWVtYmVycy5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgYGNvbnN0cnVjdG9yYCBwcm9wZXJ0eSB0byBzaW11bGF0ZSBgT2JqZWN0I2hhc093blByb3BlcnR5YCBpblxuICAgICAgICAgICAgLy8gb3RoZXIgZW52aXJvbm1lbnRzLlxuICAgICAgICAgICAgaXNQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gKHRoaXMuY29uc3RydWN0b3IgfHwgY29uc3RydWN0b3IpLnByb3RvdHlwZTtcbiAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5IGluIHRoaXMgJiYgIShwcm9wZXJ0eSBpbiBwYXJlbnQgJiYgdGhpc1twcm9wZXJ0eV0gPT09IHBhcmVudFtwcm9wZXJ0eV0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWVtYmVycyA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGlzUHJvcGVydHkuY2FsbCh0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEludGVybmFsOiBOb3JtYWxpemVzIHRoZSBgZm9yLi4uaW5gIGl0ZXJhdGlvbiBhbGdvcml0aG0gYWNyb3NzXG4gICAgICAvLyBlbnZpcm9ubWVudHMuIEVhY2ggZW51bWVyYXRlZCBrZXkgaXMgeWllbGRlZCB0byBhIGBjYWxsYmFja2AgZnVuY3Rpb24uXG4gICAgICBmb3JFYWNoID0gZnVuY3Rpb24gKG9iamVjdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNpemUgPSAwLCBQcm9wZXJ0aWVzLCBtZW1iZXJzLCBwcm9wZXJ0eTtcblxuICAgICAgICAvLyBUZXN0cyBmb3IgYnVncyBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCdzIGBmb3IuLi5pbmAgYWxnb3JpdGhtLiBUaGVcbiAgICAgICAgLy8gYHZhbHVlT2ZgIHByb3BlcnR5IGluaGVyaXRzIHRoZSBub24tZW51bWVyYWJsZSBmbGFnIGZyb21cbiAgICAgICAgLy8gYE9iamVjdC5wcm90b3R5cGVgIGluIG9sZGVyIHZlcnNpb25zIG9mIElFLCBOZXRzY2FwZSwgYW5kIE1vemlsbGEuXG4gICAgICAgIChQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMudmFsdWVPZiA9IDA7XG4gICAgICAgIH0pLnByb3RvdHlwZS52YWx1ZU9mID0gMDtcblxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGBQcm9wZXJ0aWVzYCBjbGFzcy5cbiAgICAgICAgbWVtYmVycyA9IG5ldyBQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGZvciAocHJvcGVydHkgaW4gbWVtYmVycykge1xuICAgICAgICAgIC8vIElnbm9yZSBhbGwgcHJvcGVydGllcyBpbmhlcml0ZWQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuXG4gICAgICAgICAgaWYgKGlzUHJvcGVydHkuY2FsbChtZW1iZXJzLCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgIHNpemUrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgUHJvcGVydGllcyA9IG1lbWJlcnMgPSBudWxsO1xuXG4gICAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgaXRlcmF0aW9uIGFsZ29yaXRobS5cbiAgICAgICAgaWYgKCFzaXplKSB7XG4gICAgICAgICAgLy8gQSBsaXN0IG9mIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgaW5oZXJpdGVkIGZyb20gYE9iamVjdC5wcm90b3R5cGVgLlxuICAgICAgICAgIG1lbWJlcnMgPSBbXCJ2YWx1ZU9mXCIsIFwidG9TdHJpbmdcIiwgXCJ0b0xvY2FsZVN0cmluZ1wiLCBcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsIFwiaXNQcm90b3R5cGVPZlwiLCBcImhhc093blByb3BlcnR5XCIsIFwiY29uc3RydWN0b3JcIl07XG4gICAgICAgICAgLy8gSUUgPD0gOCwgTW96aWxsYSAxLjAsIGFuZCBOZXRzY2FwZSA2LjIgaWdub3JlIHNoYWRvd2VkIG5vbi1lbnVtZXJhYmxlXG4gICAgICAgICAgLy8gcHJvcGVydGllcy5cbiAgICAgICAgICBmb3JFYWNoID0gZnVuY3Rpb24gKG9iamVjdCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciBpc0Z1bmN0aW9uID0gZ2V0Q2xhc3MuY2FsbChvYmplY3QpID09IGZ1bmN0aW9uQ2xhc3MsIHByb3BlcnR5LCBsZW5ndGg7XG4gICAgICAgICAgICB2YXIgaGFzUHJvcGVydHkgPSAhaXNGdW5jdGlvbiAmJiB0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yICE9IFwiZnVuY3Rpb25cIiAmJiBvYmplY3RUeXBlc1t0eXBlb2Ygb2JqZWN0Lmhhc093blByb3BlcnR5XSAmJiBvYmplY3QuaGFzT3duUHJvcGVydHkgfHwgaXNQcm9wZXJ0eTtcbiAgICAgICAgICAgIGZvciAocHJvcGVydHkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgIC8vIEdlY2tvIDw9IDEuMCBlbnVtZXJhdGVzIHRoZSBgcHJvdG90eXBlYCBwcm9wZXJ0eSBvZiBmdW5jdGlvbnMgdW5kZXJcbiAgICAgICAgICAgICAgLy8gY2VydGFpbiBjb25kaXRpb25zOyBJRSBkb2VzIG5vdC5cbiAgICAgICAgICAgICAgaWYgKCEoaXNGdW5jdGlvbiAmJiBwcm9wZXJ0eSA9PSBcInByb3RvdHlwZVwiKSAmJiBoYXNQcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2socHJvcGVydHkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNYW51YWxseSBpbnZva2UgdGhlIGNhbGxiYWNrIGZvciBlYWNoIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5LlxuICAgICAgICAgICAgZm9yIChsZW5ndGggPSBtZW1iZXJzLmxlbmd0aDsgcHJvcGVydHkgPSBtZW1iZXJzWy0tbGVuZ3RoXTsgaGFzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSAmJiBjYWxsYmFjayhwcm9wZXJ0eSkpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoc2l6ZSA9PSAyKSB7XG4gICAgICAgICAgLy8gU2FmYXJpIDw9IDIuMC40IGVudW1lcmF0ZXMgc2hhZG93ZWQgcHJvcGVydGllcyB0d2ljZS5cbiAgICAgICAgICBmb3JFYWNoID0gZnVuY3Rpb24gKG9iamVjdCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHNldCBvZiBpdGVyYXRlZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgdmFyIG1lbWJlcnMgPSB7fSwgaXNGdW5jdGlvbiA9IGdldENsYXNzLmNhbGwob2JqZWN0KSA9PSBmdW5jdGlvbkNsYXNzLCBwcm9wZXJ0eTtcbiAgICAgICAgICAgIGZvciAocHJvcGVydHkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgIC8vIFN0b3JlIGVhY2ggcHJvcGVydHkgbmFtZSB0byBwcmV2ZW50IGRvdWJsZSBlbnVtZXJhdGlvbi4gVGhlXG4gICAgICAgICAgICAgIC8vIGBwcm90b3R5cGVgIHByb3BlcnR5IG9mIGZ1bmN0aW9ucyBpcyBub3QgZW51bWVyYXRlZCBkdWUgdG8gY3Jvc3MtXG4gICAgICAgICAgICAgIC8vIGVudmlyb25tZW50IGluY29uc2lzdGVuY2llcy5cbiAgICAgICAgICAgICAgaWYgKCEoaXNGdW5jdGlvbiAmJiBwcm9wZXJ0eSA9PSBcInByb3RvdHlwZVwiKSAmJiAhaXNQcm9wZXJ0eS5jYWxsKG1lbWJlcnMsIHByb3BlcnR5KSAmJiAobWVtYmVyc1twcm9wZXJ0eV0gPSAxKSAmJiBpc1Byb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vIGJ1Z3MgZGV0ZWN0ZWQ7IHVzZSB0aGUgc3RhbmRhcmQgYGZvci4uLmluYCBhbGdvcml0aG0uXG4gICAgICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IGdldENsYXNzLmNhbGwob2JqZWN0KSA9PSBmdW5jdGlvbkNsYXNzLCBwcm9wZXJ0eSwgaXNDb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIGZvciAocHJvcGVydHkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgIGlmICghKGlzRnVuY3Rpb24gJiYgcHJvcGVydHkgPT0gXCJwcm90b3R5cGVcIikgJiYgaXNQcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpICYmICEoaXNDb25zdHJ1Y3RvciA9IHByb3BlcnR5ID09PSBcImNvbnN0cnVjdG9yXCIpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2socHJvcGVydHkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNYW51YWxseSBpbnZva2UgdGhlIGNhbGxiYWNrIGZvciB0aGUgYGNvbnN0cnVjdG9yYCBwcm9wZXJ0eSBkdWUgdG9cbiAgICAgICAgICAgIC8vIGNyb3NzLWVudmlyb25tZW50IGluY29uc2lzdGVuY2llcy5cbiAgICAgICAgICAgIGlmIChpc0NvbnN0cnVjdG9yIHx8IGlzUHJvcGVydHkuY2FsbChvYmplY3QsIChwcm9wZXJ0eSA9IFwiY29uc3RydWN0b3JcIikpKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JFYWNoKG9iamVjdCwgY2FsbGJhY2spO1xuICAgICAgfTtcblxuICAgICAgLy8gUHVibGljOiBTZXJpYWxpemVzIGEgSmF2YVNjcmlwdCBgdmFsdWVgIGFzIGEgSlNPTiBzdHJpbmcuIFRoZSBvcHRpb25hbFxuICAgICAgLy8gYGZpbHRlcmAgYXJndW1lbnQgbWF5IHNwZWNpZnkgZWl0aGVyIGEgZnVuY3Rpb24gdGhhdCBhbHRlcnMgaG93IG9iamVjdCBhbmRcbiAgICAgIC8vIGFycmF5IG1lbWJlcnMgYXJlIHNlcmlhbGl6ZWQsIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MgYW5kIG51bWJlcnMgdGhhdFxuICAgICAgLy8gaW5kaWNhdGVzIHdoaWNoIHByb3BlcnRpZXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQuIFRoZSBvcHRpb25hbCBgd2lkdGhgXG4gICAgICAvLyBhcmd1bWVudCBtYXkgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIG51bWJlciB0aGF0IHNwZWNpZmllcyB0aGUgaW5kZW50YXRpb25cbiAgICAgIC8vIGxldmVsIG9mIHRoZSBvdXRwdXQuXG4gICAgICBpZiAoIWhhcyhcImpzb24tc3RyaW5naWZ5XCIpKSB7XG4gICAgICAgIC8vIEludGVybmFsOiBBIG1hcCBvZiBjb250cm9sIGNoYXJhY3RlcnMgYW5kIHRoZWlyIGVzY2FwZWQgZXF1aXZhbGVudHMuXG4gICAgICAgIHZhciBFc2NhcGVzID0ge1xuICAgICAgICAgIDkyOiBcIlxcXFxcXFxcXCIsXG4gICAgICAgICAgMzQ6ICdcXFxcXCInLFxuICAgICAgICAgIDg6IFwiXFxcXGJcIixcbiAgICAgICAgICAxMjogXCJcXFxcZlwiLFxuICAgICAgICAgIDEwOiBcIlxcXFxuXCIsXG4gICAgICAgICAgMTM6IFwiXFxcXHJcIixcbiAgICAgICAgICA5OiBcIlxcXFx0XCJcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogQ29udmVydHMgYHZhbHVlYCBpbnRvIGEgemVyby1wYWRkZWQgc3RyaW5nIHN1Y2ggdGhhdCBpdHNcbiAgICAgICAgLy8gbGVuZ3RoIGlzIGF0IGxlYXN0IGVxdWFsIHRvIGB3aWR0aGAuIFRoZSBgd2lkdGhgIG11c3QgYmUgPD0gNi5cbiAgICAgICAgdmFyIGxlYWRpbmdaZXJvZXMgPSBcIjAwMDAwMFwiO1xuICAgICAgICB2YXIgdG9QYWRkZWRTdHJpbmcgPSBmdW5jdGlvbiAod2lkdGgsIHZhbHVlKSB7XG4gICAgICAgICAgLy8gVGhlIGB8fCAwYCBleHByZXNzaW9uIGlzIG5lY2Vzc2FyeSB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpblxuICAgICAgICAgIC8vIE9wZXJhIDw9IDcuNTR1MiB3aGVyZSBgMCA9PSAtMGAsIGJ1dCBgU3RyaW5nKC0wKSAhPT0gXCIwXCJgLlxuICAgICAgICAgIHJldHVybiAobGVhZGluZ1plcm9lcyArICh2YWx1ZSB8fCAwKSkuc2xpY2UoLXdpZHRoKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogRG91YmxlLXF1b3RlcyBhIHN0cmluZyBgdmFsdWVgLCByZXBsYWNpbmcgYWxsIEFTQ0lJIGNvbnRyb2xcbiAgICAgICAgLy8gY2hhcmFjdGVycyAoY2hhcmFjdGVycyB3aXRoIGNvZGUgdW5pdCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAzMSkgd2l0aFxuICAgICAgICAvLyB0aGVpciBlc2NhcGVkIGVxdWl2YWxlbnRzLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZVxuICAgICAgICAvLyBgUXVvdGUodmFsdWUpYCBvcGVyYXRpb24gZGVmaW5lZCBpbiBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLlxuICAgICAgICB2YXIgdW5pY29kZVByZWZpeCA9IFwiXFxcXHUwMFwiO1xuICAgICAgICB2YXIgcXVvdGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gJ1wiJywgaW5kZXggPSAwLCBsZW5ndGggPSB2YWx1ZS5sZW5ndGgsIHVzZUNoYXJJbmRleCA9ICFjaGFySW5kZXhCdWdneSB8fCBsZW5ndGggPiAxMDtcbiAgICAgICAgICB2YXIgc3ltYm9scyA9IHVzZUNoYXJJbmRleCAmJiAoY2hhckluZGV4QnVnZ3kgPyB2YWx1ZS5zcGxpdChcIlwiKSA6IHZhbHVlKTtcbiAgICAgICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIHZhciBjaGFyQ29kZSA9IHZhbHVlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgLy8gSWYgdGhlIGNoYXJhY3RlciBpcyBhIGNvbnRyb2wgY2hhcmFjdGVyLCBhcHBlbmQgaXRzIFVuaWNvZGUgb3JcbiAgICAgICAgICAgIC8vIHNob3J0aGFuZCBlc2NhcGUgc2VxdWVuY2U7IG90aGVyd2lzZSwgYXBwZW5kIHRoZSBjaGFyYWN0ZXIgYXMtaXMuXG4gICAgICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7XG4gICAgICAgICAgICAgIGNhc2UgODogY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEyOiBjYXNlIDEzOiBjYXNlIDM0OiBjYXNlIDkyOlxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBFc2NhcGVzW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPCAzMikge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHVuaWNvZGVQcmVmaXggKyB0b1BhZGRlZFN0cmluZygyLCBjaGFyQ29kZS50b1N0cmluZygxNikpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB1c2VDaGFySW5kZXggPyBzeW1ib2xzW2luZGV4XSA6IHZhbHVlLmNoYXJBdChpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnXCInO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZWN1cnNpdmVseSBzZXJpYWxpemVzIGFuIG9iamVjdC4gSW1wbGVtZW50cyB0aGVcbiAgICAgICAgLy8gYFN0cihrZXksIGhvbGRlcilgLCBgSk8odmFsdWUpYCwgYW5kIGBKQSh2YWx1ZSlgIG9wZXJhdGlvbnMuXG4gICAgICAgIHZhciBzZXJpYWxpemUgPSBmdW5jdGlvbiAocHJvcGVydHksIG9iamVjdCwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIGluZGVudGF0aW9uLCBzdGFjaykge1xuICAgICAgICAgIHZhciB2YWx1ZSwgY2xhc3NOYW1lLCB5ZWFyLCBtb250aCwgZGF0ZSwgdGltZSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgcmVzdWx0cywgZWxlbWVudCwgaW5kZXgsIGxlbmd0aCwgcHJlZml4LCByZXN1bHQ7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIE5lY2Vzc2FyeSBmb3IgaG9zdCBvYmplY3Qgc3VwcG9ydC5cbiAgICAgICAgICAgIHZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTtcbiAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT0gZGF0ZUNsYXNzICYmICFpc1Byb3BlcnR5LmNhbGwodmFsdWUsIFwidG9KU09OXCIpKSB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZSA+IC0xIC8gMCAmJiB2YWx1ZSA8IDEgLyAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRGF0ZXMgYXJlIHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIHRoZSBgRGF0ZSN0b0pTT05gIG1ldGhvZFxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllZCBpbiBFUyA1LjEgc2VjdGlvbiAxNS45LjUuNDQuIFNlZSBzZWN0aW9uIDE1LjkuMS4xNVxuICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgSVNPIDg2MDEgZGF0ZSB0aW1lIHN0cmluZyBmb3JtYXQuXG4gICAgICAgICAgICAgICAgaWYgKGdldERheSkge1xuICAgICAgICAgICAgICAgICAgLy8gTWFudWFsbHkgY29tcHV0ZSB0aGUgeWVhciwgbW9udGgsIGRhdGUsIGhvdXJzLCBtaW51dGVzLFxuICAgICAgICAgICAgICAgICAgLy8gc2Vjb25kcywgYW5kIG1pbGxpc2Vjb25kcyBpZiB0aGUgYGdldFVUQypgIG1ldGhvZHMgYXJlXG4gICAgICAgICAgICAgICAgICAvLyBidWdneS4gQWRhcHRlZCBmcm9tIEBZYWZmbGUncyBgZGF0ZS1zaGltYCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgZGF0ZSA9IGZsb29yKHZhbHVlIC8gODY0ZTUpO1xuICAgICAgICAgICAgICAgICAgZm9yICh5ZWFyID0gZmxvb3IoZGF0ZSAvIDM2NS4yNDI1KSArIDE5NzAgLSAxOyBnZXREYXkoeWVhciArIDEsIDApIDw9IGRhdGU7IHllYXIrKyk7XG4gICAgICAgICAgICAgICAgICBmb3IgKG1vbnRoID0gZmxvb3IoKGRhdGUgLSBnZXREYXkoeWVhciwgMCkpIC8gMzAuNDIpOyBnZXREYXkoeWVhciwgbW9udGggKyAxKSA8PSBkYXRlOyBtb250aCsrKTtcbiAgICAgICAgICAgICAgICAgIGRhdGUgPSAxICsgZGF0ZSAtIGdldERheSh5ZWFyLCBtb250aCk7XG4gICAgICAgICAgICAgICAgICAvLyBUaGUgYHRpbWVgIHZhbHVlIHNwZWNpZmllcyB0aGUgdGltZSB3aXRoaW4gdGhlIGRheSAoc2VlIEVTXG4gICAgICAgICAgICAgICAgICAvLyA1LjEgc2VjdGlvbiAxNS45LjEuMikuIFRoZSBmb3JtdWxhIGAoQSAlIEIgKyBCKSAlIEJgIGlzIHVzZWRcbiAgICAgICAgICAgICAgICAgIC8vIHRvIGNvbXB1dGUgYEEgbW9kdWxvIEJgLCBhcyB0aGUgYCVgIG9wZXJhdG9yIGRvZXMgbm90XG4gICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kIHRvIHRoZSBgbW9kdWxvYCBvcGVyYXRpb24gZm9yIG5lZ2F0aXZlIG51bWJlcnMuXG4gICAgICAgICAgICAgICAgICB0aW1lID0gKHZhbHVlICUgODY0ZTUgKyA4NjRlNSkgJSA4NjRlNTtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBob3VycywgbWludXRlcywgc2Vjb25kcywgYW5kIG1pbGxpc2Vjb25kcyBhcmUgb2J0YWluZWQgYnlcbiAgICAgICAgICAgICAgICAgIC8vIGRlY29tcG9zaW5nIHRoZSB0aW1lIHdpdGhpbiB0aGUgZGF5LiBTZWUgc2VjdGlvbiAxNS45LjEuMTAuXG4gICAgICAgICAgICAgICAgICBob3VycyA9IGZsb29yKHRpbWUgLyAzNmU1KSAlIDI0O1xuICAgICAgICAgICAgICAgICAgbWludXRlcyA9IGZsb29yKHRpbWUgLyA2ZTQpICUgNjA7XG4gICAgICAgICAgICAgICAgICBzZWNvbmRzID0gZmxvb3IodGltZSAvIDFlMykgJSA2MDtcbiAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IHRpbWUgJSAxZTM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHllYXIgPSB2YWx1ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgICAgbW9udGggPSB2YWx1ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgICAgICAgZGF0ZSA9IHZhbHVlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgICAgICAgICAgIGhvdXJzID0gdmFsdWUuZ2V0VVRDSG91cnMoKTtcbiAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSB2YWx1ZS5nZXRVVENNaW51dGVzKCk7XG4gICAgICAgICAgICAgICAgICBzZWNvbmRzID0gdmFsdWUuZ2V0VVRDU2Vjb25kcygpO1xuICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdmFsdWUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSBleHRlbmRlZCB5ZWFycyBjb3JyZWN0bHkuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSAoeWVhciA8PSAwIHx8IHllYXIgPj0gMWU0ID8gKHllYXIgPCAwID8gXCItXCIgOiBcIitcIikgKyB0b1BhZGRlZFN0cmluZyg2LCB5ZWFyIDwgMCA/IC15ZWFyIDogeWVhcikgOiB0b1BhZGRlZFN0cmluZyg0LCB5ZWFyKSkgK1xuICAgICAgICAgICAgICAgICAgXCItXCIgKyB0b1BhZGRlZFN0cmluZygyLCBtb250aCArIDEpICsgXCItXCIgKyB0b1BhZGRlZFN0cmluZygyLCBkYXRlKSArXG4gICAgICAgICAgICAgICAgICAvLyBNb250aHMsIGRhdGVzLCBob3VycywgbWludXRlcywgYW5kIHNlY29uZHMgc2hvdWxkIGhhdmUgdHdvXG4gICAgICAgICAgICAgICAgICAvLyBkaWdpdHM7IG1pbGxpc2Vjb25kcyBzaG91bGQgaGF2ZSB0aHJlZS5cbiAgICAgICAgICAgICAgICAgIFwiVFwiICsgdG9QYWRkZWRTdHJpbmcoMiwgaG91cnMpICsgXCI6XCIgKyB0b1BhZGRlZFN0cmluZygyLCBtaW51dGVzKSArIFwiOlwiICsgdG9QYWRkZWRTdHJpbmcoMiwgc2Vjb25kcykgK1xuICAgICAgICAgICAgICAgICAgLy8gTWlsbGlzZWNvbmRzIGFyZSBvcHRpb25hbCBpbiBFUyA1LjAsIGJ1dCByZXF1aXJlZCBpbiA1LjEuXG4gICAgICAgICAgICAgICAgICBcIi5cIiArIHRvUGFkZGVkU3RyaW5nKDMsIG1pbGxpc2Vjb25kcykgKyBcIlpcIjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlLnRvSlNPTiA9PSBcImZ1bmN0aW9uXCIgJiYgKChjbGFzc05hbWUgIT0gbnVtYmVyQ2xhc3MgJiYgY2xhc3NOYW1lICE9IHN0cmluZ0NsYXNzICYmIGNsYXNzTmFtZSAhPSBhcnJheUNsYXNzKSB8fCBpc1Byb3BlcnR5LmNhbGwodmFsdWUsIFwidG9KU09OXCIpKSkge1xuICAgICAgICAgICAgICAvLyBQcm90b3R5cGUgPD0gMS42LjEgYWRkcyBub24tc3RhbmRhcmQgYHRvSlNPTmAgbWV0aG9kcyB0byB0aGVcbiAgICAgICAgICAgICAgLy8gYE51bWJlcmAsIGBTdHJpbmdgLCBgRGF0ZWAsIGFuZCBgQXJyYXlgIHByb3RvdHlwZXMuIEpTT04gM1xuICAgICAgICAgICAgICAvLyBpZ25vcmVzIGFsbCBgdG9KU09OYCBtZXRob2RzIG9uIHRoZXNlIG9iamVjdHMgdW5sZXNzIHRoZXkgYXJlXG4gICAgICAgICAgICAgIC8vIGRlZmluZWQgZGlyZWN0bHkgb24gYW4gaW5zdGFuY2UuXG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKHByb3BlcnR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBJZiBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHdhcyBwcm92aWRlZCwgY2FsbCBpdCB0byBvYnRhaW4gdGhlIHZhbHVlXG4gICAgICAgICAgICAvLyBmb3Igc2VyaWFsaXphdGlvbi5cbiAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2suY2FsbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKHZhbHVlKTtcbiAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IGJvb2xlYW5DbGFzcykge1xuICAgICAgICAgICAgLy8gQm9vbGVhbnMgYXJlIHJlcHJlc2VudGVkIGxpdGVyYWxseS5cbiAgICAgICAgICAgIHJldHVybiBcIlwiICsgdmFsdWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChjbGFzc05hbWUgPT0gbnVtYmVyQ2xhc3MpIHtcbiAgICAgICAgICAgIC8vIEpTT04gbnVtYmVycyBtdXN0IGJlIGZpbml0ZS4gYEluZmluaXR5YCBhbmQgYE5hTmAgYXJlIHNlcmlhbGl6ZWQgYXNcbiAgICAgICAgICAgIC8vIGBcIm51bGxcImAuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPiAtMSAvIDAgJiYgdmFsdWUgPCAxIC8gMCA/IFwiXCIgKyB2YWx1ZSA6IFwibnVsbFwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IHN0cmluZ0NsYXNzKSB7XG4gICAgICAgICAgICAvLyBTdHJpbmdzIGFyZSBkb3VibGUtcXVvdGVkIGFuZCBlc2NhcGVkLlxuICAgICAgICAgICAgcmV0dXJuIHF1b3RlKFwiXCIgKyB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNlcmlhbGl6ZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoaXMgaXMgYSBsaW5lYXIgc2VhcmNoOyBwZXJmb3JtYW5jZVxuICAgICAgICAgICAgLy8gaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBuZXN0ZWQgb2JqZWN0cy5cbiAgICAgICAgICAgIGZvciAobGVuZ3RoID0gc3RhY2subGVuZ3RoOyBsZW5ndGgtLTspIHtcbiAgICAgICAgICAgICAgaWYgKHN0YWNrW2xlbmd0aF0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgLy8gQ3ljbGljIHN0cnVjdHVyZXMgY2Fubm90IGJlIHNlcmlhbGl6ZWQgYnkgYEpTT04uc3RyaW5naWZ5YC5cbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQWRkIHRoZSBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgICAgICAgICAgc3RhY2sucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICByZXN1bHRzID0gW107XG4gICAgICAgICAgICAvLyBTYXZlIHRoZSBjdXJyZW50IGluZGVudGF0aW9uIGxldmVsIGFuZCBpbmRlbnQgb25lIGFkZGl0aW9uYWwgbGV2ZWwuXG4gICAgICAgICAgICBwcmVmaXggPSBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIGluZGVudGF0aW9uICs9IHdoaXRlc3BhY2U7XG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IGFycmF5Q2xhc3MpIHtcbiAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgc2VyaWFsaXplIGFycmF5IGVsZW1lbnRzLlxuICAgICAgICAgICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gdmFsdWUubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBzZXJpYWxpemUoaW5kZXgsIHZhbHVlLCBjYWxsYmFjaywgcHJvcGVydGllcywgd2hpdGVzcGFjZSwgaW5kZW50YXRpb24sIHN0YWNrKTtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudCA9PT0gdW5kZWYgPyBcIm51bGxcIiA6IGVsZW1lbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdHMubGVuZ3RoID8gKHdoaXRlc3BhY2UgPyBcIltcXG5cIiArIGluZGVudGF0aW9uICsgcmVzdWx0cy5qb2luKFwiLFxcblwiICsgaW5kZW50YXRpb24pICsgXCJcXG5cIiArIHByZWZpeCArIFwiXVwiIDogKFwiW1wiICsgcmVzdWx0cy5qb2luKFwiLFwiKSArIFwiXVwiKSkgOiBcIltdXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXJpYWxpemUgb2JqZWN0IG1lbWJlcnMuIE1lbWJlcnMgYXJlIHNlbGVjdGVkIGZyb21cbiAgICAgICAgICAgICAgLy8gZWl0aGVyIGEgdXNlci1zcGVjaWZpZWQgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lcywgb3IgdGhlIG9iamVjdFxuICAgICAgICAgICAgICAvLyBpdHNlbGYuXG4gICAgICAgICAgICAgIGZvckVhY2gocHJvcGVydGllcyB8fCB2YWx1ZSwgZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBzZXJpYWxpemUocHJvcGVydHksIHZhbHVlLCBjYWxsYmFjaywgcHJvcGVydGllcywgd2hpdGVzcGFjZSwgaW5kZW50YXRpb24sIHN0YWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCAhPT0gdW5kZWYpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zOiBcIklmIGBnYXBgIHt3aGl0ZXNwYWNlfVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCBgbWVtYmVyYCB7cXVvdGUocHJvcGVydHkpICsgXCI6XCJ9XG4gICAgICAgICAgICAgICAgICAvLyBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBgbWVtYmVyYCBhbmQgdGhlIGBzcGFjZWAgY2hhcmFjdGVyLlwiXG4gICAgICAgICAgICAgICAgICAvLyBUaGUgXCJgc3BhY2VgIGNoYXJhY3RlclwiIHJlZmVycyB0byB0aGUgbGl0ZXJhbCBzcGFjZVxuICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVyLCBub3QgdGhlIGBzcGFjZWAge3dpZHRofSBhcmd1bWVudCBwcm92aWRlZCB0b1xuICAgICAgICAgICAgICAgICAgLy8gYEpTT04uc3RyaW5naWZ5YC5cbiAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChxdW90ZShwcm9wZXJ0eSkgKyBcIjpcIiArICh3aGl0ZXNwYWNlID8gXCIgXCIgOiBcIlwiKSArIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdHMubGVuZ3RoID8gKHdoaXRlc3BhY2UgPyBcIntcXG5cIiArIGluZGVudGF0aW9uICsgcmVzdWx0cy5qb2luKFwiLFxcblwiICsgaW5kZW50YXRpb24pICsgXCJcXG5cIiArIHByZWZpeCArIFwifVwiIDogKFwie1wiICsgcmVzdWx0cy5qb2luKFwiLFwiKSArIFwifVwiKSkgOiBcInt9XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRoZSB0cmF2ZXJzZWQgb2JqZWN0IHN0YWNrLlxuICAgICAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQdWJsaWM6IGBKU09OLnN0cmluZ2lmeWAuIFNlZSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLlxuICAgICAgICBleHBvcnRzLnN0cmluZ2lmeSA9IGZ1bmN0aW9uIChzb3VyY2UsIGZpbHRlciwgd2lkdGgpIHtcbiAgICAgICAgICB2YXIgd2hpdGVzcGFjZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIGNsYXNzTmFtZTtcbiAgICAgICAgICBpZiAob2JqZWN0VHlwZXNbdHlwZW9mIGZpbHRlcl0gJiYgZmlsdGVyKSB7XG4gICAgICAgICAgICBpZiAoKGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwoZmlsdGVyKSkgPT0gZnVuY3Rpb25DbGFzcykge1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZpbHRlcjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IGFycmF5Q2xhc3MpIHtcbiAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgcHJvcGVydHkgbmFtZXMgYXJyYXkgaW50byBhIG1ha2VzaGlmdCBzZXQuXG4gICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBmaWx0ZXIubGVuZ3RoLCB2YWx1ZTsgaW5kZXggPCBsZW5ndGg7IHZhbHVlID0gZmlsdGVyW2luZGV4KytdLCAoKGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwodmFsdWUpKSwgY2xhc3NOYW1lID09IHN0cmluZ0NsYXNzIHx8IGNsYXNzTmFtZSA9PSBudW1iZXJDbGFzcykgJiYgKHByb3BlcnRpZXNbdmFsdWVdID0gMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAod2lkdGgpIHtcbiAgICAgICAgICAgIGlmICgoY2xhc3NOYW1lID0gZ2V0Q2xhc3MuY2FsbCh3aWR0aCkpID09IG51bWJlckNsYXNzKSB7XG4gICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGB3aWR0aGAgdG8gYW4gaW50ZWdlciBhbmQgY3JlYXRlIGEgc3RyaW5nIGNvbnRhaW5pbmdcbiAgICAgICAgICAgICAgLy8gYHdpZHRoYCBudW1iZXIgb2Ygc3BhY2UgY2hhcmFjdGVycy5cbiAgICAgICAgICAgICAgaWYgKCh3aWR0aCAtPSB3aWR0aCAlIDEpID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAod2hpdGVzcGFjZSA9IFwiXCIsIHdpZHRoID4gMTAgJiYgKHdpZHRoID0gMTApOyB3aGl0ZXNwYWNlLmxlbmd0aCA8IHdpZHRoOyB3aGl0ZXNwYWNlICs9IFwiIFwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjbGFzc05hbWUgPT0gc3RyaW5nQ2xhc3MpIHtcbiAgICAgICAgICAgICAgd2hpdGVzcGFjZSA9IHdpZHRoLmxlbmd0aCA8PSAxMCA/IHdpZHRoIDogd2lkdGguc2xpY2UoMCwgMTApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBPcGVyYSA8PSA3LjU0dTIgZGlzY2FyZHMgdGhlIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggZW1wdHkgc3RyaW5nIGtleXNcbiAgICAgICAgICAvLyAoYFwiXCJgKSBvbmx5IGlmIHRoZXkgYXJlIHVzZWQgZGlyZWN0bHkgd2l0aGluIGFuIG9iamVjdCBtZW1iZXIgbGlzdFxuICAgICAgICAgIC8vIChlLmcuLCBgIShcIlwiIGluIHsgXCJcIjogMX0pYCkuXG4gICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShcIlwiLCAodmFsdWUgPSB7fSwgdmFsdWVbXCJcIl0gPSBzb3VyY2UsIHZhbHVlKSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIFwiXCIsIFtdKTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gUHVibGljOiBQYXJzZXMgYSBKU09OIHNvdXJjZSBzdHJpbmcuXG4gICAgICBpZiAoIWhhcyhcImpzb24tcGFyc2VcIikpIHtcbiAgICAgICAgdmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IEEgbWFwIG9mIGVzY2FwZWQgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCB0aGVpciB1bmVzY2FwZWRcbiAgICAgICAgLy8gZXF1aXZhbGVudHMuXG4gICAgICAgIHZhciBVbmVzY2FwZXMgPSB7XG4gICAgICAgICAgOTI6IFwiXFxcXFwiLFxuICAgICAgICAgIDM0OiAnXCInLFxuICAgICAgICAgIDQ3OiBcIi9cIixcbiAgICAgICAgICA5ODogXCJcXGJcIixcbiAgICAgICAgICAxMTY6IFwiXFx0XCIsXG4gICAgICAgICAgMTEwOiBcIlxcblwiLFxuICAgICAgICAgIDEwMjogXCJcXGZcIixcbiAgICAgICAgICAxMTQ6IFwiXFxyXCJcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogU3RvcmVzIHRoZSBwYXJzZXIgc3RhdGUuXG4gICAgICAgIHZhciBJbmRleCwgU291cmNlO1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZXNldHMgdGhlIHBhcnNlciBzdGF0ZSBhbmQgdGhyb3dzIGEgYFN5bnRheEVycm9yYC5cbiAgICAgICAgdmFyIGFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIEluZGV4ID0gU291cmNlID0gbnVsbDtcbiAgICAgICAgICB0aHJvdyBTeW50YXhFcnJvcigpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZXR1cm5zIHRoZSBuZXh0IHRva2VuLCBvciBgXCIkXCJgIGlmIHRoZSBwYXJzZXIgaGFzIHJlYWNoZWRcbiAgICAgICAgLy8gdGhlIGVuZCBvZiB0aGUgc291cmNlIHN0cmluZy4gQSB0b2tlbiBtYXkgYmUgYSBzdHJpbmcsIG51bWJlciwgYG51bGxgXG4gICAgICAgIC8vIGxpdGVyYWwsIG9yIEJvb2xlYW4gbGl0ZXJhbC5cbiAgICAgICAgdmFyIGxleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgc291cmNlID0gU291cmNlLCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoLCB2YWx1ZSwgYmVnaW4sIHBvc2l0aW9uLCBpc1NpZ25lZCwgY2hhckNvZGU7XG4gICAgICAgICAgd2hpbGUgKEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KTtcbiAgICAgICAgICAgIHN3aXRjaCAoY2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuICAgICAgICAgICAgICAgIC8vIFNraXAgd2hpdGVzcGFjZSB0b2tlbnMsIGluY2x1ZGluZyB0YWJzLCBjYXJyaWFnZSByZXR1cm5zLCBsaW5lXG4gICAgICAgICAgICAgICAgLy8gZmVlZHMsIGFuZCBzcGFjZSBjaGFyYWN0ZXJzLlxuICAgICAgICAgICAgICAgIEluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgMTIzOiBjYXNlIDEyNTogY2FzZSA5MTogY2FzZSA5MzogY2FzZSA1ODogY2FzZSA0NDpcbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBhIHB1bmN0dWF0b3IgdG9rZW4gKGB7YCwgYH1gLCBgW2AsIGBdYCwgYDpgLCBvciBgLGApIGF0XG4gICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgcG9zaXRpb24uXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBjaGFySW5kZXhCdWdneSA/IHNvdXJjZS5jaGFyQXQoSW5kZXgpIDogc291cmNlW0luZGV4XTtcbiAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgICAgICAvLyBgXCJgIGRlbGltaXRzIGEgSlNPTiBzdHJpbmc7IGFkdmFuY2UgdG8gdGhlIG5leHQgY2hhcmFjdGVyIGFuZFxuICAgICAgICAgICAgICAgIC8vIGJlZ2luIHBhcnNpbmcgdGhlIHN0cmluZy4gU3RyaW5nIHRva2VucyBhcmUgcHJlZml4ZWQgd2l0aCB0aGVcbiAgICAgICAgICAgICAgICAvLyBzZW50aW5lbCBgQGAgY2hhcmFjdGVyIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSBwdW5jdHVhdG9ycyBhbmRcbiAgICAgICAgICAgICAgICAvLyBlbmQtb2Ytc3RyaW5nIHRva2Vucy5cbiAgICAgICAgICAgICAgICBmb3IgKHZhbHVlID0gXCJAXCIsIEluZGV4Kys7IEluZGV4IDwgbGVuZ3RoOykge1xuICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPCAzMikge1xuICAgICAgICAgICAgICAgICAgICAvLyBVbmVzY2FwZWQgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzICh0aG9zZSB3aXRoIGEgY29kZSB1bml0XG4gICAgICAgICAgICAgICAgICAgIC8vIGxlc3MgdGhhbiB0aGUgc3BhY2UgY2hhcmFjdGVyKSBhcmUgbm90IHBlcm1pdHRlZC5cbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhckNvZGUgPT0gOTIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSByZXZlcnNlIHNvbGlkdXMgKGBcXGApIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYW4gZXNjYXBlZFxuICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9sIGNoYXJhY3RlciAoaW5jbHVkaW5nIGBcImAsIGBcXGAsIGFuZCBgL2ApIG9yIFVuaWNvZGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA5MjogY2FzZSAzNDogY2FzZSA0NzogY2FzZSA5ODogY2FzZSAxMTY6IGNhc2UgMTEwOiBjYXNlIDEwMjogY2FzZSAxMTQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZpdmUgZXNjYXBlZCBjb250cm9sIGNoYXJhY3RlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBVbmVzY2FwZXNbY2hhckNvZGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTE3OlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYFxcdWAgbWFya3MgdGhlIGJlZ2lubmluZyBvZiBhIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCB2YWxpZGF0ZSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdXItZGlnaXQgY29kZSBwb2ludC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luID0gKytJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocG9zaXRpb24gPSBJbmRleCArIDQ7IEluZGV4IDwgcG9zaXRpb247IEluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgdmFsaWQgc2VxdWVuY2UgY29tcHJpc2VzIGZvdXIgaGV4ZGlnaXRzIChjYXNlLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnNlbnNpdGl2ZSkgdGhhdCBmb3JtIGEgc2luZ2xlIGhleGFkZWNpbWFsIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1NyB8fCBjaGFyQ29kZSA+PSA5NyAmJiBjaGFyQ29kZSA8PSAxMDIgfHwgY2hhckNvZGUgPj0gNjUgJiYgY2hhckNvZGUgPD0gNzApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZpdmUgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gZnJvbUNoYXJDb2RlKFwiMHhcIiArIHNvdXJjZS5zbGljZShiZWdpbiwgSW5kZXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSAzNCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEFuIHVuZXNjYXBlZCBkb3VibGUtcXVvdGUgY2hhcmFjdGVyIG1hcmtzIHRoZSBlbmQgb2YgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgLy8gc3RyaW5nLlxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBiZWdpbiA9IEluZGV4O1xuICAgICAgICAgICAgICAgICAgICAvLyBPcHRpbWl6ZSBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGEgc3RyaW5nIGlzIHZhbGlkLlxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hhckNvZGUgPj0gMzIgJiYgY2hhckNvZGUgIT0gOTIgJiYgY2hhckNvZGUgIT0gMzQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgc3RyaW5nIGFzLWlzLlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBzb3VyY2Uuc2xpY2UoYmVnaW4sIEluZGV4KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KSA9PSAzNCkge1xuICAgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgYW5kIHJldHVybiB0aGUgcmV2aXZlZCBzdHJpbmcuXG4gICAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBVbnRlcm1pbmF0ZWQgc3RyaW5nLlxuICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgbnVtYmVycyBhbmQgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgYmVnaW4gPSBJbmRleDtcbiAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHBhc3QgdGhlIG5lZ2F0aXZlIHNpZ24sIGlmIG9uZSBpcyBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDQ1KSB7XG4gICAgICAgICAgICAgICAgICBpc1NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBhbiBpbnRlZ2VyIG9yIGZsb2F0aW5nLXBvaW50IHZhbHVlLlxuICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nykge1xuICAgICAgICAgICAgICAgICAgLy8gTGVhZGluZyB6ZXJvZXMgYXJlIGludGVycHJldGVkIGFzIG9jdGFsIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDQ4ICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCArIDEpKSwgY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWwgb2N0YWwgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlzU2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAvLyBQYXJzZSB0aGUgaW50ZWdlciBjb21wb25lbnQuXG4gICAgICAgICAgICAgICAgICBmb3IgKDsgSW5kZXggPCBsZW5ndGggJiYgKChjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KTsgSW5kZXgrKyk7XG4gICAgICAgICAgICAgICAgICAvLyBGbG9hdHMgY2Fubm90IGNvbnRhaW4gYSBsZWFkaW5nIGRlY2ltYWwgcG9pbnQ7IGhvd2V2ZXIsIHRoaXNcbiAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaXMgYWxyZWFkeSBhY2NvdW50ZWQgZm9yIGJ5IHRoZSBwYXJzZXIuXG4gICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpID09IDQ2KSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gKytJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGhlIGRlY2ltYWwgY29tcG9uZW50LlxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcG9zaXRpb24gPCBsZW5ndGggJiYgKChjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KHBvc2l0aW9uKSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KTsgcG9zaXRpb24rKyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWwgdHJhaWxpbmcgZGVjaW1hbC5cbiAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEluZGV4ID0gcG9zaXRpb247XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBQYXJzZSBleHBvbmVudHMuIFRoZSBgZWAgZGVub3RpbmcgdGhlIGV4cG9uZW50IGlzXG4gICAgICAgICAgICAgICAgICAvLyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gMTAxIHx8IGNoYXJDb2RlID09IDY5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoKytJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNraXAgcGFzdCB0aGUgc2lnbiBmb2xsb3dpbmcgdGhlIGV4cG9uZW50LCBpZiBvbmUgaXNcbiAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gNDMgfHwgY2hhckNvZGUgPT0gNDUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIHRoZSBleHBvbmVudGlhbCBjb21wb25lbnQuXG4gICAgICAgICAgICAgICAgICAgIGZvciAocG9zaXRpb24gPSBJbmRleDsgcG9zaXRpb24gPCBsZW5ndGggJiYgKChjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KHBvc2l0aW9uKSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KTsgcG9zaXRpb24rKyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWwgZW1wdHkgZXhwb25lbnQuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBJbmRleCA9IHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy8gQ29lcmNlIHRoZSBwYXJzZWQgdmFsdWUgdG8gYSBKYXZhU2NyaXB0IG51bWJlci5cbiAgICAgICAgICAgICAgICAgIHJldHVybiArc291cmNlLnNsaWNlKGJlZ2luLCBJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEEgbmVnYXRpdmUgc2lnbiBtYXkgb25seSBwcmVjZWRlIG51bWJlcnMuXG4gICAgICAgICAgICAgICAgaWYgKGlzU2lnbmVkKSB7XG4gICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBgdHJ1ZWAsIGBmYWxzZWAsIGFuZCBgbnVsbGAgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5zbGljZShJbmRleCwgSW5kZXggKyA0KSA9PSBcInRydWVcIikge1xuICAgICAgICAgICAgICAgICAgSW5kZXggKz0gNDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlLnNsaWNlKEluZGV4LCBJbmRleCArIDUpID09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgICAgICAgSW5kZXggKz0gNTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZS5zbGljZShJbmRleCwgSW5kZXggKyA0KSA9PSBcIm51bGxcIikge1xuICAgICAgICAgICAgICAgICAgSW5kZXggKz0gNDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBVbnJlY29nbml6ZWQgdG9rZW4uXG4gICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmV0dXJuIHRoZSBzZW50aW5lbCBgJGAgY2hhcmFjdGVyIGlmIHRoZSBwYXJzZXIgaGFzIHJlYWNoZWQgdGhlIGVuZFxuICAgICAgICAgIC8vIG9mIHRoZSBzb3VyY2Ugc3RyaW5nLlxuICAgICAgICAgIHJldHVybiBcIiRcIjtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUGFyc2VzIGEgSlNPTiBgdmFsdWVgIHRva2VuLlxuICAgICAgICB2YXIgZ2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdHMsIGhhc01lbWJlcnM7XG4gICAgICAgICAgaWYgKHZhbHVlID09IFwiJFwiKSB7XG4gICAgICAgICAgICAvLyBVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dC5cbiAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKChjaGFySW5kZXhCdWdneSA/IHZhbHVlLmNoYXJBdCgwKSA6IHZhbHVlWzBdKSA9PSBcIkBcIikge1xuICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHNlbnRpbmVsIGBAYCBjaGFyYWN0ZXIuXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zbGljZSgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFBhcnNlIG9iamVjdCBhbmQgYXJyYXkgbGl0ZXJhbHMuXG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJbXCIpIHtcbiAgICAgICAgICAgICAgLy8gUGFyc2VzIGEgSlNPTiBhcnJheSwgcmV0dXJuaW5nIGEgbmV3IEphdmFTY3JpcHQgYXJyYXkuXG4gICAgICAgICAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICg7OyBoYXNNZW1iZXJzIHx8IChoYXNNZW1iZXJzID0gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGxleCgpO1xuICAgICAgICAgICAgICAgIC8vIEEgY2xvc2luZyBzcXVhcmUgYnJhY2tldCBtYXJrcyB0aGUgZW5kIG9mIHRoZSBhcnJheSBsaXRlcmFsLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIl1cIikge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBhcnJheSBsaXRlcmFsIGNvbnRhaW5zIGVsZW1lbnRzLCB0aGUgY3VycmVudCB0b2tlblxuICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBhIGNvbW1hIHNlcGFyYXRpbmcgdGhlIHByZXZpb3VzIGVsZW1lbnQgZnJvbSB0aGVcbiAgICAgICAgICAgICAgICAvLyBuZXh0LlxuICAgICAgICAgICAgICAgIGlmIChoYXNNZW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiXVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVW5leHBlY3RlZCB0cmFpbGluZyBgLGAgaW4gYXJyYXkgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBBIGAsYCBtdXN0IHNlcGFyYXRlIGVhY2ggYXJyYXkgZWxlbWVudC5cbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRWxpc2lvbnMgYW5kIGxlYWRpbmcgY29tbWFzIGFyZSBub3QgcGVybWl0dGVkLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIixcIikge1xuICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGdldCh2YWx1ZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBcIntcIikge1xuICAgICAgICAgICAgICAvLyBQYXJzZXMgYSBKU09OIG9iamVjdCwgcmV0dXJuaW5nIGEgbmV3IEphdmFTY3JpcHQgb2JqZWN0LlxuICAgICAgICAgICAgICByZXN1bHRzID0ge307XG4gICAgICAgICAgICAgIGZvciAoOzsgaGFzTWVtYmVycyB8fCAoaGFzTWVtYmVycyA9IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAvLyBBIGNsb3NpbmcgY3VybHkgYnJhY2UgbWFya3MgdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwifVwiKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBsaXRlcmFsIGNvbnRhaW5zIG1lbWJlcnMsIHRoZSBjdXJyZW50IHRva2VuXG4gICAgICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGEgY29tbWEgc2VwYXJhdG9yLlxuICAgICAgICAgICAgICAgIGlmIChoYXNNZW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwifVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVW5leHBlY3RlZCB0cmFpbGluZyBgLGAgaW4gb2JqZWN0IGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBgLGAgbXVzdCBzZXBhcmF0ZSBlYWNoIG9iamVjdCBtZW1iZXIuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIExlYWRpbmcgY29tbWFzIGFyZSBub3QgcGVybWl0dGVkLCBvYmplY3QgcHJvcGVydHkgbmFtZXMgbXVzdCBiZVxuICAgICAgICAgICAgICAgIC8vIGRvdWJsZS1xdW90ZWQgc3RyaW5ncywgYW5kIGEgYDpgIG11c3Qgc2VwYXJhdGUgZWFjaCBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIC8vIG5hbWUgYW5kIHZhbHVlLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIixcIiB8fCB0eXBlb2YgdmFsdWUgIT0gXCJzdHJpbmdcIiB8fCAoY2hhckluZGV4QnVnZ3kgPyB2YWx1ZS5jaGFyQXQoMCkgOiB2YWx1ZVswXSkgIT0gXCJAXCIgfHwgbGV4KCkgIT0gXCI6XCIpIHtcbiAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNbdmFsdWUuc2xpY2UoMSldID0gZ2V0KGxleCgpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdG9rZW4gZW5jb3VudGVyZWQuXG4gICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFVwZGF0ZXMgYSB0cmF2ZXJzZWQgb2JqZWN0IG1lbWJlci5cbiAgICAgICAgdmFyIHVwZGF0ZSA9IGZ1bmN0aW9uIChzb3VyY2UsIHByb3BlcnR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIHZhciBlbGVtZW50ID0gd2Fsayhzb3VyY2UsIHByb3BlcnR5LCBjYWxsYmFjayk7XG4gICAgICAgICAgaWYgKGVsZW1lbnQgPT09IHVuZGVmKSB7XG4gICAgICAgICAgICBkZWxldGUgc291cmNlW3Byb3BlcnR5XTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc291cmNlW3Byb3BlcnR5XSA9IGVsZW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZWN1cnNpdmVseSB0cmF2ZXJzZXMgYSBwYXJzZWQgSlNPTiBvYmplY3QsIGludm9raW5nIHRoZVxuICAgICAgICAvLyBgY2FsbGJhY2tgIGZ1bmN0aW9uIGZvciBlYWNoIHZhbHVlLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZVxuICAgICAgICAvLyBgV2Fsayhob2xkZXIsIG5hbWUpYCBvcGVyYXRpb24gZGVmaW5lZCBpbiBFUyA1LjEgc2VjdGlvbiAxNS4xMi4yLlxuICAgICAgICB2YXIgd2FsayA9IGZ1bmN0aW9uIChzb3VyY2UsIHByb3BlcnR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVtwcm9wZXJ0eV0sIGxlbmd0aDtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGBmb3JFYWNoYCBjYW4ndCBiZSB1c2VkIHRvIHRyYXZlcnNlIGFuIGFycmF5IGluIE9wZXJhIDw9IDguNTRcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgaXRzIGBPYmplY3QjaGFzT3duUHJvcGVydHlgIGltcGxlbWVudGF0aW9uIHJldHVybnMgYGZhbHNlYFxuICAgICAgICAgICAgLy8gZm9yIGFycmF5IGluZGljZXMgKGUuZy4sIGAhWzEsIDIsIDNdLmhhc093blByb3BlcnR5KFwiMFwiKWApLlxuICAgICAgICAgICAgaWYgKGdldENsYXNzLmNhbGwodmFsdWUpID09IGFycmF5Q2xhc3MpIHtcbiAgICAgICAgICAgICAgZm9yIChsZW5ndGggPSB2YWx1ZS5sZW5ndGg7IGxlbmd0aC0tOykge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSh2YWx1ZSwgbGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvckVhY2godmFsdWUsIGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSh2YWx1ZSwgcHJvcGVydHksIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHNvdXJjZSwgcHJvcGVydHksIHZhbHVlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQdWJsaWM6IGBKU09OLnBhcnNlYC4gU2VlIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjIuXG4gICAgICAgIGV4cG9ydHMucGFyc2UgPSBmdW5jdGlvbiAoc291cmNlLCBjYWxsYmFjaykge1xuICAgICAgICAgIHZhciByZXN1bHQsIHZhbHVlO1xuICAgICAgICAgIEluZGV4ID0gMDtcbiAgICAgICAgICBTb3VyY2UgPSBcIlwiICsgc291cmNlO1xuICAgICAgICAgIHJlc3VsdCA9IGdldChsZXgoKSk7XG4gICAgICAgICAgLy8gSWYgYSBKU09OIHN0cmluZyBjb250YWlucyBtdWx0aXBsZSB0b2tlbnMsIGl0IGlzIGludmFsaWQuXG4gICAgICAgICAgaWYgKGxleCgpICE9IFwiJFwiKSB7XG4gICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZXNldCB0aGUgcGFyc2VyIHN0YXRlLlxuICAgICAgICAgIEluZGV4ID0gU291cmNlID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sgJiYgZ2V0Q2xhc3MuY2FsbChjYWxsYmFjaykgPT0gZnVuY3Rpb25DbGFzcyA/IHdhbGsoKHZhbHVlID0ge30sIHZhbHVlW1wiXCJdID0gcmVzdWx0LCB2YWx1ZSksIFwiXCIsIGNhbGxiYWNrKSA6IHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnRzW1wicnVuSW5Db250ZXh0XCJdID0gcnVuSW5Db250ZXh0O1xuICAgIHJldHVybiBleHBvcnRzO1xuICB9XG5cbiAgaWYgKGZyZWVFeHBvcnRzICYmICFpc0xvYWRlcikge1xuICAgIC8vIEV4cG9ydCBmb3IgQ29tbW9uSlMgZW52aXJvbm1lbnRzLlxuICAgIHJ1bkluQ29udGV4dChyb290LCBmcmVlRXhwb3J0cyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRXhwb3J0IGZvciB3ZWIgYnJvd3NlcnMgYW5kIEphdmFTY3JpcHQgZW5naW5lcy5cbiAgICB2YXIgbmF0aXZlSlNPTiA9IHJvb3QuSlNPTixcbiAgICAgICAgcHJldmlvdXNKU09OID0gcm9vdFtcIkpTT04zXCJdLFxuICAgICAgICBpc1Jlc3RvcmVkID0gZmFsc2U7XG5cbiAgICB2YXIgSlNPTjMgPSBydW5JbkNvbnRleHQocm9vdCwgKHJvb3RbXCJKU09OM1wiXSA9IHtcbiAgICAgIC8vIFB1YmxpYzogUmVzdG9yZXMgdGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSBnbG9iYWwgYEpTT05gIG9iamVjdCBhbmRcbiAgICAgIC8vIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGBKU09OM2Agb2JqZWN0LlxuICAgICAgXCJub0NvbmZsaWN0XCI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFpc1Jlc3RvcmVkKSB7XG4gICAgICAgICAgaXNSZXN0b3JlZCA9IHRydWU7XG4gICAgICAgICAgcm9vdC5KU09OID0gbmF0aXZlSlNPTjtcbiAgICAgICAgICByb290W1wiSlNPTjNcIl0gPSBwcmV2aW91c0pTT047XG4gICAgICAgICAgbmF0aXZlSlNPTiA9IHByZXZpb3VzSlNPTiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04zO1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIHJvb3QuSlNPTiA9IHtcbiAgICAgIFwicGFyc2VcIjogSlNPTjMucGFyc2UsXG4gICAgICBcInN0cmluZ2lmeVwiOiBKU09OMy5zdHJpbmdpZnlcbiAgICB9O1xuICB9XG5cbiAgLy8gRXhwb3J0IGZvciBhc3luY2hyb25vdXMgbW9kdWxlIGxvYWRlcnMuXG4gIGlmIChpc0xvYWRlcikge1xuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gSlNPTjM7XG4gICAgfSk7XG4gIH1cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3XG4gKiBtZW1iZXIgaXMgTygxKSwgdGVzdGluZyBmb3IgbWVtYmVyc2hpcCBpcyBPKDEpLCBhbmQgZmluZGluZyB0aGUgaW5kZXggb2YgYW5cbiAqIGVsZW1lbnQgaXMgTygxKS4gUmVtb3ZpbmcgZWxlbWVudHMgZnJvbSB0aGUgc2V0IGlzIG5vdCBzdXBwb3J0ZWQuIE9ubHlcbiAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgbWVtYmVyc2hpcC5cbiAqL1xuZnVuY3Rpb24gQXJyYXlTZXQoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8qKlxuICogU3RhdGljIG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gKi9cbkFycmF5U2V0LmZyb21BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X2Zyb21BcnJheShhQXJyYXksIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYUFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgc2V0LmFkZChhQXJyYXlbaV0sIGFBbGxvd0R1cGxpY2F0ZXMpO1xuICB9XG4gIHJldHVybiBzZXQ7XG59O1xuXG4vKipcbiAqIFJldHVybiBob3cgbWFueSB1bmlxdWUgaXRlbXMgYXJlIGluIHRoaXMgQXJyYXlTZXQuIElmIGR1cGxpY2F0ZXMgaGF2ZSBiZWVuXG4gKiBhZGRlZCwgdGhhbiB0aG9zZSBkbyBub3QgY291bnQgdG93YXJkcyB0aGUgc2l6ZS5cbiAqXG4gKiBAcmV0dXJucyBOdW1iZXJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiBBcnJheVNldF9zaXplKCkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fc2V0KS5sZW5ndGg7XG59O1xuXG4vKipcbiAqIEFkZCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoaXMgc2V0LlxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gQXJyYXlTZXRfYWRkKGFTdHIsIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICB2YXIgaXNEdXBsaWNhdGUgPSBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB2YXIgaWR4ID0gdGhpcy5fYXJyYXkubGVuZ3RoO1xuICBpZiAoIWlzRHVwbGljYXRlIHx8IGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICB0aGlzLl9hcnJheS5wdXNoKGFTdHIpO1xuICB9XG4gIGlmICghaXNEdXBsaWNhdGUpIHtcbiAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gIH1cbn07XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIHN0cmluZyBhIG1lbWJlciBvZiB0aGlzIHNldD9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIEFycmF5U2V0X2hhcyhhU3RyKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgcmV0dXJuIGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIGlmIChoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgaW50VG9DaGFyTWFwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcblxuLyoqXG4gKiBFbmNvZGUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMCB0byA2MyB0byBhIHNpbmdsZSBiYXNlIDY0IGRpZ2l0LlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgaWYgKDAgPD0gbnVtYmVyICYmIG51bWJlciA8IGludFRvQ2hhck1hcC5sZW5ndGgpIHtcbiAgICByZXR1cm4gaW50VG9DaGFyTWFwW251bWJlcl07XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogXCIgKyBudW1iZXIpO1xufTtcblxuLyoqXG4gKiBEZWNvZGUgYSBzaW5nbGUgYmFzZSA2NCBjaGFyYWN0ZXIgY29kZSBkaWdpdCB0byBhbiBpbnRlZ2VyLiBSZXR1cm5zIC0xIG9uXG4gKiBmYWlsdXJlLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIChjaGFyQ29kZSkge1xuICB2YXIgYmlnQSA9IDY1OyAgICAgLy8gJ0EnXG4gIHZhciBiaWdaID0gOTA7ICAgICAvLyAnWidcblxuICB2YXIgbGl0dGxlQSA9IDk3OyAgLy8gJ2EnXG4gIHZhciBsaXR0bGVaID0gMTIyOyAvLyAneidcblxuICB2YXIgemVybyA9IDQ4OyAgICAgLy8gJzAnXG4gIHZhciBuaW5lID0gNTc7ICAgICAvLyAnOSdcblxuICB2YXIgcGx1cyA9IDQzOyAgICAgLy8gJysnXG4gIHZhciBzbGFzaCA9IDQ3OyAgICAvLyAnLydcblxuICB2YXIgbGl0dGxlT2Zmc2V0ID0gMjY7XG4gIHZhciBudW1iZXJPZmZzZXQgPSA1MjtcblxuICAvLyAwIC0gMjU6IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXG4gIGlmIChiaWdBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGJpZ1opIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gYmlnQSk7XG4gIH1cblxuICAvLyAyNiAtIDUxOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuICBpZiAobGl0dGxlQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBsaXR0bGVaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGxpdHRsZUEgKyBsaXR0bGVPZmZzZXQpO1xuICB9XG5cbiAgLy8gNTIgLSA2MTogMDEyMzQ1Njc4OVxuICBpZiAoemVybyA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBuaW5lKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIHplcm8gKyBudW1iZXJPZmZzZXQpO1xuICB9XG5cbiAgLy8gNjI6ICtcbiAgaWYgKGNoYXJDb2RlID09IHBsdXMpIHtcbiAgICByZXR1cm4gNjI7XG4gIH1cblxuICAvLyA2MzogL1xuICBpZiAoY2hhckNvZGUgPT0gc2xhc2gpIHtcbiAgICByZXR1cm4gNjM7XG4gIH1cblxuICAvLyBJbnZhbGlkIGJhc2U2NCBkaWdpdC5cbiAgcmV0dXJuIC0xO1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5leHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBSZWN1cnNpdmUgaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaC5cbiAqXG4gKiBAcGFyYW0gYUxvdyBJbmRpY2VzIGhlcmUgYW5kIGxvd2VyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYUhpZ2ggSW5kaWNlcyBoZXJlIGFuZCBoaWdoZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IGJlaW5nIHNlYXJjaGVkIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIG5vbi1lbXB0eSBhcnJheSBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBGdW5jdGlvbiB3aGljaCB0YWtlcyB0d28gZWxlbWVudHMgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgLy9cbiAgLy8gICAxLiBXZSBmaW5kIHRoZSBleGFjdCBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgLy9cbiAgLy8gICAyLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGJ1dCB3ZSBjYW4gcmV0dXJuIHRoZSBpbmRleCBvZlxuICAvLyAgICAgIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudC5cbiAgLy9cbiAgLy8gICAzLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGFuZCB0aGVyZSBpcyBubyBuZXh0LWNsb3Nlc3RcbiAgLy8gICAgICBlbGVtZW50IHRoYW4gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgc28gd2UgcmV0dXJuIC0xLlxuICB2YXIgbWlkID0gTWF0aC5mbG9vcigoYUhpZ2ggLSBhTG93KSAvIDIpICsgYUxvdztcbiAgdmFyIGNtcCA9IGFDb21wYXJlKGFOZWVkbGUsIGFIYXlzdGFja1ttaWRdLCB0cnVlKTtcbiAgaWYgKGNtcCA9PT0gMCkge1xuICAgIC8vIEZvdW5kIHRoZSBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgICByZXR1cm4gbWlkO1xuICB9XG4gIGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGdyZWF0ZXIgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAoYUhpZ2ggLSBtaWQgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgdXBwZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2gobWlkLCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIFRoZSBleGFjdCBuZWVkbGUgZWxlbWVudCB3YXMgbm90IGZvdW5kIGluIHRoaXMgaGF5c3RhY2suIERldGVybWluZSBpZlxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBhSGlnaCA8IGFIYXlzdGFjay5sZW5ndGggPyBhSGlnaCA6IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGxlc3MgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAobWlkIC0gYUxvdyA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSBsb3dlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBtaWQsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYUxvdyA8IDAgPyAtMSA6IGFMb3c7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoIHdoaWNoIHdpbGwgYWx3YXlzIHRyeSBhbmQgcmV0dXJuXG4gKiB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgZWxlbWVudCBpZiB0aGVyZSBpcyBubyBleGFjdCBoaXQuIFRoaXMgaXMgYmVjYXVzZVxuICogbWFwcGluZ3MgYmV0d2VlbiBvcmlnaW5hbCBhbmQgZ2VuZXJhdGVkIGxpbmUvY29sIHBhaXJzIGFyZSBzaW5nbGUgcG9pbnRzLFxuICogYW5kIHRoZXJlIGlzIGFuIGltcGxpY2l0IHJlZ2lvbiBiZXR3ZWVuIGVhY2ggb2YgdGhlbSwgc28gYSBtaXNzIGp1c3QgbWVhbnNcbiAqIHRoYXQgeW91IGFyZW4ndCBvbiB0aGUgdmVyeSBzdGFydCBvZiBhIHJlZ2lvbi5cbiAqXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCB5b3UgYXJlIGxvb2tpbmcgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgYXJyYXkgdGhhdCBpcyBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBuZWVkbGUgYW5kIGFuIGVsZW1lbnQgaW4gdGhlXG4gKiAgICAgYXJyYXkgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5lZWRsZSBpcyBsZXNzXG4gKiAgICAgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgZWxlbWVudCwgcmVzcGVjdGl2ZWx5LlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICovXG5leHBvcnRzLnNlYXJjaCA9IGZ1bmN0aW9uIHNlYXJjaChhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICBpZiAoYUhheXN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHJlY3Vyc2l2ZVNlYXJjaCgtMSwgYUhheXN0YWNrLmxlbmd0aCwgYU5lZWRsZSwgYUhheXN0YWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbXBhcmUsIGFCaWFzIHx8IGV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLy8gV2UgaGF2ZSBmb3VuZCBlaXRoZXIgdGhlIGV4YWN0IGVsZW1lbnQsIG9yIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudCB0aGFuXG4gIC8vIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIHN1Y2hcbiAgLy8gZWxlbWVudC4gTWFrZSBzdXJlIHdlIGFsd2F5cyByZXR1cm4gdGhlIHNtYWxsZXN0IG9mIHRoZXNlLlxuICB3aGlsZSAoaW5kZXggLSAxID49IDApIHtcbiAgICBpZiAoYUNvbXBhcmUoYUhheXN0YWNrW2luZGV4XSwgYUhheXN0YWNrW2luZGV4IC0gMV0sIHRydWUpICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLS1pbmRleDtcbiAgfVxuXG4gIHJldHVybiBpbmRleDtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGdldHRpbmcgdmFsdWVzIGZyb20gcGFyYW1ldGVyL29wdGlvbnNcbiAqIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGFyZ3MgVGhlIG9iamVjdCB3ZSBhcmUgZXh0cmFjdGluZyB2YWx1ZXMgZnJvbVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdlIGFyZSBnZXR0aW5nLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBBbiBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmdcbiAqIGZyb20gdGhlIG9iamVjdC4gSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkIGFuZCB0aGUgcHJvcGVydHkgaXMgbWlzc2luZywgYW5cbiAqIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICovXG5mdW5jdGlvbiBnZXRBcmcoYUFyZ3MsIGFOYW1lLCBhRGVmYXVsdFZhbHVlKSB7XG4gIGlmIChhTmFtZSBpbiBhQXJncykge1xuICAgIHJldHVybiBhQXJnc1thTmFtZV07XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBhRGVmYXVsdFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYU5hbWUgKyAnXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKTtcbiAgfVxufVxuZXhwb3J0cy5nZXRBcmcgPSBnZXRBcmc7XG5cbnZhciB1cmxSZWdleHAgPSAvXig/OihbXFx3K1xcLS5dKyk6KT9cXC9cXC8oPzooXFx3KzpcXHcrKUApPyhbXFx3Ll0qKSg/OjooXFxkKykpPyhcXFMqKSQvO1xudmFyIGRhdGFVcmxSZWdleHAgPSAvXmRhdGE6LitcXCwuKyQvO1xuXG5mdW5jdGlvbiB1cmxQYXJzZShhVXJsKSB7XG4gIHZhciBtYXRjaCA9IGFVcmwubWF0Y2godXJsUmVnZXhwKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NoZW1lOiBtYXRjaFsxXSxcbiAgICBhdXRoOiBtYXRjaFsyXSxcbiAgICBob3N0OiBtYXRjaFszXSxcbiAgICBwb3J0OiBtYXRjaFs0XSxcbiAgICBwYXRoOiBtYXRjaFs1XVxuICB9O1xufVxuZXhwb3J0cy51cmxQYXJzZSA9IHVybFBhcnNlO1xuXG5mdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFyc2VkVXJsKSB7XG4gIHZhciB1cmwgPSAnJztcbiAgaWYgKGFQYXJzZWRVcmwuc2NoZW1lKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuc2NoZW1lICsgJzonO1xuICB9XG4gIHVybCArPSAnLy8nO1xuICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuYXV0aCArICdAJztcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuaG9zdDtcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7XG4gICAgdXJsICs9IFwiOlwiICsgYVBhcnNlZFVybC5wb3J0XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucGF0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnBhdGg7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cbmV4cG9ydHMudXJsR2VuZXJhdGUgPSB1cmxHZW5lcmF0ZTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGF0aCwgb3IgdGhlIHBhdGggcG9ydGlvbiBvZiBhIFVSTDpcbiAqXG4gKiAtIFJlcGxhY2VzIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aCBvbmUgc2xhc2guXG4gKiAtIFJlbW92ZXMgdW5uZWNlc3NhcnkgJy4nIHBhcnRzLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICc8ZGlyPi8uLicgcGFydHMuXG4gKlxuICogQmFzZWQgb24gY29kZSBpbiB0aGUgTm9kZS5qcyAncGF0aCcgY29yZSBtb2R1bGUuXG4gKlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIHVybCB0byBub3JtYWxpemUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhUGF0aCkge1xuICB2YXIgcGF0aCA9IGFQYXRoO1xuICB2YXIgdXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICBpZiAodXJsKSB7XG4gICAgaWYgKCF1cmwucGF0aCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cbiAgICBwYXRoID0gdXJsLnBhdGg7XG4gIH1cbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCk7XG5cbiAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuICBmb3IgKHZhciBwYXJ0LCB1cCA9IDAsIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHBhcnQgPSBwYXJ0c1tpXTtcbiAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXAgPiAwKSB7XG4gICAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYmxhbmsgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuIFRyeWluZyB0byBnb1xuICAgICAgICAvLyBhYm92ZSB0aGUgcm9vdCBpcyBhIG5vLW9wLiBUaGVyZWZvcmUgd2UgY2FuIHJlbW92ZSBhbGwgJy4uJyBwYXJ0c1xuICAgICAgICAvLyBkaXJlY3RseSBhZnRlciB0aGUgcm9vdC5cbiAgICAgICAgcGFydHMuc3BsaWNlKGkgKyAxLCB1cCk7XG4gICAgICAgIHVwID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShpLCAyKTtcbiAgICAgICAgdXAtLTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcblxuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICBwYXRoID0gaXNBYnNvbHV0ZSA/ICcvJyA6ICcuJztcbiAgfVxuXG4gIGlmICh1cmwpIHtcbiAgICB1cmwucGF0aCA9IHBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKHVybCk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcblxuLyoqXG4gKiBKb2lucyB0d28gcGF0aHMvVVJMcy5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIGpvaW5lZCB3aXRoIHRoZSByb290LlxuICpcbiAqIC0gSWYgYVBhdGggaXMgYSBVUkwgb3IgYSBkYXRhIFVSSSwgYVBhdGggaXMgcmV0dXJuZWQsIHVubGVzcyBhUGF0aCBpcyBhXG4gKiAgIHNjaGVtZS1yZWxhdGl2ZSBVUkw6IFRoZW4gdGhlIHNjaGVtZSBvZiBhUm9vdCwgaWYgYW55LCBpcyBwcmVwZW5kZWRcbiAqICAgZmlyc3QuXG4gKiAtIE90aGVyd2lzZSBhUGF0aCBpcyBhIHBhdGguIElmIGFSb290IGlzIGEgVVJMLCB0aGVuIGl0cyBwYXRoIHBvcnRpb25cbiAqICAgaXMgdXBkYXRlZCB3aXRoIHRoZSByZXN1bHQgYW5kIGFSb290IGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhlIHJlc3VsdFxuICogICBpcyByZXR1cm5lZC5cbiAqICAgLSBJZiBhUGF0aCBpcyBhYnNvbHV0ZSwgdGhlIHJlc3VsdCBpcyBhUGF0aC5cbiAqICAgLSBPdGhlcndpc2UgdGhlIHR3byBwYXRocyBhcmUgam9pbmVkIHdpdGggYSBzbGFzaC5cbiAqIC0gSm9pbmluZyBmb3IgZXhhbXBsZSAnaHR0cDovLycgYW5kICd3d3cuZXhhbXBsZS5jb20nIGlzIGFsc28gc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBqb2luKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG4gIGlmIChhUGF0aCA9PT0gXCJcIikge1xuICAgIGFQYXRoID0gXCIuXCI7XG4gIH1cbiAgdmFyIGFQYXRoVXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICB2YXIgYVJvb3RVcmwgPSB1cmxQYXJzZShhUm9vdCk7XG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290ID0gYVJvb3RVcmwucGF0aCB8fCAnLyc7XG4gIH1cblxuICAvLyBgam9pbihmb28sICcvL3d3dy5leGFtcGxlLm9yZycpYFxuICBpZiAoYVBhdGhVcmwgJiYgIWFQYXRoVXJsLnNjaGVtZSkge1xuICAgIGlmIChhUm9vdFVybCkge1xuICAgICAgYVBhdGhVcmwuc2NoZW1lID0gYVJvb3RVcmwuc2NoZW1lO1xuICAgIH1cbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVBhdGhVcmwpO1xuICB9XG5cbiAgaWYgKGFQYXRoVXJsIHx8IGFQYXRoLm1hdGNoKGRhdGFVcmxSZWdleHApKSB7XG4gICAgcmV0dXJuIGFQYXRoO1xuICB9XG5cbiAgLy8gYGpvaW4oJ2h0dHA6Ly8nLCAnd3d3LmV4YW1wbGUuY29tJylgXG4gIGlmIChhUm9vdFVybCAmJiAhYVJvb3RVcmwuaG9zdCAmJiAhYVJvb3RVcmwucGF0aCkge1xuICAgIGFSb290VXJsLmhvc3QgPSBhUGF0aDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG5cbiAgdmFyIGpvaW5lZCA9IGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgPyBhUGF0aFxuICAgIDogbm9ybWFsaXplKGFSb290LnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgYVBhdGgpO1xuXG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290VXJsLnBhdGggPSBqb2luZWQ7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuICByZXR1cm4gam9pbmVkO1xufVxuZXhwb3J0cy5qb2luID0gam9pbjtcblxuZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24gKGFQYXRoKSB7XG4gIHJldHVybiBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJyB8fCAhIWFQYXRoLm1hdGNoKHVybFJlZ2V4cCk7XG59O1xuXG4vKipcbiAqIE1ha2UgYSBwYXRoIHJlbGF0aXZlIHRvIGEgVVJMIG9yIGFub3RoZXIgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIG1hZGUgcmVsYXRpdmUgdG8gYVJvb3QuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0aXZlKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG5cbiAgYVJvb3QgPSBhUm9vdC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgcGF0aCB0byBiZSBhYm92ZSB0aGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBzaW1wbHlcbiAgLy8gY2hlY2tpbmcgd2hldGhlciB0aGUgcm9vdCBpcyBhIHByZWZpeCBvZiB0aGUgcGF0aCB3b24ndCB3b3JrLiBJbnN0ZWFkLCB3ZVxuICAvLyBuZWVkIHRvIHJlbW92ZSBjb21wb25lbnRzIGZyb20gdGhlIHJvb3Qgb25lIGJ5IG9uZSwgdW50aWwgZWl0aGVyIHdlIGZpbmRcbiAgLy8gYSBwcmVmaXggdGhhdCBmaXRzLCBvciB3ZSBydW4gb3V0IG9mIGNvbXBvbmVudHMgdG8gcmVtb3ZlLlxuICB2YXIgbGV2ZWwgPSAwO1xuICB3aGlsZSAoYVBhdGguaW5kZXhPZihhUm9vdCArICcvJykgIT09IDApIHtcbiAgICB2YXIgaW5kZXggPSBhUm9vdC5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBvbmx5IHBhcnQgb2YgdGhlIHJvb3QgdGhhdCBpcyBsZWZ0IGlzIHRoZSBzY2hlbWUgKGkuZS4gaHR0cDovLyxcbiAgICAvLyBmaWxlOi8vLywgZXRjLiksIG9uZSBvciBtb3JlIHNsYXNoZXMgKC8pLCBvciBzaW1wbHkgbm90aGluZyBhdCBhbGwsIHdlXG4gICAgLy8gaGF2ZSBleGhhdXN0ZWQgYWxsIGNvbXBvbmVudHMsIHNvIHRoZSBwYXRoIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcm9vdC5cbiAgICBhUm9vdCA9IGFSb290LnNsaWNlKDAsIGluZGV4KTtcbiAgICBpZiAoYVJvb3QubWF0Y2goL14oW15cXC9dKzpcXC8pP1xcLyokLykpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICArK2xldmVsO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGFkZCBhIFwiLi4vXCIgZm9yIGVhY2ggY29tcG9uZW50IHdlIHJlbW92ZWQgZnJvbSB0aGUgcm9vdC5cbiAgcmV0dXJuIEFycmF5KGxldmVsICsgMSkuam9pbihcIi4uL1wiKSArIGFQYXRoLnN1YnN0cihhUm9vdC5sZW5ndGggKyAxKTtcbn1cbmV4cG9ydHMucmVsYXRpdmUgPSByZWxhdGl2ZTtcblxudmFyIHN1cHBvcnRzTnVsbFByb3RvID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAhKCdfX3Byb3RvX18nIGluIG9iaik7XG59KCkpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSAocykge1xuICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBCZWNhdXNlIGJlaGF2aW9yIGdvZXMgd2Fja3kgd2hlbiB5b3Ugc2V0IGBfX3Byb3RvX19gIG9uIG9iamVjdHMsIHdlXG4gKiBoYXZlIHRvIHByZWZpeCBhbGwgdGhlIHN0cmluZ3MgaW4gb3VyIHNldCB3aXRoIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXIuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvcHVsbC8zMSBhbmRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzMwXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbmZ1bmN0aW9uIHRvU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gJyQnICsgYVN0cjtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy50b1NldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiB0b1NldFN0cmluZztcblxuZnVuY3Rpb24gZnJvbVNldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuIGFTdHIuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMuZnJvbVNldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiBmcm9tU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBpc1Byb3RvU3RyaW5nKHMpIHtcbiAgaWYgKCFzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IHMubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPCA5IC8qIFwiX19wcm90b19fXCIubGVuZ3RoICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHMuY2hhckNvZGVBdChsZW5ndGggLSAxKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDIpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMykgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA0KSAhPT0gMTE2IC8qICd0JyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDUpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNikgIT09IDExNCAvKiAncicgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA3KSAhPT0gMTEyIC8qICdwJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDgpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOSkgIT09IDk1ICAvKiAnXycgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gbGVuZ3RoIC0gMTA7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHMuY2hhckNvZGVBdChpKSAhPT0gMzYgLyogJyQnICovKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiwgYnV0IGRpZmZlcmVudCBnZW5lcmF0ZWRcbiAqIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhIG1hcHBpbmcgd2l0aCBhXG4gKiBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyhtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGRlZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBpbmRpY2VzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICogbWFwcGluZyB3aXRoIGEgc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQ7XG5cbmZ1bmN0aW9uIHN0cmNtcChhU3RyMSwgYVN0cjIpIHtcbiAgaWYgKGFTdHIxID09PSBhU3RyMikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKGFTdHIxID4gYVN0cjIpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggaW5mbGF0ZWQgc291cmNlIGFuZCBuYW1lIHN0cmluZ3Mgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gc3RyY21wKG1hcHBpbmdBLnNvdXJjZSwgbWFwcGluZ0Iuc291cmNlKTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gc3RyY21wKG1hcHBpbmdBLm5hbWUsIG1hcHBpbmdCLm5hbWUpO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2stZ2VuZXJhdG9yJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tHZW5lcmF0b3IgPSBmYWN0b3J5KHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTdGFja0ZyYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFja3RyYWNlOiBmdW5jdGlvbiBTdGFja0dlbmVyYXRvciQkYmFja3RyYWNlKG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICAgICAgdmFyIG1heFN0YWNrU2l6ZSA9IDEwO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcHRzLm1heFN0YWNrU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBtYXhTdGFja1NpemUgPSBvcHRzLm1heFN0YWNrU2l6ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGN1cnIgPSBhcmd1bWVudHMuY2FsbGVlO1xuICAgICAgICAgICAgd2hpbGUgKGN1cnIgJiYgc3RhY2subGVuZ3RoIDwgbWF4U3RhY2tTaXplICYmIGN1cnJbJ2FyZ3VtZW50cyddKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxsb3cgVjggb3B0aW1pemF0aW9uc1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGN1cnJbJ2FyZ3VtZW50cyddLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBjdXJyWydhcmd1bWVudHMnXVtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKC9mdW5jdGlvbig/OlxccysoW1xcdyRdKykpK1xccypcXCgvLnRlc3QoY3Vyci50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ldyBTdGFja0ZyYW1lKHtmdW5jdGlvbk5hbWU6IFJlZ0V4cC4kMSB8fCB1bmRlZmluZWQsIGFyZ3M6IGFyZ3N9KSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh7YXJnczogYXJnc30pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci5jYWxsZXI7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZS1ncHMnLCBbJ3NvdXJjZS1tYXAnLCAnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc291cmNlLW1hcC9saWIvc291cmNlLW1hcC1jb25zdW1lcicpLCByZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tUcmFjZUdQUyA9IGZhY3Rvcnkocm9vdC5Tb3VyY2VNYXAgfHwgcm9vdC5zb3VyY2VNYXAsIHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTb3VyY2VNYXAsIFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBNYWtlIGEgWC1Eb21haW4gcmVxdWVzdCB0byB1cmwgYW5kIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB3aXRoIHJlc3BvbnNlIHRleHQgaWYgZnVsZmlsbGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gX3hkcih1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgcmVxLm9wZW4oJ2dldCcsIHVybCk7XG4gICAgICAgICAgICByZXEub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocmVxLnN0YXR1cyA+PSAyMDAgJiYgcmVxLnN0YXR1cyA8IDMwMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICh1cmwuc3Vic3RyKDAsIDcpID09PSAnZmlsZTovLycgJiYgcmVxLnJlc3BvbnNlVGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVxLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdIVFRQIHN0YXR1czogJyArIHJlcS5zdGF0dXMgKyAnIHJldHJpZXZpbmcgJyArIHVybCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcS5zZW5kKCk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIEJhc2U2NC1lbmNvZGVkIHN0cmluZyBpbnRvIGl0cyBvcmlnaW5hbCByZXByZXNlbnRhdGlvbi5cbiAgICAgKiBVc2VkIGZvciBpbmxpbmUgc291cmNlbWFwcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiNjRzdHIgQmFzZS02NCBlbmNvZGVkIHN0cmluZ1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gX2F0b2IoYjY0c3RyKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuYXRvYikge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5hdG9iKGI2NHN0cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciB3aW5kb3cuYXRvYiBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcGFyc2VKc29uKHN0cmluZykge1xuICAgICAgICBpZiAodHlwZW9mIEpTT04gIT09ICd1bmRlZmluZWQnICYmIEpTT04ucGFyc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciBKU09OLnBhcnNlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlci8qLCBjb2x1bW5OdW1iZXIqLykge1xuICAgICAgICB2YXIgc3ludGF4ZXMgPSBbXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSBmdW5jdGlvbiAoe2FyZ3N9KSBUT0RPIGFyZ3MgY2FwdHVyZVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqZnVuY3Rpb25cXGIvLFxuICAgICAgICAgICAgLy8gZnVuY3Rpb24ge25hbWV9KHthcmdzfSkgbVsxXT1uYW1lIG1bMl09YXJnc1xuICAgICAgICAgICAgL2Z1bmN0aW9uXFxzKyhbXignXCJgXSo/KVxccypcXCgoW14pXSopXFwpLyxcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGV2YWwoKVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqKD86ZXZhbHxuZXcgRnVuY3Rpb24pXFxiLyxcbiAgICAgICAgICAgIC8vIGZuX25hbWUoKSB7XG4gICAgICAgICAgICAvXFxiKD8hKD86aWZ8Zm9yfHN3aXRjaHx3aGlsZXx3aXRofGNhdGNoKVxcYikoPzooPzpzdGF0aWMpXFxzKyk/KFxcUyspXFxzKlxcKC4qP1xcKVxccypcXHsvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gKCkgPT4ge1xuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqXFwoLio/XFwpXFxzKj0+L1xuICAgICAgICBdO1xuICAgICAgICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoJ1xcbicpO1xuXG4gICAgICAgIC8vIFdhbGsgYmFja3dhcmRzIGluIHRoZSBzb3VyY2UgbGluZXMgdW50aWwgd2UgZmluZCB0aGUgbGluZSB3aGljaCBtYXRjaGVzIG9uZSBvZiB0aGUgcGF0dGVybnMgYWJvdmVcbiAgICAgICAgdmFyIGNvZGUgPSAnJztcbiAgICAgICAgdmFyIG1heExpbmVzID0gTWF0aC5taW4obGluZU51bWJlciwgMjApO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heExpbmVzOyArK2kpIHtcbiAgICAgICAgICAgIC8vIGxpbmVObyBpcyAxLWJhc2VkLCBzb3VyY2VbXSBpcyAwLWJhc2VkXG4gICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVzW2xpbmVOdW1iZXIgLSBpIC0gMV07XG4gICAgICAgICAgICB2YXIgY29tbWVudFBvcyA9IGxpbmUuaW5kZXhPZignLy8nKTtcbiAgICAgICAgICAgIGlmIChjb21tZW50UG9zID49IDApIHtcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHIoMCwgY29tbWVudFBvcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgY29kZSA9IGxpbmUgKyBjb2RlO1xuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBzeW50YXhlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHN5bnRheGVzW2luZGV4XS5leGVjKGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5jcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNvbnN1bWUgc291cmNlIG1hcHMgaW4gb2xkZXIgYnJvd3NlcnMnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhY2tmcmFtZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIFN0YWNrRnJhbWUgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmZpbGVOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gZmlsZSBuYW1lIGlzIG5vdCBhIFN0cmluZycpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBsaW5lIG51bWJlciBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICUgMSAhPT0gMCB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBjb2x1bW4gbnVtYmVyIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kU291cmNlTWFwcGluZ1VSTChzb3VyY2UpIHtcbiAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmdVcmxSZWdFeHAgPSAvXFwvXFwvWyNAXSA/c291cmNlTWFwcGluZ1VSTD0oW15cXHMnXCJdKylcXHMqJC9tZztcbiAgICAgICAgdmFyIGxhc3RTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB2YXIgbWF0Y2hTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB3aGlsZSAobWF0Y2hTb3VyY2VNYXBwaW5nVXJsID0gc291cmNlTWFwcGluZ1VybFJlZ0V4cC5leGVjKHNvdXJjZSkpIHsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgICAgICBsYXN0U291cmNlTWFwcGluZ1VybCA9IG1hdGNoU291cmNlTWFwcGluZ1VybFsxXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGFzdFNvdXJjZU1hcHBpbmdVcmwpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0U291cmNlTWFwcGluZ1VybDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc291cmNlTWFwcGluZ1VSTCBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9leHRyYWN0TG9jYXRpb25JbmZvRnJvbVNvdXJjZU1hcFNvdXJjZShzdGFja2ZyYW1lLCBzb3VyY2VNYXBDb25zdW1lciwgc291cmNlQ2FjaGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIGxvYyA9IHNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgICAgICAgIGxpbmU6IHN0YWNrZnJhbWUubGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGxvYy5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWNoZSBtYXBwZWQgc291cmNlc1xuICAgICAgICAgICAgICAgIHZhciBtYXBwZWRTb3VyY2UgPSBzb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGxvYy5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIGlmIChtYXBwZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlQ2FjaGVbbG9jLnNvdXJjZV0gPSBtYXBwZWRTb3VyY2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2l2ZW4gc3RhY2tmcmFtZSBhbmQgc291cmNlIGxvY2F0aW9uLCB1cGRhdGUgc3RhY2tmcmFtZVxuICAgICAgICAgICAgICAgICAgICBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGxvYy5uYW1lIHx8IHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogc3RhY2tmcmFtZS5hcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvYy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2MubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jLmNvbHVtblxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgb3JpZ2luYWwgc291cmNlIGZvciBnaXZlbiBzdGFja2ZyYW1lIGFuZCBzb3VyY2UgbWFwJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAqICAgICAgb3B0cy5zb3VyY2VDYWNoZSA9IHt1cmw6IFwiU291cmNlIFN0cmluZ1wifSA9PiBwcmVsb2FkIHNvdXJjZSBjYWNoZVxuICAgICAqICAgICAgb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gey9wYXRoL2ZpbGUuanMubWFwOiBTb3VyY2VNYXBDb25zdW1lcn1cbiAgICAgKiAgICAgIG9wdHMub2ZmbGluZSA9IFRydWUgdG8gcHJldmVudCBuZXR3b3JrIHJlcXVlc3RzLlxuICAgICAqICAgICAgICAgICAgICBCZXN0IGVmZm9ydCB3aXRob3V0IHNvdXJjZXMgb3Igc291cmNlIG1hcHMuXG4gICAgICogICAgICBvcHRzLmFqYXggPSBQcm9taXNlIHJldHVybmluZyBmdW5jdGlvbiB0byBtYWtlIFgtRG9tYWluIHJlcXVlc3RzXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMob3B0cykge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3RhY2tUcmFjZUdQUykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlID0gb3B0cy5zb3VyY2VDYWNoZSB8fCB7fTtcbiAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuYWpheCA9IG9wdHMuYWpheCB8fCBfeGRyO1xuXG4gICAgICAgIHRoaXMuX2F0b2IgPSBvcHRzLmF0b2IgfHwgX2F0b2I7XG5cbiAgICAgICAgdGhpcy5fZ2V0ID0gZnVuY3Rpb24gX2dldChsb2NhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBsb2NhdGlvbi5zdWJzdHIoMCwgNSkgPT09ICdkYXRhOic7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0cy5vZmZsaW5lICYmICFpc0RhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ2Fubm90IG1ha2UgbmV0d29yayByZXF1ZXN0cyBpbiBvZmZsaW5lIG1vZGUnKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF0YSBVUkxzIGNhbiBoYXZlIHBhcmFtZXRlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM5N1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1cHBvcnRlZEVuY29kaW5nUmVnZXhwID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXmRhdGE6YXBwbGljYXRpb25cXC9qc29uOyhbXFx3PTpcIi1dKzspKmJhc2U2NCwvO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbG9jYXRpb24ubWF0Y2goc3VwcG9ydGVkRW5jb2RpbmdSZWdleHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcFN0YXJ0ID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGVkU291cmNlID0gbG9jYXRpb24uc3Vic3RyKHNvdXJjZU1hcFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fYXRvYihlbmNvZGVkU291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSA9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RoZSBlbmNvZGluZyBvZiB0aGUgaW5saW5lIHNvdXJjZW1hcCBpcyBub3Qgc3VwcG9ydGVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhoclByb21pc2UgPSB0aGlzLmFqYXgobG9jYXRpb24sIHttZXRob2Q6ICdnZXQnfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZSB0aGUgUHJvbWlzZSB0byBwcmV2ZW50IGR1cGxpY2F0ZSBpbi1mbGlnaHQgcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0geGhyUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclByb21pc2UudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRpbmcgU291cmNlTWFwQ29uc3VtZXJzIGlzIGV4cGVuc2l2ZSwgc28gdGhpcyB3cmFwcyB0aGUgY3JlYXRpb24gb2YgYVxuICAgICAgICAgKiBTb3VyY2VNYXBDb25zdW1lciBpbiBhIHBlci1pbnN0YW5jZSBjYWNoZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZU1hcHBpbmdVUkwgPSBVUkwgdG8gZmV0Y2ggc291cmNlIG1hcCBmcm9tXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBkZWZhdWx0U291cmNlUm9vdCA9IERlZmF1bHQgc291cmNlIHJvb3QgZm9yIHNvdXJjZSBtYXAgaWYgdW5kZWZpbmVkXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIGEgU291cmNlTWFwQ29uc3VtZXJcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyID0gZnVuY3Rpb24gX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldChzb3VyY2VNYXBwaW5nVVJMKS50aGVuKGZ1bmN0aW9uKHNvdXJjZU1hcFNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlTWFwU291cmNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBTb3VyY2UgPSBfcGFyc2VKc29uKHNvdXJjZU1hcFNvdXJjZS5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlTWFwU291cmNlLnNvdXJjZVJvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcFNvdXJjZS5zb3VyY2VSb290ID0gZGVmYXVsdFNvdXJjZVJvb3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU291cmNlTWFwLlNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcFNvdXJjZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdID0gc291cmNlTWFwQ29uc3VtZXJQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBlbmhhbmNlIGZ1bmN0aW9uIG5hbWUgYW5kIHVzZSBzb3VyY2UgbWFwcyBmb3IgYVxuICAgICAgICAgKiBiZXR0ZXIgU3RhY2tGcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lIG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHdpdGggc291cmNlLW1hcHBlZCBTdGFja0ZyYW1lXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBpbnBvaW50ID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkcGlucG9pbnQoc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkudGhlbihmdW5jdGlvbihtYXBwZWRTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVNYXBwZWRTdGFja0ZyYW1lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtYXBwZWRTdGFja0ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZEZ1bmN0aW9uTmFtZShtYXBwZWRTdGFja0ZyYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSwgcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ2NhdGNoJ10ocmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgZ3Vlc3MgZnVuY3Rpb24gbmFtZSBmcm9tIGxvY2F0aW9uIGluZm9ybWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWVcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBlbmhhbmNlZCBTdGFja0ZyYW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZmluZEZ1bmN0aW9uTmFtZShzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChzdGFja2ZyYW1lLmZpbGVOYW1lKS50aGVuKGZ1bmN0aW9uIGdldFNvdXJjZUNhbGxiYWNrKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHN0YWNrZnJhbWUubGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ3Vlc3NlZEZ1bmN0aW9uTmFtZSA9IF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZXBsYWNlIGZ1bmN0aW9uTmFtZSBpZiB3ZSBmb3VuZCBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICAgICAgaWYgKGd1ZXNzZWRGdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZ3Vlc3NlZEZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBzdGFja2ZyYW1lLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IHN0YWNrZnJhbWUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgc2VlayBzb3VyY2UtbWFwcGVkIGxvY2F0aW9uIGFuZCByZXR1cm4gbmV3IGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdldE1hcHBlZExvY2F0aW9uID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKTtcblxuICAgICAgICAgICAgICAgIHZhciBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGU7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gc3RhY2tmcmFtZS5maWxlTmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXQoZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VNYXBwaW5nVVJMID0gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBzb3VyY2VNYXBwaW5nVVJMLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRTb3VyY2VSb290ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlTWFwcGluZ1VSTFswXSAhPT0gJy8nICYmICFpc0RhdGFVcmwgJiYgISgvXmh0dHBzPzpcXC9cXC98XlxcL1xcLy9pKS50ZXN0KHNvdXJjZU1hcHBpbmdVUkwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBwaW5nVVJMID0gZGVmYXVsdFNvdXJjZVJvb3QgKyBzb3VyY2VNYXBwaW5nVVJMO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oc291cmNlTWFwQ29uc3VtZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwU291cmNlKHN0YWNrZnJhbWUsIHNvdXJjZU1hcENvbnN1bWVyLCBzb3VyY2VDYWNoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSlbJ2NhdGNoJ10oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbn0pKTtcbiIsIi8vIFBvbHlmaWxsIGZvciBvbGQgYnJvd3NlcnNcbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5XG5pZiAoIUFycmF5LmlzQXJyYXkpIHtcbiAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xufVxuXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgRVM2UHJvbWlzZS5wb2x5ZmlsbCgpO1xufVxuXG4vLyBFUzUgUG9seWZpbGxzXG4vLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRnVuY3Rpb24vYmluZFxuaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkge1xuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24ob1RoaXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCAtIHdoYXQgaXMgdHJ5aW5nIHRvIGJlIGJvdW5kIGlzIG5vdCBjYWxsYWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgdmFyIGZUb0JpbmQgPSB0aGlzO1xuICAgICAgICB2YXIgTm9PcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZkJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gZlRvQmluZC5hcHBseSh0aGlzIGluc3RhbmNlb2YgTm9PcCAmJiBvVGhpcyA/IHRoaXMgOiBvVGhpcyxcbiAgICAgICAgICAgICAgICBhQXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIE5vT3AucHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG4gICAgICAgIGZCb3VuZC5wcm90b3R5cGUgPSBuZXcgTm9PcCgpO1xuXG4gICAgICAgIHJldHVybiBmQm91bmQ7XG4gICAgfTtcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L21hcFxuaWYgKCFBcnJheS5wcm90b3R5cGUubWFwKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgIGlmICh0aGlzID09PSB2b2lkIDAgfHwgdGhpcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIE8gPSBPYmplY3QodGhpcyk7XG4gICAgICAgIHZhciBsZW4gPSBPLmxlbmd0aCA+Pj4gMDtcbiAgICAgICAgdmFyIFQ7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBUID0gdGhpc0FyZztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBBID0gbmV3IEFycmF5KGxlbik7XG4gICAgICAgIHZhciBrID0gMDtcblxuICAgICAgICB3aGlsZSAoayA8IGxlbikge1xuICAgICAgICAgICAgdmFyIGtWYWx1ZTtcbiAgICAgICAgICAgIHZhciBtYXBwZWRWYWx1ZTtcbiAgICAgICAgICAgIGlmIChrIGluIE8pIHtcbiAgICAgICAgICAgICAgICBrVmFsdWUgPSBPW2tdO1xuICAgICAgICAgICAgICAgIG1hcHBlZFZhbHVlID0gY2FsbGJhY2suY2FsbChULCBrVmFsdWUsIGssIE8pO1xuICAgICAgICAgICAgICAgIEFba10gPSBtYXBwZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBBO1xuICAgIH07XG59XG5cbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9maWx0ZXJcbmlmICghQXJyYXkucHJvdG90eXBlLmZpbHRlcikge1xuICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbihjYWxsYmFjay8qLCB0aGlzQXJnKi8pIHtcbiAgICAgICAgaWYgKHRoaXMgPT09IHZvaWQgMCB8fCB0aGlzID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0aGlzIGlzIG51bGwgb3Igbm90IGRlZmluZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpO1xuICAgICAgICB2YXIgbGVuID0gdC5sZW5ndGggPj4+IDA7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyID8gYXJndW1lbnRzWzFdIDogdm9pZCAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSBpbiB0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRbaV07XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2ZvckVhY2hcbmlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgIHZhciBUO1xuICAgICAgICB2YXIgaztcbiAgICAgICAgaWYgKHRoaXMgPT09IG51bGwgfHwgdGhpcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcgdGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgTyA9IE9iamVjdCh0aGlzKTtcbiAgICAgICAgdmFyIGxlbiA9IE8ubGVuZ3RoID4+PiAwO1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBUID0gdGhpc0FyZztcbiAgICAgICAgfVxuICAgICAgICBrID0gMDtcbiAgICAgICAgd2hpbGUgKGsgPCBsZW4pIHtcbiAgICAgICAgICAgIHZhciBrVmFsdWU7XG4gICAgICAgICAgICBpZiAoayBpbiBPKSB7XG4gICAgICAgICAgICAgICAga1ZhbHVlID0gT1trXTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKFQsIGtWYWx1ZSwgaywgTyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrKys7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZScsIFsnZXJyb3Itc3RhY2stcGFyc2VyJywgJ3N0YWNrLWdlbmVyYXRvcicsICdzdGFja3RyYWNlLWdwcyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnZXJyb3Itc3RhY2stcGFyc2VyJyksIHJlcXVpcmUoJ3N0YWNrLWdlbmVyYXRvcicpLCByZXF1aXJlKCdzdGFja3RyYWNlLWdwcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2UgPSBmYWN0b3J5KHJvb3QuRXJyb3JTdGFja1BhcnNlciwgcm9vdC5TdGFja0dlbmVyYXRvciwgcm9vdC5TdGFja1RyYWNlR1BTKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIFN0YWNrVHJhY2UoRXJyb3JTdGFja1BhcnNlciwgU3RhY2tHZW5lcmF0b3IsIFN0YWNrVHJhY2VHUFMpIHtcbiAgICB2YXIgX29wdGlvbnMgPSB7XG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBzdGFja2ZyYW1lcyBmb3IgdGhpcyBsaWJyYXJ5IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2UkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignRXJyb3JTdGFja1BhcnNlciQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlR1BTJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrR2VuZXJhdG9yJCQnKSA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZUNhY2hlOiB7fVxuICAgIH07XG5cbiAgICB2YXIgX2dlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRHZW5lcmF0ZUVycm9yKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRXJyb3IgbXVzdCBiZSB0aHJvd24gdG8gZ2V0IHN0YWNrIGluIElFXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdlIDIgZ2l2ZW4gT2JqZWN0cy4gSWYgYSBjb25mbGljdCBvY2N1cnMgdGhlIHNlY29uZCBvYmplY3Qgd2lucy5cbiAgICAgKiBEb2VzIG5vdCBkbyBkZWVwIG1lcmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaXJzdCBiYXNlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWNvbmQgb3ZlcnJpZGVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gbWVyZ2VkIGZpcnN0IGFuZCBzZWNvbmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tZXJnZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcblxuICAgICAgICBbZmlyc3QsIHNlY29uZF0uZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVyci5zdGFjayB8fCBlcnJbJ29wZXJhI3NvdXJjZWxvYyddO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXJlZChzdGFja2ZyYW1lcywgZmlsdGVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXMuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrZnJhbWVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0KG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikgPyB0aGlzLmZyb21FcnJvcihlcnIsIG9wdHMpIDogdGhpcy5nZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgYmFja3RyYWNlIGZyb20gaW52b2NhdGlvbiBwb2ludC5cbiAgICAgICAgICogSU1QT1JUQU5UOiBEb2VzIG5vdCBoYW5kbGUgc291cmNlIG1hcHMgb3IgZ3Vlc3MgZnVuY3Rpb24gbmFtZXMhXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0U3luYzogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0U3luYyhvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyKSA6IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyZWQoc3RhY2ssIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3Igb2JqZWN0LCBwYXJzZSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmb3IgQXJyYXlbU3RhY2tGcmFtZX1cbiAgICAgICAgICovXG4gICAgICAgIGZyb21FcnJvcjogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZnJvbUVycm9yKGVycm9yLCBvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBncHMgPSBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrZnJhbWVzID0gX2ZpbHRlcmVkKEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyb3IpLCBvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShQcm9taXNlLmFsbChzdGFja2ZyYW1lcy5tYXAoZnVuY3Rpb24oc2YpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVPcmlnaW5hbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ3BzLnBpbnBvaW50KHNmKS50aGVuKHJlc29sdmUsIHJlc29sdmVPcmlnaW5hbClbJ2NhdGNoJ10ocmVzb2x2ZU9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBTdGFja0dlbmVyYXRvciB0byBnZW5lcmF0ZSBhIGJhY2t0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IG9mIEFycmF5W1N0YWNrRnJhbWVdXG4gICAgICAgICAqL1xuICAgICAgICBnZW5lcmF0ZUFydGlmaWNpYWxseTogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2VuZXJhdGVBcnRpZmljaWFsbHkob3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgc3RhY2tGcmFtZXMgPSBTdGFja0dlbmVyYXRvci5iYWNrdHJhY2Uob3B0cyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgc3RhY2tGcmFtZXMgPSBzdGFja0ZyYW1lcy5maWx0ZXIob3B0cy5maWx0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGFja0ZyYW1lcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24sIHdyYXAgaXQgc3VjaCB0aGF0IGludm9jYXRpb25zIHRyaWdnZXIgYSBjYWxsYmFjayB0aGF0XG4gICAgICAgICAqIGlzIGNhbGxlZCB3aXRoIGEgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGluc3RydW1lbnRlZFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdpdGggYSBzdGFjayB0cmFjZSBvbiBpbnZvY2F0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVycmJhY2sgb3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGVycm9yIGlmIHVuYWJsZSB0byBnZXQgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIG9wdGlvbmFsIGNvbnRleHQgb2JqZWN0IChlLmcuIHdpbmRvdylcbiAgICAgICAgICovXG4gICAgICAgIGluc3RydW1lbnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnQoZm4sIGNhbGxiYWNrLCBlcnJiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBpbnN0cnVtZW50ZWQsIHJldHVybiBnaXZlbiBGdW5jdGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGluc3RydW1lbnRlZCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnRlZCgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCgpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZyB8fCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb21FcnJvcihlKS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrKVsnY2F0Y2gnXShlcnJiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGluc3RydW1lbnRlZC5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID0gZm47XG5cbiAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50ZWQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBpbnN0cnVtZW50ZWQsXG4gICAgICAgICAqIHJldmVydCB0aGUgZnVuY3Rpb24gdG8gaXQncyBvcmlnaW5hbCAobm9uLWluc3RydW1lbnRlZCkgc3RhdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGRlLWluc3RydW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGRlaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZGVpbnN0cnVtZW50KGZuKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGUtaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIG5vdCBpbnN0cnVtZW50ZWQsIHJldHVybiBvcmlnaW5hbFxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3IgbWVzc2FnZSBhbmQgQXJyYXkgb2YgU3RhY2tGcmFtZXMsIHNlcmlhbGl6ZSBhbmQgUE9TVCB0byBnaXZlbiBVUkwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrZnJhbWVzXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVycm9yTXNnXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0T3B0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgcmVwb3J0OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRyZXBvcnQoc3RhY2tmcmFtZXMsIHVybCwgZXJyb3JNc2csIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPj0gMjAwICYmIHJlcS5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdQT1NUIHRvICcgKyB1cmwgKyAnIGZhaWxlZCB3aXRoIHN0YXR1czogJyArIHJlcS5zdGF0dXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVxLm9wZW4oJ3Bvc3QnLCB1cmwpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHJlcXVlc3QgaGVhZGVyc1xuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucyAmJiB0eXBlb2YgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgaGVhZGVyc1toZWFkZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZXBvcnRQYXlsb2FkID0ge3N0YWNrOiBzdGFja2ZyYW1lc307XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQgJiYgZXJyb3JNc2cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0UGF5bG9hZC5tZXNzYWdlID0gZXJyb3JNc2c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVwb3J0UGF5bG9hZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIl19 diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index 5596ab1..c0b1b11 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(" ")||void 0,i=["eval",""].indexOf(r[0])>-1?void 0:r[0];return new e({functionName:o,fileName:i,lineNumber:r[1],columnNumber:r[2],source:t})},this)},parseFFOrSafari:function(t){var n=t.stack.split("\n").filter(function(e){return!e.match(r)},this);return n.map(function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),t.indexOf("@")===-1&&t.indexOf(":")===-1)return new e({functionName:t});var n=/((.*".+"[^@]*)?[^@]*)(?:@)/,r=t.match(n),o=r&&r[1]?r[1]:void 0,i=this.extractLocation(t.replace(n,""));return new e({functionName:o,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:t})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:t})},this)}}})},{stackframe:6}],2:[function(t,n,r){(function(o,i){!function(t,o){"object"==typeof r&&"undefined"!=typeof n?n.exports=o():"function"==typeof e&&e.amd?e(o):t.ES6Promise=o()}(this,function(){"use strict";function e(e){return"function"==typeof e||"object"==typeof e&&null!==e}function n(e){return"function"==typeof e}function r(e){W=e}function a(e){V=e}function s(){return function(){return o.nextTick(p)}}function u(){return function(){Y(p)}}function c(){var e=0,t=new Q(p),n=document.createTextNode("");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function l(){var e=new MessageChannel;return e.port1.onmessage=p,function(){return e.port2.postMessage(0)}}function f(){var e=setTimeout;return function(){return e(p,1)}}function p(){for(var e=0;e1)))/4)-T((e-1901+t)/100)+T((e-1601+t)/400)};if((g=v.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=y?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?m=2==i?function(e,t){var n,r={},o=y.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=y.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],m=function(e,t){var n,o,i=y.call(e)==b,s=!i&&"function"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&"prototype"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),m(e,t)},!n("json-stringify")){var j={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},k="000000",P=function(e,t){return(k+(t||0)).slice(-e)},x="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);n-1/0&&s<1/0){if(M){for(p=T(s/864e5),c=T(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=T((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,v=T(h/36e5)%24,_=T(h/6e4)%60,w=T(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),v=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(c<=0||c>=1e4?(c<0?"-":"+")+P(6,c<0?-c:c):P(4,c))+"-"+P(2,l+1)+"-"+P(2,p)+"T"+P(2,v)+":"+P(2,_)+":"+P(2,w)+"."+P(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=y.call(s),u==E)return""+s;if(u==A)return s>-1/0&&s<1/0?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),N=[],x=i,i+=o,u==S){for(j=0,k=s.length;j0)for(r="",n>10&&(n=10);r.length=48&&o<=57||o>=97&&o<=102||o>=65&&o<=70||B();e+=G("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&o<=57){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&o<=57)&&B(),r=!1;U=48&&o<=57);U++);if(46==i.charCodeAt(U)){for(n=++U;n=48&&o<=57);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),43!=o&&45!=o||U++,n=U;n=48&&o<=57);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),","!=e&&"string"==typeof e&&"@"==(N?e.charAt(0):e[0])&&":"==J()||B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(y.call(o)==S)for(r=o.length;r--;)I(o,r,n);else m(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,$=""+e,n=q(J()),"$"!=J()&&B(),U=$=null,t&&y.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return t.runInContext=o,t}var i="function"==typeof e&&e.amd,a={"function":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&"object"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],4:[function(e,t,n){function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function a(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function s(){d&&g&&(d=!1,g.length?m=g.concat(m):v=-1,m.length&&u())}function u(){if(!d){var e=i(s);d=!0;for(var t=m.length;t;){for(g=m,m=[];++v1)for(var n=1;n=0&&e>1;return t?-n:n}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],11:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;p1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),C.push(n),"number"==typeof n.originalLine&&b.push(n)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null), -name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=o(t),r=o(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(y))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,i(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function m(e,t){return e===t?0:e>t?1:-1}function d(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=m(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:m(e.name,t.name)))))}n.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},n.relative=u;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=d},{}],14:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stacktrace-gps",["source-map","stackframe"],i):"object"==typeof r?n.exports=i(t("source-map/lib/source-map-consumer"),t("stackframe")):o.StackTraceGPS=i(o.SourceMap||o.sourceMap,o.StackFrame)}(this,function(e,t){"use strict";function n(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("get",e),r.onerror=n,r.onreadystatechange=function(){4===r.readyState&&(r.status>=200&&r.status<300||"file://"===e.substr(0,7)&&r.responseText?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],r=e.split("\n"),o="",i=Math.min(t,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=n.length,l=0;l>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;a>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;i>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;r=200&&a.status<400?o(a.responseText):i(new Error("POST to "+t+" failed with status: "+a.status)))},a.open("post",t),a.setRequestHeader("Content-Type","application/json"),r&&"object"==typeof r.headers){var s=r.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==n&&null!==n&&(c.message=n),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":5,"stacktrace-gps":14}]},{},[2,3,15,16])(16)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"("),r=n.match(/ (\((.+):(\d+):(\d+)\)$)/);n=r?n.replace(r[0],""):n;var o=n.split(/\s+/).slice(1),i=this.extractLocation(r?r[1]:o.pop()),a=o.join(" ")||void 0,s=["eval",""].indexOf(i[0])>-1?void 0:i[0];return new e({functionName:a,fileName:s,lineNumber:i[1],columnNumber:i[2],source:t})},this)},parseFFOrSafari:function(t){var n=t.stack.split("\n").filter(function(e){return!e.match(r)},this);return n.map(function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),t.indexOf("@")===-1&&t.indexOf(":")===-1)return new e({functionName:t});var n=/((.*".+"[^@]*)?[^@]*)(?:@)/,r=t.match(n),o=r&&r[1]?r[1]:void 0,i=this.extractLocation(t.replace(n,""));return new e({functionName:o,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:t})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:t})},this)}}})},{stackframe:2}],2:[function(t,n,r){!function(t,o){"use strict";"function"==typeof e&&e.amd?e("stackframe",[],o):"object"==typeof r?n.exports=o():t.StackFrame=o()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e){return e.charAt(0).toUpperCase()+e.substring(1)}function n(e){return function(){return this[e]}}function r(e){if(e instanceof Object)for(var n=0;n1)))/4)-T((e-1901+t)/100)+T((e-1601+t)/400)};if((g=v.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=y?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?d=2==i?function(e,t){var n,r={},o=y.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=y.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var n,o,i=y.call(e)==b,s=!i&&"function"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&"prototype"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),d(e,t)},!n("json-stringify")){var j={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},k="000000",x=function(e,t){return(k+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);n-1/0&&s<1/0){if(M){for(p=T(s/864e5),c=T(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=T((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,v=T(h/36e5)%24,_=T(h/6e4)%60,w=T(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),v=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(c<=0||c>=1e4?(c<0?"-":"+")+x(6,c<0?-c:c):x(4,c))+"-"+x(2,l+1)+"-"+x(2,p)+"T"+x(2,v)+":"+x(2,_)+":"+x(2,w)+"."+x(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=y.call(s),u==E)return""+s;if(u==A)return s>-1/0&&s<1/0?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==S){for(j=0,k=s.length;j0)for(r="",n>10&&(n=10);r.length=48&&o<=57||o>=97&&o<=102||o>=65&&o<=70||B();e+=G("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&o<=57){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&o<=57)&&B(),r=!1;U=48&&o<=57);U++);if(46==i.charCodeAt(U)){for(n=++U;n=48&&o<=57);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),43!=o&&45!=o||U++,n=U;n=48&&o<=57);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),","!=e&&"string"==typeof e&&"@"==(N?e.charAt(0):e[0])&&":"==J()||B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(y.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,$=""+e,n=q(J()),"$"!=J()&&B(),U=$=null,t&&y.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return t.runInContext=o,t}var i="function"==typeof e&&e.amd,a={"function":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&"object"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],5:[function(e,t,n){function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function a(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function s(){m&&g&&(m=!1,g.length?d=g.concat(d):v=-1,d.length&&u())}function u(){if(!m){var e=i(s);m=!0;for(var t=d.length;t;){for(g=d,d=[];++v1)for(var n=1;n=0&&e>1;return t?-n:n}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],10:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;p1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),C.push(n),"number"==typeof n.originalLine&&b.push(n)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,t){ +if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=o(t),r=o(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(y))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,i(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function d(e,t){return e===t?0:e>t?1:-1}function m(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=d(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:d(e.name,t.name)))))}n.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},n.relative=u;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},{}],13:[function(e,t,n){arguments[4][2][0].apply(n,arguments)},{dup:2}],14:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof r?n.exports=i(t("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300||"file://"===e.substr(0,7)&&r.responseText?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],r=e.split("\n"),o="",i=Math.min(t,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=n.length,l=0;l>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;a>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;i>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;r=200&&a.status<400?o(a.responseText):i(new Error("POST to "+t+" failed with status: "+a.status)))},a.open("post",t),a.setRequestHeader("Content-Type","application/json"),r&&"object"==typeof r.headers){var s=r.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==n&&null!==n&&(c.message=n),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":14,"stacktrace-gps":16}]},{},[3,4,17,18])(18)}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace.js b/dist/stacktrace.js index 05c1a5c..4a91a5e 100644 --- a/dist/stacktrace.js +++ b/dist/stacktrace.js @@ -59,8 +59,18 @@ // Throw away eval information until we implement stacktrace.js/stackframe#8 line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^\()]*)|(\)\,.*$)/g, ''); } - var tokens = line.replace(/^\s+/, '').replace(/\(eval code/g, '(').split(/\s+/).slice(1); - var locationParts = this.extractLocation(tokens.pop()); + var sanitizedLine = line.replace(/^\s+/, '').replace(/\(eval code/g, '('); + + // capture and preseve the parenthesized location "(/foo/my bar.js:12:87)" in + // case it has spaces in it, as the string is split on \s+ later on + var location = sanitizedLine.match(/ (\((.+):(\d+):(\d+)\)$)/); + + // remove the parenthesized location from the line, if it was matched + sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine; + + var tokens = sanitizedLine.split(/\s+/).slice(1); + // if a location was matched, pass it to extractLocation() otherwise pop the last token + var locationParts = this.extractLocation(location ? location[1] : tokens.pop()); var functionName = tokens.join(' ') || undefined; var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0]; @@ -192,54 +202,7 @@ }; })); -},{"stackframe":3}],2:[function(require,module,exports){ -(function(root, factory) { - 'use strict'; - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. - - /* istanbul ignore next */ - if (typeof define === 'function' && define.amd) { - define('stack-generator', ['stackframe'], factory); - } else if (typeof exports === 'object') { - module.exports = factory(require('stackframe')); - } else { - root.StackGenerator = factory(root.StackFrame); - } -}(this, function(StackFrame) { - return { - backtrace: function StackGenerator$$backtrace(opts) { - var stack = []; - var maxStackSize = 10; - - if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') { - maxStackSize = opts.maxStackSize; - } - - var curr = arguments.callee; - while (curr && stack.length < maxStackSize && curr['arguments']) { - // Allow V8 optimizations - var args = new Array(curr['arguments'].length); - for (var i = 0; i < args.length; ++i) { - args[i] = curr['arguments'][i]; - } - if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { - stack.push(new StackFrame({functionName: RegExp.$1 || undefined, args: args})); - } else { - stack.push(new StackFrame({args: args})); - } - - try { - curr = curr.caller; - } catch (e) { - break; - } - } - return stack; - } - }; -})); - -},{"stackframe":3}],3:[function(require,module,exports){ +},{"stackframe":2}],2:[function(require,module,exports){ (function(root, factory) { 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. @@ -310,13 +273,45 @@ }, toString: function() { - var functionName = this.getFunctionName() || '{anonymous}'; - var args = '(' + (this.getArgs() || []).join(',') + ')'; - var fileName = this.getFileName() ? ('@' + this.getFileName()) : ''; - var lineNumber = _isNumber(this.getLineNumber()) ? (':' + this.getLineNumber()) : ''; - var columnNumber = _isNumber(this.getColumnNumber()) ? (':' + this.getColumnNumber()) : ''; - return functionName + args + fileName + lineNumber + columnNumber; + var fileName = this.getFileName() || ''; + var lineNumber = this.getLineNumber() || ''; + var columnNumber = this.getColumnNumber() || ''; + var functionName = this.getFunctionName() || ''; + if (this.getIsEval()) { + if (fileName) { + return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')'; + } + return '[eval]:' + lineNumber + ':' + columnNumber; + } + if (functionName) { + return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')'; + } + return fileName + ':' + lineNumber + ':' + columnNumber; + } + }; + + StackFrame.fromString = function StackFrame$$fromString(str) { + var argsStartIndex = str.indexOf('('); + var argsEndIndex = str.lastIndexOf(')'); + + var functionName = str.substring(0, argsStartIndex); + var args = str.substring(argsStartIndex + 1, argsEndIndex).split(','); + var locationString = str.substring(argsEndIndex + 1); + + if (locationString.indexOf('@') === 0) { + var parts = /@(.+?)(?::(\d+))?(?::(\d+))?$/.exec(locationString, ''); + var fileName = parts[1]; + var lineNumber = parts[2]; + var columnNumber = parts[3]; } + + return new StackFrame({ + functionName: functionName, + args: args || undefined, + fileName: fileName, + lineNumber: lineNumber || undefined, + columnNumber: columnNumber || undefined + }); }; for (var i = 0; i < booleanProps.length; i++) { @@ -352,7 +347,7 @@ return StackFrame; })); -},{}],4:[function(require,module,exports){ +},{}],3:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -458,7 +453,7 @@ ArraySet.prototype.toArray = function ArraySet_toArray() { exports.ArraySet = ArraySet; -},{"./util":10}],5:[function(require,module,exports){ +},{"./util":9}],4:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -600,7 +595,7 @@ exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { aOutParam.rest = aIndex; }; -},{"./base64":6}],6:[function(require,module,exports){ +},{"./base64":5}],5:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -669,7 +664,7 @@ exports.decode = function (charCode) { return -1; }; -},{}],7:[function(require,module,exports){ +},{}],6:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -782,7 +777,7 @@ exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { return index; }; -},{}],8:[function(require,module,exports){ +},{}],7:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -898,7 +893,7 @@ exports.quickSort = function (ary, comparator) { doQuickSort(ary, comparator, 0, ary.length - 1); }; -},{}],9:[function(require,module,exports){ +},{}],8:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -1982,7 +1977,7 @@ IndexedSourceMapConsumer.prototype._parseMappings = exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; -},{"./array-set":4,"./base64-vlq":5,"./binary-search":7,"./quick-sort":8,"./util":10}],10:[function(require,module,exports){ +},{"./array-set":3,"./base64-vlq":4,"./binary-search":6,"./quick-sort":7,"./util":9}],9:[function(require,module,exports){ /* -*- Mode: js; js-indent-level: 2; -*- */ /* * Copyright 2011 Mozilla Foundation and contributors @@ -2401,7 +2396,58 @@ function compareByGeneratedPositionsInflated(mappingA, mappingB) { } exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; -},{}],11:[function(require,module,exports){ +},{}],10:[function(require,module,exports){ +arguments[4][2][0].apply(exports,arguments) +},{"dup":2}],11:[function(require,module,exports){ +(function(root, factory) { + 'use strict'; + // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. + + /* istanbul ignore next */ + if (typeof define === 'function' && define.amd) { + define('stack-generator', ['stackframe'], factory); + } else if (typeof exports === 'object') { + module.exports = factory(require('stackframe')); + } else { + root.StackGenerator = factory(root.StackFrame); + } +}(this, function(StackFrame) { + return { + backtrace: function StackGenerator$$backtrace(opts) { + var stack = []; + var maxStackSize = 10; + + if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') { + maxStackSize = opts.maxStackSize; + } + + var curr = arguments.callee; + while (curr && stack.length < maxStackSize && curr['arguments']) { + // Allow V8 optimizations + var args = new Array(curr['arguments'].length); + for (var i = 0; i < args.length; ++i) { + args[i] = curr['arguments'][i]; + } + if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) { + stack.push(new StackFrame({functionName: RegExp.$1 || undefined, args: args})); + } else { + stack.push(new StackFrame({args: args})); + } + + try { + curr = curr.caller; + } catch (e) { + break; + } + } + return stack; + } + }; +})); + +},{"stackframe":10}],12:[function(require,module,exports){ +arguments[4][2][0].apply(exports,arguments) +},{"dup":2}],13:[function(require,module,exports){ (function(root, factory) { 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. @@ -2743,7 +2789,7 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate }; })); -},{"source-map/lib/source-map-consumer":9,"stackframe":3}],12:[function(require,module,exports){ +},{"source-map/lib/source-map-consumer":8,"stackframe":12}],14:[function(require,module,exports){ (function(root, factory) { 'use strict'; // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers. @@ -2972,6 +3018,6 @@ exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflate }; })); -},{"error-stack-parser":1,"stack-generator":2,"stacktrace-gps":11}]},{},[12])(12) +},{"error-stack-parser":1,"stack-generator":11,"stacktrace-gps":13}]},{},[14])(14) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9zdGFjay1nZW5lcmF0b3Ivc3RhY2stZ2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrZnJhbWUvc3RhY2tmcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja3RyYWNlLWdwcy9ub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYXJyYXktc2V0LmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iYXNlNjQtdmxxLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iYXNlNjQuanMiLCJub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1ncHMvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2JpbmFyeS1zZWFyY2guanMiLCJub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1ncHMvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3F1aWNrLXNvcnQuanMiLCJub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1ncHMvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAtY29uc3VtZXIuanMiLCJub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1ncHMvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3V0aWwuanMiLCJub2RlX21vZHVsZXMvc3RhY2t0cmFjZS1ncHMvc3RhY2t0cmFjZS1ncHMuanMiLCJzdGFja3RyYWNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDamFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcFZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdlcnJvci1zdGFjay1wYXJzZXInLCBbJ3N0YWNrZnJhbWUnXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ3N0YWNrZnJhbWUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5FcnJvclN0YWNrUGFyc2VyID0gZmFjdG9yeShyb290LlN0YWNrRnJhbWUpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlcihTdGFja0ZyYW1lKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIEZJUkVGT1hfU0FGQVJJX1NUQUNLX1JFR0VYUCA9IC8oXnxAKVxcUytcXDpcXGQrLztcbiAgICB2YXIgQ0hST01FX0lFX1NUQUNLX1JFR0VYUCA9IC9eXFxzKmF0IC4qKFxcUytcXDpcXGQrfFxcKG5hdGl2ZVxcKSkvbTtcbiAgICB2YXIgU0FGQVJJX05BVElWRV9DT0RFX1JFR0VYUCA9IC9eKGV2YWxAKT8oXFxbbmF0aXZlIGNvZGVcXF0pPyQvO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGFuIEVycm9yIG9iamVjdCwgZXh0cmFjdCB0aGUgbW9zdCBpbmZvcm1hdGlvbiBmcm9tIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IG9mIFN0YWNrRnJhbWVzXG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2UoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3Iuc3RhY2t0cmFjZSAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGVycm9yWydvcGVyYSNzb3VyY2Vsb2MnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhY2sgJiYgZXJyb3Iuc3RhY2subWF0Y2goQ0hST01FX0lFX1NUQUNLX1JFR0VYUCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVY4T3JJRShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VGRk9yU2FmYXJpKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGFyc2UgZ2l2ZW4gRXJyb3Igb2JqZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gU2VwYXJhdGUgbGluZSBhbmQgY29sdW1uIG51bWJlcnMgZnJvbSBhIHN0cmluZyBvZiB0aGUgZm9ybTogKFVSSTpMaW5lOkNvbHVtbilcbiAgICAgICAgZXh0cmFjdExvY2F0aW9uOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRleHRyYWN0TG9jYXRpb24odXJsTGlrZSkge1xuICAgICAgICAgICAgLy8gRmFpbC1mYXN0IGJ1dCByZXR1cm4gbG9jYXRpb25zIGxpa2UgXCIobmF0aXZlKVwiXG4gICAgICAgICAgICBpZiAodXJsTGlrZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt1cmxMaWtlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJlZ0V4cCA9IC8oLis/KSg/OlxcOihcXGQrKSk/KD86XFw6KFxcZCspKT8kLztcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IHJlZ0V4cC5leGVjKHVybExpa2UucmVwbGFjZSgvW1xcKFxcKV0vZywgJycpKTtcbiAgICAgICAgICAgIHJldHVybiBbcGFydHNbMV0sIHBhcnRzWzJdIHx8IHVuZGVmaW5lZCwgcGFydHNbM10gfHwgdW5kZWZpbmVkXTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZVY4T3JJRTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VWOE9ySUUoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIWxpbmUubWF0Y2goQ0hST01FX0lFX1NUQUNLX1JFR0VYUCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignKGV2YWwgJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IGV2YWwgaW5mb3JtYXRpb24gdW50aWwgd2UgaW1wbGVtZW50IHN0YWNrdHJhY2UuanMvc3RhY2tmcmFtZSM4XG4gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoL2V2YWwgY29kZS9nLCAnZXZhbCcpLnJlcGxhY2UoLyhcXChldmFsIGF0IFteXFwoKV0qKXwoXFwpXFwsLiokKS9nLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBsaW5lLnJlcGxhY2UoL15cXHMrLywgJycpLnJlcGxhY2UoL1xcKGV2YWwgY29kZS9nLCAnKCcpLnNwbGl0KC9cXHMrLykuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbih0b2tlbnMucG9wKCkpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0b2tlbnMuam9pbignICcpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBbJ2V2YWwnLCAnPGFub255bW91cz4nXS5pbmRleE9mKGxvY2F0aW9uUGFydHNbMF0pID4gLTEgPyB1bmRlZmluZWQgOiBsb2NhdGlvblBhcnRzWzBdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlRkZPclNhZmFyaTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VGRk9yU2FmYXJpKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIWxpbmUubWF0Y2goU0FGQVJJX05BVElWRV9DT0RFX1JFR0VYUCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSBldmFsIGluZm9ybWF0aW9uIHVudGlsIHdlIGltcGxlbWVudCBzdGFja3RyYWNlLmpzL3N0YWNrZnJhbWUjOFxuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJyA+IGV2YWwnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoLyBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsXFw6XFxkK1xcOlxcZCsvZywgJzokMScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJ0AnKSA9PT0gLTEgJiYgbGluZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyaSBldmFsIGZyYW1lcyBvbmx5IGhhdmUgZnVuY3Rpb24gbmFtZXMgYW5kIG5vdGhpbmcgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBsaW5lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWVSZWdleCA9IC8oKC4qXCIuK1wiW15AXSopP1teQF0qKSg/OkApLztcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBsaW5lLm1hdGNoKGZ1bmN0aW9uTmFtZVJlZ2V4KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1hdGNoZXMgJiYgbWF0Y2hlc1sxXSA/IG1hdGNoZXNbMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24obGluZS5yZXBsYWNlKGZ1bmN0aW9uTmFtZVJlZ2V4LCAnJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhKGUpIHtcbiAgICAgICAgICAgIGlmICghZS5zdGFja3RyYWNlIHx8IChlLm1lc3NhZ2UuaW5kZXhPZignXFxuJykgPiAtMSAmJlxuICAgICAgICAgICAgICAgIGUubWVzc2FnZS5zcGxpdCgnXFxuJykubGVuZ3RoID4gZS5zdGFja3RyYWNlLnNwbGl0KCdcXG4nKS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTkoZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFlLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTEwKGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTEoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTk6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmE5KGUpIHtcbiAgICAgICAgICAgIHZhciBsaW5lUkUgPSAvTGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKS9pO1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gZS5tZXNzYWdlLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDIsIGxlbiA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZVJFLmV4ZWMobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZXNbaV1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhMTA6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMChlKSB7XG4gICAgICAgICAgICB2YXIgbGluZVJFID0gL0xpbmUgKFxcZCspLipzY3JpcHQgKD86aW4gKT8oXFxTKykoPzo6IEluIGZ1bmN0aW9uIChcXFMrKSk/JC9pO1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gZS5zdGFja3RyYWNlLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZVJFLmV4ZWMobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IG1hdGNoWzNdIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lc1tpXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gT3BlcmEgMTAuNjUrIEVycm9yLnN0YWNrIHZlcnkgc2ltaWxhciB0byBGRi9TYWZhcmlcbiAgICAgICAgcGFyc2VPcGVyYTExOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhMTEoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIWxpbmUubWF0Y2goRklSRUZPWF9TQUZBUklfU1RBQ0tfUkVHRVhQKSAmJiAhbGluZS5tYXRjaCgvXkVycm9yIGNyZWF0ZWQgYXQvKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5zcGxpdCgnQCcpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25DYWxsID0gKHRva2Vucy5zaGlmdCgpIHx8ICcnKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25DYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPGFub255bW91cyBmdW5jdGlvbig6IChcXHcrKSk/Pi8sICckMicpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwoW15cXCldKlxcKS9nLCAnJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzUmF3O1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkNhbGwubWF0Y2goL1xcKChbXlxcKV0qKVxcKS8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NSYXcgPSBmdW5jdGlvbkNhbGwucmVwbGFjZSgvXlteXFwoXStcXCgoW15cXCldKilcXCkkLywgJyQxJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gKGFyZ3NSYXcgPT09IHVuZGVmaW5lZCB8fCBhcmdzUmF3ID09PSAnW2FyZ3VtZW50cyBub3QgYXZhaWxhYmxlXScpID9cbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDogYXJnc1Jhdy5zcGxpdCgnLCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2stZ2VuZXJhdG9yJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tHZW5lcmF0b3IgPSBmYWN0b3J5KHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTdGFja0ZyYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFja3RyYWNlOiBmdW5jdGlvbiBTdGFja0dlbmVyYXRvciQkYmFja3RyYWNlKG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICAgICAgdmFyIG1heFN0YWNrU2l6ZSA9IDEwO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcHRzLm1heFN0YWNrU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBtYXhTdGFja1NpemUgPSBvcHRzLm1heFN0YWNrU2l6ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGN1cnIgPSBhcmd1bWVudHMuY2FsbGVlO1xuICAgICAgICAgICAgd2hpbGUgKGN1cnIgJiYgc3RhY2subGVuZ3RoIDwgbWF4U3RhY2tTaXplICYmIGN1cnJbJ2FyZ3VtZW50cyddKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxsb3cgVjggb3B0aW1pemF0aW9uc1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGN1cnJbJ2FyZ3VtZW50cyddLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBjdXJyWydhcmd1bWVudHMnXVtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKC9mdW5jdGlvbig/OlxccysoW1xcdyRdKykpK1xccypcXCgvLnRlc3QoY3Vyci50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ldyBTdGFja0ZyYW1lKHtmdW5jdGlvbk5hbWU6IFJlZ0V4cC4kMSB8fCB1bmRlZmluZWQsIGFyZ3M6IGFyZ3N9KSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh7YXJnczogYXJnc30pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci5jYWxsZXI7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2tmcmFtZScsIFtdLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrRnJhbWUgPSBmYWN0b3J5KCk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbigpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgZnVuY3Rpb24gX2lzTnVtYmVyKG4pIHtcbiAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfY2FwaXRhbGl6ZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2dldHRlcihwKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3BdO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBib29sZWFuUHJvcHMgPSBbJ2lzQ29uc3RydWN0b3InLCAnaXNFdmFsJywgJ2lzTmF0aXZlJywgJ2lzVG9wbGV2ZWwnXTtcbiAgICB2YXIgbnVtZXJpY1Byb3BzID0gWydjb2x1bW5OdW1iZXInLCAnbGluZU51bWJlciddO1xuICAgIHZhciBzdHJpbmdQcm9wcyA9IFsnZmlsZU5hbWUnLCAnZnVuY3Rpb25OYW1lJywgJ3NvdXJjZSddO1xuICAgIHZhciBhcnJheVByb3BzID0gWydhcmdzJ107XG5cbiAgICB2YXIgcHJvcHMgPSBib29sZWFuUHJvcHMuY29uY2F0KG51bWVyaWNQcm9wcywgc3RyaW5nUHJvcHMsIGFycmF5UHJvcHMpO1xuXG4gICAgZnVuY3Rpb24gU3RhY2tGcmFtZShvYmopIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcHNbaV0pICYmIG9ialtwcm9wc1tpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzWydzZXQnICsgX2NhcGl0YWxpemUocHJvcHNbaV0pXShvYmpbcHJvcHNbaV1dKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBTdGFja0ZyYW1lLnByb3RvdHlwZSA9IHtcbiAgICAgICAgZ2V0QXJnczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmdzO1xuICAgICAgICB9LFxuICAgICAgICBzZXRBcmdzOiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJncyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFyZ3MgPSB2O1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldEV2YWxPcmlnaW46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZhbE9yaWdpbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0RXZhbE9yaWdpbjogZnVuY3Rpb24odikge1xuICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsT3JpZ2luID0gdjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZhbE9yaWdpbiA9IG5ldyBTdGFja0ZyYW1lKHYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFdmFsIE9yaWdpbiBtdXN0IGJlIGFuIE9iamVjdCBvciBTdGFja0ZyYW1lJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2V0RnVuY3Rpb25OYW1lKCkgfHwgJ3thbm9ueW1vdXN9JztcbiAgICAgICAgICAgIHZhciBhcmdzID0gJygnICsgKHRoaXMuZ2V0QXJncygpIHx8IFtdKS5qb2luKCcsJykgKyAnKSc7XG4gICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSB0aGlzLmdldEZpbGVOYW1lKCkgPyAoJ0AnICsgdGhpcy5nZXRGaWxlTmFtZSgpKSA6ICcnO1xuICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBfaXNOdW1iZXIodGhpcy5nZXRMaW5lTnVtYmVyKCkpID8gKCc6JyArIHRoaXMuZ2V0TGluZU51bWJlcigpKSA6ICcnO1xuICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IF9pc051bWJlcih0aGlzLmdldENvbHVtbk51bWJlcigpKSA/ICgnOicgKyB0aGlzLmdldENvbHVtbk51bWJlcigpKSA6ICcnO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZSArIGFyZ3MgKyBmaWxlTmFtZSArIGxpbmVOdW1iZXIgKyBjb2x1bW5OdW1iZXI7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib29sZWFuUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IF9nZXR0ZXIoYm9vbGVhblByb3BzW2ldKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBCb29sZWFuKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoYm9vbGVhblByb3BzW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bWVyaWNQcm9wcy5sZW5ndGg7IGorKykge1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gX2dldHRlcihudW1lcmljUHJvcHNbal0pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gKGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfaXNOdW1iZXIodikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihwICsgJyBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBOdW1iZXIodik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShudW1lcmljUHJvcHNbal0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3RyaW5nUHJvcHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShzdHJpbmdQcm9wc1trXSldID0gX2dldHRlcihzdHJpbmdQcm9wc1trXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUoc3RyaW5nUHJvcHNba10pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBTdHJpbmcodik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShzdHJpbmdQcm9wc1trXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0YWNrRnJhbWU7XG59KSk7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgYW4gYXJyYXkgYW5kIGEgc2V0LiBBZGRpbmcgYSBuZXdcbiAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICogZWxlbWVudCBpcyBPKDEpLiBSZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBzZXQgaXMgbm90IHN1cHBvcnRlZC4gT25seVxuICogc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciBtZW1iZXJzaGlwLlxuICovXG5mdW5jdGlvbiBBcnJheVNldCgpIHtcbiAgdGhpcy5fYXJyYXkgPSBbXTtcbiAgdGhpcy5fc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgbWV0aG9kIGZvciBjcmVhdGluZyBBcnJheVNldCBpbnN0YW5jZXMgZnJvbSBhbiBleGlzdGluZyBhcnJheS5cbiAqL1xuQXJyYXlTZXQuZnJvbUFycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfZnJvbUFycmF5KGFBcnJheSwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc2V0ID0gbmV3IEFycmF5U2V0KCk7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzZXQuYWRkKGFBcnJheVtpXSwgYUFsbG93RHVwbGljYXRlcyk7XG4gIH1cbiAgcmV0dXJuIHNldDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhvdyBtYW55IHVuaXF1ZSBpdGVtcyBhcmUgaW4gdGhpcyBBcnJheVNldC4gSWYgZHVwbGljYXRlcyBoYXZlIGJlZW5cbiAqIGFkZGVkLCB0aGFuIHRob3NlIGRvIG5vdCBjb3VudCB0b3dhcmRzIHRoZSBzaXplLlxuICpcbiAqIEByZXR1cm5zIE51bWJlclxuICovXG5BcnJheVNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uIEFycmF5U2V0X3NpemUoKSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9zZXQpLmxlbmd0aDtcbn07XG5cbi8qKlxuICogQWRkIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhpcyBzZXQuXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBBcnJheVNldF9hZGQoYVN0ciwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHZhciBpc0R1cGxpY2F0ZSA9IGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG4gIHZhciBpZHggPSB0aGlzLl9hcnJheS5sZW5ndGg7XG4gIGlmICghaXNEdXBsaWNhdGUgfHwgYUFsbG93RHVwbGljYXRlcykge1xuICAgIHRoaXMuX2FycmF5LnB1c2goYVN0cik7XG4gIH1cbiAgaWYgKCFpc0R1cGxpY2F0ZSkge1xuICAgIHRoaXMuX3NldFtzU3RyXSA9IGlkeDtcbiAgfVxufTtcblxuLyoqXG4gKiBJcyB0aGUgZ2l2ZW4gc3RyaW5nIGEgbWVtYmVyIG9mIHRoaXMgc2V0P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gQXJyYXlTZXRfaGFzKGFTdHIpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICByZXR1cm4gaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbn07XG5cbi8qKlxuICogV2hhdCBpcyB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIHN0cmluZyBpbiB0aGUgYXJyYXk/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gQXJyYXlTZXRfaW5kZXhPZihhU3RyKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgaWYgKGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cikpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0W3NTdHJdO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignXCInICsgYVN0ciArICdcIiBpcyBub3QgaW4gdGhlIHNldC4nKTtcbn07XG5cbi8qKlxuICogV2hhdCBpcyB0aGUgZWxlbWVudCBhdCB0aGUgZ2l2ZW4gaW5kZXg/XG4gKlxuICogQHBhcmFtIE51bWJlciBhSWR4XG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uIEFycmF5U2V0X2F0KGFJZHgpIHtcbiAgaWYgKGFJZHggPj0gMCAmJiBhSWR4IDwgdGhpcy5fYXJyYXkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FycmF5W2FJZHhdO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignTm8gZWxlbWVudCBpbmRleGVkIGJ5ICcgKyBhSWR4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYXJyYXkgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzZXQgKHdoaWNoIGhhcyB0aGUgcHJvcGVyIGluZGljZXNcbiAqIGluZGljYXRlZCBieSBpbmRleE9mKS4gTm90ZSB0aGF0IHRoaXMgaXMgYSBjb3B5IG9mIHRoZSBpbnRlcm5hbCBhcnJheSB1c2VkXG4gKiBmb3Igc3RvcmluZyB0aGUgbWVtYmVycyBzbyB0aGF0IG5vIG9uZSBjYW4gbWVzcyB3aXRoIGludGVybmFsIHN0YXRlLlxuICovXG5BcnJheVNldC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X3RvQXJyYXkoKSB7XG4gIHJldHVybiB0aGlzLl9hcnJheS5zbGljZSgpO1xufTtcblxuZXhwb3J0cy5BcnJheVNldCA9IEFycmF5U2V0O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqXG4gKiBCYXNlZCBvbiB0aGUgQmFzZSA2NCBWTFEgaW1wbGVtZW50YXRpb24gaW4gQ2xvc3VyZSBDb21waWxlcjpcbiAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2xvc3VyZS1jb21waWxlci9zb3VyY2UvYnJvd3NlL3RydW5rL3NyYy9jb20vZ29vZ2xlL2RlYnVnZ2luZy9zb3VyY2VtYXAvQmFzZTY0VkxRLmphdmFcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMSBUaGUgQ2xvc3VyZSBDb21waWxlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlXG4gKiBtZXQ6XG4gKlxuICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbiAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXG4gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcbiAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZFxuICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbiAqIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcbiAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLFxuICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxuICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcbiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnLi9iYXNlNjQnKTtcblxuLy8gQSBzaW5nbGUgYmFzZSA2NCBkaWdpdCBjYW4gY29udGFpbiA2IGJpdHMgb2YgZGF0YS4gRm9yIHRoZSBiYXNlIDY0IHZhcmlhYmxlXG4vLyBsZW5ndGggcXVhbnRpdGllcyB3ZSB1c2UgaW4gdGhlIHNvdXJjZSBtYXAgc3BlYywgdGhlIGZpcnN0IGJpdCBpcyB0aGUgc2lnbixcbi8vIHRoZSBuZXh0IGZvdXIgYml0cyBhcmUgdGhlIGFjdHVhbCB2YWx1ZSwgYW5kIHRoZSA2dGggYml0IGlzIHRoZVxuLy8gY29udGludWF0aW9uIGJpdC4gVGhlIGNvbnRpbnVhdGlvbiBiaXQgdGVsbHMgdXMgd2hldGhlciB0aGVyZSBhcmUgbW9yZVxuLy8gZGlnaXRzIGluIHRoaXMgdmFsdWUgZm9sbG93aW5nIHRoaXMgZGlnaXQuXG4vL1xuLy8gICBDb250aW51YXRpb25cbi8vICAgfCAgICBTaWduXG4vLyAgIHwgICAgfFxuLy8gICBWICAgIFZcbi8vICAgMTAxMDExXG5cbnZhciBWTFFfQkFTRV9TSElGVCA9IDU7XG5cbi8vIGJpbmFyeTogMTAwMDAwXG52YXIgVkxRX0JBU0UgPSAxIDw8IFZMUV9CQVNFX1NISUZUO1xuXG4vLyBiaW5hcnk6IDAxMTExMVxudmFyIFZMUV9CQVNFX01BU0sgPSBWTFFfQkFTRSAtIDE7XG5cbi8vIGJpbmFyeTogMTAwMDAwXG52YXIgVkxRX0NPTlRJTlVBVElPTl9CSVQgPSBWTFFfQkFTRTtcblxuLyoqXG4gKiBDb252ZXJ0cyBmcm9tIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgdG8gYSB2YWx1ZSB3aGVyZSB0aGUgc2lnbiBiaXQgaXNcbiAqIHBsYWNlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LiAgRm9yIGV4YW1wbGUsIGFzIGRlY2ltYWxzOlxuICogICAxIGJlY29tZXMgMiAoMTAgYmluYXJ5KSwgLTEgYmVjb21lcyAzICgxMSBiaW5hcnkpXG4gKiAgIDIgYmVjb21lcyA0ICgxMDAgYmluYXJ5KSwgLTIgYmVjb21lcyA1ICgxMDEgYmluYXJ5KVxuICovXG5mdW5jdGlvbiB0b1ZMUVNpZ25lZChhVmFsdWUpIHtcbiAgcmV0dXJuIGFWYWx1ZSA8IDBcbiAgICA/ICgoLWFWYWx1ZSkgPDwgMSkgKyAxXG4gICAgOiAoYVZhbHVlIDw8IDEpICsgMDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0byBhIHR3by1jb21wbGVtZW50IHZhbHVlIGZyb20gYSB2YWx1ZSB3aGVyZSB0aGUgc2lnbiBiaXQgaXNcbiAqIHBsYWNlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LiAgRm9yIGV4YW1wbGUsIGFzIGRlY2ltYWxzOlxuICogICAyICgxMCBiaW5hcnkpIGJlY29tZXMgMSwgMyAoMTEgYmluYXJ5KSBiZWNvbWVzIC0xXG4gKiAgIDQgKDEwMCBiaW5hcnkpIGJlY29tZXMgMiwgNSAoMTAxIGJpbmFyeSkgYmVjb21lcyAtMlxuICovXG5mdW5jdGlvbiBmcm9tVkxRU2lnbmVkKGFWYWx1ZSkge1xuICB2YXIgaXNOZWdhdGl2ZSA9IChhVmFsdWUgJiAxKSA9PT0gMTtcbiAgdmFyIHNoaWZ0ZWQgPSBhVmFsdWUgPj4gMTtcbiAgcmV0dXJuIGlzTmVnYXRpdmVcbiAgICA/IC1zaGlmdGVkXG4gICAgOiBzaGlmdGVkO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGJhc2UgNjQgVkxRIGVuY29kZWQgdmFsdWUuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gYmFzZTY0VkxRX2VuY29kZShhVmFsdWUpIHtcbiAgdmFyIGVuY29kZWQgPSBcIlwiO1xuICB2YXIgZGlnaXQ7XG5cbiAgdmFyIHZscSA9IHRvVkxRU2lnbmVkKGFWYWx1ZSk7XG5cbiAgZG8ge1xuICAgIGRpZ2l0ID0gdmxxICYgVkxRX0JBU0VfTUFTSztcbiAgICB2bHEgPj4+PSBWTFFfQkFTRV9TSElGVDtcbiAgICBpZiAodmxxID4gMCkge1xuICAgICAgLy8gVGhlcmUgYXJlIHN0aWxsIG1vcmUgZGlnaXRzIGluIHRoaXMgdmFsdWUsIHNvIHdlIG11c3QgbWFrZSBzdXJlIHRoZVxuICAgICAgLy8gY29udGludWF0aW9uIGJpdCBpcyBtYXJrZWQuXG4gICAgICBkaWdpdCB8PSBWTFFfQ09OVElOVUFUSU9OX0JJVDtcbiAgICB9XG4gICAgZW5jb2RlZCArPSBiYXNlNjQuZW5jb2RlKGRpZ2l0KTtcbiAgfSB3aGlsZSAodmxxID4gMCk7XG5cbiAgcmV0dXJuIGVuY29kZWQ7XG59O1xuXG4vKipcbiAqIERlY29kZXMgdGhlIG5leHQgYmFzZSA2NCBWTFEgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCByZXR1cm5zIHRoZVxuICogdmFsdWUgYW5kIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgdmlhIHRoZSBvdXQgcGFyYW1ldGVyLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9kZWNvZGUoYVN0ciwgYUluZGV4LCBhT3V0UGFyYW0pIHtcbiAgdmFyIHN0ckxlbiA9IGFTdHIubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gMDtcbiAgdmFyIHNoaWZ0ID0gMDtcbiAgdmFyIGNvbnRpbnVhdGlvbiwgZGlnaXQ7XG5cbiAgZG8ge1xuICAgIGlmIChhSW5kZXggPj0gc3RyTGVuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBtb3JlIGRpZ2l0cyBpbiBiYXNlIDY0IFZMUSB2YWx1ZS5cIik7XG4gICAgfVxuXG4gICAgZGlnaXQgPSBiYXNlNjQuZGVjb2RlKGFTdHIuY2hhckNvZGVBdChhSW5kZXgrKykpO1xuICAgIGlmIChkaWdpdCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmFzZTY0IGRpZ2l0OiBcIiArIGFTdHIuY2hhckF0KGFJbmRleCAtIDEpKTtcbiAgICB9XG5cbiAgICBjb250aW51YXRpb24gPSAhIShkaWdpdCAmIFZMUV9DT05USU5VQVRJT05fQklUKTtcbiAgICBkaWdpdCAmPSBWTFFfQkFTRV9NQVNLO1xuICAgIHJlc3VsdCA9IHJlc3VsdCArIChkaWdpdCA8PCBzaGlmdCk7XG4gICAgc2hpZnQgKz0gVkxRX0JBU0VfU0hJRlQ7XG4gIH0gd2hpbGUgKGNvbnRpbnVhdGlvbik7XG5cbiAgYU91dFBhcmFtLnZhbHVlID0gZnJvbVZMUVNpZ25lZChyZXN1bHQpO1xuICBhT3V0UGFyYW0ucmVzdCA9IGFJbmRleDtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBpbnRUb0NoYXJNYXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xuXG4vKipcbiAqIEVuY29kZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAwIHRvIDYzIHRvIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKG51bWJlcikge1xuICBpZiAoMCA8PSBudW1iZXIgJiYgbnVtYmVyIDwgaW50VG9DaGFyTWFwLmxlbmd0aCkge1xuICAgIHJldHVybiBpbnRUb0NoYXJNYXBbbnVtYmVyXTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzOiBcIiArIG51bWJlcik7XG59O1xuXG4vKipcbiAqIERlY29kZSBhIHNpbmdsZSBiYXNlIDY0IGNoYXJhY3RlciBjb2RlIGRpZ2l0IHRvIGFuIGludGVnZXIuIFJldHVybnMgLTEgb25cbiAqIGZhaWx1cmUuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gKGNoYXJDb2RlKSB7XG4gIHZhciBiaWdBID0gNjU7ICAgICAvLyAnQSdcbiAgdmFyIGJpZ1ogPSA5MDsgICAgIC8vICdaJ1xuXG4gIHZhciBsaXR0bGVBID0gOTc7ICAvLyAnYSdcbiAgdmFyIGxpdHRsZVogPSAxMjI7IC8vICd6J1xuXG4gIHZhciB6ZXJvID0gNDg7ICAgICAvLyAnMCdcbiAgdmFyIG5pbmUgPSA1NzsgICAgIC8vICc5J1xuXG4gIHZhciBwbHVzID0gNDM7ICAgICAvLyAnKydcbiAgdmFyIHNsYXNoID0gNDc7ICAgIC8vICcvJ1xuXG4gIHZhciBsaXR0bGVPZmZzZXQgPSAyNjtcbiAgdmFyIG51bWJlck9mZnNldCA9IDUyO1xuXG4gIC8vIDAgLSAyNTogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcbiAgaWYgKGJpZ0EgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gYmlnWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBiaWdBKTtcbiAgfVxuXG4gIC8vIDI2IC0gNTE6IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XG4gIGlmIChsaXR0bGVBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGxpdHRsZVopIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gbGl0dGxlQSArIGxpdHRsZU9mZnNldCk7XG4gIH1cblxuICAvLyA1MiAtIDYxOiAwMTIzNDU2Nzg5XG4gIGlmICh6ZXJvIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IG5pbmUpIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gemVybyArIG51bWJlck9mZnNldCk7XG4gIH1cblxuICAvLyA2MjogK1xuICBpZiAoY2hhckNvZGUgPT0gcGx1cykge1xuICAgIHJldHVybiA2MjtcbiAgfVxuXG4gIC8vIDYzOiAvXG4gIGlmIChjaGFyQ29kZSA9PSBzbGFzaCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuXG4gIC8vIEludmFsaWQgYmFzZTY0IGRpZ2l0LlxuICByZXR1cm4gLTE7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG5leHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcbmV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZSBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoLlxuICpcbiAqIEBwYXJhbSBhTG93IEluZGljZXMgaGVyZSBhbmQgbG93ZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhSGlnaCBJbmRpY2VzIGhlcmUgYW5kIGhpZ2hlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgYmVpbmcgc2VhcmNoZWQgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgbm9uLWVtcHR5IGFycmF5IGJlaW5nIHNlYXJjaGVkLlxuICogQHBhcmFtIGFDb21wYXJlIEZ1bmN0aW9uIHdoaWNoIHRha2VzIHR3byBlbGVtZW50cyBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gcmVjdXJzaXZlU2VhcmNoKGFMb3csIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICAvLyBUaGlzIGZ1bmN0aW9uIHRlcm1pbmF0ZXMgd2hlbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAvL1xuICAvLyAgIDEuIFdlIGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQgd2UgYXJlIGxvb2tpbmcgZm9yLlxuICAvL1xuICAvLyAgIDIuIFdlIGRpZCBub3QgZmluZCB0aGUgZXhhY3QgZWxlbWVudCwgYnV0IHdlIGNhbiByZXR1cm4gdGhlIGluZGV4IG9mXG4gIC8vICAgICAgdGhlIG5leHQtY2xvc2VzdCBlbGVtZW50LlxuICAvL1xuICAvLyAgIDMuIFdlIGRpZCBub3QgZmluZCB0aGUgZXhhY3QgZWxlbWVudCwgYW5kIHRoZXJlIGlzIG5vIG5leHQtY2xvc2VzdFxuICAvLyAgICAgIGVsZW1lbnQgdGhhbiB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLCBzbyB3ZSByZXR1cm4gLTEuXG4gIHZhciBtaWQgPSBNYXRoLmZsb29yKChhSGlnaCAtIGFMb3cpIC8gMikgKyBhTG93O1xuICB2YXIgY21wID0gYUNvbXBhcmUoYU5lZWRsZSwgYUhheXN0YWNrW21pZF0sIHRydWUpO1xuICBpZiAoY21wID09PSAwKSB7XG4gICAgLy8gRm91bmQgdGhlIGVsZW1lbnQgd2UgYXJlIGxvb2tpbmcgZm9yLlxuICAgIHJldHVybiBtaWQ7XG4gIH1cbiAgZWxzZSBpZiAoY21wID4gMCkge1xuICAgIC8vIE91ciBuZWVkbGUgaXMgZ3JlYXRlciB0aGFuIGFIYXlzdGFja1ttaWRdLlxuICAgIGlmIChhSGlnaCAtIG1pZCA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSB1cHBlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChtaWQsIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGV4YWN0IG5lZWRsZSBlbGVtZW50IHdhcyBub3QgZm91bmQgaW4gdGhpcyBoYXlzdGFjay4gRGV0ZXJtaW5lIGlmXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIGFIaWdoIDwgYUhheXN0YWNrLmxlbmd0aCA/IGFIaWdoIDogLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIC8vIE91ciBuZWVkbGUgaXMgbGVzcyB0aGFuIGFIYXlzdGFja1ttaWRdLlxuICAgIGlmIChtaWQgLSBhTG93ID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIGxvd2VyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKGFMb3csIG1pZCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhTG93IDwgMCA/IC0xIDogYUxvdztcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2ggd2hpY2ggd2lsbCBhbHdheXMgdHJ5IGFuZCByZXR1cm5cbiAqIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBlbGVtZW50IGlmIHRoZXJlIGlzIG5vIGV4YWN0IGhpdC4gVGhpcyBpcyBiZWNhdXNlXG4gKiBtYXBwaW5ncyBiZXR3ZWVuIG9yaWdpbmFsIGFuZCBnZW5lcmF0ZWQgbGluZS9jb2wgcGFpcnMgYXJlIHNpbmdsZSBwb2ludHMsXG4gKiBhbmQgdGhlcmUgaXMgYW4gaW1wbGljaXQgcmVnaW9uIGJldHdlZW4gZWFjaCBvZiB0aGVtLCBzbyBhIG1pc3MganVzdCBtZWFuc1xuICogdGhhdCB5b3UgYXJlbid0IG9uIHRoZSB2ZXJ5IHN0YXJ0IG9mIGEgcmVnaW9uLlxuICpcbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IHlvdSBhcmUgbG9va2luZyBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBhcnJheSB0aGF0IGlzIGJlaW5nIHNlYXJjaGVkLlxuICogQHBhcmFtIGFDb21wYXJlIEEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgdGhlIG5lZWRsZSBhbmQgYW4gZWxlbWVudCBpbiB0aGVcbiAqICAgICBhcnJheSBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbmVlZGxlIGlzIGxlc3NcbiAqICAgICB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIHRoZSBlbGVtZW50LCByZXNwZWN0aXZlbHkuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKi9cbmV4cG9ydHMuc2VhcmNoID0gZnVuY3Rpb24gc2VhcmNoKGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIGlmIChhSGF5c3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgdmFyIGluZGV4ID0gcmVjdXJzaXZlU2VhcmNoKC0xLCBhSGF5c3RhY2subGVuZ3RoLCBhTmVlZGxlLCBhSGF5c3RhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ29tcGFyZSwgYUJpYXMgfHwgZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvLyBXZSBoYXZlIGZvdW5kIGVpdGhlciB0aGUgZXhhY3QgZWxlbWVudCwgb3IgdGhlIG5leHQtY2xvc2VzdCBlbGVtZW50IHRoYW5cbiAgLy8gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci4gSG93ZXZlciwgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgc3VjaFxuICAvLyBlbGVtZW50LiBNYWtlIHN1cmUgd2UgYWx3YXlzIHJldHVybiB0aGUgc21hbGxlc3Qgb2YgdGhlc2UuXG4gIHdoaWxlIChpbmRleCAtIDEgPj0gMCkge1xuICAgIGlmIChhQ29tcGFyZShhSGF5c3RhY2tbaW5kZXhdLCBhSGF5c3RhY2tbaW5kZXggLSAxXSwgdHJ1ZSkgIT09IDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAtLWluZGV4O1xuICB9XG5cbiAgcmV0dXJuIGluZGV4O1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLy8gSXQgdHVybnMgb3V0IHRoYXQgc29tZSAobW9zdD8pIEphdmFTY3JpcHQgZW5naW5lcyBkb24ndCBzZWxmLWhvc3Rcbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAuIFRoaXMgbWFrZXMgc2Vuc2UgYmVjYXVzZSBDKysgd2lsbCBsaWtlbHkgcmVtYWluXG4vLyBmYXN0ZXIgdGhhbiBKUyB3aGVuIGRvaW5nIHJhdyBDUFUtaW50ZW5zaXZlIHNvcnRpbmcuIEhvd2V2ZXIsIHdoZW4gdXNpbmcgYVxuLy8gY3VzdG9tIGNvbXBhcmF0b3IgZnVuY3Rpb24sIGNhbGxpbmcgYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aGUgVk0ncyBDKysgYW5kXG4vLyBKSVQnZCBKUyBpcyByYXRoZXIgc2xvdyAqYW5kKiBsb3NlcyBKSVQgdHlwZSBpbmZvcm1hdGlvbiwgcmVzdWx0aW5nIGluXG4vLyB3b3JzZSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIGNvbXBhcmF0b3IgZnVuY3Rpb24gdGhhbiB3b3VsZCBiZSBvcHRpbWFsLiBJblxuLy8gZmFjdCwgd2hlbiBzb3J0aW5nIHdpdGggYSBjb21wYXJhdG9yLCB0aGVzZSBjb3N0cyBvdXR3ZWlnaCB0aGUgYmVuZWZpdHMgb2Zcbi8vIHNvcnRpbmcgaW4gQysrLiBCeSB1c2luZyBvdXIgb3duIEpTLWltcGxlbWVudGVkIFF1aWNrIFNvcnQgKGJlbG93KSwgd2UgZ2V0XG4vLyBhIH4zNTAwbXMgbWVhbiBzcGVlZC11cCBpbiBgYmVuY2gvYmVuY2guaHRtbGAuXG5cbi8qKlxuICogU3dhcCB0aGUgZWxlbWVudHMgaW5kZXhlZCBieSBgeGAgYW5kIGB5YCBpbiB0aGUgYXJyYXkgYGFyeWAuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gKiAgICAgICAgVGhlIGFycmF5LlxuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGl0ZW0uXG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogICAgICAgIFRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIGl0ZW0uXG4gKi9cbmZ1bmN0aW9uIHN3YXAoYXJ5LCB4LCB5KSB7XG4gIHZhciB0ZW1wID0gYXJ5W3hdO1xuICBhcnlbeF0gPSBhcnlbeV07XG4gIGFyeVt5XSA9IHRlbXA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIHdpdGhpbiB0aGUgcmFuZ2UgYGxvdyAuLiBoaWdoYCBpbmNsdXNpdmUuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGxvd1xuICogICAgICAgIFRoZSBsb3dlciBib3VuZCBvbiB0aGUgcmFuZ2UuXG4gKiBAcGFyYW0ge051bWJlcn0gaGlnaFxuICogICAgICAgIFRoZSB1cHBlciBib3VuZCBvbiB0aGUgcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbUludEluUmFuZ2UobG93LCBoaWdoKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKGxvdyArIChNYXRoLnJhbmRvbSgpICogKGhpZ2ggLSBsb3cpKSk7XG59XG5cbi8qKlxuICogVGhlIFF1aWNrIFNvcnQgYWxnb3JpdGhtLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICogQHBhcmFtIHtOdW1iZXJ9IHBcbiAqICAgICAgICBTdGFydCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSByXG4gKiAgICAgICAgRW5kIGluZGV4IG9mIHRoZSBhcnJheVxuICovXG5mdW5jdGlvbiBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHAsIHIpIHtcbiAgLy8gSWYgb3VyIGxvd2VyIGJvdW5kIGlzIGxlc3MgdGhhbiBvdXIgdXBwZXIgYm91bmQsIHdlICgxKSBwYXJ0aXRpb24gdGhlXG4gIC8vIGFycmF5IGludG8gdHdvIHBpZWNlcyBhbmQgKDIpIHJlY3Vyc2Ugb24gZWFjaCBoYWxmLiBJZiBpdCBpcyBub3QsIHRoaXMgaXNcbiAgLy8gdGhlIGVtcHR5IGFycmF5IGFuZCBvdXIgYmFzZSBjYXNlLlxuXG4gIGlmIChwIDwgcikge1xuICAgIC8vICgxKSBQYXJ0aXRpb25pbmcuXG4gICAgLy9cbiAgICAvLyBUaGUgcGFydGl0aW9uaW5nIGNob29zZXMgYSBwaXZvdCBiZXR3ZWVuIGBwYCBhbmQgYHJgIGFuZCBtb3ZlcyBhbGxcbiAgICAvLyBlbGVtZW50cyB0aGF0IGFyZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBpdm90IHRvIHRoZSBiZWZvcmUgaXQsIGFuZFxuICAgIC8vIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBhcmUgZ3JlYXRlciB0aGFuIGl0IGFmdGVyIGl0LiBUaGUgZWZmZWN0IGlzIHRoYXRcbiAgICAvLyBvbmNlIHBhcnRpdGlvbiBpcyBkb25lLCB0aGUgcGl2b3QgaXMgaW4gdGhlIGV4YWN0IHBsYWNlIGl0IHdpbGwgYmUgd2hlblxuICAgIC8vIHRoZSBhcnJheSBpcyBwdXQgaW4gc29ydGVkIG9yZGVyLCBhbmQgaXQgd2lsbCBub3QgbmVlZCB0byBiZSBtb3ZlZFxuICAgIC8vIGFnYWluLiBUaGlzIHJ1bnMgaW4gTyhuKSB0aW1lLlxuXG4gICAgLy8gQWx3YXlzIGNob29zZSBhIHJhbmRvbSBwaXZvdCBzbyB0aGF0IGFuIGlucHV0IGFycmF5IHdoaWNoIGlzIHJldmVyc2VcbiAgICAvLyBzb3J0ZWQgZG9lcyBub3QgY2F1c2UgTyhuXjIpIHJ1bm5pbmcgdGltZS5cbiAgICB2YXIgcGl2b3RJbmRleCA9IHJhbmRvbUludEluUmFuZ2UocCwgcik7XG4gICAgdmFyIGkgPSBwIC0gMTtcblxuICAgIHN3YXAoYXJ5LCBwaXZvdEluZGV4LCByKTtcbiAgICB2YXIgcGl2b3QgPSBhcnlbcl07XG5cbiAgICAvLyBJbW1lZGlhdGVseSBhZnRlciBgamAgaXMgaW5jcmVtZW50ZWQgaW4gdGhpcyBsb29wLCB0aGUgZm9sbG93aW5nIGhvbGRcbiAgICAvLyB0cnVlOlxuICAgIC8vXG4gICAgLy8gICAqIEV2ZXJ5IGVsZW1lbnQgaW4gYGFyeVtwIC4uIGldYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBpdm90LlxuICAgIC8vXG4gICAgLy8gICAqIEV2ZXJ5IGVsZW1lbnQgaW4gYGFyeVtpKzEgLi4gai0xXWAgaXMgZ3JlYXRlciB0aGFuIHRoZSBwaXZvdC5cbiAgICBmb3IgKHZhciBqID0gcDsgaiA8IHI7IGorKykge1xuICAgICAgaWYgKGNvbXBhcmF0b3IoYXJ5W2pdLCBwaXZvdCkgPD0gMCkge1xuICAgICAgICBpICs9IDE7XG4gICAgICAgIHN3YXAoYXJ5LCBpLCBqKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2FwKGFyeSwgaSArIDEsIGopO1xuICAgIHZhciBxID0gaSArIDE7XG5cbiAgICAvLyAoMikgUmVjdXJzZSBvbiBlYWNoIGhhbGYuXG5cbiAgICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHAsIHEgLSAxKTtcbiAgICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHEgKyAxLCByKTtcbiAgfVxufVxuXG4vKipcbiAqIFNvcnQgdGhlIGdpdmVuIGFycmF5IGluLXBsYWNlIHdpdGggdGhlIGdpdmVuIGNvbXBhcmF0b3IgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gKiAgICAgICAgQW4gYXJyYXkgdG8gc29ydC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXBhcmF0b3JcbiAqICAgICAgICBGdW5jdGlvbiB0byB1c2UgdG8gY29tcGFyZSB0d28gaXRlbXMuXG4gKi9cbmV4cG9ydHMucXVpY2tTb3J0ID0gZnVuY3Rpb24gKGFyeSwgY29tcGFyYXRvcikge1xuICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIDAsIGFyeS5sZW5ndGggLSAxKTtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG52YXIgYmluYXJ5U2VhcmNoID0gcmVxdWlyZSgnLi9iaW5hcnktc2VhcmNoJyk7XG52YXIgQXJyYXlTZXQgPSByZXF1aXJlKCcuL2FycmF5LXNldCcpLkFycmF5U2V0O1xudmFyIGJhc2U2NFZMUSA9IHJlcXVpcmUoJy4vYmFzZTY0LXZscScpO1xudmFyIHF1aWNrU29ydCA9IHJlcXVpcmUoJy4vcXVpY2stc29ydCcpLnF1aWNrU29ydDtcblxuZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICByZXR1cm4gc291cmNlTWFwLnNlY3Rpb25zICE9IG51bGxcbiAgICA/IG5ldyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwKVxuICAgIDogbmV3IEJhc2ljU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwKTtcbn1cblxuU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcCA9IGZ1bmN0aW9uKGFTb3VyY2VNYXApIHtcbiAgcmV0dXJuIEJhc2ljU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKTtcbn1cblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8vIGBfX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmQgYF9fb3JpZ2luYWxNYXBwaW5nc2AgYXJlIGFycmF5cyB0aGF0IGhvbGQgdGhlXG4vLyBwYXJzZWQgbWFwcGluZyBjb29yZGluYXRlcyBmcm9tIHRoZSBzb3VyY2UgbWFwJ3MgXCJtYXBwaW5nc1wiIGF0dHJpYnV0ZS4gVGhleVxuLy8gYXJlIGxhemlseSBpbnN0YW50aWF0ZWQsIGFjY2Vzc2VkIHZpYSB0aGUgYF9nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGdldHRlcnMgcmVzcGVjdGl2ZWx5LCBhbmQgd2Ugb25seSBwYXJzZSB0aGUgbWFwcGluZ3Ncbi8vIGFuZCBjcmVhdGUgdGhlc2UgYXJyYXlzIG9uY2UgcXVlcmllZCBmb3IgYSBzb3VyY2UgbG9jYXRpb24uIFdlIGp1bXAgdGhyb3VnaFxuLy8gdGhlc2UgaG9vcHMgYmVjYXVzZSB0aGVyZSBjYW4gYmUgbWFueSB0aG91c2FuZHMgb2YgbWFwcGluZ3MsIGFuZCBwYXJzaW5nXG4vLyB0aGVtIGlzIGV4cGVuc2l2ZSwgc28gd2Ugb25seSB3YW50IHRvIGRvIGl0IGlmIHdlIG11c3QuXG4vL1xuLy8gRWFjaCBvYmplY3QgaW4gdGhlIGFycmF5cyBpcyBvZiB0aGUgZm9ybTpcbi8vXG4vLyAgICAge1xuLy8gICAgICAgZ2VuZXJhdGVkTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIGdlbmVyYXRlZENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgc291cmNlOiBUaGUgcGF0aCB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUgdGhhdCBnZW5lcmF0ZWQgdGhpc1xuLy8gICAgICAgICAgICAgICBjaHVuayBvZiBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxMaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4vLyAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBvcmlnaW5hbENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4vLyAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBzeW1ib2wgd2hpY2ggZ2VuZXJhdGVkIHRoaXMgY2h1bmsgb2Zcbi8vICAgICAgICAgICAgIGNvZGUuXG4vLyAgICAgfVxuLy9cbi8vIEFsbCBwcm9wZXJ0aWVzIGV4Y2VwdCBmb3IgYGdlbmVyYXRlZExpbmVgIGFuZCBgZ2VuZXJhdGVkQ29sdW1uYCBjYW4gYmVcbi8vIGBudWxsYC5cbi8vXG4vLyBgX2dlbmVyYXRlZE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zLlxuLy9cbi8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zLlxuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IG51bGw7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnX2dlbmVyYXRlZE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncykge1xuICAgICAgdGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncywgdGhpcy5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzO1xuICB9XG59KTtcblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG51bGw7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnX29yaWdpbmFsTWFwcGluZ3MnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzO1xuICB9XG59KTtcblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfY2hhcklzTWFwcGluZ1NlcGFyYXRvcihhU3RyLCBpbmRleCkge1xuICAgIHZhciBjID0gYVN0ci5jaGFyQXQoaW5kZXgpO1xuICAgIHJldHVybiBjID09PSBcIjtcIiB8fCBjID09PSBcIixcIjtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IF9wYXJzZU1hcHBpbmdzXCIpO1xuICB9O1xuXG5Tb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVIgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVIgPSAyO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5Tb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGVhY2ggbWFwcGluZyBiZXR3ZWVuIGFuIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiBhbmQgYVxuICogZ2VuZXJhdGVkIGxpbmUvY29sdW1uIGluIHRoaXMgc291cmNlIG1hcC5cbiAqXG4gKiBAcGFyYW0gRnVuY3Rpb24gYUNhbGxiYWNrXG4gKiAgICAgICAgVGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggZWFjaCBtYXBwaW5nLlxuICogQHBhcmFtIE9iamVjdCBhQ29udGV4dFxuICogICAgICAgIE9wdGlvbmFsLiBJZiBzcGVjaWZpZWQsIHRoaXMgb2JqZWN0IHdpbGwgYmUgdGhlIHZhbHVlIG9mIGB0aGlzYCBldmVyeVxuICogICAgICAgIHRpbWUgdGhhdCBgYUNhbGxiYWNrYCBpcyBjYWxsZWQuXG4gKiBAcGFyYW0gYU9yZGVyXG4gKiAgICAgICAgRWl0aGVyIGBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVJgIG9yXG4gKiAgICAgICAgYFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSYC4gU3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgdG9cbiAqICAgICAgICBpdGVyYXRlIG92ZXIgdGhlIG1hcHBpbmdzIHNvcnRlZCBieSB0aGUgZ2VuZXJhdGVkIGZpbGUncyBsaW5lL2NvbHVtblxuICogICAgICAgIG9yZGVyIG9yIHRoZSBvcmlnaW5hbCdzIHNvdXJjZS9saW5lL2NvbHVtbiBvcmRlciwgcmVzcGVjdGl2ZWx5LiBEZWZhdWx0cyB0b1xuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVJgLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZWFjaE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9lYWNoTWFwcGluZyhhQ2FsbGJhY2ssIGFDb250ZXh0LCBhT3JkZXIpIHtcbiAgICB2YXIgY29udGV4dCA9IGFDb250ZXh0IHx8IG51bGw7XG4gICAgdmFyIG9yZGVyID0gYU9yZGVyIHx8IFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUjtcblxuICAgIHZhciBtYXBwaW5ncztcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XG4gICAgY2FzZSBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUjpcbiAgICAgIG1hcHBpbmdzID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG9yZGVyIG9mIGl0ZXJhdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZVJvb3QgPSB0aGlzLnNvdXJjZVJvb3Q7XG4gICAgbWFwcGluZ3MubWFwKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICB2YXIgc291cmNlID0gbWFwcGluZy5zb3VyY2UgPT09IG51bGwgPyBudWxsIDogdGhpcy5fc291cmNlcy5hdChtYXBwaW5nLnNvdXJjZSk7XG4gICAgICBpZiAoc291cmNlICE9IG51bGwgJiYgc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbixcbiAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgb3JpZ2luYWxDb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sXG4gICAgICAgIG5hbWU6IG1hcHBpbmcubmFtZSA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpXG4gICAgICB9O1xuICAgIH0sIHRoaXMpLmZvckVhY2goYUNhbGxiYWNrLCBjb250ZXh0KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwcm92aWRlZC4gSWYgbm8gY29sdW1uIGlzIHByb3ZpZGVkLCByZXR1cm5zIGFsbCBtYXBwaW5nc1xuICogY29ycmVzcG9uZGluZyB0byBhIGVpdGhlciB0aGUgbGluZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciBvciB0aGUgbmV4dFxuICogY2xvc2VzdCBsaW5lIHRoYXQgaGFzIGFueSBtYXBwaW5ncy4gT3RoZXJ3aXNlLCByZXR1cm5zIGFsbCBtYXBwaW5nc1xuICogY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gbGluZSBhbmQgZWl0aGVyIHRoZSBjb2x1bW4gd2UgYXJlIHNlYXJjaGluZyBmb3JcbiAqIG9yIHRoZSBuZXh0IGNsb3Nlc3QgY29sdW1uIHRoYXQgaGFzIGFueSBvZmZzZXRzLlxuICpcbiAqIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IE9wdGlvbmFsLiB0aGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBhcnJheSBvZiBvYmplY3RzIGlzIHJldHVybmVkLCBlYWNoIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmFsbEdlbmVyYXRlZFBvc2l0aW9uc0ZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2FsbEdlbmVyYXRlZFBvc2l0aW9uc0ZvcihhQXJncykge1xuICAgIHZhciBsaW5lID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyk7XG5cbiAgICAvLyBXaGVuIHRoZXJlIGlzIG5vIGV4YWN0IG1hdGNoLCBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmdcbiAgICAvLyByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBtYXBwaW5nIGxlc3MgdGhhbiB0aGUgbmVlZGxlLiBCeVxuICAgIC8vIHNldHRpbmcgbmVlZGxlLm9yaWdpbmFsQ29sdW1uIHRvIDAsIHdlIHRodXMgZmluZCB0aGUgbGFzdCBtYXBwaW5nIGZvclxuICAgIC8vIHRoZSBnaXZlbiBsaW5lLCBwcm92aWRlZCBzdWNoIGEgbWFwcGluZyBleGlzdHMuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKSxcbiAgICAgIG9yaWdpbmFsTGluZTogbGluZSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicsIDApXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgbmVlZGxlLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBuZWVkbGUuc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhuZWVkbGUuc291cmNlKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBuZWVkbGUuc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKG5lZWRsZS5zb3VyY2UpO1xuXG4gICAgdmFyIG1hcHBpbmdzID0gW107XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhuZWVkbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsTGluZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxDb2x1bW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChhQXJncy5jb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgb3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG5cbiAgICAgICAgLy8gSXRlcmF0ZSB1bnRpbCBlaXRoZXIgd2UgcnVuIG91dCBvZiBtYXBwaW5ncywgb3Igd2UgcnVuIGludG9cbiAgICAgICAgLy8gYSBtYXBwaW5nIGZvciBhIGRpZmZlcmVudCBsaW5lIHRoYW4gdGhlIG9uZSB3ZSBmb3VuZC4gU2luY2VcbiAgICAgICAgLy8gbWFwcGluZ3MgYXJlIHNvcnRlZCwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG1hcHBpbmdzIGZvclxuICAgICAgICAvLyB0aGUgbGluZSB3ZSBmb3VuZC5cbiAgICAgICAgd2hpbGUgKG1hcHBpbmcgJiYgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IG9yaWdpbmFsTGluZSkge1xuICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbKytpbmRleF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBvcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgLy8gSXRlcmF0ZSB1bnRpbCBlaXRoZXIgd2UgcnVuIG91dCBvZiBtYXBwaW5ncywgb3Igd2UgcnVuIGludG9cbiAgICAgICAgLy8gYSBtYXBwaW5nIGZvciBhIGRpZmZlcmVudCBsaW5lIHRoYW4gdGhlIG9uZSB3ZSB3ZXJlIHNlYXJjaGluZyBmb3IuXG4gICAgICAgIC8vIFNpbmNlIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmXG4gICAgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gbGluZSAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9PSBvcmlnaW5hbENvbHVtbikge1xuICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbKytpbmRleF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWFwcGluZ3M7XG4gIH07XG5cbmV4cG9ydHMuU291cmNlTWFwQ29uc3VtZXIgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBBIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBhcnNlZCBzb3VyY2UgbWFwIHdoaWNoIHdlIGNhblxuICogcXVlcnkgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBmaWxlIHBvc2l0aW9ucyBieSBnaXZpbmcgaXQgYSBmaWxlXG4gKiBwb3NpdGlvbiBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqXG4gKiBUaGUgb25seSBwYXJhbWV0ZXIgaXMgdGhlIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3JcbiAqIGFscmVhZHkgcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYywgc291cmNlIG1hcHMgaGF2ZSB0aGVcbiAqIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICpcbiAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICogICAtIHNvdXJjZXM6IEFuIGFycmF5IG9mIFVSTHMgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAqICAgLSBuYW1lczogQW4gYXJyYXkgb2YgaWRlbnRpZmllcnMgd2hpY2ggY2FuIGJlIHJlZmVycmVuY2VkIGJ5IGluZGl2aWR1YWwgbWFwcGluZ3MuXG4gKiAgIC0gc291cmNlUm9vdDogT3B0aW9uYWwuIFRoZSBVUkwgcm9vdCBmcm9tIHdoaWNoIGFsbCBzb3VyY2VzIGFyZSByZWxhdGl2ZS5cbiAqICAgLSBzb3VyY2VzQ29udGVudDogT3B0aW9uYWwuIEFuIGFycmF5IG9mIGNvbnRlbnRzIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbWFwcGluZ3M6IEEgc3RyaW5nIG9mIGJhc2U2NCBWTFFzIHdoaWNoIGNvbnRhaW4gdGhlIGFjdHVhbCBtYXBwaW5ncy5cbiAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gKlxuICogSGVyZSBpcyBhbiBleGFtcGxlIHNvdXJjZSBtYXAsIHRha2VuIGZyb20gdGhlIHNvdXJjZSBtYXAgc3BlY1swXTpcbiAqXG4gKiAgICAge1xuICogICAgICAgdmVyc2lvbiA6IDMsXG4gKiAgICAgICBmaWxlOiBcIm91dC5qc1wiLFxuICogICAgICAgc291cmNlUm9vdCA6IFwiXCIsXG4gKiAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAqICAgICAgIG1hcHBpbmdzOiBcIkFBLEFCOztBQkNERTtcIlxuICogICAgIH1cbiAqXG4gKiBbMF06IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVUxUkdBZWhRd1J5cFVUb3ZGMUtSbHBpT0Z6ZTBiLV8yZ2M2ZkFIMEtZMGsvZWRpdD9wbGk9MSNcbiAqL1xuZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgfVxuXG4gIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICB2YXIgc291cmNlcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXMnKTtcbiAgLy8gU2FzcyAzLjMgbGVhdmVzIG91dCB0aGUgJ25hbWVzJyBhcnJheSwgc28gd2UgZGV2aWF0ZSBmcm9tIHRoZSBzcGVjICh3aGljaFxuICAvLyByZXF1aXJlcyB0aGUgYXJyYXkpIHRvIHBsYXkgbmljZSBoZXJlLlxuICB2YXIgbmFtZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICduYW1lcycsIFtdKTtcbiAgdmFyIHNvdXJjZVJvb3QgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VSb290JywgbnVsbCk7XG4gIHZhciBzb3VyY2VzQ29udGVudCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXNDb250ZW50JywgbnVsbCk7XG4gIHZhciBtYXBwaW5ncyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ21hcHBpbmdzJyk7XG4gIHZhciBmaWxlID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnZmlsZScsIG51bGwpO1xuXG4gIC8vIE9uY2UgYWdhaW4sIFNhc3MgZGV2aWF0ZXMgZnJvbSB0aGUgc3BlYyBhbmQgc3VwcGxpZXMgdGhlIHZlcnNpb24gYXMgYVxuICAvLyBzdHJpbmcgcmF0aGVyIHRoYW4gYSBudW1iZXIsIHNvIHdlIHVzZSBsb29zZSBlcXVhbGl0eSBjaGVja2luZyBoZXJlLlxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICBzb3VyY2VzID0gc291cmNlc1xuICAgIC5tYXAoU3RyaW5nKVxuICAgIC8vIFNvbWUgc291cmNlIG1hcHMgcHJvZHVjZSByZWxhdGl2ZSBzb3VyY2UgcGF0aHMgbGlrZSBcIi4vZm9vLmpzXCIgaW5zdGVhZCBvZlxuICAgIC8vIFwiZm9vLmpzXCIuICBOb3JtYWxpemUgdGhlc2UgZmlyc3Qgc28gdGhhdCBmdXR1cmUgY29tcGFyaXNvbnMgd2lsbCBzdWNjZWVkLlxuICAgIC8vIFNlZSBidWd6aWwubGEvMTA5MDc2OC5cbiAgICAubWFwKHV0aWwubm9ybWFsaXplKVxuICAgIC8vIEFsd2F5cyBlbnN1cmUgdGhhdCBhYnNvbHV0ZSBzb3VyY2VzIGFyZSBpbnRlcm5hbGx5IHN0b3JlZCByZWxhdGl2ZSB0b1xuICAgIC8vIHRoZSBzb3VyY2Ugcm9vdCwgaWYgdGhlIHNvdXJjZSByb290IGlzIGFic29sdXRlLiBOb3QgZG9pbmcgdGhpcyB3b3VsZFxuICAgIC8vIGJlIHBhcnRpY3VsYXJseSBwcm9ibGVtYXRpYyB3aGVuIHRoZSBzb3VyY2Ugcm9vdCBpcyBhIHByZWZpeCBvZiB0aGVcbiAgICAvLyBzb3VyY2UgKHZhbGlkLCBidXQgd2h5Pz8pLiBTZWUgZ2l0aHViIGlzc3VlICMxOTkgYW5kIGJ1Z3ppbC5sYS8xMTg4OTgyLlxuICAgIC5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIHNvdXJjZVJvb3QgJiYgdXRpbC5pc0Fic29sdXRlKHNvdXJjZVJvb3QpICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2UpXG4gICAgICAgID8gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2UpXG4gICAgICAgIDogc291cmNlO1xuICAgIH0pO1xuXG4gIC8vIFBhc3MgYHRydWVgIGJlbG93IHRvIGFsbG93IGR1cGxpY2F0ZSBuYW1lcyBhbmQgc291cmNlcy4gV2hpbGUgc291cmNlIG1hcHNcbiAgLy8gYXJlIGludGVuZGVkIHRvIGJlIGNvbXByZXNzZWQgYW5kIGRlZHVwbGljYXRlZCwgdGhlIFR5cGVTY3JpcHQgY29tcGlsZXJcbiAgLy8gc29tZXRpbWVzIGdlbmVyYXRlcyBzb3VyY2UgbWFwcyB3aXRoIGR1cGxpY2F0ZXMgaW4gdGhlbS4gU2VlIEdpdGh1YiBpc3N1ZVxuICAvLyAjNzIgYW5kIGJ1Z3ppbC5sYS84ODk0OTIuXG4gIHRoaXMuX25hbWVzID0gQXJyYXlTZXQuZnJvbUFycmF5KG5hbWVzLm1hcChTdHJpbmcpLCB0cnVlKTtcbiAgdGhpcy5fc291cmNlcyA9IEFycmF5U2V0LmZyb21BcnJheShzb3VyY2VzLCB0cnVlKTtcblxuICB0aGlzLnNvdXJjZVJvb3QgPSBzb3VyY2VSb290O1xuICB0aGlzLnNvdXJjZXNDb250ZW50ID0gc291cmNlc0NvbnRlbnQ7XG4gIHRoaXMuX21hcHBpbmdzID0gbWFwcGluZ3M7XG4gIHRoaXMuZmlsZSA9IGZpbGU7XG59XG5cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3VtZXIgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBDcmVhdGUgYSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGZyb20gYSBTb3VyY2VNYXBHZW5lcmF0b3IuXG4gKlxuICogQHBhcmFtIFNvdXJjZU1hcEdlbmVyYXRvciBhU291cmNlTWFwXG4gKiAgICAgICAgVGhlIHNvdXJjZSBtYXAgdGhhdCB3aWxsIGJlIGNvbnN1bWVkLlxuICogQHJldHVybnMgQmFzaWNTb3VyY2VNYXBDb25zdW1lclxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9mcm9tU291cmNlTWFwKGFTb3VyY2VNYXApIHtcbiAgICB2YXIgc21jID0gT2JqZWN0LmNyZWF0ZShCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5cbiAgICB2YXIgbmFtZXMgPSBzbWMuX25hbWVzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX25hbWVzLnRvQXJyYXkoKSwgdHJ1ZSk7XG4gICAgdmFyIHNvdXJjZXMgPSBzbWMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fc291cmNlcy50b0FycmF5KCksIHRydWUpO1xuICAgIHNtYy5zb3VyY2VSb290ID0gYVNvdXJjZU1hcC5fc291cmNlUm9vdDtcbiAgICBzbWMuc291cmNlc0NvbnRlbnQgPSBhU291cmNlTWFwLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KHNtYy5fc291cmNlcy50b0FycmF5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWMuc291cmNlUm9vdCk7XG4gICAgc21jLmZpbGUgPSBhU291cmNlTWFwLl9maWxlO1xuXG4gICAgLy8gQmVjYXVzZSB3ZSBhcmUgbW9kaWZ5aW5nIHRoZSBlbnRyaWVzIChieSBjb252ZXJ0aW5nIHN0cmluZyBzb3VyY2VzIGFuZFxuICAgIC8vIG5hbWVzIHRvIGluZGljZXMgaW50byB0aGUgc291cmNlcyBhbmQgbmFtZXMgQXJyYXlTZXRzKSwgd2UgaGF2ZSB0byBtYWtlXG4gICAgLy8gYSBjb3B5IG9mIHRoZSBlbnRyeSBvciBlbHNlIGJhZCB0aGluZ3MgaGFwcGVuLiBTaGFyZWQgbXV0YWJsZSBzdGF0ZVxuICAgIC8vIHN0cmlrZXMgYWdhaW4hIFNlZSBnaXRodWIgaXNzdWUgIzE5MS5cblxuICAgIHZhciBnZW5lcmF0ZWRNYXBwaW5ncyA9IGFTb3VyY2VNYXAuX21hcHBpbmdzLnRvQXJyYXkoKS5zbGljZSgpO1xuICAgIHZhciBkZXN0R2VuZXJhdGVkTWFwcGluZ3MgPSBzbWMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBkZXN0T3JpZ2luYWxNYXBwaW5ncyA9IHNtYy5fX29yaWdpbmFsTWFwcGluZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNyY01hcHBpbmcgPSBnZW5lcmF0ZWRNYXBwaW5nc1tpXTtcbiAgICAgIHZhciBkZXN0TWFwcGluZyA9IG5ldyBNYXBwaW5nO1xuICAgICAgZGVzdE1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9IHNyY01hcHBpbmcuZ2VuZXJhdGVkTGluZTtcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHNyY01hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICBpZiAoc3JjTWFwcGluZy5zb3VyY2UpIHtcbiAgICAgICAgZGVzdE1hcHBpbmcuc291cmNlID0gc291cmNlcy5pbmRleE9mKHNyY01hcHBpbmcuc291cmNlKTtcbiAgICAgICAgZGVzdE1hcHBpbmcub3JpZ2luYWxMaW5lID0gc3JjTWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gc3JjTWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICBpZiAoc3JjTWFwcGluZy5uYW1lKSB7XG4gICAgICAgICAgZGVzdE1hcHBpbmcubmFtZSA9IG5hbWVzLmluZGV4T2Yoc3JjTWFwcGluZy5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlc3RPcmlnaW5hbE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgICAgfVxuXG4gICAgICBkZXN0R2VuZXJhdGVkTWFwcGluZ3MucHVzaChkZXN0TWFwcGluZyk7XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KHNtYy5fX29yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuXG4gICAgcmV0dXJuIHNtYztcbiAgfTtcblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBvcmlnaW5hbCBzb3VyY2VzLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc291cmNlcy50b0FycmF5KCkubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VSb290ICE9IG51bGwgPyB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzKSA6IHM7XG4gICAgfSwgdGhpcyk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFByb3ZpZGUgdGhlIEpJVCB3aXRoIGEgbmljZSBzaGFwZSAvIGhpZGRlbiBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gTWFwcGluZygpIHtcbiAgdGhpcy5nZW5lcmF0ZWRMaW5lID0gMDtcbiAgdGhpcy5nZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgdGhpcy5vcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gIHRoaXMubmFtZSA9IG51bGw7XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB2YXIgZ2VuZXJhdGVkTGluZSA9IDE7XG4gICAgdmFyIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbExpbmUgPSAwO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNTb3VyY2UgPSAwO1xuICAgIHZhciBwcmV2aW91c05hbWUgPSAwO1xuICAgIHZhciBsZW5ndGggPSBhU3RyLmxlbmd0aDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjYWNoZWRTZWdtZW50cyA9IHt9O1xuICAgIHZhciB0ZW1wID0ge307XG4gICAgdmFyIG9yaWdpbmFsTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgbWFwcGluZywgc3RyLCBzZWdtZW50LCBlbmQsIHZhbHVlO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnOycpIHtcbiAgICAgICAgZ2VuZXJhdGVkTGluZSsrO1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChhU3RyLmNoYXJBdChpbmRleCkgPT09ICcsJykge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG1hcHBpbmcgPSBuZXcgTWFwcGluZygpO1xuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBnZW5lcmF0ZWRMaW5lO1xuXG4gICAgICAgIC8vIEJlY2F1c2UgZWFjaCBvZmZzZXQgaXMgZW5jb2RlZCByZWxhdGl2ZSB0byB0aGUgcHJldmlvdXMgb25lLFxuICAgICAgICAvLyBtYW55IHNlZ21lbnRzIG9mdGVuIGhhdmUgdGhlIHNhbWUgZW5jb2RpbmcuIFdlIGNhbiBleHBsb2l0IHRoaXNcbiAgICAgICAgLy8gZmFjdCBieSBjYWNoaW5nIHRoZSBwYXJzZWQgdmFyaWFibGUgbGVuZ3RoIGZpZWxkcyBvZiBlYWNoIHNlZ21lbnQsXG4gICAgICAgIC8vIGFsbG93aW5nIHVzIHRvIGF2b2lkIGEgc2Vjb25kIHBhcnNlIGlmIHdlIGVuY291bnRlciB0aGUgc2FtZVxuICAgICAgICAvLyBzZWdtZW50IGFnYWluLlxuICAgICAgICBmb3IgKGVuZCA9IGluZGV4OyBlbmQgPCBsZW5ndGg7IGVuZCsrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgZW5kKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0ciA9IGFTdHIuc2xpY2UoaW5kZXgsIGVuZCk7XG5cbiAgICAgICAgc2VnbWVudCA9IGNhY2hlZFNlZ21lbnRzW3N0cl07XG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgaW5kZXggKz0gc3RyLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWdtZW50ID0gW107XG4gICAgICAgICAgd2hpbGUgKGluZGV4IDwgZW5kKSB7XG4gICAgICAgICAgICBiYXNlNjRWTFEuZGVjb2RlKGFTdHIsIGluZGV4LCB0ZW1wKTtcbiAgICAgICAgICAgIHZhbHVlID0gdGVtcC52YWx1ZTtcbiAgICAgICAgICAgIGluZGV4ID0gdGVtcC5yZXN0O1xuICAgICAgICAgICAgc2VnbWVudC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UsIGJ1dCBubyBsaW5lIGFuZCBjb2x1bW4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UgYW5kIGxpbmUsIGJ1dCBubyBjb2x1bW4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYWNoZWRTZWdtZW50c1tzdHJdID0gc2VnbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdlbmVyYXRlZCBjb2x1bW4uXG4gICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uID0gcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gKyBzZWdtZW50WzBdO1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAvLyBPcmlnaW5hbCBzb3VyY2UuXG4gICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSBwcmV2aW91c1NvdXJjZSArIHNlZ21lbnRbMV07XG4gICAgICAgICAgcHJldmlvdXNTb3VyY2UgKz0gc2VnbWVudFsxXTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGxpbmUuXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPSBwcmV2aW91c09yaWdpbmFsTGluZSArIHNlZ21lbnRbMl07XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZTtcbiAgICAgICAgICAvLyBMaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWRcbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSArPSAxO1xuXG4gICAgICAgICAgLy8gT3JpZ2luYWwgY29sdW1uLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBwcmV2aW91c09yaWdpbmFsQ29sdW1uICsgc2VnbWVudFszXTtcbiAgICAgICAgICBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA+IDQpIHtcbiAgICAgICAgICAgIC8vIE9yaWdpbmFsIG5hbWUuXG4gICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBwcmV2aW91c05hbWUgKyBzZWdtZW50WzRdO1xuICAgICAgICAgICAgcHJldmlvdXNOYW1lICs9IHNlZ21lbnRbNF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZ2VuZXJhdGVkTWFwcGluZ3MucHVzaChtYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvcmlnaW5hbE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBxdWlja1NvcnQoZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IGdlbmVyYXRlZE1hcHBpbmdzO1xuXG4gICAgcXVpY2tTb3J0KG9yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gb3JpZ2luYWxNYXBwaW5ncztcbiAgfTtcblxuLyoqXG4gKiBGaW5kIHRoZSBtYXBwaW5nIHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBoeXBvdGhldGljYWwgXCJuZWVkbGVcIiBtYXBwaW5nIHRoYXRcbiAqIHdlIGFyZSBzZWFyY2hpbmcgZm9yIGluIHRoZSBnaXZlbiBcImhheXN0YWNrXCIgb2YgbWFwcGluZ3MuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2ZpbmRNYXBwaW5nKGFOZWVkbGUsIGFNYXBwaW5ncywgYUxpbmVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ29sdW1uTmFtZSwgYUNvbXBhcmF0b3IsIGFCaWFzKSB7XG4gICAgLy8gVG8gcmV0dXJuIHRoZSBwb3NpdGlvbiB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgd2UgbXVzdCBmaXJzdCBmaW5kIHRoZVxuICAgIC8vIG1hcHBpbmcgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgdGhlbiByZXR1cm4gdGhlIG9wcG9zaXRlIHBvc2l0aW9uIGl0XG4gICAgLy8gcG9pbnRzIHRvLiBCZWNhdXNlIHRoZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB3ZSBjYW4gdXNlIGJpbmFyeSBzZWFyY2ggdG9cbiAgICAvLyBmaW5kIHRoZSBiZXN0IG1hcHBpbmcuXG5cbiAgICBpZiAoYU5lZWRsZVthTGluZU5hbWVdIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbmUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMSwgZ290ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhTmVlZGxlW2FMaW5lTmFtZV0pO1xuICAgIH1cbiAgICBpZiAoYU5lZWRsZVthQ29sdW1uTmFtZV0gPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb2x1bW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCwgZ290ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhTmVlZGxlW2FDb2x1bW5OYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJpbmFyeVNlYXJjaC5zZWFyY2goYU5lZWRsZSwgYU1hcHBpbmdzLCBhQ29tcGFyYXRvciwgYUJpYXMpO1xuICB9O1xuXG4vKipcbiAqIENvbXB1dGUgdGhlIGxhc3QgY29sdW1uIGZvciBlYWNoIGdlbmVyYXRlZCBtYXBwaW5nLiBUaGUgbGFzdCBjb2x1bW4gaXNcbiAqIGluY2x1c2l2ZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29tcHV0ZUNvbHVtblNwYW5zID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfY29tcHV0ZUNvbHVtblNwYW5zKCkge1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICAvLyBNYXBwaW5ncyBkbyBub3QgY29udGFpbiBhIGZpZWxkIGZvciB0aGUgbGFzdCBnZW5lcmF0ZWQgY29sdW1udC4gV2VcbiAgICAgIC8vIGNhbiBjb21lIHVwIHdpdGggYW4gb3B0aW1pc3RpYyBlc3RpbWF0ZSwgaG93ZXZlciwgYnkgYXNzdW1pbmcgdGhhdFxuICAgICAgLy8gbWFwcGluZ3MgYXJlIGNvbnRpZ3VvdXMgKGkuZS4gZ2l2ZW4gdHdvIGNvbnNlY3V0aXZlIG1hcHBpbmdzLCB0aGVcbiAgICAgIC8vIGZpcnN0IG1hcHBpbmcgZW5kcyB3aGVyZSB0aGUgc2Vjb25kIG9uZSBzdGFydHMpLlxuICAgICAgaWYgKGluZGV4ICsgMSA8IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aCkge1xuICAgICAgICB2YXIgbmV4dE1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleCArIDFdO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5leHRNYXBwaW5nLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5nLmxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBsYXN0IG1hcHBpbmcgZm9yIGVhY2ggbGluZSBzcGFucyB0aGUgZW50aXJlIGxpbmUuXG4gICAgICBtYXBwaW5nLmxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBJbmZpbml0eTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkXG4gKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBiaWFzOiBFaXRoZXIgJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdTb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgb3IgbnVsbC5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9vcmlnaW5hbFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIGdlbmVyYXRlZExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgZ2VuZXJhdGVkQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MsXG4gICAgICBcImdlbmVyYXRlZExpbmVcIixcbiAgICAgIFwiZ2VuZXJhdGVkQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9PT0gbmVlZGxlLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdzb3VyY2UnLCBudWxsKTtcbiAgICAgICAgaWYgKHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuYXQoc291cmNlKTtcbiAgICAgICAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbih0aGlzLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBuYW1lID0gdXRpbC5nZXRBcmcobWFwcGluZywgJ25hbWUnLCBudWxsKTtcbiAgICAgICAgaWYgKG5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICBuYW1lID0gdGhpcy5fbmFtZXMuYXQobmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnb3JpZ2luYWxMaW5lJywgbnVsbCksXG4gICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnb3JpZ2luYWxDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGwsXG4gICAgICBuYW1lOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHRoZSBzb3VyY2UgY29udGVudCBmb3IgZXZlcnkgc291cmNlIGluIHRoZSBzb3VyY2VcbiAqIG1hcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXJfaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKSB7XG4gICAgaWYgKCF0aGlzLnNvdXJjZXNDb250ZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50Lmxlbmd0aCA+PSB0aGlzLl9zb3VyY2VzLnNpemUoKSAmJlxuICAgICAgIXRoaXMuc291cmNlc0NvbnRlbnQuc29tZShmdW5jdGlvbiAoc2MpIHsgcmV0dXJuIHNjID09IG51bGw7IH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICogb3JpZ2luYWwgc291cmNlIGZpbGUuIFJldHVybnMgbnVsbCBpZiBubyBvcmlnaW5hbCBzb3VyY2UgY29udGVudCBpc1xuICogYXZhaWxhYmxlLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfc291cmNlQ29udGVudEZvcihhU291cmNlLCBudWxsT25NaXNzaW5nKSB7XG4gICAgaWYgKCF0aGlzLnNvdXJjZXNDb250ZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIGFTb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgYVNvdXJjZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NvdXJjZXMuaGFzKGFTb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoYVNvdXJjZSldO1xuICAgIH1cblxuICAgIHZhciB1cmw7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsXG4gICAgICAgICYmICh1cmwgPSB1dGlsLnVybFBhcnNlKHRoaXMuc291cmNlUm9vdCkpKSB7XG4gICAgICAvLyBYWFg6IGZpbGU6Ly8gVVJJcyBhbmQgYWJzb2x1dGUgcGF0aHMgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGZvclxuICAgICAgLy8gbWFueSB1c2Vycy4gV2UgY2FuIGhlbHAgdGhlbSBvdXQgd2hlbiB0aGV5IGV4cGVjdCBmaWxlOi8vIFVSSXMgdG9cbiAgICAgIC8vIGJlaGF2ZSBsaWtlIGl0IHdvdWxkIGlmIHRoZXkgd2VyZSBydW5uaW5nIGEgbG9jYWwgSFRUUCBzZXJ2ZXIuIFNlZVxuICAgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg1NTk3LlxuICAgICAgdmFyIGZpbGVVcmlBYnNQYXRoID0gYVNvdXJjZS5yZXBsYWNlKC9eZmlsZTpcXC9cXC8vLCBcIlwiKTtcbiAgICAgIGlmICh1cmwuc2NoZW1lID09IFwiZmlsZVwiXG4gICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoZmlsZVVyaUFic1BhdGgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihmaWxlVXJpQWJzUGF0aCldXG4gICAgICB9XG5cbiAgICAgIGlmICgoIXVybC5wYXRoIHx8IHVybC5wYXRoID09IFwiL1wiKVxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKFwiL1wiICsgYVNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKFwiL1wiICsgYVNvdXJjZSldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCByZWN1cnNpdmVseSBmcm9tXG4gICAgLy8gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yLiBJbiB0aGF0IGNhc2UsIHdlXG4gICAgLy8gZG9uJ3Qgd2FudCB0byB0aHJvdyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBzb3VyY2UgLSB3ZSBqdXN0IHdhbnQgdG9cbiAgICAvLyByZXR1cm4gbnVsbCwgc28gd2UgcHJvdmlkZSBhIGZsYWcgdG8gZXhpdCBncmFjZWZ1bGx5LlxuICAgIGlmIChudWxsT25NaXNzaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKTtcbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgICAgfTtcbiAgICB9XG4gICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBvcmlnaW5hbExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICBuZWVkbGUsXG4gICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgIFwib3JpZ2luYWxDb2x1bW5cIixcbiAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsXG4gICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gbmVlZGxlLnNvdXJjZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgIH07XG4gIH07XG5cbmV4cG9ydHMuQmFzaWNTb3VyY2VNYXBDb25zdW1lciA9IEJhc2ljU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQW4gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaFxuICogd2UgY2FuIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbi4gSXQgZGlmZmVycyBmcm9tIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgaW5cbiAqIHRoYXQgaXQgdGFrZXMgXCJpbmRleGVkXCIgc291cmNlIG1hcHMgKGkuZS4gb25lcyB3aXRoIGEgXCJzZWN0aW9uc1wiIGZpZWxkKSBhc1xuICogaW5wdXQuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIGEgcmF3IHNvdXJjZSBtYXAgKGVpdGhlciBhcyBhIEpTT04gc3RyaW5nLCBvciBhbHJlYWR5XG4gKiBwYXJzZWQgdG8gYW4gb2JqZWN0KS4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjIGZvciBpbmRleGVkIHNvdXJjZSBtYXBzLCB0aGV5XG4gKiBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gKiAgIC0gc2VjdGlvbnM6IEEgbGlzdCBvZiBzZWN0aW9uIGRlZmluaXRpb25zLlxuICpcbiAqIEVhY2ggdmFsdWUgdW5kZXIgdGhlIFwic2VjdGlvbnNcIiBmaWVsZCBoYXMgdHdvIGZpZWxkczpcbiAqICAgLSBvZmZzZXQ6IFRoZSBvZmZzZXQgaW50byB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkIGF0IHdoaWNoIHRoaXMgc2VjdGlvblxuICogICAgICAgYmVnaW5zIHRvIGFwcGx5LCBkZWZpbmVkIGFzIGFuIG9iamVjdCB3aXRoIGEgXCJsaW5lXCIgYW5kIFwiY29sdW1uXCJcbiAqICAgICAgIGZpZWxkLlxuICogICAtIG1hcDogQSBzb3VyY2UgbWFwIGRlZmluaXRpb24uIFRoaXMgc291cmNlIG1hcCBjb3VsZCBhbHNvIGJlIGluZGV4ZWQsXG4gKiAgICAgICBidXQgZG9lc24ndCBoYXZlIHRvIGJlLlxuICpcbiAqIEluc3RlYWQgb2YgdGhlIFwibWFwXCIgZmllbGQsIGl0J3MgYWxzbyBwb3NzaWJsZSB0byBoYXZlIGEgXCJ1cmxcIiBmaWVsZFxuICogc3BlY2lmeWluZyBhIFVSTCB0byByZXRyaWV2ZSBhIHNvdXJjZSBtYXAgZnJvbSwgYnV0IHRoYXQncyBjdXJyZW50bHlcbiAqIHVuc3VwcG9ydGVkLlxuICpcbiAqIEhlcmUncyBhbiBleGFtcGxlIHNvdXJjZSBtYXAsIHRha2VuIGZyb20gdGhlIHNvdXJjZSBtYXAgc3BlY1swXSwgYnV0XG4gKiBtb2RpZmllZCB0byBvbWl0IGEgc2VjdGlvbiB3aGljaCB1c2VzIHRoZSBcInVybFwiIGZpZWxkLlxuICpcbiAqICB7XG4gKiAgICB2ZXJzaW9uIDogMyxcbiAqICAgIGZpbGU6IFwiYXBwLmpzXCIsXG4gKiAgICBzZWN0aW9uczogW3tcbiAqICAgICAgb2Zmc2V0OiB7bGluZToxMDAsIGNvbHVtbjoxMH0sXG4gKiAgICAgIG1hcDoge1xuICogICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgIGZpbGU6IFwic2VjdGlvbi5qc1wiLFxuICogICAgICAgIHNvdXJjZXM6IFtcImZvby5qc1wiLCBcImJhci5qc1wiXSxcbiAqICAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAqICAgICAgICBtYXBwaW5nczogXCJBQUFBLEU7O0FCQ0RFO1wiXG4gKiAgICAgIH1cbiAqICAgIH1dLFxuICogIH1cbiAqXG4gKiBbMF06IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVUxUkdBZWhRd1J5cFVUb3ZGMUtSbHBpT0Z6ZTBiLV8yZ2M2ZkFIMEtZMGsvZWRpdCNoZWFkaW5nPWguNTM1ZXMzeGVwcmd0XG4gKi9cbmZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgfVxuXG4gIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICB2YXIgc2VjdGlvbnMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzZWN0aW9ucycpO1xuXG4gIGlmICh2ZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgfVxuXG4gIHRoaXMuX3NvdXJjZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcblxuICB2YXIgbGFzdE9mZnNldCA9IHtcbiAgICBsaW5lOiAtMSxcbiAgICBjb2x1bW46IDBcbiAgfTtcbiAgdGhpcy5fc2VjdGlvbnMgPSBzZWN0aW9ucy5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICBpZiAocy51cmwpIHtcbiAgICAgIC8vIFRoZSB1cmwgZmllbGQgd2lsbCByZXF1aXJlIHN1cHBvcnQgZm9yIGFzeW5jaHJvbmljaXR5LlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzE2XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cHBvcnQgZm9yIHVybCBmaWVsZCBpbiBzZWN0aW9ucyBub3QgaW1wbGVtZW50ZWQuJyk7XG4gICAgfVxuICAgIHZhciBvZmZzZXQgPSB1dGlsLmdldEFyZyhzLCAnb2Zmc2V0Jyk7XG4gICAgdmFyIG9mZnNldExpbmUgPSB1dGlsLmdldEFyZyhvZmZzZXQsICdsaW5lJyk7XG4gICAgdmFyIG9mZnNldENvbHVtbiA9IHV0aWwuZ2V0QXJnKG9mZnNldCwgJ2NvbHVtbicpO1xuXG4gICAgaWYgKG9mZnNldExpbmUgPCBsYXN0T2Zmc2V0LmxpbmUgfHxcbiAgICAgICAgKG9mZnNldExpbmUgPT09IGxhc3RPZmZzZXQubGluZSAmJiBvZmZzZXRDb2x1bW4gPCBsYXN0T2Zmc2V0LmNvbHVtbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2VjdGlvbiBvZmZzZXRzIG11c3QgYmUgb3JkZXJlZCBhbmQgbm9uLW92ZXJsYXBwaW5nLicpO1xuICAgIH1cbiAgICBsYXN0T2Zmc2V0ID0gb2Zmc2V0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdlbmVyYXRlZE9mZnNldDoge1xuICAgICAgICAvLyBUaGUgb2Zmc2V0IGZpZWxkcyBhcmUgMC1iYXNlZCwgYnV0IHdlIHVzZSAxLWJhc2VkIGluZGljZXMgd2hlblxuICAgICAgICAvLyBlbmNvZGluZy9kZWNvZGluZyBmcm9tIFZMUS5cbiAgICAgICAgZ2VuZXJhdGVkTGluZTogb2Zmc2V0TGluZSArIDEsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogb2Zmc2V0Q29sdW1uICsgMVxuICAgICAgfSxcbiAgICAgIGNvbnN1bWVyOiBuZXcgU291cmNlTWFwQ29uc3VtZXIodXRpbC5nZXRBcmcocywgJ21hcCcpKVxuICAgIH1cbiAgfSk7XG59XG5cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBvcmlnaW5hbCBzb3VyY2VzLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ3NvdXJjZXMnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl9zZWN0aW9uc1tpXS5jb25zdW1lci5zb3VyY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHNvdXJjZXMucHVzaCh0aGlzLl9zZWN0aW9uc1tpXS5jb25zdW1lci5zb3VyY2VzW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZXM7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICAvLyBGaW5kIHRoZSBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbiB3ZSdyZSB0cnlpbmcgdG8gbWFwXG4gICAgLy8gdG8gYW4gb3JpZ2luYWwgcG9zaXRpb24uXG4gICAgdmFyIHNlY3Rpb25JbmRleCA9IGJpbmFyeVNlYXJjaC5zZWFyY2gobmVlZGxlLCB0aGlzLl9zZWN0aW9ucyxcbiAgICAgIGZ1bmN0aW9uKG5lZWRsZSwgc2VjdGlvbikge1xuICAgICAgICB2YXIgY21wID0gbmVlZGxlLmdlbmVyYXRlZExpbmUgLSBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lO1xuICAgICAgICBpZiAoY21wKSB7XG4gICAgICAgICAgcmV0dXJuIGNtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAobmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgICAgICAgICAgc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgIH0pO1xuICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcblxuICAgIGlmICghc2VjdGlvbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBudWxsLFxuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIG5hbWU6IG51bGxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlY3Rpb24uY29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICBsaW5lOiBuZWVkbGUuZ2VuZXJhdGVkTGluZSAtXG4gICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICBjb2x1bW46IG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbmVlZGxlLmdlbmVyYXRlZExpbmVcbiAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgOiAwKSxcbiAgICAgIGJpYXM6IGFBcmdzLmJpYXNcbiAgICB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHRoZSBzb3VyY2UgY29udGVudCBmb3IgZXZlcnkgc291cmNlIGluIHRoZSBzb3VyY2VcbiAqIG1hcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWN0aW9ucy5ldmVyeShmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHMuY29uc3VtZXIuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKTtcbiAgICB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG5cbiAgICAgIHZhciBjb250ZW50ID0gc2VjdGlvbi5jb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIHRydWUpO1xuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChudWxsT25NaXNzaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICAvLyBPbmx5IGNvbnNpZGVyIHRoaXMgc2VjdGlvbiBpZiB0aGUgcmVxdWVzdGVkIHNvdXJjZSBpcyBpbiB0aGUgbGlzdCBvZlxuICAgICAgLy8gc291cmNlcyBvZiB0aGUgY29uc3VtZXIuXG4gICAgICBpZiAoc2VjdGlvbi5jb25zdW1lci5zb3VyY2VzLmluZGV4T2YodXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKSkgPT09IC0xKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIGdlbmVyYXRlZFBvc2l0aW9uID0gc2VjdGlvbi5jb25zdW1lci5nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncyk7XG4gICAgICBpZiAoZ2VuZXJhdGVkUG9zaXRpb24pIHtcbiAgICAgICAgdmFyIHJldCA9IHtcbiAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWRQb3NpdGlvbi5jb2x1bW4gK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IGdlbmVyYXRlZFBvc2l0aW9uLmxpbmVcbiAgICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgICA6IDApXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuICAgICAgdmFyIHNlY3Rpb25NYXBwaW5ncyA9IHNlY3Rpb24uY29uc3VtZXIuX2dlbmVyYXRlZE1hcHBpbmdzO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWN0aW9uTWFwcGluZ3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIG1hcHBpbmcgPSBzZWN0aW9uTWFwcGluZ3Nbal07XG5cbiAgICAgICAgdmFyIHNvdXJjZSA9IHNlY3Rpb24uY29uc3VtZXIuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBpZiAoc2VjdGlvbi5jb25zdW1lci5zb3VyY2VSb290ICE9PSBudWxsKSB7XG4gICAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zb3VyY2VzLmFkZChzb3VyY2UpO1xuICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblxuICAgICAgICB2YXIgbmFtZSA9IHNlY3Rpb24uY29uc3VtZXIuX25hbWVzLmF0KG1hcHBpbmcubmFtZSk7XG4gICAgICAgIHRoaXMuX25hbWVzLmFkZChuYW1lKTtcbiAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG5cbiAgICAgICAgLy8gVGhlIG1hcHBpbmdzIGNvbWluZyBmcm9tIHRoZSBjb25zdW1lciBmb3IgdGhlIHNlY3Rpb24gaGF2ZVxuICAgICAgICAvLyBnZW5lcmF0ZWQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgc2VjdGlvbiwgc28gd2VcbiAgICAgICAgLy8gbmVlZCB0byBvZmZzZXQgdGhlbSB0byBiZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbmNhdGVuYXRlZFxuICAgICAgICAvLyBnZW5lcmF0ZWQgZmlsZS5cbiAgICAgICAgdmFyIGFkanVzdGVkTWFwcGluZyA9IHtcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUgK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBtYXBwaW5nLmdlbmVyYXRlZExpbmVcbiAgICAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgICAgOiAwKSxcbiAgICAgICAgICBvcmlnaW5hbExpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MucHVzaChhZGp1c3RlZE1hcHBpbmcpO1xuICAgICAgICBpZiAodHlwZW9mIGFkanVzdGVkTWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MucHVzaChhZGp1c3RlZE1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCk7XG4gICAgcXVpY2tTb3J0KHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgfTtcblxuZXhwb3J0cy5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIgPSBJbmRleGVkU291cmNlTWFwQ29uc3VtZXI7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8qKlxuICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2V0dGluZyB2YWx1ZXMgZnJvbSBwYXJhbWV0ZXIvb3B0aW9uc1xuICogb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gYXJncyBUaGUgb2JqZWN0IHdlIGFyZSBleHRyYWN0aW5nIHZhbHVlcyBmcm9tXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgd2UgYXJlIGdldHRpbmcuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIEFuIG9wdGlvbmFsIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgcHJvcGVydHkgaXMgbWlzc2luZ1xuICogZnJvbSB0aGUgb2JqZWN0LiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBhblxuICogZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gKi9cbmZ1bmN0aW9uIGdldEFyZyhhQXJncywgYU5hbWUsIGFEZWZhdWx0VmFsdWUpIHtcbiAgaWYgKGFOYW1lIGluIGFBcmdzKSB7XG4gICAgcmV0dXJuIGFBcmdzW2FOYW1lXTtcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIGFEZWZhdWx0VmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhTmFtZSArICdcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LicpO1xuICB9XG59XG5leHBvcnRzLmdldEFyZyA9IGdldEFyZztcblxudmFyIHVybFJlZ2V4cCA9IC9eKD86KFtcXHcrXFwtLl0rKTopP1xcL1xcLyg/OihcXHcrOlxcdyspQCk/KFtcXHcuXSopKD86OihcXGQrKSk/KFxcUyopJC87XG52YXIgZGF0YVVybFJlZ2V4cCA9IC9eZGF0YTouK1xcLC4rJC87XG5cbmZ1bmN0aW9uIHVybFBhcnNlKGFVcmwpIHtcbiAgdmFyIG1hdGNoID0gYVVybC5tYXRjaCh1cmxSZWdleHApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY2hlbWU6IG1hdGNoWzFdLFxuICAgIGF1dGg6IG1hdGNoWzJdLFxuICAgIGhvc3Q6IG1hdGNoWzNdLFxuICAgIHBvcnQ6IG1hdGNoWzRdLFxuICAgIHBhdGg6IG1hdGNoWzVdXG4gIH07XG59XG5leHBvcnRzLnVybFBhcnNlID0gdXJsUGFyc2U7XG5cbmZ1bmN0aW9uIHVybEdlbmVyYXRlKGFQYXJzZWRVcmwpIHtcbiAgdmFyIHVybCA9ICcnO1xuICBpZiAoYVBhcnNlZFVybC5zY2hlbWUpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5zY2hlbWUgKyAnOic7XG4gIH1cbiAgdXJsICs9ICcvLyc7XG4gIGlmIChhUGFyc2VkVXJsLmF1dGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5hdXRoICsgJ0AnO1xuICB9XG4gIGlmIChhUGFyc2VkVXJsLmhvc3QpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5ob3N0O1xuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBvcnQpIHtcbiAgICB1cmwgKz0gXCI6XCIgKyBhUGFyc2VkVXJsLnBvcnRcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wYXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwucGF0aDtcbiAgfVxuICByZXR1cm4gdXJsO1xufVxuZXhwb3J0cy51cmxHZW5lcmF0ZSA9IHVybEdlbmVyYXRlO1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBwYXRoLCBvciB0aGUgcGF0aCBwb3J0aW9uIG9mIGEgVVJMOlxuICpcbiAqIC0gUmVwbGFjZXMgY29uc2VjdXRpdmUgc2xhc2hlcyB3aXRoIG9uZSBzbGFzaC5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnLicgcGFydHMuXG4gKiAtIFJlbW92ZXMgdW5uZWNlc3NhcnkgJzxkaXI+Ly4uJyBwYXJ0cy5cbiAqXG4gKiBCYXNlZCBvbiBjb2RlIGluIHRoZSBOb2RlLmpzICdwYXRoJyBjb3JlIG1vZHVsZS5cbiAqXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgdXJsIHRvIG5vcm1hbGl6ZS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplKGFQYXRoKSB7XG4gIHZhciBwYXRoID0gYVBhdGg7XG4gIHZhciB1cmwgPSB1cmxQYXJzZShhUGF0aCk7XG4gIGlmICh1cmwpIHtcbiAgICBpZiAoIXVybC5wYXRoKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuICAgIHBhdGggPSB1cmwucGF0aDtcbiAgfVxuICB2YXIgaXNBYnNvbHV0ZSA9IGV4cG9ydHMuaXNBYnNvbHV0ZShwYXRoKTtcblxuICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KC9cXC8rLyk7XG4gIGZvciAodmFyIHBhcnQsIHVwID0gMCwgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgcGFydCA9IHBhcnRzW2ldO1xuICAgIGlmIChwYXJ0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCA+IDApIHtcbiAgICAgIGlmIChwYXJ0ID09PSAnJykge1xuICAgICAgICAvLyBUaGUgZmlyc3QgcGFydCBpcyBibGFuayBpZiB0aGUgcGF0aCBpcyBhYnNvbHV0ZS4gVHJ5aW5nIHRvIGdvXG4gICAgICAgIC8vIGFib3ZlIHRoZSByb290IGlzIGEgbm8tb3AuIFRoZXJlZm9yZSB3ZSBjYW4gcmVtb3ZlIGFsbCAnLi4nIHBhcnRzXG4gICAgICAgIC8vIGRpcmVjdGx5IGFmdGVyIHRoZSByb290LlxuICAgICAgICBwYXJ0cy5zcGxpY2UoaSArIDEsIHVwKTtcbiAgICAgICAgdXAgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFydHMuc3BsaWNlKGksIDIpO1xuICAgICAgICB1cC0tO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwYXRoID0gcGFydHMuam9pbignLycpO1xuXG4gIGlmIChwYXRoID09PSAnJykge1xuICAgIHBhdGggPSBpc0Fic29sdXRlID8gJy8nIDogJy4nO1xuICB9XG5cbiAgaWYgKHVybCkge1xuICAgIHVybC5wYXRoID0gcGF0aDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUodXJsKTtcbiAgfVxuICByZXR1cm4gcGF0aDtcbn1cbmV4cG9ydHMubm9ybWFsaXplID0gbm9ybWFsaXplO1xuXG4vKipcbiAqIEpvaW5zIHR3byBwYXRocy9VUkxzLlxuICpcbiAqIEBwYXJhbSBhUm9vdCBUaGUgcm9vdCBwYXRoIG9yIFVSTC5cbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciBVUkwgdG8gYmUgam9pbmVkIHdpdGggdGhlIHJvb3QuXG4gKlxuICogLSBJZiBhUGF0aCBpcyBhIFVSTCBvciBhIGRhdGEgVVJJLCBhUGF0aCBpcyByZXR1cm5lZCwgdW5sZXNzIGFQYXRoIGlzIGFcbiAqICAgc2NoZW1lLXJlbGF0aXZlIFVSTDogVGhlbiB0aGUgc2NoZW1lIG9mIGFSb290LCBpZiBhbnksIGlzIHByZXBlbmRlZFxuICogICBmaXJzdC5cbiAqIC0gT3RoZXJ3aXNlIGFQYXRoIGlzIGEgcGF0aC4gSWYgYVJvb3QgaXMgYSBVUkwsIHRoZW4gaXRzIHBhdGggcG9ydGlvblxuICogICBpcyB1cGRhdGVkIHdpdGggdGhlIHJlc3VsdCBhbmQgYVJvb3QgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSB0aGUgcmVzdWx0XG4gKiAgIGlzIHJldHVybmVkLlxuICogICAtIElmIGFQYXRoIGlzIGFic29sdXRlLCB0aGUgcmVzdWx0IGlzIGFQYXRoLlxuICogICAtIE90aGVyd2lzZSB0aGUgdHdvIHBhdGhzIGFyZSBqb2luZWQgd2l0aCBhIHNsYXNoLlxuICogLSBKb2luaW5nIGZvciBleGFtcGxlICdodHRwOi8vJyBhbmQgJ3d3dy5leGFtcGxlLmNvbScgaXMgYWxzbyBzdXBwb3J0ZWQuXG4gKi9cbmZ1bmN0aW9uIGpvaW4oYVJvb3QsIGFQYXRoKSB7XG4gIGlmIChhUm9vdCA9PT0gXCJcIikge1xuICAgIGFSb290ID0gXCIuXCI7XG4gIH1cbiAgaWYgKGFQYXRoID09PSBcIlwiKSB7XG4gICAgYVBhdGggPSBcIi5cIjtcbiAgfVxuICB2YXIgYVBhdGhVcmwgPSB1cmxQYXJzZShhUGF0aCk7XG4gIHZhciBhUm9vdFVybCA9IHVybFBhcnNlKGFSb290KTtcbiAgaWYgKGFSb290VXJsKSB7XG4gICAgYVJvb3QgPSBhUm9vdFVybC5wYXRoIHx8ICcvJztcbiAgfVxuXG4gIC8vIGBqb2luKGZvbywgJy8vd3d3LmV4YW1wbGUub3JnJylgXG4gIGlmIChhUGF0aFVybCAmJiAhYVBhdGhVcmwuc2NoZW1lKSB7XG4gICAgaWYgKGFSb290VXJsKSB7XG4gICAgICBhUGF0aFVybC5zY2hlbWUgPSBhUm9vdFVybC5zY2hlbWU7XG4gICAgfVxuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUGF0aFVybCk7XG4gIH1cblxuICBpZiAoYVBhdGhVcmwgfHwgYVBhdGgubWF0Y2goZGF0YVVybFJlZ2V4cCkpIHtcbiAgICByZXR1cm4gYVBhdGg7XG4gIH1cblxuICAvLyBgam9pbignaHR0cDovLycsICd3d3cuZXhhbXBsZS5jb20nKWBcbiAgaWYgKGFSb290VXJsICYmICFhUm9vdFVybC5ob3N0ICYmICFhUm9vdFVybC5wYXRoKSB7XG4gICAgYVJvb3RVcmwuaG9zdCA9IGFQYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cblxuICB2YXIgam9pbmVkID0gYVBhdGguY2hhckF0KDApID09PSAnLydcbiAgICA/IGFQYXRoXG4gICAgOiBub3JtYWxpemUoYVJvb3QucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyBhUGF0aCk7XG5cbiAgaWYgKGFSb290VXJsKSB7XG4gICAgYVJvb3RVcmwucGF0aCA9IGpvaW5lZDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG4gIHJldHVybiBqb2luZWQ7XG59XG5leHBvcnRzLmpvaW4gPSBqb2luO1xuXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbiAoYVBhdGgpIHtcbiAgcmV0dXJuIGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nIHx8ICEhYVBhdGgubWF0Y2godXJsUmVnZXhwKTtcbn07XG5cbi8qKlxuICogTWFrZSBhIHBhdGggcmVsYXRpdmUgdG8gYSBVUkwgb3IgYW5vdGhlciBwYXRoLlxuICpcbiAqIEBwYXJhbSBhUm9vdCBUaGUgcm9vdCBwYXRoIG9yIFVSTC5cbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciBVUkwgdG8gYmUgbWFkZSByZWxhdGl2ZSB0byBhUm9vdC5cbiAqL1xuZnVuY3Rpb24gcmVsYXRpdmUoYVJvb3QsIGFQYXRoKSB7XG4gIGlmIChhUm9vdCA9PT0gXCJcIikge1xuICAgIGFSb290ID0gXCIuXCI7XG4gIH1cblxuICBhUm9vdCA9IGFSb290LnJlcGxhY2UoL1xcLyQvLCAnJyk7XG5cbiAgLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBwYXRoIHRvIGJlIGFib3ZlIHRoZSByb290LiBJbiB0aGlzIGNhc2UsIHNpbXBseVxuICAvLyBjaGVja2luZyB3aGV0aGVyIHRoZSByb290IGlzIGEgcHJlZml4IG9mIHRoZSBwYXRoIHdvbid0IHdvcmsuIEluc3RlYWQsIHdlXG4gIC8vIG5lZWQgdG8gcmVtb3ZlIGNvbXBvbmVudHMgZnJvbSB0aGUgcm9vdCBvbmUgYnkgb25lLCB1bnRpbCBlaXRoZXIgd2UgZmluZFxuICAvLyBhIHByZWZpeCB0aGF0IGZpdHMsIG9yIHdlIHJ1biBvdXQgb2YgY29tcG9uZW50cyB0byByZW1vdmUuXG4gIHZhciBsZXZlbCA9IDA7XG4gIHdoaWxlIChhUGF0aC5pbmRleE9mKGFSb290ICsgJy8nKSAhPT0gMCkge1xuICAgIHZhciBpbmRleCA9IGFSb290Lmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9ubHkgcGFydCBvZiB0aGUgcm9vdCB0aGF0IGlzIGxlZnQgaXMgdGhlIHNjaGVtZSAoaS5lLiBodHRwOi8vLFxuICAgIC8vIGZpbGU6Ly8vLCBldGMuKSwgb25lIG9yIG1vcmUgc2xhc2hlcyAoLyksIG9yIHNpbXBseSBub3RoaW5nIGF0IGFsbCwgd2VcbiAgICAvLyBoYXZlIGV4aGF1c3RlZCBhbGwgY29tcG9uZW50cywgc28gdGhlIHBhdGggaXMgbm90IHJlbGF0aXZlIHRvIHRoZSByb290LlxuICAgIGFSb290ID0gYVJvb3Quc2xpY2UoMCwgaW5kZXgpO1xuICAgIGlmIChhUm9vdC5tYXRjaCgvXihbXlxcL10rOlxcLyk/XFwvKiQvKSkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgICsrbGV2ZWw7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgd2UgYWRkIGEgXCIuLi9cIiBmb3IgZWFjaCBjb21wb25lbnQgd2UgcmVtb3ZlZCBmcm9tIHRoZSByb290LlxuICByZXR1cm4gQXJyYXkobGV2ZWwgKyAxKS5qb2luKFwiLi4vXCIpICsgYVBhdGguc3Vic3RyKGFSb290Lmxlbmd0aCArIDEpO1xufVxuZXhwb3J0cy5yZWxhdGl2ZSA9IHJlbGF0aXZlO1xuXG52YXIgc3VwcG9ydHNOdWxsUHJvdG8gPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuICEoJ19fcHJvdG9fXycgaW4gb2JqKTtcbn0oKSk7XG5cbmZ1bmN0aW9uIGlkZW50aXR5IChzKSB7XG4gIHJldHVybiBzO1xufVxuXG4vKipcbiAqIEJlY2F1c2UgYmVoYXZpb3IgZ29lcyB3YWNreSB3aGVuIHlvdSBzZXQgYF9fcHJvdG9fX2Agb24gb2JqZWN0cywgd2VcbiAqIGhhdmUgdG8gcHJlZml4IGFsbCB0aGUgc3RyaW5ncyBpbiBvdXIgc2V0IHdpdGggYW4gYXJiaXRyYXJ5IGNoYXJhY3Rlci5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9wdWxsLzMxIGFuZFxuICogaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9pc3N1ZXMvMzBcbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuZnVuY3Rpb24gdG9TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiAnJCcgKyBhU3RyO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLnRvU2V0U3RyaW5nID0gc3VwcG9ydHNOdWxsUHJvdG8gPyBpZGVudGl0eSA6IHRvU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBmcm9tU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gYVN0ci5zbGljZSgxKTtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy5mcm9tU2V0U3RyaW5nID0gc3VwcG9ydHNOdWxsUHJvdG8gPyBpZGVudGl0eSA6IGZyb21TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzUHJvdG9TdHJpbmcocykge1xuICBpZiAoIXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgbGVuZ3RoID0gcy5sZW5ndGg7XG5cbiAgaWYgKGxlbmd0aCA8IDkgLyogXCJfX3Byb3RvX19cIi5sZW5ndGggKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocy5jaGFyQ29kZUF0KGxlbmd0aCAtIDEpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMikgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAzKSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDQpICE9PSAxMTYgLyogJ3QnICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNSkgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA2KSAhPT0gMTE0IC8qICdyJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDcpICE9PSAxMTIgLyogJ3AnICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOCkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA5KSAhPT0gOTUgIC8qICdfJyAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSBsZW5ndGggLSAxMDsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAocy5jaGFyQ29kZUF0KGkpICE9PSAzNiAvKiAnJCcgKi8pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdoZXJlIHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgb3JpZ2luYWwgc291cmNlL2xpbmUvY29sdW1uLCBidXQgZGlmZmVyZW50IGdlbmVyYXRlZFxuICogbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGEgbWFwcGluZyB3aXRoIGFcbiAqIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICB2YXIgY21wID0gbWFwcGluZ0Euc291cmNlIC0gbWFwcGluZ0Iuc291cmNlO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsTGluZSAtIG1hcHBpbmdCLm9yaWdpbmFsTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIHJldHVybiBtYXBwaW5nQS5uYW1lIC0gbWFwcGluZ0IubmFtZTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMgPSBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucztcblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggZGVmbGF0ZWQgc291cmNlIGFuZCBuYW1lIGluZGljZXMgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4sIGJ1dCBkaWZmZXJlbnRcbiAqIHNvdXJjZS9uYW1lL29yaWdpbmFsIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhXG4gKiBtYXBwaW5nIHdpdGggYSBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Euc291cmNlIC0gbWFwcGluZ0Iuc291cmNlO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsTGluZSAtIG1hcHBpbmdCLm9yaWdpbmFsTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIHJldHVybiBtYXBwaW5nQS5uYW1lIC0gbWFwcGluZ0IubmFtZTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZDtcblxuZnVuY3Rpb24gc3RyY21wKGFTdHIxLCBhU3RyMikge1xuICBpZiAoYVN0cjEgPT09IGFTdHIyKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoYVN0cjEgPiBhU3RyMikge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBpbmZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgc3RyaW5ncyB3aGVyZVxuICogdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBzdHJjbXAobWFwcGluZ0Euc291cmNlLCBtYXBwaW5nQi5zb3VyY2UpO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsTGluZSAtIG1hcHBpbmdCLm9yaWdpbmFsTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIHJldHVybiBzdHJjbXAobWFwcGluZ0EubmFtZSwgbWFwcGluZ0IubmFtZSk7XG59XG5leHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQ7XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFja3RyYWNlLWdwcycsIFsnc291cmNlLW1hcCcsICdzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyJyksIHJlcXVpcmUoJ3N0YWNrZnJhbWUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja1RyYWNlR1BTID0gZmFjdG9yeShyb290LlNvdXJjZU1hcCB8fCByb290LnNvdXJjZU1hcCwgcm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uKFNvdXJjZU1hcCwgU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIE1ha2UgYSBYLURvbWFpbiByZXF1ZXN0IHRvIHVybCBhbmQgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IHdpdGggcmVzcG9uc2UgdGV4dCBpZiBmdWxmaWxsZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfeGRyKHVybCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICByZXEub3BlbignZ2V0JywgdXJsKTtcbiAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIG9ucmVhZHlzdGF0ZWNoYW5nZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChyZXEuc3RhdHVzID49IDIwMCAmJiByZXEuc3RhdHVzIDwgMzAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKHVybC5zdWJzdHIoMCwgNykgPT09ICdmaWxlOi8vJyAmJiByZXEucmVzcG9uc2VUZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0hUVFAgc3RhdHVzOiAnICsgcmVxLnN0YXR1cyArICcgcmV0cmlldmluZyAnICsgdXJsKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVxLnNlbmQoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgQmFzZTY0LWVuY29kZWQgc3RyaW5nIGludG8gaXRzIG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uLlxuICAgICAqIFVzZWQgZm9yIGlubGluZSBzb3VyY2VtYXBzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGI2NHN0ciBCYXNlLTY0IGVuY29kZWQgc3RyaW5nXG4gICAgICogQHJldHVybnMge1N0cmluZ30gb3JpZ2luYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NC1lbmNvZGVkIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfYXRvYihiNjRzdHIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5hdG9iKSB7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93LmF0b2IoYjY0c3RyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3VwcGx5IGEgcG9seWZpbGwgZm9yIHdpbmRvdy5hdG9iIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9wYXJzZUpzb24oc3RyaW5nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgSlNPTiAhPT0gJ3VuZGVmaW5lZCcgJiYgSlNPTi5wYXJzZSkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3VwcGx5IGEgcG9seWZpbGwgZm9yIEpTT04ucGFyc2UgaW4gdGhpcyBlbnZpcm9ubWVudCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRGdW5jdGlvbk5hbWUoc291cmNlLCBsaW5lTnVtYmVyLyosIGNvbHVtbk51bWJlciovKSB7XG4gICAgICAgIHZhciBzeW50YXhlcyA9IFtcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGZ1bmN0aW9uICh7YXJnc30pIFRPRE8gYXJncyBjYXB0dXJlXG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypmdW5jdGlvblxcYi8sXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiB7bmFtZX0oe2FyZ3N9KSBtWzFdPW5hbWUgbVsyXT1hcmdzXG4gICAgICAgICAgICAvZnVuY3Rpb25cXHMrKFteKCdcImBdKj8pXFxzKlxcKChbXildKilcXCkvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gZXZhbCgpXG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccyooPzpldmFsfG5ldyBGdW5jdGlvbilcXGIvLFxuICAgICAgICAgICAgLy8gZm5fbmFtZSgpIHtcbiAgICAgICAgICAgIC9cXGIoPyEoPzppZnxmb3J8c3dpdGNofHdoaWxlfHdpdGh8Y2F0Y2gpXFxiKSg/Oig/OnN0YXRpYylcXHMrKT8oXFxTKylcXHMqXFwoLio/XFwpXFxzKlxcey8sXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSAoKSA9PiB7XG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypcXCguKj9cXClcXHMqPT4vXG4gICAgICAgIF07XG4gICAgICAgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgnXFxuJyk7XG5cbiAgICAgICAgLy8gV2FsayBiYWNrd2FyZHMgaW4gdGhlIHNvdXJjZSBsaW5lcyB1bnRpbCB3ZSBmaW5kIHRoZSBsaW5lIHdoaWNoIG1hdGNoZXMgb25lIG9mIHRoZSBwYXR0ZXJucyBhYm92ZVxuICAgICAgICB2YXIgY29kZSA9ICcnO1xuICAgICAgICB2YXIgbWF4TGluZXMgPSBNYXRoLm1pbihsaW5lTnVtYmVyLCAyMCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4TGluZXM7ICsraSkge1xuICAgICAgICAgICAgLy8gbGluZU5vIGlzIDEtYmFzZWQsIHNvdXJjZVtdIGlzIDAtYmFzZWRcbiAgICAgICAgICAgIHZhciBsaW5lID0gbGluZXNbbGluZU51bWJlciAtIGkgLSAxXTtcbiAgICAgICAgICAgIHZhciBjb21tZW50UG9zID0gbGluZS5pbmRleE9mKCcvLycpO1xuICAgICAgICAgICAgaWYgKGNvbW1lbnRQb3MgPj0gMCkge1xuICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cigwLCBjb21tZW50UG9zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gbGluZSArIGNvZGU7XG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IHN5bnRheGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtID0gc3ludGF4ZXNbaW5kZXhdLmV4ZWMoY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG1bMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtWzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Vuc3VyZVN1cHBvcnRlZEVudmlyb25tZW50KCkge1xuICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY29uc3VtZSBzb3VyY2UgbWFwcyBpbiBvbGRlciBicm93c2VycycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGFja2ZyYW1lICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gU3RhY2tGcmFtZSBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUuZmlsZU5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBmaWxlIG5hbWUgaXMgbm90IGEgU3RyaW5nJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUubGluZU51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciAlIDEgIT09IDAgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGxpbmUgbnVtYmVyIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGNvbHVtbiBudW1iZXIgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSkge1xuICAgICAgICB2YXIgc291cmNlTWFwcGluZ1VybFJlZ0V4cCA9IC9cXC9cXC9bI0BdID9zb3VyY2VNYXBwaW5nVVJMPShbXlxccydcIl0rKVxccyokL21nO1xuICAgICAgICB2YXIgbGFzdFNvdXJjZU1hcHBpbmdVcmw7XG4gICAgICAgIHZhciBtYXRjaFNvdXJjZU1hcHBpbmdVcmw7XG4gICAgICAgIHdoaWxlIChtYXRjaFNvdXJjZU1hcHBpbmdVcmwgPSBzb3VyY2VNYXBwaW5nVXJsUmVnRXhwLmV4ZWMoc291cmNlKSkgeyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgICAgIGxhc3RTb3VyY2VNYXBwaW5nVXJsID0gbWF0Y2hTb3VyY2VNYXBwaW5nVXJsWzFdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXN0U291cmNlTWFwcGluZ1VybCkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzb3VyY2VNYXBwaW5nVVJMIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwU291cmNlKHN0YWNrZnJhbWUsIHNvdXJjZU1hcENvbnN1bWVyLCBzb3VyY2VDYWNoZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgbG9jID0gc291cmNlTWFwQ29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgICAgICAgICAgbGluZTogc3RhY2tmcmFtZS5saW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAobG9jLnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIC8vIGNhY2hlIG1hcHBlZCBzb3VyY2VzXG4gICAgICAgICAgICAgICAgdmFyIG1hcHBlZFNvdXJjZSA9IHNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IobG9jLnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hcHBlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VDYWNoZVtsb2Muc291cmNlXSA9IG1hcHBlZFNvdXJjZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAvLyBnaXZlbiBzdGFja2ZyYW1lIGFuZCBzb3VyY2UgbG9jYXRpb24sIHVwZGF0ZSBzdGFja2ZyYW1lXG4gICAgICAgICAgICAgICAgICAgIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbG9jLm5hbWUgfHwgc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBzdGFja2ZyYW1lLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbG9jLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvYy5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2MuY29sdW1uXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IGdldCBvcmlnaW5hbCBzb3VyY2UgZm9yIGdpdmVuIHN0YWNrZnJhbWUgYW5kIHNvdXJjZSBtYXAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICogICAgICBvcHRzLnNvdXJjZUNhY2hlID0ge3VybDogXCJTb3VyY2UgU3RyaW5nXCJ9ID0+IHByZWxvYWQgc291cmNlIGNhY2hlXG4gICAgICogICAgICBvcHRzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgPSB7L3BhdGgvZmlsZS5qcy5tYXA6IFNvdXJjZU1hcENvbnN1bWVyfVxuICAgICAqICAgICAgb3B0cy5vZmZsaW5lID0gVHJ1ZSB0byBwcmV2ZW50IG5ldHdvcmsgcmVxdWVzdHMuXG4gICAgICogICAgICAgICAgICAgIEJlc3QgZWZmb3J0IHdpdGhvdXQgc291cmNlcyBvciBzb3VyY2UgbWFwcy5cbiAgICAgKiAgICAgIG9wdHMuYWpheCA9IFByb21pc2UgcmV0dXJuaW5nIGZ1bmN0aW9uIHRvIG1ha2UgWC1Eb21haW4gcmVxdWVzdHNcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyhvcHRzKSB7XG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdGFja1RyYWNlR1BTKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja1RyYWNlR1BTKG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuc291cmNlQ2FjaGUgPSBvcHRzLnNvdXJjZUNhY2hlIHx8IHt9O1xuICAgICAgICB0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgPSBvcHRzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgfHwge307XG5cbiAgICAgICAgdGhpcy5hamF4ID0gb3B0cy5hamF4IHx8IF94ZHI7XG5cbiAgICAgICAgdGhpcy5fYXRvYiA9IG9wdHMuYXRvYiB8fCBfYXRvYjtcblxuICAgICAgICB0aGlzLl9nZXQgPSBmdW5jdGlvbiBfZ2V0KGxvY2F0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzRGF0YVVybCA9IGxvY2F0aW9uLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRzLm9mZmxpbmUgJiYgIWlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdDYW5ub3QgbWFrZSBuZXR3b3JrIHJlcXVlc3RzIGluIG9mZmxpbmUgbW9kZScpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNEYXRhVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIFVSTHMgY2FuIGhhdmUgcGFyYW1ldGVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VwcG9ydGVkRW5jb2RpbmdSZWdleHAgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9eZGF0YTphcHBsaWNhdGlvblxcL2pzb247KFtcXHc9OlwiLV0rOykqYmFzZTY0LC87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsb2NhdGlvbi5tYXRjaChzdXBwb3J0ZWRFbmNvZGluZ1JlZ2V4cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwU3RhcnQgPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kZWRTb3VyY2UgPSBsb2NhdGlvbi5zdWJzdHIoc291cmNlTWFwU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLl9hdG9iKGVuY29kZWRTb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0gc291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVGhlIGVuY29kaW5nIG9mIHRoZSBpbmxpbmUgc291cmNlbWFwIGlzIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGhyUHJvbWlzZSA9IHRoaXMuYWpheChsb2NhdGlvbiwge21ldGhvZDogJ2dldCd9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhY2hlIHRoZSBQcm9taXNlIHRvIHByZXZlbnQgZHVwbGljYXRlIGluLWZsaWdodCByZXF1ZXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0gPSB4aHJQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyUHJvbWlzZS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGluZyBTb3VyY2VNYXBDb25zdW1lcnMgaXMgZXhwZW5zaXZlLCBzbyB0aGlzIHdyYXBzIHRoZSBjcmVhdGlvbiBvZiBhXG4gICAgICAgICAqIFNvdXJjZU1hcENvbnN1bWVyIGluIGEgcGVyLWluc3RhbmNlIGNhY2hlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc291cmNlTWFwcGluZ1VSTCA9IFVSTCB0byBmZXRjaCBzb3VyY2UgbWFwIGZyb21cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGRlZmF1bHRTb3VyY2VSb290ID0gRGVmYXVsdCBzb3VyY2Ugcm9vdCBmb3Igc291cmNlIG1hcCBpZiB1bmRlZmluZWRcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgYSBTb3VyY2VNYXBDb25zdW1lclxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fZ2V0U291cmNlTWFwQ29uc3VtZXIgPSBmdW5jdGlvbiBfZ2V0U291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwcGluZ1VSTCwgZGVmYXVsdFNvdXJjZVJvb3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwQ29uc3VtZXJQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KHNvdXJjZU1hcHBpbmdVUkwpLnRoZW4oZnVuY3Rpb24oc291cmNlTWFwU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VNYXBTb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcFNvdXJjZSA9IF9wYXJzZUpzb24oc291cmNlTWFwU291cmNlLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VNYXBTb3VyY2Uuc291cmNlUm9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwU291cmNlLnNvdXJjZVJvb3QgPSBkZWZhdWx0U291cmNlUm9vdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBTb3VyY2VNYXAuU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwU291cmNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGVbc291cmNlTWFwcGluZ1VSTF0gPSBzb3VyY2VNYXBDb25zdW1lclByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc291cmNlTWFwQ29uc3VtZXJQcm9taXNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIFN0YWNrRnJhbWUsIGVuaGFuY2UgZnVuY3Rpb24gbmFtZSBhbmQgdXNlIHNvdXJjZSBtYXBzIGZvciBhXG4gICAgICAgICAqIGJldHRlciBTdGFja0ZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWUgb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggd2l0aCBzb3VyY2UtbWFwcGVkIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGlucG9pbnQgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRwaW5wb2ludChzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKS50aGVuKGZ1bmN0aW9uKG1hcHBlZFN0YWNrRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lKG1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlLCByZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIFsnY2F0Y2gnXShyZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCByZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBndWVzcyBmdW5jdGlvbiBuYW1lIGZyb20gbG9jYXRpb24gaW5mb3JtYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbmRGdW5jdGlvbk5hbWUgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRmaW5kRnVuY3Rpb25OYW1lKHN0YWNrZnJhbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBfZW5zdXJlU3RhY2tGcmFtZUlzTGVnaXQoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0KHN0YWNrZnJhbWUuZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24gZ2V0U291cmNlQ2FsbGJhY2soc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gc3RhY2tmcmFtZS5saW5lTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uTnVtYmVyID0gc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBndWVzc2VkRnVuY3Rpb25OYW1lID0gX2ZpbmRGdW5jdGlvbk5hbWUoc291cmNlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHJlcGxhY2UgZnVuY3Rpb25OYW1lIGlmIHdlIGZvdW5kIHNvbWV0aGluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3Vlc3NlZEZ1bmN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBndWVzc2VkRnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHN0YWNrZnJhbWUuYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogc3RhY2tmcmFtZS5maWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBzZWVrIHNvdXJjZS1tYXBwZWQgbG9jYXRpb24gYW5kIHJldHVybiBuZXcgZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZ2V0TWFwcGVkTG9jYXRpb24gPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRnZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN1cHBvcnRlZEVudmlyb25tZW50KCk7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZTtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBzdGFja2ZyYW1lLmZpbGVOYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChmaWxlTmFtZSkudGhlbihmdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmdVUkwgPSBfZmluZFNvdXJjZU1hcHBpbmdVUkwoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzRGF0YVVybCA9IHNvdXJjZU1hcHBpbmdVUkwuc3Vic3RyKDAsIDUpID09PSAnZGF0YTonO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdFNvdXJjZVJvb3QgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgZmlsZU5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VNYXBwaW5nVVJMWzBdICE9PSAnLycgJiYgIWlzRGF0YVVybCAmJiAhKC9eaHR0cHM/OlxcL1xcL3xeXFwvXFwvL2kpLnRlc3Qoc291cmNlTWFwcGluZ1VSTCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcHBpbmdVUkwgPSBkZWZhdWx0U291cmNlUm9vdCArIHNvdXJjZU1hcHBpbmdVUkw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwcGluZ1VSTCwgZGVmYXVsdFNvdXJjZVJvb3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihzb3VyY2VNYXBDb25zdW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZXh0cmFjdExvY2F0aW9uSW5mb0Zyb21Tb3VyY2VNYXBTb3VyY2Uoc3RhY2tmcmFtZSwgc291cmNlTWFwQ29uc3VtZXIsIHNvdXJjZUNhY2hlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVsnY2F0Y2gnXShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZScsIFsnZXJyb3Itc3RhY2stcGFyc2VyJywgJ3N0YWNrLWdlbmVyYXRvcicsICdzdGFja3RyYWNlLWdwcyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnZXJyb3Itc3RhY2stcGFyc2VyJyksIHJlcXVpcmUoJ3N0YWNrLWdlbmVyYXRvcicpLCByZXF1aXJlKCdzdGFja3RyYWNlLWdwcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2UgPSBmYWN0b3J5KHJvb3QuRXJyb3JTdGFja1BhcnNlciwgcm9vdC5TdGFja0dlbmVyYXRvciwgcm9vdC5TdGFja1RyYWNlR1BTKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIFN0YWNrVHJhY2UoRXJyb3JTdGFja1BhcnNlciwgU3RhY2tHZW5lcmF0b3IsIFN0YWNrVHJhY2VHUFMpIHtcbiAgICB2YXIgX29wdGlvbnMgPSB7XG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBzdGFja2ZyYW1lcyBmb3IgdGhpcyBsaWJyYXJ5IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2UkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignRXJyb3JTdGFja1BhcnNlciQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlR1BTJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrR2VuZXJhdG9yJCQnKSA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZUNhY2hlOiB7fVxuICAgIH07XG5cbiAgICB2YXIgX2dlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRHZW5lcmF0ZUVycm9yKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRXJyb3IgbXVzdCBiZSB0aHJvd24gdG8gZ2V0IHN0YWNrIGluIElFXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdlIDIgZ2l2ZW4gT2JqZWN0cy4gSWYgYSBjb25mbGljdCBvY2N1cnMgdGhlIHNlY29uZCBvYmplY3Qgd2lucy5cbiAgICAgKiBEb2VzIG5vdCBkbyBkZWVwIG1lcmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaXJzdCBiYXNlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWNvbmQgb3ZlcnJpZGVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gbWVyZ2VkIGZpcnN0IGFuZCBzZWNvbmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tZXJnZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcblxuICAgICAgICBbZmlyc3QsIHNlY29uZF0uZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVyci5zdGFjayB8fCBlcnJbJ29wZXJhI3NvdXJjZWxvYyddO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXJlZChzdGFja2ZyYW1lcywgZmlsdGVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXMuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrZnJhbWVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0KG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikgPyB0aGlzLmZyb21FcnJvcihlcnIsIG9wdHMpIDogdGhpcy5nZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgYmFja3RyYWNlIGZyb20gaW52b2NhdGlvbiBwb2ludC5cbiAgICAgICAgICogSU1QT1JUQU5UOiBEb2VzIG5vdCBoYW5kbGUgc291cmNlIG1hcHMgb3IgZ3Vlc3MgZnVuY3Rpb24gbmFtZXMhXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0U3luYzogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0U3luYyhvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyKSA6IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyZWQoc3RhY2ssIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3Igb2JqZWN0LCBwYXJzZSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmb3IgQXJyYXlbU3RhY2tGcmFtZX1cbiAgICAgICAgICovXG4gICAgICAgIGZyb21FcnJvcjogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZnJvbUVycm9yKGVycm9yLCBvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBncHMgPSBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrZnJhbWVzID0gX2ZpbHRlcmVkKEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyb3IpLCBvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShQcm9taXNlLmFsbChzdGFja2ZyYW1lcy5tYXAoZnVuY3Rpb24oc2YpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVPcmlnaW5hbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ3BzLnBpbnBvaW50KHNmKS50aGVuKHJlc29sdmUsIHJlc29sdmVPcmlnaW5hbClbJ2NhdGNoJ10ocmVzb2x2ZU9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBTdGFja0dlbmVyYXRvciB0byBnZW5lcmF0ZSBhIGJhY2t0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IG9mIEFycmF5W1N0YWNrRnJhbWVdXG4gICAgICAgICAqL1xuICAgICAgICBnZW5lcmF0ZUFydGlmaWNpYWxseTogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2VuZXJhdGVBcnRpZmljaWFsbHkob3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgc3RhY2tGcmFtZXMgPSBTdGFja0dlbmVyYXRvci5iYWNrdHJhY2Uob3B0cyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgc3RhY2tGcmFtZXMgPSBzdGFja0ZyYW1lcy5maWx0ZXIob3B0cy5maWx0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGFja0ZyYW1lcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24sIHdyYXAgaXQgc3VjaCB0aGF0IGludm9jYXRpb25zIHRyaWdnZXIgYSBjYWxsYmFjayB0aGF0XG4gICAgICAgICAqIGlzIGNhbGxlZCB3aXRoIGEgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGluc3RydW1lbnRlZFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdpdGggYSBzdGFjayB0cmFjZSBvbiBpbnZvY2F0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVycmJhY2sgb3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGVycm9yIGlmIHVuYWJsZSB0byBnZXQgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIG9wdGlvbmFsIGNvbnRleHQgb2JqZWN0IChlLmcuIHdpbmRvdylcbiAgICAgICAgICovXG4gICAgICAgIGluc3RydW1lbnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnQoZm4sIGNhbGxiYWNrLCBlcnJiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBpbnN0cnVtZW50ZWQsIHJldHVybiBnaXZlbiBGdW5jdGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGluc3RydW1lbnRlZCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnRlZCgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCgpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZyB8fCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb21FcnJvcihlKS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrKVsnY2F0Y2gnXShlcnJiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGluc3RydW1lbnRlZC5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID0gZm47XG5cbiAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50ZWQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBpbnN0cnVtZW50ZWQsXG4gICAgICAgICAqIHJldmVydCB0aGUgZnVuY3Rpb24gdG8gaXQncyBvcmlnaW5hbCAobm9uLWluc3RydW1lbnRlZCkgc3RhdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGRlLWluc3RydW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGRlaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZGVpbnN0cnVtZW50KGZuKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGUtaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIG5vdCBpbnN0cnVtZW50ZWQsIHJldHVybiBvcmlnaW5hbFxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3IgbWVzc2FnZSBhbmQgQXJyYXkgb2YgU3RhY2tGcmFtZXMsIHNlcmlhbGl6ZSBhbmQgUE9TVCB0byBnaXZlbiBVUkwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrZnJhbWVzXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVycm9yTXNnXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0T3B0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgcmVwb3J0OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRyZXBvcnQoc3RhY2tmcmFtZXMsIHVybCwgZXJyb3JNc2csIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPj0gMjAwICYmIHJlcS5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdQT1NUIHRvICcgKyB1cmwgKyAnIGZhaWxlZCB3aXRoIHN0YXR1czogJyArIHJlcS5zdGF0dXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVxLm9wZW4oJ3Bvc3QnLCB1cmwpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHJlcXVlc3QgaGVhZGVyc1xuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucyAmJiB0eXBlb2YgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgaGVhZGVyc1toZWFkZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZXBvcnRQYXlsb2FkID0ge3N0YWNrOiBzdGFja2ZyYW1lc307XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQgJiYgZXJyb3JNc2cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0UGF5bG9hZC5tZXNzYWdlID0gZXJyb3JNc2c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVwb3J0UGF5bG9hZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIl19 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9lcnJvci1zdGFjay1wYXJzZXIvbm9kZV9tb2R1bGVzL3N0YWNrZnJhbWUvc3RhY2tmcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9hcnJheS1zZXQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LXZscS5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iYXNlNjQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9xdWljay1zb3J0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAtY29uc3VtZXIuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9zdGFjay1nZW5lcmF0b3Ivc3RhY2stZ2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL3N0YWNrdHJhY2UtZ3BzLmpzIiwic3RhY2t0cmFjZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNqYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ2Vycm9yLXN0YWNrLXBhcnNlcicsIFsnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc3RhY2tmcmFtZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LkVycm9yU3RhY2tQYXJzZXIgPSBmYWN0b3J5KHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyKFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgRklSRUZPWF9TQUZBUklfU1RBQ0tfUkVHRVhQID0gLyhefEApXFxTK1xcOlxcZCsvO1xuICAgIHZhciBDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQID0gL15cXHMqYXQgLiooXFxTK1xcOlxcZCt8XFwobmF0aXZlXFwpKS9tO1xuICAgIHZhciBTQUZBUklfTkFUSVZFX0NPREVfUkVHRVhQID0gL14oZXZhbEApPyhcXFtuYXRpdmUgY29kZVxcXSk/JC87XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gRXJyb3Igb2JqZWN0LCBleHRyYWN0IHRoZSBtb3N0IGluZm9ybWF0aW9uIGZyb20gaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gb2YgU3RhY2tGcmFtZXNcbiAgICAgICAgICovXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZShlcnJvcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlcnJvci5zdGFja3RyYWNlICE9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZXJyb3JbJ29wZXJhI3NvdXJjZWxvYyddICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmEoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGFjayAmJiBlcnJvci5zdGFjay5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlVjhPcklFKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUZGT3JTYWZhcmkoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXJzZSBnaXZlbiBFcnJvciBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvLyBTZXBhcmF0ZSBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycyBmcm9tIGEgc3RyaW5nIG9mIHRoZSBmb3JtOiAoVVJJOkxpbmU6Q29sdW1uKVxuICAgICAgICBleHRyYWN0TG9jYXRpb246IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJGV4dHJhY3RMb2NhdGlvbih1cmxMaWtlKSB7XG4gICAgICAgICAgICAvLyBGYWlsLWZhc3QgYnV0IHJldHVybiBsb2NhdGlvbnMgbGlrZSBcIihuYXRpdmUpXCJcbiAgICAgICAgICAgIGlmICh1cmxMaWtlLmluZGV4T2YoJzonKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3VybExpa2VdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcmVnRXhwID0gLyguKz8pKD86XFw6KFxcZCspKT8oPzpcXDooXFxkKykpPyQvO1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gcmVnRXhwLmV4ZWModXJsTGlrZS5yZXBsYWNlKC9bXFwoXFwpXS9nLCAnJykpO1xuICAgICAgICAgICAgcmV0dXJuIFtwYXJ0c1sxXSwgcGFydHNbMl0gfHwgdW5kZWZpbmVkLCBwYXJ0c1szXSB8fCB1bmRlZmluZWRdO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlVjhPcklFOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZVY4T3JJRShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCcoZXZhbCAnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgZXZhbCBpbmZvcm1hdGlvbiB1bnRpbCB3ZSBpbXBsZW1lbnQgc3RhY2t0cmFjZS5qcy9zdGFja2ZyYW1lIzhcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvZXZhbCBjb2RlL2csICdldmFsJykucmVwbGFjZSgvKFxcKGV2YWwgYXQgW15cXCgpXSopfChcXClcXCwuKiQpL2csICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHNhbml0aXplZExpbmUgPSBsaW5lLnJlcGxhY2UoL15cXHMrLywgJycpLnJlcGxhY2UoL1xcKGV2YWwgY29kZS9nLCAnKCcpO1xuXG4gICAgICAgICAgICAgICAgLy8gY2FwdHVyZSBhbmQgcHJlc2V2ZSB0aGUgcGFyZW50aGVzaXplZCBsb2NhdGlvbiBcIigvZm9vL215IGJhci5qczoxMjo4NylcIiBpblxuICAgICAgICAgICAgICAgIC8vIGNhc2UgaXQgaGFzIHNwYWNlcyBpbiBpdCwgYXMgdGhlIHN0cmluZyBpcyBzcGxpdCBvbiBcXHMrIGxhdGVyIG9uXG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gc2FuaXRpemVkTGluZS5tYXRjaCgvIChcXCgoLispOihcXGQrKTooXFxkKylcXCkkKS8pO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBwYXJlbnRoZXNpemVkIGxvY2F0aW9uIGZyb20gdGhlIGxpbmUsIGlmIGl0IHdhcyBtYXRjaGVkXG4gICAgICAgICAgICAgICAgc2FuaXRpemVkTGluZSA9IGxvY2F0aW9uID8gc2FuaXRpemVkTGluZS5yZXBsYWNlKGxvY2F0aW9uWzBdLCAnJykgOiBzYW5pdGl6ZWRMaW5lO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IHNhbml0aXplZExpbmUuc3BsaXQoL1xccysvKS5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICAvLyBpZiBhIGxvY2F0aW9uIHdhcyBtYXRjaGVkLCBwYXNzIGl0IHRvIGV4dHJhY3RMb2NhdGlvbigpIG90aGVyd2lzZSBwb3AgdGhlIGxhc3QgdG9rZW5cbiAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKGxvY2F0aW9uID8gbG9jYXRpb25bMV0gOiB0b2tlbnMucG9wKCkpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0b2tlbnMuam9pbignICcpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBbJ2V2YWwnLCAnPGFub255bW91cz4nXS5pbmRleE9mKGxvY2F0aW9uUGFydHNbMF0pID4gLTEgPyB1bmRlZmluZWQgOiBsb2NhdGlvblBhcnRzWzBdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlRkZPclNhZmFyaTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VGRk9yU2FmYXJpKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIWxpbmUubWF0Y2goU0FGQVJJX05BVElWRV9DT0RFX1JFR0VYUCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSBldmFsIGluZm9ybWF0aW9uIHVudGlsIHdlIGltcGxlbWVudCBzdGFja3RyYWNlLmpzL3N0YWNrZnJhbWUjOFxuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJyA+IGV2YWwnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoLyBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsXFw6XFxkK1xcOlxcZCsvZywgJzokMScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJ0AnKSA9PT0gLTEgJiYgbGluZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyaSBldmFsIGZyYW1lcyBvbmx5IGhhdmUgZnVuY3Rpb24gbmFtZXMgYW5kIG5vdGhpbmcgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBsaW5lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWVSZWdleCA9IC8oKC4qXCIuK1wiW15AXSopP1teQF0qKSg/OkApLztcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBsaW5lLm1hdGNoKGZ1bmN0aW9uTmFtZVJlZ2V4KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1hdGNoZXMgJiYgbWF0Y2hlc1sxXSA/IG1hdGNoZXNbMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24obGluZS5yZXBsYWNlKGZ1bmN0aW9uTmFtZVJlZ2V4LCAnJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhKGUpIHtcbiAgICAgICAgICAgIGlmICghZS5zdGFja3RyYWNlIHx8IChlLm1lc3NhZ2UuaW5kZXhPZignXFxuJykgPiAtMSAmJlxuICAgICAgICAgICAgICAgIGUubWVzc2FnZS5zcGxpdCgnXFxuJykubGVuZ3RoID4gZS5zdGFja3RyYWNlLnNwbGl0KCdcXG4nKS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTkoZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFlLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTEwKGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTEoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTk6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmE5KGUpIHtcbiAgICAgICAgICAgIHZhciBsaW5lUkUgPSAvTGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKS9pO1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gZS5tZXNzYWdlLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDIsIGxlbiA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZVJFLmV4ZWMobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZXNbaV1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhMTA6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMChlKSB7XG4gICAgICAgICAgICB2YXIgbGluZVJFID0gL0xpbmUgKFxcZCspLipzY3JpcHQgKD86aW4gKT8oXFxTKykoPzo6IEluIGZ1bmN0aW9uIChcXFMrKSk/JC9pO1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gZS5zdGFja3RyYWNlLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZVJFLmV4ZWMobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IG1hdGNoWzNdIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lc1tpXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gT3BlcmEgMTAuNjUrIEVycm9yLnN0YWNrIHZlcnkgc2ltaWxhciB0byBGRi9TYWZhcmlcbiAgICAgICAgcGFyc2VPcGVyYTExOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhMTEoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIWxpbmUubWF0Y2goRklSRUZPWF9TQUZBUklfU1RBQ0tfUkVHRVhQKSAmJiAhbGluZS5tYXRjaCgvXkVycm9yIGNyZWF0ZWQgYXQvKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5zcGxpdCgnQCcpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25DYWxsID0gKHRva2Vucy5zaGlmdCgpIHx8ICcnKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25DYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPGFub255bW91cyBmdW5jdGlvbig6IChcXHcrKSk/Pi8sICckMicpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwoW15cXCldKlxcKS9nLCAnJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzUmF3O1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkNhbGwubWF0Y2goL1xcKChbXlxcKV0qKVxcKS8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NSYXcgPSBmdW5jdGlvbkNhbGwucmVwbGFjZSgvXlteXFwoXStcXCgoW15cXCldKilcXCkkLywgJyQxJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gKGFyZ3NSYXcgPT09IHVuZGVmaW5lZCB8fCBhcmdzUmF3ID09PSAnW2FyZ3VtZW50cyBub3QgYXZhaWxhYmxlXScpID9cbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDogYXJnc1Jhdy5zcGxpdCgnLCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2tmcmFtZScsIFtdLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrRnJhbWUgPSBmYWN0b3J5KCk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbigpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgZnVuY3Rpb24gX2lzTnVtYmVyKG4pIHtcbiAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfY2FwaXRhbGl6ZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2dldHRlcihwKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3BdO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBib29sZWFuUHJvcHMgPSBbJ2lzQ29uc3RydWN0b3InLCAnaXNFdmFsJywgJ2lzTmF0aXZlJywgJ2lzVG9wbGV2ZWwnXTtcbiAgICB2YXIgbnVtZXJpY1Byb3BzID0gWydjb2x1bW5OdW1iZXInLCAnbGluZU51bWJlciddO1xuICAgIHZhciBzdHJpbmdQcm9wcyA9IFsnZmlsZU5hbWUnLCAnZnVuY3Rpb25OYW1lJywgJ3NvdXJjZSddO1xuICAgIHZhciBhcnJheVByb3BzID0gWydhcmdzJ107XG5cbiAgICB2YXIgcHJvcHMgPSBib29sZWFuUHJvcHMuY29uY2F0KG51bWVyaWNQcm9wcywgc3RyaW5nUHJvcHMsIGFycmF5UHJvcHMpO1xuXG4gICAgZnVuY3Rpb24gU3RhY2tGcmFtZShvYmopIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcHNbaV0pICYmIG9ialtwcm9wc1tpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzWydzZXQnICsgX2NhcGl0YWxpemUocHJvcHNbaV0pXShvYmpbcHJvcHNbaV1dKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBTdGFja0ZyYW1lLnByb3RvdHlwZSA9IHtcbiAgICAgICAgZ2V0QXJnczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmdzO1xuICAgICAgICB9LFxuICAgICAgICBzZXRBcmdzOiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJncyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFyZ3MgPSB2O1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldEV2YWxPcmlnaW46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZhbE9yaWdpbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0RXZhbE9yaWdpbjogZnVuY3Rpb24odikge1xuICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsT3JpZ2luID0gdjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZhbE9yaWdpbiA9IG5ldyBTdGFja0ZyYW1lKHYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFdmFsIE9yaWdpbiBtdXN0IGJlIGFuIE9iamVjdCBvciBTdGFja0ZyYW1lJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gdGhpcy5nZXRGaWxlTmFtZSgpIHx8ICcnO1xuICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSB0aGlzLmdldExpbmVOdW1iZXIoKSB8fCAnJztcbiAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSB0aGlzLmdldENvbHVtbk51bWJlcigpIHx8ICcnO1xuICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2V0RnVuY3Rpb25OYW1lKCkgfHwgJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRJc0V2YWwoKSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tldmFsXSAoJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICc6JyArIGNvbHVtbk51bWJlciArICcpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbZXZhbF06JyArIGxpbmVOdW1iZXIgKyAnOicgKyBjb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZnVuY3Rpb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZSArICcgKCcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnOicgKyBjb2x1bW5OdW1iZXIgKyAnKSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJzonICsgY29sdW1uTnVtYmVyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIFN0YWNrRnJhbWUuZnJvbVN0cmluZyA9IGZ1bmN0aW9uIFN0YWNrRnJhbWUkJGZyb21TdHJpbmcoc3RyKSB7XG4gICAgICAgIHZhciBhcmdzU3RhcnRJbmRleCA9IHN0ci5pbmRleE9mKCcoJyk7XG4gICAgICAgIHZhciBhcmdzRW5kSW5kZXggPSBzdHIubGFzdEluZGV4T2YoJyknKTtcblxuICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gc3RyLnN1YnN0cmluZygwLCBhcmdzU3RhcnRJbmRleCk7XG4gICAgICAgIHZhciBhcmdzID0gc3RyLnN1YnN0cmluZyhhcmdzU3RhcnRJbmRleCArIDEsIGFyZ3NFbmRJbmRleCkuc3BsaXQoJywnKTtcbiAgICAgICAgdmFyIGxvY2F0aW9uU3RyaW5nID0gc3RyLnN1YnN0cmluZyhhcmdzRW5kSW5kZXggKyAxKTtcblxuICAgICAgICBpZiAobG9jYXRpb25TdHJpbmcuaW5kZXhPZignQCcpID09PSAwKSB7XG4gICAgICAgICAgICB2YXIgcGFydHMgPSAvQCguKz8pKD86OihcXGQrKSk/KD86OihcXGQrKSk/JC8uZXhlYyhsb2NhdGlvblN0cmluZywgJycpO1xuICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gcGFydHNbMV07XG4gICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHBhcnRzWzJdO1xuICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHBhcnRzWzNdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgYXJnczogYXJncyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyIHx8IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib29sZWFuUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IF9nZXR0ZXIoYm9vbGVhblByb3BzW2ldKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBCb29sZWFuKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoYm9vbGVhblByb3BzW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bWVyaWNQcm9wcy5sZW5ndGg7IGorKykge1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gX2dldHRlcihudW1lcmljUHJvcHNbal0pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gKGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfaXNOdW1iZXIodikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihwICsgJyBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBOdW1iZXIodik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShudW1lcmljUHJvcHNbal0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3RyaW5nUHJvcHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShzdHJpbmdQcm9wc1trXSldID0gX2dldHRlcihzdHJpbmdQcm9wc1trXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUoc3RyaW5nUHJvcHNba10pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBTdHJpbmcodik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShzdHJpbmdQcm9wc1trXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0YWNrRnJhbWU7XG59KSk7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgYW4gYXJyYXkgYW5kIGEgc2V0LiBBZGRpbmcgYSBuZXdcbiAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICogZWxlbWVudCBpcyBPKDEpLiBSZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBzZXQgaXMgbm90IHN1cHBvcnRlZC4gT25seVxuICogc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciBtZW1iZXJzaGlwLlxuICovXG5mdW5jdGlvbiBBcnJheVNldCgpIHtcbiAgdGhpcy5fYXJyYXkgPSBbXTtcbiAgdGhpcy5fc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgbWV0aG9kIGZvciBjcmVhdGluZyBBcnJheVNldCBpbnN0YW5jZXMgZnJvbSBhbiBleGlzdGluZyBhcnJheS5cbiAqL1xuQXJyYXlTZXQuZnJvbUFycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfZnJvbUFycmF5KGFBcnJheSwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc2V0ID0gbmV3IEFycmF5U2V0KCk7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzZXQuYWRkKGFBcnJheVtpXSwgYUFsbG93RHVwbGljYXRlcyk7XG4gIH1cbiAgcmV0dXJuIHNldDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhvdyBtYW55IHVuaXF1ZSBpdGVtcyBhcmUgaW4gdGhpcyBBcnJheVNldC4gSWYgZHVwbGljYXRlcyBoYXZlIGJlZW5cbiAqIGFkZGVkLCB0aGFuIHRob3NlIGRvIG5vdCBjb3VudCB0b3dhcmRzIHRoZSBzaXplLlxuICpcbiAqIEByZXR1cm5zIE51bWJlclxuICovXG5BcnJheVNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uIEFycmF5U2V0X3NpemUoKSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9zZXQpLmxlbmd0aDtcbn07XG5cbi8qKlxuICogQWRkIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhpcyBzZXQuXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBBcnJheVNldF9hZGQoYVN0ciwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHZhciBpc0R1cGxpY2F0ZSA9IGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG4gIHZhciBpZHggPSB0aGlzLl9hcnJheS5sZW5ndGg7XG4gIGlmICghaXNEdXBsaWNhdGUgfHwgYUFsbG93RHVwbGljYXRlcykge1xuICAgIHRoaXMuX2FycmF5LnB1c2goYVN0cik7XG4gIH1cbiAgaWYgKCFpc0R1cGxpY2F0ZSkge1xuICAgIHRoaXMuX3NldFtzU3RyXSA9IGlkeDtcbiAgfVxufTtcblxuLyoqXG4gKiBJcyB0aGUgZ2l2ZW4gc3RyaW5nIGEgbWVtYmVyIG9mIHRoaXMgc2V0P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gQXJyYXlTZXRfaGFzKGFTdHIpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICByZXR1cm4gaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbn07XG5cbi8qKlxuICogV2hhdCBpcyB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIHN0cmluZyBpbiB0aGUgYXJyYXk/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gQXJyYXlTZXRfaW5kZXhPZihhU3RyKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgaWYgKGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cikpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0W3NTdHJdO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignXCInICsgYVN0ciArICdcIiBpcyBub3QgaW4gdGhlIHNldC4nKTtcbn07XG5cbi8qKlxuICogV2hhdCBpcyB0aGUgZWxlbWVudCBhdCB0aGUgZ2l2ZW4gaW5kZXg/XG4gKlxuICogQHBhcmFtIE51bWJlciBhSWR4XG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uIEFycmF5U2V0X2F0KGFJZHgpIHtcbiAgaWYgKGFJZHggPj0gMCAmJiBhSWR4IDwgdGhpcy5fYXJyYXkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FycmF5W2FJZHhdO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignTm8gZWxlbWVudCBpbmRleGVkIGJ5ICcgKyBhSWR4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYXJyYXkgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzZXQgKHdoaWNoIGhhcyB0aGUgcHJvcGVyIGluZGljZXNcbiAqIGluZGljYXRlZCBieSBpbmRleE9mKS4gTm90ZSB0aGF0IHRoaXMgaXMgYSBjb3B5IG9mIHRoZSBpbnRlcm5hbCBhcnJheSB1c2VkXG4gKiBmb3Igc3RvcmluZyB0aGUgbWVtYmVycyBzbyB0aGF0IG5vIG9uZSBjYW4gbWVzcyB3aXRoIGludGVybmFsIHN0YXRlLlxuICovXG5BcnJheVNldC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X3RvQXJyYXkoKSB7XG4gIHJldHVybiB0aGlzLl9hcnJheS5zbGljZSgpO1xufTtcblxuZXhwb3J0cy5BcnJheVNldCA9IEFycmF5U2V0O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqXG4gKiBCYXNlZCBvbiB0aGUgQmFzZSA2NCBWTFEgaW1wbGVtZW50YXRpb24gaW4gQ2xvc3VyZSBDb21waWxlcjpcbiAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2xvc3VyZS1jb21waWxlci9zb3VyY2UvYnJvd3NlL3RydW5rL3NyYy9jb20vZ29vZ2xlL2RlYnVnZ2luZy9zb3VyY2VtYXAvQmFzZTY0VkxRLmphdmFcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMSBUaGUgQ2xvc3VyZSBDb21waWxlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlXG4gKiBtZXQ6XG4gKlxuICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbiAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXG4gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcbiAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZFxuICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbiAqIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcbiAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLFxuICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxuICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcbiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnLi9iYXNlNjQnKTtcblxuLy8gQSBzaW5nbGUgYmFzZSA2NCBkaWdpdCBjYW4gY29udGFpbiA2IGJpdHMgb2YgZGF0YS4gRm9yIHRoZSBiYXNlIDY0IHZhcmlhYmxlXG4vLyBsZW5ndGggcXVhbnRpdGllcyB3ZSB1c2UgaW4gdGhlIHNvdXJjZSBtYXAgc3BlYywgdGhlIGZpcnN0IGJpdCBpcyB0aGUgc2lnbixcbi8vIHRoZSBuZXh0IGZvdXIgYml0cyBhcmUgdGhlIGFjdHVhbCB2YWx1ZSwgYW5kIHRoZSA2dGggYml0IGlzIHRoZVxuLy8gY29udGludWF0aW9uIGJpdC4gVGhlIGNvbnRpbnVhdGlvbiBiaXQgdGVsbHMgdXMgd2hldGhlciB0aGVyZSBhcmUgbW9yZVxuLy8gZGlnaXRzIGluIHRoaXMgdmFsdWUgZm9sbG93aW5nIHRoaXMgZGlnaXQuXG4vL1xuLy8gICBDb250aW51YXRpb25cbi8vICAgfCAgICBTaWduXG4vLyAgIHwgICAgfFxuLy8gICBWICAgIFZcbi8vICAgMTAxMDExXG5cbnZhciBWTFFfQkFTRV9TSElGVCA9IDU7XG5cbi8vIGJpbmFyeTogMTAwMDAwXG52YXIgVkxRX0JBU0UgPSAxIDw8IFZMUV9CQVNFX1NISUZUO1xuXG4vLyBiaW5hcnk6IDAxMTExMVxudmFyIFZMUV9CQVNFX01BU0sgPSBWTFFfQkFTRSAtIDE7XG5cbi8vIGJpbmFyeTogMTAwMDAwXG52YXIgVkxRX0NPTlRJTlVBVElPTl9CSVQgPSBWTFFfQkFTRTtcblxuLyoqXG4gKiBDb252ZXJ0cyBmcm9tIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgdG8gYSB2YWx1ZSB3aGVyZSB0aGUgc2lnbiBiaXQgaXNcbiAqIHBsYWNlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LiAgRm9yIGV4YW1wbGUsIGFzIGRlY2ltYWxzOlxuICogICAxIGJlY29tZXMgMiAoMTAgYmluYXJ5KSwgLTEgYmVjb21lcyAzICgxMSBiaW5hcnkpXG4gKiAgIDIgYmVjb21lcyA0ICgxMDAgYmluYXJ5KSwgLTIgYmVjb21lcyA1ICgxMDEgYmluYXJ5KVxuICovXG5mdW5jdGlvbiB0b1ZMUVNpZ25lZChhVmFsdWUpIHtcbiAgcmV0dXJuIGFWYWx1ZSA8IDBcbiAgICA/ICgoLWFWYWx1ZSkgPDwgMSkgKyAxXG4gICAgOiAoYVZhbHVlIDw8IDEpICsgMDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0byBhIHR3by1jb21wbGVtZW50IHZhbHVlIGZyb20gYSB2YWx1ZSB3aGVyZSB0aGUgc2lnbiBiaXQgaXNcbiAqIHBsYWNlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LiAgRm9yIGV4YW1wbGUsIGFzIGRlY2ltYWxzOlxuICogICAyICgxMCBiaW5hcnkpIGJlY29tZXMgMSwgMyAoMTEgYmluYXJ5KSBiZWNvbWVzIC0xXG4gKiAgIDQgKDEwMCBiaW5hcnkpIGJlY29tZXMgMiwgNSAoMTAxIGJpbmFyeSkgYmVjb21lcyAtMlxuICovXG5mdW5jdGlvbiBmcm9tVkxRU2lnbmVkKGFWYWx1ZSkge1xuICB2YXIgaXNOZWdhdGl2ZSA9IChhVmFsdWUgJiAxKSA9PT0gMTtcbiAgdmFyIHNoaWZ0ZWQgPSBhVmFsdWUgPj4gMTtcbiAgcmV0dXJuIGlzTmVnYXRpdmVcbiAgICA/IC1zaGlmdGVkXG4gICAgOiBzaGlmdGVkO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGJhc2UgNjQgVkxRIGVuY29kZWQgdmFsdWUuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gYmFzZTY0VkxRX2VuY29kZShhVmFsdWUpIHtcbiAgdmFyIGVuY29kZWQgPSBcIlwiO1xuICB2YXIgZGlnaXQ7XG5cbiAgdmFyIHZscSA9IHRvVkxRU2lnbmVkKGFWYWx1ZSk7XG5cbiAgZG8ge1xuICAgIGRpZ2l0ID0gdmxxICYgVkxRX0JBU0VfTUFTSztcbiAgICB2bHEgPj4+PSBWTFFfQkFTRV9TSElGVDtcbiAgICBpZiAodmxxID4gMCkge1xuICAgICAgLy8gVGhlcmUgYXJlIHN0aWxsIG1vcmUgZGlnaXRzIGluIHRoaXMgdmFsdWUsIHNvIHdlIG11c3QgbWFrZSBzdXJlIHRoZVxuICAgICAgLy8gY29udGludWF0aW9uIGJpdCBpcyBtYXJrZWQuXG4gICAgICBkaWdpdCB8PSBWTFFfQ09OVElOVUFUSU9OX0JJVDtcbiAgICB9XG4gICAgZW5jb2RlZCArPSBiYXNlNjQuZW5jb2RlKGRpZ2l0KTtcbiAgfSB3aGlsZSAodmxxID4gMCk7XG5cbiAgcmV0dXJuIGVuY29kZWQ7XG59O1xuXG4vKipcbiAqIERlY29kZXMgdGhlIG5leHQgYmFzZSA2NCBWTFEgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCByZXR1cm5zIHRoZVxuICogdmFsdWUgYW5kIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgdmlhIHRoZSBvdXQgcGFyYW1ldGVyLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9kZWNvZGUoYVN0ciwgYUluZGV4LCBhT3V0UGFyYW0pIHtcbiAgdmFyIHN0ckxlbiA9IGFTdHIubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gMDtcbiAgdmFyIHNoaWZ0ID0gMDtcbiAgdmFyIGNvbnRpbnVhdGlvbiwgZGlnaXQ7XG5cbiAgZG8ge1xuICAgIGlmIChhSW5kZXggPj0gc3RyTGVuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBtb3JlIGRpZ2l0cyBpbiBiYXNlIDY0IFZMUSB2YWx1ZS5cIik7XG4gICAgfVxuXG4gICAgZGlnaXQgPSBiYXNlNjQuZGVjb2RlKGFTdHIuY2hhckNvZGVBdChhSW5kZXgrKykpO1xuICAgIGlmIChkaWdpdCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmFzZTY0IGRpZ2l0OiBcIiArIGFTdHIuY2hhckF0KGFJbmRleCAtIDEpKTtcbiAgICB9XG5cbiAgICBjb250aW51YXRpb24gPSAhIShkaWdpdCAmIFZMUV9DT05USU5VQVRJT05fQklUKTtcbiAgICBkaWdpdCAmPSBWTFFfQkFTRV9NQVNLO1xuICAgIHJlc3VsdCA9IHJlc3VsdCArIChkaWdpdCA8PCBzaGlmdCk7XG4gICAgc2hpZnQgKz0gVkxRX0JBU0VfU0hJRlQ7XG4gIH0gd2hpbGUgKGNvbnRpbnVhdGlvbik7XG5cbiAgYU91dFBhcmFtLnZhbHVlID0gZnJvbVZMUVNpZ25lZChyZXN1bHQpO1xuICBhT3V0UGFyYW0ucmVzdCA9IGFJbmRleDtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBpbnRUb0NoYXJNYXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xuXG4vKipcbiAqIEVuY29kZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAwIHRvIDYzIHRvIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKG51bWJlcikge1xuICBpZiAoMCA8PSBudW1iZXIgJiYgbnVtYmVyIDwgaW50VG9DaGFyTWFwLmxlbmd0aCkge1xuICAgIHJldHVybiBpbnRUb0NoYXJNYXBbbnVtYmVyXTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzOiBcIiArIG51bWJlcik7XG59O1xuXG4vKipcbiAqIERlY29kZSBhIHNpbmdsZSBiYXNlIDY0IGNoYXJhY3RlciBjb2RlIGRpZ2l0IHRvIGFuIGludGVnZXIuIFJldHVybnMgLTEgb25cbiAqIGZhaWx1cmUuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gKGNoYXJDb2RlKSB7XG4gIHZhciBiaWdBID0gNjU7ICAgICAvLyAnQSdcbiAgdmFyIGJpZ1ogPSA5MDsgICAgIC8vICdaJ1xuXG4gIHZhciBsaXR0bGVBID0gOTc7ICAvLyAnYSdcbiAgdmFyIGxpdHRsZVogPSAxMjI7IC8vICd6J1xuXG4gIHZhciB6ZXJvID0gNDg7ICAgICAvLyAnMCdcbiAgdmFyIG5pbmUgPSA1NzsgICAgIC8vICc5J1xuXG4gIHZhciBwbHVzID0gNDM7ICAgICAvLyAnKydcbiAgdmFyIHNsYXNoID0gNDc7ICAgIC8vICcvJ1xuXG4gIHZhciBsaXR0bGVPZmZzZXQgPSAyNjtcbiAgdmFyIG51bWJlck9mZnNldCA9IDUyO1xuXG4gIC8vIDAgLSAyNTogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcbiAgaWYgKGJpZ0EgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gYmlnWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBiaWdBKTtcbiAgfVxuXG4gIC8vIDI2IC0gNTE6IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XG4gIGlmIChsaXR0bGVBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGxpdHRsZVopIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gbGl0dGxlQSArIGxpdHRsZU9mZnNldCk7XG4gIH1cblxuICAvLyA1MiAtIDYxOiAwMTIzNDU2Nzg5XG4gIGlmICh6ZXJvIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IG5pbmUpIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gemVybyArIG51bWJlck9mZnNldCk7XG4gIH1cblxuICAvLyA2MjogK1xuICBpZiAoY2hhckNvZGUgPT0gcGx1cykge1xuICAgIHJldHVybiA2MjtcbiAgfVxuXG4gIC8vIDYzOiAvXG4gIGlmIChjaGFyQ29kZSA9PSBzbGFzaCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuXG4gIC8vIEludmFsaWQgYmFzZTY0IGRpZ2l0LlxuICByZXR1cm4gLTE7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG5leHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcbmV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZSBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoLlxuICpcbiAqIEBwYXJhbSBhTG93IEluZGljZXMgaGVyZSBhbmQgbG93ZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhSGlnaCBJbmRpY2VzIGhlcmUgYW5kIGhpZ2hlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgYmVpbmcgc2VhcmNoZWQgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgbm9uLWVtcHR5IGFycmF5IGJlaW5nIHNlYXJjaGVkLlxuICogQHBhcmFtIGFDb21wYXJlIEZ1bmN0aW9uIHdoaWNoIHRha2VzIHR3byBlbGVtZW50cyBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gcmVjdXJzaXZlU2VhcmNoKGFMb3csIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICAvLyBUaGlzIGZ1bmN0aW9uIHRlcm1pbmF0ZXMgd2hlbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAvL1xuICAvLyAgIDEuIFdlIGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQgd2UgYXJlIGxvb2tpbmcgZm9yLlxuICAvL1xuICAvLyAgIDIuIFdlIGRpZCBub3QgZmluZCB0aGUgZXhhY3QgZWxlbWVudCwgYnV0IHdlIGNhbiByZXR1cm4gdGhlIGluZGV4IG9mXG4gIC8vICAgICAgdGhlIG5leHQtY2xvc2VzdCBlbGVtZW50LlxuICAvL1xuICAvLyAgIDMuIFdlIGRpZCBub3QgZmluZCB0aGUgZXhhY3QgZWxlbWVudCwgYW5kIHRoZXJlIGlzIG5vIG5leHQtY2xvc2VzdFxuICAvLyAgICAgIGVsZW1lbnQgdGhhbiB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLCBzbyB3ZSByZXR1cm4gLTEuXG4gIHZhciBtaWQgPSBNYXRoLmZsb29yKChhSGlnaCAtIGFMb3cpIC8gMikgKyBhTG93O1xuICB2YXIgY21wID0gYUNvbXBhcmUoYU5lZWRsZSwgYUhheXN0YWNrW21pZF0sIHRydWUpO1xuICBpZiAoY21wID09PSAwKSB7XG4gICAgLy8gRm91bmQgdGhlIGVsZW1lbnQgd2UgYXJlIGxvb2tpbmcgZm9yLlxuICAgIHJldHVybiBtaWQ7XG4gIH1cbiAgZWxzZSBpZiAoY21wID4gMCkge1xuICAgIC8vIE91ciBuZWVkbGUgaXMgZ3JlYXRlciB0aGFuIGFIYXlzdGFja1ttaWRdLlxuICAgIGlmIChhSGlnaCAtIG1pZCA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSB1cHBlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChtaWQsIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGV4YWN0IG5lZWRsZSBlbGVtZW50IHdhcyBub3QgZm91bmQgaW4gdGhpcyBoYXlzdGFjay4gRGV0ZXJtaW5lIGlmXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIGFIaWdoIDwgYUhheXN0YWNrLmxlbmd0aCA/IGFIaWdoIDogLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIC8vIE91ciBuZWVkbGUgaXMgbGVzcyB0aGFuIGFIYXlzdGFja1ttaWRdLlxuICAgIGlmIChtaWQgLSBhTG93ID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIGxvd2VyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKGFMb3csIG1pZCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhTG93IDwgMCA/IC0xIDogYUxvdztcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2ggd2hpY2ggd2lsbCBhbHdheXMgdHJ5IGFuZCByZXR1cm5cbiAqIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBlbGVtZW50IGlmIHRoZXJlIGlzIG5vIGV4YWN0IGhpdC4gVGhpcyBpcyBiZWNhdXNlXG4gKiBtYXBwaW5ncyBiZXR3ZWVuIG9yaWdpbmFsIGFuZCBnZW5lcmF0ZWQgbGluZS9jb2wgcGFpcnMgYXJlIHNpbmdsZSBwb2ludHMsXG4gKiBhbmQgdGhlcmUgaXMgYW4gaW1wbGljaXQgcmVnaW9uIGJldHdlZW4gZWFjaCBvZiB0aGVtLCBzbyBhIG1pc3MganVzdCBtZWFuc1xuICogdGhhdCB5b3UgYXJlbid0IG9uIHRoZSB2ZXJ5IHN0YXJ0IG9mIGEgcmVnaW9uLlxuICpcbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IHlvdSBhcmUgbG9va2luZyBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBhcnJheSB0aGF0IGlzIGJlaW5nIHNlYXJjaGVkLlxuICogQHBhcmFtIGFDb21wYXJlIEEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgdGhlIG5lZWRsZSBhbmQgYW4gZWxlbWVudCBpbiB0aGVcbiAqICAgICBhcnJheSBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbmVlZGxlIGlzIGxlc3NcbiAqICAgICB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIHRoZSBlbGVtZW50LCByZXNwZWN0aXZlbHkuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKi9cbmV4cG9ydHMuc2VhcmNoID0gZnVuY3Rpb24gc2VhcmNoKGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIGlmIChhSGF5c3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgdmFyIGluZGV4ID0gcmVjdXJzaXZlU2VhcmNoKC0xLCBhSGF5c3RhY2subGVuZ3RoLCBhTmVlZGxlLCBhSGF5c3RhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ29tcGFyZSwgYUJpYXMgfHwgZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvLyBXZSBoYXZlIGZvdW5kIGVpdGhlciB0aGUgZXhhY3QgZWxlbWVudCwgb3IgdGhlIG5leHQtY2xvc2VzdCBlbGVtZW50IHRoYW5cbiAgLy8gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci4gSG93ZXZlciwgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgc3VjaFxuICAvLyBlbGVtZW50LiBNYWtlIHN1cmUgd2UgYWx3YXlzIHJldHVybiB0aGUgc21hbGxlc3Qgb2YgdGhlc2UuXG4gIHdoaWxlIChpbmRleCAtIDEgPj0gMCkge1xuICAgIGlmIChhQ29tcGFyZShhSGF5c3RhY2tbaW5kZXhdLCBhSGF5c3RhY2tbaW5kZXggLSAxXSwgdHJ1ZSkgIT09IDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAtLWluZGV4O1xuICB9XG5cbiAgcmV0dXJuIGluZGV4O1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLy8gSXQgdHVybnMgb3V0IHRoYXQgc29tZSAobW9zdD8pIEphdmFTY3JpcHQgZW5naW5lcyBkb24ndCBzZWxmLWhvc3Rcbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAuIFRoaXMgbWFrZXMgc2Vuc2UgYmVjYXVzZSBDKysgd2lsbCBsaWtlbHkgcmVtYWluXG4vLyBmYXN0ZXIgdGhhbiBKUyB3aGVuIGRvaW5nIHJhdyBDUFUtaW50ZW5zaXZlIHNvcnRpbmcuIEhvd2V2ZXIsIHdoZW4gdXNpbmcgYVxuLy8gY3VzdG9tIGNvbXBhcmF0b3IgZnVuY3Rpb24sIGNhbGxpbmcgYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aGUgVk0ncyBDKysgYW5kXG4vLyBKSVQnZCBKUyBpcyByYXRoZXIgc2xvdyAqYW5kKiBsb3NlcyBKSVQgdHlwZSBpbmZvcm1hdGlvbiwgcmVzdWx0aW5nIGluXG4vLyB3b3JzZSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIGNvbXBhcmF0b3IgZnVuY3Rpb24gdGhhbiB3b3VsZCBiZSBvcHRpbWFsLiBJblxuLy8gZmFjdCwgd2hlbiBzb3J0aW5nIHdpdGggYSBjb21wYXJhdG9yLCB0aGVzZSBjb3N0cyBvdXR3ZWlnaCB0aGUgYmVuZWZpdHMgb2Zcbi8vIHNvcnRpbmcgaW4gQysrLiBCeSB1c2luZyBvdXIgb3duIEpTLWltcGxlbWVudGVkIFF1aWNrIFNvcnQgKGJlbG93KSwgd2UgZ2V0XG4vLyBhIH4zNTAwbXMgbWVhbiBzcGVlZC11cCBpbiBgYmVuY2gvYmVuY2guaHRtbGAuXG5cbi8qKlxuICogU3dhcCB0aGUgZWxlbWVudHMgaW5kZXhlZCBieSBgeGAgYW5kIGB5YCBpbiB0aGUgYXJyYXkgYGFyeWAuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gKiAgICAgICAgVGhlIGFycmF5LlxuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGl0ZW0uXG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogICAgICAgIFRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIGl0ZW0uXG4gKi9cbmZ1bmN0aW9uIHN3YXAoYXJ5LCB4LCB5KSB7XG4gIHZhciB0ZW1wID0gYXJ5W3hdO1xuICBhcnlbeF0gPSBhcnlbeV07XG4gIGFyeVt5XSA9IHRlbXA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIHdpdGhpbiB0aGUgcmFuZ2UgYGxvdyAuLiBoaWdoYCBpbmNsdXNpdmUuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGxvd1xuICogICAgICAgIFRoZSBsb3dlciBib3VuZCBvbiB0aGUgcmFuZ2UuXG4gKiBAcGFyYW0ge051bWJlcn0gaGlnaFxuICogICAgICAgIFRoZSB1cHBlciBib3VuZCBvbiB0aGUgcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbUludEluUmFuZ2UobG93LCBoaWdoKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKGxvdyArIChNYXRoLnJhbmRvbSgpICogKGhpZ2ggLSBsb3cpKSk7XG59XG5cbi8qKlxuICogVGhlIFF1aWNrIFNvcnQgYWxnb3JpdGhtLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICogQHBhcmFtIHtOdW1iZXJ9IHBcbiAqICAgICAgICBTdGFydCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSByXG4gKiAgICAgICAgRW5kIGluZGV4IG9mIHRoZSBhcnJheVxuICovXG5mdW5jdGlvbiBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHAsIHIpIHtcbiAgLy8gSWYgb3VyIGxvd2VyIGJvdW5kIGlzIGxlc3MgdGhhbiBvdXIgdXBwZXIgYm91bmQsIHdlICgxKSBwYXJ0aXRpb24gdGhlXG4gIC8vIGFycmF5IGludG8gdHdvIHBpZWNlcyBhbmQgKDIpIHJlY3Vyc2Ugb24gZWFjaCBoYWxmLiBJZiBpdCBpcyBub3QsIHRoaXMgaXNcbiAgLy8gdGhlIGVtcHR5IGFycmF5IGFuZCBvdXIgYmFzZSBjYXNlLlxuXG4gIGlmIChwIDwgcikge1xuICAgIC8vICgxKSBQYXJ0aXRpb25pbmcuXG4gICAgLy9cbiAgICAvLyBUaGUgcGFydGl0aW9uaW5nIGNob29zZXMgYSBwaXZvdCBiZXR3ZWVuIGBwYCBhbmQgYHJgIGFuZCBtb3ZlcyBhbGxcbiAgICAvLyBlbGVtZW50cyB0aGF0IGFyZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBpdm90IHRvIHRoZSBiZWZvcmUgaXQsIGFuZFxuICAgIC8vIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBhcmUgZ3JlYXRlciB0aGFuIGl0IGFmdGVyIGl0LiBUaGUgZWZmZWN0IGlzIHRoYXRcbiAgICAvLyBvbmNlIHBhcnRpdGlvbiBpcyBkb25lLCB0aGUgcGl2b3QgaXMgaW4gdGhlIGV4YWN0IHBsYWNlIGl0IHdpbGwgYmUgd2hlblxuICAgIC8vIHRoZSBhcnJheSBpcyBwdXQgaW4gc29ydGVkIG9yZGVyLCBhbmQgaXQgd2lsbCBub3QgbmVlZCB0byBiZSBtb3ZlZFxuICAgIC8vIGFnYWluLiBUaGlzIHJ1bnMgaW4gTyhuKSB0aW1lLlxuXG4gICAgLy8gQWx3YXlzIGNob29zZSBhIHJhbmRvbSBwaXZvdCBzbyB0aGF0IGFuIGlucHV0IGFycmF5IHdoaWNoIGlzIHJldmVyc2VcbiAgICAvLyBzb3J0ZWQgZG9lcyBub3QgY2F1c2UgTyhuXjIpIHJ1bm5pbmcgdGltZS5cbiAgICB2YXIgcGl2b3RJbmRleCA9IHJhbmRvbUludEluUmFuZ2UocCwgcik7XG4gICAgdmFyIGkgPSBwIC0gMTtcblxuICAgIHN3YXAoYXJ5LCBwaXZvdEluZGV4LCByKTtcbiAgICB2YXIgcGl2b3QgPSBhcnlbcl07XG5cbiAgICAvLyBJbW1lZGlhdGVseSBhZnRlciBgamAgaXMgaW5jcmVtZW50ZWQgaW4gdGhpcyBsb29wLCB0aGUgZm9sbG93aW5nIGhvbGRcbiAgICAvLyB0cnVlOlxuICAgIC8vXG4gICAgLy8gICAqIEV2ZXJ5IGVsZW1lbnQgaW4gYGFyeVtwIC4uIGldYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBpdm90LlxuICAgIC8vXG4gICAgLy8gICAqIEV2ZXJ5IGVsZW1lbnQgaW4gYGFyeVtpKzEgLi4gai0xXWAgaXMgZ3JlYXRlciB0aGFuIHRoZSBwaXZvdC5cbiAgICBmb3IgKHZhciBqID0gcDsgaiA8IHI7IGorKykge1xuICAgICAgaWYgKGNvbXBhcmF0b3IoYXJ5W2pdLCBwaXZvdCkgPD0gMCkge1xuICAgICAgICBpICs9IDE7XG4gICAgICAgIHN3YXAoYXJ5LCBpLCBqKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2FwKGFyeSwgaSArIDEsIGopO1xuICAgIHZhciBxID0gaSArIDE7XG5cbiAgICAvLyAoMikgUmVjdXJzZSBvbiBlYWNoIGhhbGYuXG5cbiAgICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHAsIHEgLSAxKTtcbiAgICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHEgKyAxLCByKTtcbiAgfVxufVxuXG4vKipcbiAqIFNvcnQgdGhlIGdpdmVuIGFycmF5IGluLXBsYWNlIHdpdGggdGhlIGdpdmVuIGNvbXBhcmF0b3IgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gKiAgICAgICAgQW4gYXJyYXkgdG8gc29ydC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXBhcmF0b3JcbiAqICAgICAgICBGdW5jdGlvbiB0byB1c2UgdG8gY29tcGFyZSB0d28gaXRlbXMuXG4gKi9cbmV4cG9ydHMucXVpY2tTb3J0ID0gZnVuY3Rpb24gKGFyeSwgY29tcGFyYXRvcikge1xuICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIDAsIGFyeS5sZW5ndGggLSAxKTtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG52YXIgYmluYXJ5U2VhcmNoID0gcmVxdWlyZSgnLi9iaW5hcnktc2VhcmNoJyk7XG52YXIgQXJyYXlTZXQgPSByZXF1aXJlKCcuL2FycmF5LXNldCcpLkFycmF5U2V0O1xudmFyIGJhc2U2NFZMUSA9IHJlcXVpcmUoJy4vYmFzZTY0LXZscScpO1xudmFyIHF1aWNrU29ydCA9IHJlcXVpcmUoJy4vcXVpY2stc29ydCcpLnF1aWNrU29ydDtcblxuZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICByZXR1cm4gc291cmNlTWFwLnNlY3Rpb25zICE9IG51bGxcbiAgICA/IG5ldyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwKVxuICAgIDogbmV3IEJhc2ljU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwKTtcbn1cblxuU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcCA9IGZ1bmN0aW9uKGFTb3VyY2VNYXApIHtcbiAgcmV0dXJuIEJhc2ljU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKTtcbn1cblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8vIGBfX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmQgYF9fb3JpZ2luYWxNYXBwaW5nc2AgYXJlIGFycmF5cyB0aGF0IGhvbGQgdGhlXG4vLyBwYXJzZWQgbWFwcGluZyBjb29yZGluYXRlcyBmcm9tIHRoZSBzb3VyY2UgbWFwJ3MgXCJtYXBwaW5nc1wiIGF0dHJpYnV0ZS4gVGhleVxuLy8gYXJlIGxhemlseSBpbnN0YW50aWF0ZWQsIGFjY2Vzc2VkIHZpYSB0aGUgYF9nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGdldHRlcnMgcmVzcGVjdGl2ZWx5LCBhbmQgd2Ugb25seSBwYXJzZSB0aGUgbWFwcGluZ3Ncbi8vIGFuZCBjcmVhdGUgdGhlc2UgYXJyYXlzIG9uY2UgcXVlcmllZCBmb3IgYSBzb3VyY2UgbG9jYXRpb24uIFdlIGp1bXAgdGhyb3VnaFxuLy8gdGhlc2UgaG9vcHMgYmVjYXVzZSB0aGVyZSBjYW4gYmUgbWFueSB0aG91c2FuZHMgb2YgbWFwcGluZ3MsIGFuZCBwYXJzaW5nXG4vLyB0aGVtIGlzIGV4cGVuc2l2ZSwgc28gd2Ugb25seSB3YW50IHRvIGRvIGl0IGlmIHdlIG11c3QuXG4vL1xuLy8gRWFjaCBvYmplY3QgaW4gdGhlIGFycmF5cyBpcyBvZiB0aGUgZm9ybTpcbi8vXG4vLyAgICAge1xuLy8gICAgICAgZ2VuZXJhdGVkTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIGdlbmVyYXRlZENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgc291cmNlOiBUaGUgcGF0aCB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUgdGhhdCBnZW5lcmF0ZWQgdGhpc1xuLy8gICAgICAgICAgICAgICBjaHVuayBvZiBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxMaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4vLyAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBvcmlnaW5hbENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4vLyAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBzeW1ib2wgd2hpY2ggZ2VuZXJhdGVkIHRoaXMgY2h1bmsgb2Zcbi8vICAgICAgICAgICAgIGNvZGUuXG4vLyAgICAgfVxuLy9cbi8vIEFsbCBwcm9wZXJ0aWVzIGV4Y2VwdCBmb3IgYGdlbmVyYXRlZExpbmVgIGFuZCBgZ2VuZXJhdGVkQ29sdW1uYCBjYW4gYmVcbi8vIGBudWxsYC5cbi8vXG4vLyBgX2dlbmVyYXRlZE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zLlxuLy9cbi8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zLlxuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IG51bGw7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnX2dlbmVyYXRlZE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncykge1xuICAgICAgdGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncywgdGhpcy5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzO1xuICB9XG59KTtcblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG51bGw7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnX29yaWdpbmFsTWFwcGluZ3MnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzO1xuICB9XG59KTtcblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfY2hhcklzTWFwcGluZ1NlcGFyYXRvcihhU3RyLCBpbmRleCkge1xuICAgIHZhciBjID0gYVN0ci5jaGFyQXQoaW5kZXgpO1xuICAgIHJldHVybiBjID09PSBcIjtcIiB8fCBjID09PSBcIixcIjtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IF9wYXJzZU1hcHBpbmdzXCIpO1xuICB9O1xuXG5Tb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVIgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVIgPSAyO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5Tb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGVhY2ggbWFwcGluZyBiZXR3ZWVuIGFuIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiBhbmQgYVxuICogZ2VuZXJhdGVkIGxpbmUvY29sdW1uIGluIHRoaXMgc291cmNlIG1hcC5cbiAqXG4gKiBAcGFyYW0gRnVuY3Rpb24gYUNhbGxiYWNrXG4gKiAgICAgICAgVGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggZWFjaCBtYXBwaW5nLlxuICogQHBhcmFtIE9iamVjdCBhQ29udGV4dFxuICogICAgICAgIE9wdGlvbmFsLiBJZiBzcGVjaWZpZWQsIHRoaXMgb2JqZWN0IHdpbGwgYmUgdGhlIHZhbHVlIG9mIGB0aGlzYCBldmVyeVxuICogICAgICAgIHRpbWUgdGhhdCBgYUNhbGxiYWNrYCBpcyBjYWxsZWQuXG4gKiBAcGFyYW0gYU9yZGVyXG4gKiAgICAgICAgRWl0aGVyIGBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVJgIG9yXG4gKiAgICAgICAgYFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSYC4gU3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgdG9cbiAqICAgICAgICBpdGVyYXRlIG92ZXIgdGhlIG1hcHBpbmdzIHNvcnRlZCBieSB0aGUgZ2VuZXJhdGVkIGZpbGUncyBsaW5lL2NvbHVtblxuICogICAgICAgIG9yZGVyIG9yIHRoZSBvcmlnaW5hbCdzIHNvdXJjZS9saW5lL2NvbHVtbiBvcmRlciwgcmVzcGVjdGl2ZWx5LiBEZWZhdWx0cyB0b1xuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVJgLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZWFjaE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9lYWNoTWFwcGluZyhhQ2FsbGJhY2ssIGFDb250ZXh0LCBhT3JkZXIpIHtcbiAgICB2YXIgY29udGV4dCA9IGFDb250ZXh0IHx8IG51bGw7XG4gICAgdmFyIG9yZGVyID0gYU9yZGVyIHx8IFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUjtcblxuICAgIHZhciBtYXBwaW5ncztcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XG4gICAgY2FzZSBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUjpcbiAgICAgIG1hcHBpbmdzID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG9yZGVyIG9mIGl0ZXJhdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZVJvb3QgPSB0aGlzLnNvdXJjZVJvb3Q7XG4gICAgbWFwcGluZ3MubWFwKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICB2YXIgc291cmNlID0gbWFwcGluZy5zb3VyY2UgPT09IG51bGwgPyBudWxsIDogdGhpcy5fc291cmNlcy5hdChtYXBwaW5nLnNvdXJjZSk7XG4gICAgICBpZiAoc291cmNlICE9IG51bGwgJiYgc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbixcbiAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgb3JpZ2luYWxDb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sXG4gICAgICAgIG5hbWU6IG1hcHBpbmcubmFtZSA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpXG4gICAgICB9O1xuICAgIH0sIHRoaXMpLmZvckVhY2goYUNhbGxiYWNrLCBjb250ZXh0KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwcm92aWRlZC4gSWYgbm8gY29sdW1uIGlzIHByb3ZpZGVkLCByZXR1cm5zIGFsbCBtYXBwaW5nc1xuICogY29ycmVzcG9uZGluZyB0byBhIGVpdGhlciB0aGUgbGluZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciBvciB0aGUgbmV4dFxuICogY2xvc2VzdCBsaW5lIHRoYXQgaGFzIGFueSBtYXBwaW5ncy4gT3RoZXJ3aXNlLCByZXR1cm5zIGFsbCBtYXBwaW5nc1xuICogY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gbGluZSBhbmQgZWl0aGVyIHRoZSBjb2x1bW4gd2UgYXJlIHNlYXJjaGluZyBmb3JcbiAqIG9yIHRoZSBuZXh0IGNsb3Nlc3QgY29sdW1uIHRoYXQgaGFzIGFueSBvZmZzZXRzLlxuICpcbiAqIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IE9wdGlvbmFsLiB0aGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBhcnJheSBvZiBvYmplY3RzIGlzIHJldHVybmVkLCBlYWNoIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmFsbEdlbmVyYXRlZFBvc2l0aW9uc0ZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2FsbEdlbmVyYXRlZFBvc2l0aW9uc0ZvcihhQXJncykge1xuICAgIHZhciBsaW5lID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyk7XG5cbiAgICAvLyBXaGVuIHRoZXJlIGlzIG5vIGV4YWN0IG1hdGNoLCBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmdcbiAgICAvLyByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBtYXBwaW5nIGxlc3MgdGhhbiB0aGUgbmVlZGxlLiBCeVxuICAgIC8vIHNldHRpbmcgbmVlZGxlLm9yaWdpbmFsQ29sdW1uIHRvIDAsIHdlIHRodXMgZmluZCB0aGUgbGFzdCBtYXBwaW5nIGZvclxuICAgIC8vIHRoZSBnaXZlbiBsaW5lLCBwcm92aWRlZCBzdWNoIGEgbWFwcGluZyBleGlzdHMuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKSxcbiAgICAgIG9yaWdpbmFsTGluZTogbGluZSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicsIDApXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgbmVlZGxlLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBuZWVkbGUuc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhuZWVkbGUuc291cmNlKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBuZWVkbGUuc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKG5lZWRsZS5zb3VyY2UpO1xuXG4gICAgdmFyIG1hcHBpbmdzID0gW107XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhuZWVkbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsTGluZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxDb2x1bW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChhQXJncy5jb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgb3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG5cbiAgICAgICAgLy8gSXRlcmF0ZSB1bnRpbCBlaXRoZXIgd2UgcnVuIG91dCBvZiBtYXBwaW5ncywgb3Igd2UgcnVuIGludG9cbiAgICAgICAgLy8gYSBtYXBwaW5nIGZvciBhIGRpZmZlcmVudCBsaW5lIHRoYW4gdGhlIG9uZSB3ZSBmb3VuZC4gU2luY2VcbiAgICAgICAgLy8gbWFwcGluZ3MgYXJlIHNvcnRlZCwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG1hcHBpbmdzIGZvclxuICAgICAgICAvLyB0aGUgbGluZSB3ZSBmb3VuZC5cbiAgICAgICAgd2hpbGUgKG1hcHBpbmcgJiYgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IG9yaWdpbmFsTGluZSkge1xuICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbKytpbmRleF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBvcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgLy8gSXRlcmF0ZSB1bnRpbCBlaXRoZXIgd2UgcnVuIG91dCBvZiBtYXBwaW5ncywgb3Igd2UgcnVuIGludG9cbiAgICAgICAgLy8gYSBtYXBwaW5nIGZvciBhIGRpZmZlcmVudCBsaW5lIHRoYW4gdGhlIG9uZSB3ZSB3ZXJlIHNlYXJjaGluZyBmb3IuXG4gICAgICAgIC8vIFNpbmNlIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmXG4gICAgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gbGluZSAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9PSBvcmlnaW5hbENvbHVtbikge1xuICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbKytpbmRleF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWFwcGluZ3M7XG4gIH07XG5cbmV4cG9ydHMuU291cmNlTWFwQ29uc3VtZXIgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBBIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBhcnNlZCBzb3VyY2UgbWFwIHdoaWNoIHdlIGNhblxuICogcXVlcnkgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBmaWxlIHBvc2l0aW9ucyBieSBnaXZpbmcgaXQgYSBmaWxlXG4gKiBwb3NpdGlvbiBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqXG4gKiBUaGUgb25seSBwYXJhbWV0ZXIgaXMgdGhlIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3JcbiAqIGFscmVhZHkgcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYywgc291cmNlIG1hcHMgaGF2ZSB0aGVcbiAqIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICpcbiAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICogICAtIHNvdXJjZXM6IEFuIGFycmF5IG9mIFVSTHMgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAqICAgLSBuYW1lczogQW4gYXJyYXkgb2YgaWRlbnRpZmllcnMgd2hpY2ggY2FuIGJlIHJlZmVycmVuY2VkIGJ5IGluZGl2aWR1YWwgbWFwcGluZ3MuXG4gKiAgIC0gc291cmNlUm9vdDogT3B0aW9uYWwuIFRoZSBVUkwgcm9vdCBmcm9tIHdoaWNoIGFsbCBzb3VyY2VzIGFyZSByZWxhdGl2ZS5cbiAqICAgLSBzb3VyY2VzQ29udGVudDogT3B0aW9uYWwuIEFuIGFycmF5IG9mIGNvbnRlbnRzIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbWFwcGluZ3M6IEEgc3RyaW5nIG9mIGJhc2U2NCBWTFFzIHdoaWNoIGNvbnRhaW4gdGhlIGFjdHVhbCBtYXBwaW5ncy5cbiAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gKlxuICogSGVyZSBpcyBhbiBleGFtcGxlIHNvdXJjZSBtYXAsIHRha2VuIGZyb20gdGhlIHNvdXJjZSBtYXAgc3BlY1swXTpcbiAqXG4gKiAgICAge1xuICogICAgICAgdmVyc2lvbiA6IDMsXG4gKiAgICAgICBmaWxlOiBcIm91dC5qc1wiLFxuICogICAgICAgc291cmNlUm9vdCA6IFwiXCIsXG4gKiAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAqICAgICAgIG1hcHBpbmdzOiBcIkFBLEFCOztBQkNERTtcIlxuICogICAgIH1cbiAqXG4gKiBbMF06IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVUxUkdBZWhRd1J5cFVUb3ZGMUtSbHBpT0Z6ZTBiLV8yZ2M2ZkFIMEtZMGsvZWRpdD9wbGk9MSNcbiAqL1xuZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgfVxuXG4gIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICB2YXIgc291cmNlcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXMnKTtcbiAgLy8gU2FzcyAzLjMgbGVhdmVzIG91dCB0aGUgJ25hbWVzJyBhcnJheSwgc28gd2UgZGV2aWF0ZSBmcm9tIHRoZSBzcGVjICh3aGljaFxuICAvLyByZXF1aXJlcyB0aGUgYXJyYXkpIHRvIHBsYXkgbmljZSBoZXJlLlxuICB2YXIgbmFtZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICduYW1lcycsIFtdKTtcbiAgdmFyIHNvdXJjZVJvb3QgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VSb290JywgbnVsbCk7XG4gIHZhciBzb3VyY2VzQ29udGVudCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXNDb250ZW50JywgbnVsbCk7XG4gIHZhciBtYXBwaW5ncyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ21hcHBpbmdzJyk7XG4gIHZhciBmaWxlID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnZmlsZScsIG51bGwpO1xuXG4gIC8vIE9uY2UgYWdhaW4sIFNhc3MgZGV2aWF0ZXMgZnJvbSB0aGUgc3BlYyBhbmQgc3VwcGxpZXMgdGhlIHZlcnNpb24gYXMgYVxuICAvLyBzdHJpbmcgcmF0aGVyIHRoYW4gYSBudW1iZXIsIHNvIHdlIHVzZSBsb29zZSBlcXVhbGl0eSBjaGVja2luZyBoZXJlLlxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICBzb3VyY2VzID0gc291cmNlc1xuICAgIC5tYXAoU3RyaW5nKVxuICAgIC8vIFNvbWUgc291cmNlIG1hcHMgcHJvZHVjZSByZWxhdGl2ZSBzb3VyY2UgcGF0aHMgbGlrZSBcIi4vZm9vLmpzXCIgaW5zdGVhZCBvZlxuICAgIC8vIFwiZm9vLmpzXCIuICBOb3JtYWxpemUgdGhlc2UgZmlyc3Qgc28gdGhhdCBmdXR1cmUgY29tcGFyaXNvbnMgd2lsbCBzdWNjZWVkLlxuICAgIC8vIFNlZSBidWd6aWwubGEvMTA5MDc2OC5cbiAgICAubWFwKHV0aWwubm9ybWFsaXplKVxuICAgIC8vIEFsd2F5cyBlbnN1cmUgdGhhdCBhYnNvbHV0ZSBzb3VyY2VzIGFyZSBpbnRlcm5hbGx5IHN0b3JlZCByZWxhdGl2ZSB0b1xuICAgIC8vIHRoZSBzb3VyY2Ugcm9vdCwgaWYgdGhlIHNvdXJjZSByb290IGlzIGFic29sdXRlLiBOb3QgZG9pbmcgdGhpcyB3b3VsZFxuICAgIC8vIGJlIHBhcnRpY3VsYXJseSBwcm9ibGVtYXRpYyB3aGVuIHRoZSBzb3VyY2Ugcm9vdCBpcyBhIHByZWZpeCBvZiB0aGVcbiAgICAvLyBzb3VyY2UgKHZhbGlkLCBidXQgd2h5Pz8pLiBTZWUgZ2l0aHViIGlzc3VlICMxOTkgYW5kIGJ1Z3ppbC5sYS8xMTg4OTgyLlxuICAgIC5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIHNvdXJjZVJvb3QgJiYgdXRpbC5pc0Fic29sdXRlKHNvdXJjZVJvb3QpICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2UpXG4gICAgICAgID8gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2UpXG4gICAgICAgIDogc291cmNlO1xuICAgIH0pO1xuXG4gIC8vIFBhc3MgYHRydWVgIGJlbG93IHRvIGFsbG93IGR1cGxpY2F0ZSBuYW1lcyBhbmQgc291cmNlcy4gV2hpbGUgc291cmNlIG1hcHNcbiAgLy8gYXJlIGludGVuZGVkIHRvIGJlIGNvbXByZXNzZWQgYW5kIGRlZHVwbGljYXRlZCwgdGhlIFR5cGVTY3JpcHQgY29tcGlsZXJcbiAgLy8gc29tZXRpbWVzIGdlbmVyYXRlcyBzb3VyY2UgbWFwcyB3aXRoIGR1cGxpY2F0ZXMgaW4gdGhlbS4gU2VlIEdpdGh1YiBpc3N1ZVxuICAvLyAjNzIgYW5kIGJ1Z3ppbC5sYS84ODk0OTIuXG4gIHRoaXMuX25hbWVzID0gQXJyYXlTZXQuZnJvbUFycmF5KG5hbWVzLm1hcChTdHJpbmcpLCB0cnVlKTtcbiAgdGhpcy5fc291cmNlcyA9IEFycmF5U2V0LmZyb21BcnJheShzb3VyY2VzLCB0cnVlKTtcblxuICB0aGlzLnNvdXJjZVJvb3QgPSBzb3VyY2VSb290O1xuICB0aGlzLnNvdXJjZXNDb250ZW50ID0gc291cmNlc0NvbnRlbnQ7XG4gIHRoaXMuX21hcHBpbmdzID0gbWFwcGluZ3M7XG4gIHRoaXMuZmlsZSA9IGZpbGU7XG59XG5cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3VtZXIgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBDcmVhdGUgYSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGZyb20gYSBTb3VyY2VNYXBHZW5lcmF0b3IuXG4gKlxuICogQHBhcmFtIFNvdXJjZU1hcEdlbmVyYXRvciBhU291cmNlTWFwXG4gKiAgICAgICAgVGhlIHNvdXJjZSBtYXAgdGhhdCB3aWxsIGJlIGNvbnN1bWVkLlxuICogQHJldHVybnMgQmFzaWNTb3VyY2VNYXBDb25zdW1lclxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9mcm9tU291cmNlTWFwKGFTb3VyY2VNYXApIHtcbiAgICB2YXIgc21jID0gT2JqZWN0LmNyZWF0ZShCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5cbiAgICB2YXIgbmFtZXMgPSBzbWMuX25hbWVzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX25hbWVzLnRvQXJyYXkoKSwgdHJ1ZSk7XG4gICAgdmFyIHNvdXJjZXMgPSBzbWMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fc291cmNlcy50b0FycmF5KCksIHRydWUpO1xuICAgIHNtYy5zb3VyY2VSb290ID0gYVNvdXJjZU1hcC5fc291cmNlUm9vdDtcbiAgICBzbWMuc291cmNlc0NvbnRlbnQgPSBhU291cmNlTWFwLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KHNtYy5fc291cmNlcy50b0FycmF5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWMuc291cmNlUm9vdCk7XG4gICAgc21jLmZpbGUgPSBhU291cmNlTWFwLl9maWxlO1xuXG4gICAgLy8gQmVjYXVzZSB3ZSBhcmUgbW9kaWZ5aW5nIHRoZSBlbnRyaWVzIChieSBjb252ZXJ0aW5nIHN0cmluZyBzb3VyY2VzIGFuZFxuICAgIC8vIG5hbWVzIHRvIGluZGljZXMgaW50byB0aGUgc291cmNlcyBhbmQgbmFtZXMgQXJyYXlTZXRzKSwgd2UgaGF2ZSB0byBtYWtlXG4gICAgLy8gYSBjb3B5IG9mIHRoZSBlbnRyeSBvciBlbHNlIGJhZCB0aGluZ3MgaGFwcGVuLiBTaGFyZWQgbXV0YWJsZSBzdGF0ZVxuICAgIC8vIHN0cmlrZXMgYWdhaW4hIFNlZSBnaXRodWIgaXNzdWUgIzE5MS5cblxuICAgIHZhciBnZW5lcmF0ZWRNYXBwaW5ncyA9IGFTb3VyY2VNYXAuX21hcHBpbmdzLnRvQXJyYXkoKS5zbGljZSgpO1xuICAgIHZhciBkZXN0R2VuZXJhdGVkTWFwcGluZ3MgPSBzbWMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBkZXN0T3JpZ2luYWxNYXBwaW5ncyA9IHNtYy5fX29yaWdpbmFsTWFwcGluZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNyY01hcHBpbmcgPSBnZW5lcmF0ZWRNYXBwaW5nc1tpXTtcbiAgICAgIHZhciBkZXN0TWFwcGluZyA9IG5ldyBNYXBwaW5nO1xuICAgICAgZGVzdE1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9IHNyY01hcHBpbmcuZ2VuZXJhdGVkTGluZTtcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHNyY01hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICBpZiAoc3JjTWFwcGluZy5zb3VyY2UpIHtcbiAgICAgICAgZGVzdE1hcHBpbmcuc291cmNlID0gc291cmNlcy5pbmRleE9mKHNyY01hcHBpbmcuc291cmNlKTtcbiAgICAgICAgZGVzdE1hcHBpbmcub3JpZ2luYWxMaW5lID0gc3JjTWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gc3JjTWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICBpZiAoc3JjTWFwcGluZy5uYW1lKSB7XG4gICAgICAgICAgZGVzdE1hcHBpbmcubmFtZSA9IG5hbWVzLmluZGV4T2Yoc3JjTWFwcGluZy5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlc3RPcmlnaW5hbE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgICAgfVxuXG4gICAgICBkZXN0R2VuZXJhdGVkTWFwcGluZ3MucHVzaChkZXN0TWFwcGluZyk7XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KHNtYy5fX29yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuXG4gICAgcmV0dXJuIHNtYztcbiAgfTtcblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBvcmlnaW5hbCBzb3VyY2VzLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc291cmNlcy50b0FycmF5KCkubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VSb290ICE9IG51bGwgPyB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzKSA6IHM7XG4gICAgfSwgdGhpcyk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFByb3ZpZGUgdGhlIEpJVCB3aXRoIGEgbmljZSBzaGFwZSAvIGhpZGRlbiBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gTWFwcGluZygpIHtcbiAgdGhpcy5nZW5lcmF0ZWRMaW5lID0gMDtcbiAgdGhpcy5nZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgdGhpcy5vcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gIHRoaXMubmFtZSA9IG51bGw7XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB2YXIgZ2VuZXJhdGVkTGluZSA9IDE7XG4gICAgdmFyIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbExpbmUgPSAwO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNTb3VyY2UgPSAwO1xuICAgIHZhciBwcmV2aW91c05hbWUgPSAwO1xuICAgIHZhciBsZW5ndGggPSBhU3RyLmxlbmd0aDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjYWNoZWRTZWdtZW50cyA9IHt9O1xuICAgIHZhciB0ZW1wID0ge307XG4gICAgdmFyIG9yaWdpbmFsTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgbWFwcGluZywgc3RyLCBzZWdtZW50LCBlbmQsIHZhbHVlO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnOycpIHtcbiAgICAgICAgZ2VuZXJhdGVkTGluZSsrO1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChhU3RyLmNoYXJBdChpbmRleCkgPT09ICcsJykge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG1hcHBpbmcgPSBuZXcgTWFwcGluZygpO1xuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBnZW5lcmF0ZWRMaW5lO1xuXG4gICAgICAgIC8vIEJlY2F1c2UgZWFjaCBvZmZzZXQgaXMgZW5jb2RlZCByZWxhdGl2ZSB0byB0aGUgcHJldmlvdXMgb25lLFxuICAgICAgICAvLyBtYW55IHNlZ21lbnRzIG9mdGVuIGhhdmUgdGhlIHNhbWUgZW5jb2RpbmcuIFdlIGNhbiBleHBsb2l0IHRoaXNcbiAgICAgICAgLy8gZmFjdCBieSBjYWNoaW5nIHRoZSBwYXJzZWQgdmFyaWFibGUgbGVuZ3RoIGZpZWxkcyBvZiBlYWNoIHNlZ21lbnQsXG4gICAgICAgIC8vIGFsbG93aW5nIHVzIHRvIGF2b2lkIGEgc2Vjb25kIHBhcnNlIGlmIHdlIGVuY291bnRlciB0aGUgc2FtZVxuICAgICAgICAvLyBzZWdtZW50IGFnYWluLlxuICAgICAgICBmb3IgKGVuZCA9IGluZGV4OyBlbmQgPCBsZW5ndGg7IGVuZCsrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgZW5kKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0ciA9IGFTdHIuc2xpY2UoaW5kZXgsIGVuZCk7XG5cbiAgICAgICAgc2VnbWVudCA9IGNhY2hlZFNlZ21lbnRzW3N0cl07XG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgaW5kZXggKz0gc3RyLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWdtZW50ID0gW107XG4gICAgICAgICAgd2hpbGUgKGluZGV4IDwgZW5kKSB7XG4gICAgICAgICAgICBiYXNlNjRWTFEuZGVjb2RlKGFTdHIsIGluZGV4LCB0ZW1wKTtcbiAgICAgICAgICAgIHZhbHVlID0gdGVtcC52YWx1ZTtcbiAgICAgICAgICAgIGluZGV4ID0gdGVtcC5yZXN0O1xuICAgICAgICAgICAgc2VnbWVudC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UsIGJ1dCBubyBsaW5lIGFuZCBjb2x1bW4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UgYW5kIGxpbmUsIGJ1dCBubyBjb2x1bW4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYWNoZWRTZWdtZW50c1tzdHJdID0gc2VnbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdlbmVyYXRlZCBjb2x1bW4uXG4gICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uID0gcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gKyBzZWdtZW50WzBdO1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAvLyBPcmlnaW5hbCBzb3VyY2UuXG4gICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSBwcmV2aW91c1NvdXJjZSArIHNlZ21lbnRbMV07XG4gICAgICAgICAgcHJldmlvdXNTb3VyY2UgKz0gc2VnbWVudFsxXTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGxpbmUuXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPSBwcmV2aW91c09yaWdpbmFsTGluZSArIHNlZ21lbnRbMl07XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZTtcbiAgICAgICAgICAvLyBMaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWRcbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSArPSAxO1xuXG4gICAgICAgICAgLy8gT3JpZ2luYWwgY29sdW1uLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBwcmV2aW91c09yaWdpbmFsQ29sdW1uICsgc2VnbWVudFszXTtcbiAgICAgICAgICBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA+IDQpIHtcbiAgICAgICAgICAgIC8vIE9yaWdpbmFsIG5hbWUuXG4gICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBwcmV2aW91c05hbWUgKyBzZWdtZW50WzRdO1xuICAgICAgICAgICAgcHJldmlvdXNOYW1lICs9IHNlZ21lbnRbNF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZ2VuZXJhdGVkTWFwcGluZ3MucHVzaChtYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvcmlnaW5hbE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBxdWlja1NvcnQoZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IGdlbmVyYXRlZE1hcHBpbmdzO1xuXG4gICAgcXVpY2tTb3J0KG9yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gb3JpZ2luYWxNYXBwaW5ncztcbiAgfTtcblxuLyoqXG4gKiBGaW5kIHRoZSBtYXBwaW5nIHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBoeXBvdGhldGljYWwgXCJuZWVkbGVcIiBtYXBwaW5nIHRoYXRcbiAqIHdlIGFyZSBzZWFyY2hpbmcgZm9yIGluIHRoZSBnaXZlbiBcImhheXN0YWNrXCIgb2YgbWFwcGluZ3MuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2ZpbmRNYXBwaW5nKGFOZWVkbGUsIGFNYXBwaW5ncywgYUxpbmVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ29sdW1uTmFtZSwgYUNvbXBhcmF0b3IsIGFCaWFzKSB7XG4gICAgLy8gVG8gcmV0dXJuIHRoZSBwb3NpdGlvbiB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgd2UgbXVzdCBmaXJzdCBmaW5kIHRoZVxuICAgIC8vIG1hcHBpbmcgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgdGhlbiByZXR1cm4gdGhlIG9wcG9zaXRlIHBvc2l0aW9uIGl0XG4gICAgLy8gcG9pbnRzIHRvLiBCZWNhdXNlIHRoZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB3ZSBjYW4gdXNlIGJpbmFyeSBzZWFyY2ggdG9cbiAgICAvLyBmaW5kIHRoZSBiZXN0IG1hcHBpbmcuXG5cbiAgICBpZiAoYU5lZWRsZVthTGluZU5hbWVdIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbmUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMSwgZ290ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhTmVlZGxlW2FMaW5lTmFtZV0pO1xuICAgIH1cbiAgICBpZiAoYU5lZWRsZVthQ29sdW1uTmFtZV0gPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb2x1bW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCwgZ290ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhTmVlZGxlW2FDb2x1bW5OYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJpbmFyeVNlYXJjaC5zZWFyY2goYU5lZWRsZSwgYU1hcHBpbmdzLCBhQ29tcGFyYXRvciwgYUJpYXMpO1xuICB9O1xuXG4vKipcbiAqIENvbXB1dGUgdGhlIGxhc3QgY29sdW1uIGZvciBlYWNoIGdlbmVyYXRlZCBtYXBwaW5nLiBUaGUgbGFzdCBjb2x1bW4gaXNcbiAqIGluY2x1c2l2ZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29tcHV0ZUNvbHVtblNwYW5zID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfY29tcHV0ZUNvbHVtblNwYW5zKCkge1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICAvLyBNYXBwaW5ncyBkbyBub3QgY29udGFpbiBhIGZpZWxkIGZvciB0aGUgbGFzdCBnZW5lcmF0ZWQgY29sdW1udC4gV2VcbiAgICAgIC8vIGNhbiBjb21lIHVwIHdpdGggYW4gb3B0aW1pc3RpYyBlc3RpbWF0ZSwgaG93ZXZlciwgYnkgYXNzdW1pbmcgdGhhdFxuICAgICAgLy8gbWFwcGluZ3MgYXJlIGNvbnRpZ3VvdXMgKGkuZS4gZ2l2ZW4gdHdvIGNvbnNlY3V0aXZlIG1hcHBpbmdzLCB0aGVcbiAgICAgIC8vIGZpcnN0IG1hcHBpbmcgZW5kcyB3aGVyZSB0aGUgc2Vjb25kIG9uZSBzdGFydHMpLlxuICAgICAgaWYgKGluZGV4ICsgMSA8IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aCkge1xuICAgICAgICB2YXIgbmV4dE1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleCArIDFdO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5leHRNYXBwaW5nLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5nLmxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBsYXN0IG1hcHBpbmcgZm9yIGVhY2ggbGluZSBzcGFucyB0aGUgZW50aXJlIGxpbmUuXG4gICAgICBtYXBwaW5nLmxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBJbmZpbml0eTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkXG4gKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBiaWFzOiBFaXRoZXIgJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdTb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgb3IgbnVsbC5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9vcmlnaW5hbFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIGdlbmVyYXRlZExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgZ2VuZXJhdGVkQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MsXG4gICAgICBcImdlbmVyYXRlZExpbmVcIixcbiAgICAgIFwiZ2VuZXJhdGVkQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9PT0gbmVlZGxlLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdzb3VyY2UnLCBudWxsKTtcbiAgICAgICAgaWYgKHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuYXQoc291cmNlKTtcbiAgICAgICAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbih0aGlzLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBuYW1lID0gdXRpbC5nZXRBcmcobWFwcGluZywgJ25hbWUnLCBudWxsKTtcbiAgICAgICAgaWYgKG5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICBuYW1lID0gdGhpcy5fbmFtZXMuYXQobmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnb3JpZ2luYWxMaW5lJywgbnVsbCksXG4gICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnb3JpZ2luYWxDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGwsXG4gICAgICBuYW1lOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHRoZSBzb3VyY2UgY29udGVudCBmb3IgZXZlcnkgc291cmNlIGluIHRoZSBzb3VyY2VcbiAqIG1hcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXJfaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKSB7XG4gICAgaWYgKCF0aGlzLnNvdXJjZXNDb250ZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50Lmxlbmd0aCA+PSB0aGlzLl9zb3VyY2VzLnNpemUoKSAmJlxuICAgICAgIXRoaXMuc291cmNlc0NvbnRlbnQuc29tZShmdW5jdGlvbiAoc2MpIHsgcmV0dXJuIHNjID09IG51bGw7IH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICogb3JpZ2luYWwgc291cmNlIGZpbGUuIFJldHVybnMgbnVsbCBpZiBubyBvcmlnaW5hbCBzb3VyY2UgY29udGVudCBpc1xuICogYXZhaWxhYmxlLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfc291cmNlQ29udGVudEZvcihhU291cmNlLCBudWxsT25NaXNzaW5nKSB7XG4gICAgaWYgKCF0aGlzLnNvdXJjZXNDb250ZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIGFTb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgYVNvdXJjZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NvdXJjZXMuaGFzKGFTb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoYVNvdXJjZSldO1xuICAgIH1cblxuICAgIHZhciB1cmw7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsXG4gICAgICAgICYmICh1cmwgPSB1dGlsLnVybFBhcnNlKHRoaXMuc291cmNlUm9vdCkpKSB7XG4gICAgICAvLyBYWFg6IGZpbGU6Ly8gVVJJcyBhbmQgYWJzb2x1dGUgcGF0aHMgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGZvclxuICAgICAgLy8gbWFueSB1c2Vycy4gV2UgY2FuIGhlbHAgdGhlbSBvdXQgd2hlbiB0aGV5IGV4cGVjdCBmaWxlOi8vIFVSSXMgdG9cbiAgICAgIC8vIGJlaGF2ZSBsaWtlIGl0IHdvdWxkIGlmIHRoZXkgd2VyZSBydW5uaW5nIGEgbG9jYWwgSFRUUCBzZXJ2ZXIuIFNlZVxuICAgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg1NTk3LlxuICAgICAgdmFyIGZpbGVVcmlBYnNQYXRoID0gYVNvdXJjZS5yZXBsYWNlKC9eZmlsZTpcXC9cXC8vLCBcIlwiKTtcbiAgICAgIGlmICh1cmwuc2NoZW1lID09IFwiZmlsZVwiXG4gICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoZmlsZVVyaUFic1BhdGgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihmaWxlVXJpQWJzUGF0aCldXG4gICAgICB9XG5cbiAgICAgIGlmICgoIXVybC5wYXRoIHx8IHVybC5wYXRoID09IFwiL1wiKVxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKFwiL1wiICsgYVNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKFwiL1wiICsgYVNvdXJjZSldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCByZWN1cnNpdmVseSBmcm9tXG4gICAgLy8gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yLiBJbiB0aGF0IGNhc2UsIHdlXG4gICAgLy8gZG9uJ3Qgd2FudCB0byB0aHJvdyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBzb3VyY2UgLSB3ZSBqdXN0IHdhbnQgdG9cbiAgICAvLyByZXR1cm4gbnVsbCwgc28gd2UgcHJvdmlkZSBhIGZsYWcgdG8gZXhpdCBncmFjZWZ1bGx5LlxuICAgIGlmIChudWxsT25NaXNzaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKTtcbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgICAgfTtcbiAgICB9XG4gICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBvcmlnaW5hbExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICBuZWVkbGUsXG4gICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgIFwib3JpZ2luYWxDb2x1bW5cIixcbiAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsXG4gICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gbmVlZGxlLnNvdXJjZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgIH07XG4gIH07XG5cbmV4cG9ydHMuQmFzaWNTb3VyY2VNYXBDb25zdW1lciA9IEJhc2ljU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQW4gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaFxuICogd2UgY2FuIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbi4gSXQgZGlmZmVycyBmcm9tIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgaW5cbiAqIHRoYXQgaXQgdGFrZXMgXCJpbmRleGVkXCIgc291cmNlIG1hcHMgKGkuZS4gb25lcyB3aXRoIGEgXCJzZWN0aW9uc1wiIGZpZWxkKSBhc1xuICogaW5wdXQuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIGEgcmF3IHNvdXJjZSBtYXAgKGVpdGhlciBhcyBhIEpTT04gc3RyaW5nLCBvciBhbHJlYWR5XG4gKiBwYXJzZWQgdG8gYW4gb2JqZWN0KS4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjIGZvciBpbmRleGVkIHNvdXJjZSBtYXBzLCB0aGV5XG4gKiBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gKiAgIC0gc2VjdGlvbnM6IEEgbGlzdCBvZiBzZWN0aW9uIGRlZmluaXRpb25zLlxuICpcbiAqIEVhY2ggdmFsdWUgdW5kZXIgdGhlIFwic2VjdGlvbnNcIiBmaWVsZCBoYXMgdHdvIGZpZWxkczpcbiAqICAgLSBvZmZzZXQ6IFRoZSBvZmZzZXQgaW50byB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkIGF0IHdoaWNoIHRoaXMgc2VjdGlvblxuICogICAgICAgYmVnaW5zIHRvIGFwcGx5LCBkZWZpbmVkIGFzIGFuIG9iamVjdCB3aXRoIGEgXCJsaW5lXCIgYW5kIFwiY29sdW1uXCJcbiAqICAgICAgIGZpZWxkLlxuICogICAtIG1hcDogQSBzb3VyY2UgbWFwIGRlZmluaXRpb24uIFRoaXMgc291cmNlIG1hcCBjb3VsZCBhbHNvIGJlIGluZGV4ZWQsXG4gKiAgICAgICBidXQgZG9lc24ndCBoYXZlIHRvIGJlLlxuICpcbiAqIEluc3RlYWQgb2YgdGhlIFwibWFwXCIgZmllbGQsIGl0J3MgYWxzbyBwb3NzaWJsZSB0byBoYXZlIGEgXCJ1cmxcIiBmaWVsZFxuICogc3BlY2lmeWluZyBhIFVSTCB0byByZXRyaWV2ZSBhIHNvdXJjZSBtYXAgZnJvbSwgYnV0IHRoYXQncyBjdXJyZW50bHlcbiAqIHVuc3VwcG9ydGVkLlxuICpcbiAqIEhlcmUncyBhbiBleGFtcGxlIHNvdXJjZSBtYXAsIHRha2VuIGZyb20gdGhlIHNvdXJjZSBtYXAgc3BlY1swXSwgYnV0XG4gKiBtb2RpZmllZCB0byBvbWl0IGEgc2VjdGlvbiB3aGljaCB1c2VzIHRoZSBcInVybFwiIGZpZWxkLlxuICpcbiAqICB7XG4gKiAgICB2ZXJzaW9uIDogMyxcbiAqICAgIGZpbGU6IFwiYXBwLmpzXCIsXG4gKiAgICBzZWN0aW9uczogW3tcbiAqICAgICAgb2Zmc2V0OiB7bGluZToxMDAsIGNvbHVtbjoxMH0sXG4gKiAgICAgIG1hcDoge1xuICogICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgIGZpbGU6IFwic2VjdGlvbi5qc1wiLFxuICogICAgICAgIHNvdXJjZXM6IFtcImZvby5qc1wiLCBcImJhci5qc1wiXSxcbiAqICAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAqICAgICAgICBtYXBwaW5nczogXCJBQUFBLEU7O0FCQ0RFO1wiXG4gKiAgICAgIH1cbiAqICAgIH1dLFxuICogIH1cbiAqXG4gKiBbMF06IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVUxUkdBZWhRd1J5cFVUb3ZGMUtSbHBpT0Z6ZTBiLV8yZ2M2ZkFIMEtZMGsvZWRpdCNoZWFkaW5nPWguNTM1ZXMzeGVwcmd0XG4gKi9cbmZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgfVxuXG4gIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICB2YXIgc2VjdGlvbnMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzZWN0aW9ucycpO1xuXG4gIGlmICh2ZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgfVxuXG4gIHRoaXMuX3NvdXJjZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcblxuICB2YXIgbGFzdE9mZnNldCA9IHtcbiAgICBsaW5lOiAtMSxcbiAgICBjb2x1bW46IDBcbiAgfTtcbiAgdGhpcy5fc2VjdGlvbnMgPSBzZWN0aW9ucy5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICBpZiAocy51cmwpIHtcbiAgICAgIC8vIFRoZSB1cmwgZmllbGQgd2lsbCByZXF1aXJlIHN1cHBvcnQgZm9yIGFzeW5jaHJvbmljaXR5LlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzE2XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cHBvcnQgZm9yIHVybCBmaWVsZCBpbiBzZWN0aW9ucyBub3QgaW1wbGVtZW50ZWQuJyk7XG4gICAgfVxuICAgIHZhciBvZmZzZXQgPSB1dGlsLmdldEFyZyhzLCAnb2Zmc2V0Jyk7XG4gICAgdmFyIG9mZnNldExpbmUgPSB1dGlsLmdldEFyZyhvZmZzZXQsICdsaW5lJyk7XG4gICAgdmFyIG9mZnNldENvbHVtbiA9IHV0aWwuZ2V0QXJnKG9mZnNldCwgJ2NvbHVtbicpO1xuXG4gICAgaWYgKG9mZnNldExpbmUgPCBsYXN0T2Zmc2V0LmxpbmUgfHxcbiAgICAgICAgKG9mZnNldExpbmUgPT09IGxhc3RPZmZzZXQubGluZSAmJiBvZmZzZXRDb2x1bW4gPCBsYXN0T2Zmc2V0LmNvbHVtbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2VjdGlvbiBvZmZzZXRzIG11c3QgYmUgb3JkZXJlZCBhbmQgbm9uLW92ZXJsYXBwaW5nLicpO1xuICAgIH1cbiAgICBsYXN0T2Zmc2V0ID0gb2Zmc2V0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdlbmVyYXRlZE9mZnNldDoge1xuICAgICAgICAvLyBUaGUgb2Zmc2V0IGZpZWxkcyBhcmUgMC1iYXNlZCwgYnV0IHdlIHVzZSAxLWJhc2VkIGluZGljZXMgd2hlblxuICAgICAgICAvLyBlbmNvZGluZy9kZWNvZGluZyBmcm9tIFZMUS5cbiAgICAgICAgZ2VuZXJhdGVkTGluZTogb2Zmc2V0TGluZSArIDEsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogb2Zmc2V0Q29sdW1uICsgMVxuICAgICAgfSxcbiAgICAgIGNvbnN1bWVyOiBuZXcgU291cmNlTWFwQ29uc3VtZXIodXRpbC5nZXRBcmcocywgJ21hcCcpKVxuICAgIH1cbiAgfSk7XG59XG5cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBvcmlnaW5hbCBzb3VyY2VzLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ3NvdXJjZXMnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl9zZWN0aW9uc1tpXS5jb25zdW1lci5zb3VyY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHNvdXJjZXMucHVzaCh0aGlzLl9zZWN0aW9uc1tpXS5jb25zdW1lci5zb3VyY2VzW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZXM7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICAvLyBGaW5kIHRoZSBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbiB3ZSdyZSB0cnlpbmcgdG8gbWFwXG4gICAgLy8gdG8gYW4gb3JpZ2luYWwgcG9zaXRpb24uXG4gICAgdmFyIHNlY3Rpb25JbmRleCA9IGJpbmFyeVNlYXJjaC5zZWFyY2gobmVlZGxlLCB0aGlzLl9zZWN0aW9ucyxcbiAgICAgIGZ1bmN0aW9uKG5lZWRsZSwgc2VjdGlvbikge1xuICAgICAgICB2YXIgY21wID0gbmVlZGxlLmdlbmVyYXRlZExpbmUgLSBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lO1xuICAgICAgICBpZiAoY21wKSB7XG4gICAgICAgICAgcmV0dXJuIGNtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAobmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgICAgICAgICAgc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgIH0pO1xuICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcblxuICAgIGlmICghc2VjdGlvbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBudWxsLFxuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIG5hbWU6IG51bGxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlY3Rpb24uY29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICBsaW5lOiBuZWVkbGUuZ2VuZXJhdGVkTGluZSAtXG4gICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICBjb2x1bW46IG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbmVlZGxlLmdlbmVyYXRlZExpbmVcbiAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgOiAwKSxcbiAgICAgIGJpYXM6IGFBcmdzLmJpYXNcbiAgICB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHRoZSBzb3VyY2UgY29udGVudCBmb3IgZXZlcnkgc291cmNlIGluIHRoZSBzb3VyY2VcbiAqIG1hcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWN0aW9ucy5ldmVyeShmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHMuY29uc3VtZXIuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKTtcbiAgICB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG5cbiAgICAgIHZhciBjb250ZW50ID0gc2VjdGlvbi5jb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIHRydWUpO1xuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChudWxsT25NaXNzaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICAvLyBPbmx5IGNvbnNpZGVyIHRoaXMgc2VjdGlvbiBpZiB0aGUgcmVxdWVzdGVkIHNvdXJjZSBpcyBpbiB0aGUgbGlzdCBvZlxuICAgICAgLy8gc291cmNlcyBvZiB0aGUgY29uc3VtZXIuXG4gICAgICBpZiAoc2VjdGlvbi5jb25zdW1lci5zb3VyY2VzLmluZGV4T2YodXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKSkgPT09IC0xKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIGdlbmVyYXRlZFBvc2l0aW9uID0gc2VjdGlvbi5jb25zdW1lci5nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncyk7XG4gICAgICBpZiAoZ2VuZXJhdGVkUG9zaXRpb24pIHtcbiAgICAgICAgdmFyIHJldCA9IHtcbiAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWRQb3NpdGlvbi5jb2x1bW4gK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IGdlbmVyYXRlZFBvc2l0aW9uLmxpbmVcbiAgICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgICA6IDApXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuICAgICAgdmFyIHNlY3Rpb25NYXBwaW5ncyA9IHNlY3Rpb24uY29uc3VtZXIuX2dlbmVyYXRlZE1hcHBpbmdzO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWN0aW9uTWFwcGluZ3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIG1hcHBpbmcgPSBzZWN0aW9uTWFwcGluZ3Nbal07XG5cbiAgICAgICAgdmFyIHNvdXJjZSA9IHNlY3Rpb24uY29uc3VtZXIuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBpZiAoc2VjdGlvbi5jb25zdW1lci5zb3VyY2VSb290ICE9PSBudWxsKSB7XG4gICAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zb3VyY2VzLmFkZChzb3VyY2UpO1xuICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblxuICAgICAgICB2YXIgbmFtZSA9IHNlY3Rpb24uY29uc3VtZXIuX25hbWVzLmF0KG1hcHBpbmcubmFtZSk7XG4gICAgICAgIHRoaXMuX25hbWVzLmFkZChuYW1lKTtcbiAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG5cbiAgICAgICAgLy8gVGhlIG1hcHBpbmdzIGNvbWluZyBmcm9tIHRoZSBjb25zdW1lciBmb3IgdGhlIHNlY3Rpb24gaGF2ZVxuICAgICAgICAvLyBnZW5lcmF0ZWQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgc2VjdGlvbiwgc28gd2VcbiAgICAgICAgLy8gbmVlZCB0byBvZmZzZXQgdGhlbSB0byBiZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbmNhdGVuYXRlZFxuICAgICAgICAvLyBnZW5lcmF0ZWQgZmlsZS5cbiAgICAgICAgdmFyIGFkanVzdGVkTWFwcGluZyA9IHtcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUgK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBtYXBwaW5nLmdlbmVyYXRlZExpbmVcbiAgICAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgICAgOiAwKSxcbiAgICAgICAgICBvcmlnaW5hbExpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MucHVzaChhZGp1c3RlZE1hcHBpbmcpO1xuICAgICAgICBpZiAodHlwZW9mIGFkanVzdGVkTWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MucHVzaChhZGp1c3RlZE1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCk7XG4gICAgcXVpY2tTb3J0KHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgfTtcblxuZXhwb3J0cy5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIgPSBJbmRleGVkU291cmNlTWFwQ29uc3VtZXI7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8qKlxuICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2V0dGluZyB2YWx1ZXMgZnJvbSBwYXJhbWV0ZXIvb3B0aW9uc1xuICogb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gYXJncyBUaGUgb2JqZWN0IHdlIGFyZSBleHRyYWN0aW5nIHZhbHVlcyBmcm9tXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgd2UgYXJlIGdldHRpbmcuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIEFuIG9wdGlvbmFsIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgcHJvcGVydHkgaXMgbWlzc2luZ1xuICogZnJvbSB0aGUgb2JqZWN0LiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBhblxuICogZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gKi9cbmZ1bmN0aW9uIGdldEFyZyhhQXJncywgYU5hbWUsIGFEZWZhdWx0VmFsdWUpIHtcbiAgaWYgKGFOYW1lIGluIGFBcmdzKSB7XG4gICAgcmV0dXJuIGFBcmdzW2FOYW1lXTtcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIGFEZWZhdWx0VmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhTmFtZSArICdcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LicpO1xuICB9XG59XG5leHBvcnRzLmdldEFyZyA9IGdldEFyZztcblxudmFyIHVybFJlZ2V4cCA9IC9eKD86KFtcXHcrXFwtLl0rKTopP1xcL1xcLyg/OihcXHcrOlxcdyspQCk/KFtcXHcuXSopKD86OihcXGQrKSk/KFxcUyopJC87XG52YXIgZGF0YVVybFJlZ2V4cCA9IC9eZGF0YTouK1xcLC4rJC87XG5cbmZ1bmN0aW9uIHVybFBhcnNlKGFVcmwpIHtcbiAgdmFyIG1hdGNoID0gYVVybC5tYXRjaCh1cmxSZWdleHApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY2hlbWU6IG1hdGNoWzFdLFxuICAgIGF1dGg6IG1hdGNoWzJdLFxuICAgIGhvc3Q6IG1hdGNoWzNdLFxuICAgIHBvcnQ6IG1hdGNoWzRdLFxuICAgIHBhdGg6IG1hdGNoWzVdXG4gIH07XG59XG5leHBvcnRzLnVybFBhcnNlID0gdXJsUGFyc2U7XG5cbmZ1bmN0aW9uIHVybEdlbmVyYXRlKGFQYXJzZWRVcmwpIHtcbiAgdmFyIHVybCA9ICcnO1xuICBpZiAoYVBhcnNlZFVybC5zY2hlbWUpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5zY2hlbWUgKyAnOic7XG4gIH1cbiAgdXJsICs9ICcvLyc7XG4gIGlmIChhUGFyc2VkVXJsLmF1dGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5hdXRoICsgJ0AnO1xuICB9XG4gIGlmIChhUGFyc2VkVXJsLmhvc3QpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5ob3N0O1xuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBvcnQpIHtcbiAgICB1cmwgKz0gXCI6XCIgKyBhUGFyc2VkVXJsLnBvcnRcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wYXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwucGF0aDtcbiAgfVxuICByZXR1cm4gdXJsO1xufVxuZXhwb3J0cy51cmxHZW5lcmF0ZSA9IHVybEdlbmVyYXRlO1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBwYXRoLCBvciB0aGUgcGF0aCBwb3J0aW9uIG9mIGEgVVJMOlxuICpcbiAqIC0gUmVwbGFjZXMgY29uc2VjdXRpdmUgc2xhc2hlcyB3aXRoIG9uZSBzbGFzaC5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnLicgcGFydHMuXG4gKiAtIFJlbW92ZXMgdW5uZWNlc3NhcnkgJzxkaXI+Ly4uJyBwYXJ0cy5cbiAqXG4gKiBCYXNlZCBvbiBjb2RlIGluIHRoZSBOb2RlLmpzICdwYXRoJyBjb3JlIG1vZHVsZS5cbiAqXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgdXJsIHRvIG5vcm1hbGl6ZS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplKGFQYXRoKSB7XG4gIHZhciBwYXRoID0gYVBhdGg7XG4gIHZhciB1cmwgPSB1cmxQYXJzZShhUGF0aCk7XG4gIGlmICh1cmwpIHtcbiAgICBpZiAoIXVybC5wYXRoKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuICAgIHBhdGggPSB1cmwucGF0aDtcbiAgfVxuICB2YXIgaXNBYnNvbHV0ZSA9IGV4cG9ydHMuaXNBYnNvbHV0ZShwYXRoKTtcblxuICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KC9cXC8rLyk7XG4gIGZvciAodmFyIHBhcnQsIHVwID0gMCwgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgcGFydCA9IHBhcnRzW2ldO1xuICAgIGlmIChwYXJ0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCA+IDApIHtcbiAgICAgIGlmIChwYXJ0ID09PSAnJykge1xuICAgICAgICAvLyBUaGUgZmlyc3QgcGFydCBpcyBibGFuayBpZiB0aGUgcGF0aCBpcyBhYnNvbHV0ZS4gVHJ5aW5nIHRvIGdvXG4gICAgICAgIC8vIGFib3ZlIHRoZSByb290IGlzIGEgbm8tb3AuIFRoZXJlZm9yZSB3ZSBjYW4gcmVtb3ZlIGFsbCAnLi4nIHBhcnRzXG4gICAgICAgIC8vIGRpcmVjdGx5IGFmdGVyIHRoZSByb290LlxuICAgICAgICBwYXJ0cy5zcGxpY2UoaSArIDEsIHVwKTtcbiAgICAgICAgdXAgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFydHMuc3BsaWNlKGksIDIpO1xuICAgICAgICB1cC0tO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwYXRoID0gcGFydHMuam9pbignLycpO1xuXG4gIGlmIChwYXRoID09PSAnJykge1xuICAgIHBhdGggPSBpc0Fic29sdXRlID8gJy8nIDogJy4nO1xuICB9XG5cbiAgaWYgKHVybCkge1xuICAgIHVybC5wYXRoID0gcGF0aDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUodXJsKTtcbiAgfVxuICByZXR1cm4gcGF0aDtcbn1cbmV4cG9ydHMubm9ybWFsaXplID0gbm9ybWFsaXplO1xuXG4vKipcbiAqIEpvaW5zIHR3byBwYXRocy9VUkxzLlxuICpcbiAqIEBwYXJhbSBhUm9vdCBUaGUgcm9vdCBwYXRoIG9yIFVSTC5cbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciBVUkwgdG8gYmUgam9pbmVkIHdpdGggdGhlIHJvb3QuXG4gKlxuICogLSBJZiBhUGF0aCBpcyBhIFVSTCBvciBhIGRhdGEgVVJJLCBhUGF0aCBpcyByZXR1cm5lZCwgdW5sZXNzIGFQYXRoIGlzIGFcbiAqICAgc2NoZW1lLXJlbGF0aXZlIFVSTDogVGhlbiB0aGUgc2NoZW1lIG9mIGFSb290LCBpZiBhbnksIGlzIHByZXBlbmRlZFxuICogICBmaXJzdC5cbiAqIC0gT3RoZXJ3aXNlIGFQYXRoIGlzIGEgcGF0aC4gSWYgYVJvb3QgaXMgYSBVUkwsIHRoZW4gaXRzIHBhdGggcG9ydGlvblxuICogICBpcyB1cGRhdGVkIHdpdGggdGhlIHJlc3VsdCBhbmQgYVJvb3QgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSB0aGUgcmVzdWx0XG4gKiAgIGlzIHJldHVybmVkLlxuICogICAtIElmIGFQYXRoIGlzIGFic29sdXRlLCB0aGUgcmVzdWx0IGlzIGFQYXRoLlxuICogICAtIE90aGVyd2lzZSB0aGUgdHdvIHBhdGhzIGFyZSBqb2luZWQgd2l0aCBhIHNsYXNoLlxuICogLSBKb2luaW5nIGZvciBleGFtcGxlICdodHRwOi8vJyBhbmQgJ3d3dy5leGFtcGxlLmNvbScgaXMgYWxzbyBzdXBwb3J0ZWQuXG4gKi9cbmZ1bmN0aW9uIGpvaW4oYVJvb3QsIGFQYXRoKSB7XG4gIGlmIChhUm9vdCA9PT0gXCJcIikge1xuICAgIGFSb290ID0gXCIuXCI7XG4gIH1cbiAgaWYgKGFQYXRoID09PSBcIlwiKSB7XG4gICAgYVBhdGggPSBcIi5cIjtcbiAgfVxuICB2YXIgYVBhdGhVcmwgPSB1cmxQYXJzZShhUGF0aCk7XG4gIHZhciBhUm9vdFVybCA9IHVybFBhcnNlKGFSb290KTtcbiAgaWYgKGFSb290VXJsKSB7XG4gICAgYVJvb3QgPSBhUm9vdFVybC5wYXRoIHx8ICcvJztcbiAgfVxuXG4gIC8vIGBqb2luKGZvbywgJy8vd3d3LmV4YW1wbGUub3JnJylgXG4gIGlmIChhUGF0aFVybCAmJiAhYVBhdGhVcmwuc2NoZW1lKSB7XG4gICAgaWYgKGFSb290VXJsKSB7XG4gICAgICBhUGF0aFVybC5zY2hlbWUgPSBhUm9vdFVybC5zY2hlbWU7XG4gICAgfVxuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUGF0aFVybCk7XG4gIH1cblxuICBpZiAoYVBhdGhVcmwgfHwgYVBhdGgubWF0Y2goZGF0YVVybFJlZ2V4cCkpIHtcbiAgICByZXR1cm4gYVBhdGg7XG4gIH1cblxuICAvLyBgam9pbignaHR0cDovLycsICd3d3cuZXhhbXBsZS5jb20nKWBcbiAgaWYgKGFSb290VXJsICYmICFhUm9vdFVybC5ob3N0ICYmICFhUm9vdFVybC5wYXRoKSB7XG4gICAgYVJvb3RVcmwuaG9zdCA9IGFQYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cblxuICB2YXIgam9pbmVkID0gYVBhdGguY2hhckF0KDApID09PSAnLydcbiAgICA/IGFQYXRoXG4gICAgOiBub3JtYWxpemUoYVJvb3QucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyBhUGF0aCk7XG5cbiAgaWYgKGFSb290VXJsKSB7XG4gICAgYVJvb3RVcmwucGF0aCA9IGpvaW5lZDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG4gIHJldHVybiBqb2luZWQ7XG59XG5leHBvcnRzLmpvaW4gPSBqb2luO1xuXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbiAoYVBhdGgpIHtcbiAgcmV0dXJuIGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nIHx8ICEhYVBhdGgubWF0Y2godXJsUmVnZXhwKTtcbn07XG5cbi8qKlxuICogTWFrZSBhIHBhdGggcmVsYXRpdmUgdG8gYSBVUkwgb3IgYW5vdGhlciBwYXRoLlxuICpcbiAqIEBwYXJhbSBhUm9vdCBUaGUgcm9vdCBwYXRoIG9yIFVSTC5cbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciBVUkwgdG8gYmUgbWFkZSByZWxhdGl2ZSB0byBhUm9vdC5cbiAqL1xuZnVuY3Rpb24gcmVsYXRpdmUoYVJvb3QsIGFQYXRoKSB7XG4gIGlmIChhUm9vdCA9PT0gXCJcIikge1xuICAgIGFSb290ID0gXCIuXCI7XG4gIH1cblxuICBhUm9vdCA9IGFSb290LnJlcGxhY2UoL1xcLyQvLCAnJyk7XG5cbiAgLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBwYXRoIHRvIGJlIGFib3ZlIHRoZSByb290LiBJbiB0aGlzIGNhc2UsIHNpbXBseVxuICAvLyBjaGVja2luZyB3aGV0aGVyIHRoZSByb290IGlzIGEgcHJlZml4IG9mIHRoZSBwYXRoIHdvbid0IHdvcmsuIEluc3RlYWQsIHdlXG4gIC8vIG5lZWQgdG8gcmVtb3ZlIGNvbXBvbmVudHMgZnJvbSB0aGUgcm9vdCBvbmUgYnkgb25lLCB1bnRpbCBlaXRoZXIgd2UgZmluZFxuICAvLyBhIHByZWZpeCB0aGF0IGZpdHMsIG9yIHdlIHJ1biBvdXQgb2YgY29tcG9uZW50cyB0byByZW1vdmUuXG4gIHZhciBsZXZlbCA9IDA7XG4gIHdoaWxlIChhUGF0aC5pbmRleE9mKGFSb290ICsgJy8nKSAhPT0gMCkge1xuICAgIHZhciBpbmRleCA9IGFSb290Lmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9ubHkgcGFydCBvZiB0aGUgcm9vdCB0aGF0IGlzIGxlZnQgaXMgdGhlIHNjaGVtZSAoaS5lLiBodHRwOi8vLFxuICAgIC8vIGZpbGU6Ly8vLCBldGMuKSwgb25lIG9yIG1vcmUgc2xhc2hlcyAoLyksIG9yIHNpbXBseSBub3RoaW5nIGF0IGFsbCwgd2VcbiAgICAvLyBoYXZlIGV4aGF1c3RlZCBhbGwgY29tcG9uZW50cywgc28gdGhlIHBhdGggaXMgbm90IHJlbGF0aXZlIHRvIHRoZSByb290LlxuICAgIGFSb290ID0gYVJvb3Quc2xpY2UoMCwgaW5kZXgpO1xuICAgIGlmIChhUm9vdC5tYXRjaCgvXihbXlxcL10rOlxcLyk/XFwvKiQvKSkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgICsrbGV2ZWw7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgd2UgYWRkIGEgXCIuLi9cIiBmb3IgZWFjaCBjb21wb25lbnQgd2UgcmVtb3ZlZCBmcm9tIHRoZSByb290LlxuICByZXR1cm4gQXJyYXkobGV2ZWwgKyAxKS5qb2luKFwiLi4vXCIpICsgYVBhdGguc3Vic3RyKGFSb290Lmxlbmd0aCArIDEpO1xufVxuZXhwb3J0cy5yZWxhdGl2ZSA9IHJlbGF0aXZlO1xuXG52YXIgc3VwcG9ydHNOdWxsUHJvdG8gPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuICEoJ19fcHJvdG9fXycgaW4gb2JqKTtcbn0oKSk7XG5cbmZ1bmN0aW9uIGlkZW50aXR5IChzKSB7XG4gIHJldHVybiBzO1xufVxuXG4vKipcbiAqIEJlY2F1c2UgYmVoYXZpb3IgZ29lcyB3YWNreSB3aGVuIHlvdSBzZXQgYF9fcHJvdG9fX2Agb24gb2JqZWN0cywgd2VcbiAqIGhhdmUgdG8gcHJlZml4IGFsbCB0aGUgc3RyaW5ncyBpbiBvdXIgc2V0IHdpdGggYW4gYXJiaXRyYXJ5IGNoYXJhY3Rlci5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9wdWxsLzMxIGFuZFxuICogaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9pc3N1ZXMvMzBcbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuZnVuY3Rpb24gdG9TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiAnJCcgKyBhU3RyO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLnRvU2V0U3RyaW5nID0gc3VwcG9ydHNOdWxsUHJvdG8gPyBpZGVudGl0eSA6IHRvU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBmcm9tU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gYVN0ci5zbGljZSgxKTtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy5mcm9tU2V0U3RyaW5nID0gc3VwcG9ydHNOdWxsUHJvdG8gPyBpZGVudGl0eSA6IGZyb21TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzUHJvdG9TdHJpbmcocykge1xuICBpZiAoIXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgbGVuZ3RoID0gcy5sZW5ndGg7XG5cbiAgaWYgKGxlbmd0aCA8IDkgLyogXCJfX3Byb3RvX19cIi5sZW5ndGggKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocy5jaGFyQ29kZUF0KGxlbmd0aCAtIDEpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMikgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAzKSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDQpICE9PSAxMTYgLyogJ3QnICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNSkgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA2KSAhPT0gMTE0IC8qICdyJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDcpICE9PSAxMTIgLyogJ3AnICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOCkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA5KSAhPT0gOTUgIC8qICdfJyAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSBsZW5ndGggLSAxMDsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAocy5jaGFyQ29kZUF0KGkpICE9PSAzNiAvKiAnJCcgKi8pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdoZXJlIHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgb3JpZ2luYWwgc291cmNlL2xpbmUvY29sdW1uLCBidXQgZGlmZmVyZW50IGdlbmVyYXRlZFxuICogbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGEgbWFwcGluZyB3aXRoIGFcbiAqIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICB2YXIgY21wID0gbWFwcGluZ0Euc291cmNlIC0gbWFwcGluZ0Iuc291cmNlO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsTGluZSAtIG1hcHBpbmdCLm9yaWdpbmFsTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIHJldHVybiBtYXBwaW5nQS5uYW1lIC0gbWFwcGluZ0IubmFtZTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMgPSBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucztcblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggZGVmbGF0ZWQgc291cmNlIGFuZCBuYW1lIGluZGljZXMgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4sIGJ1dCBkaWZmZXJlbnRcbiAqIHNvdXJjZS9uYW1lL29yaWdpbmFsIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhXG4gKiBtYXBwaW5nIHdpdGggYSBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Euc291cmNlIC0gbWFwcGluZ0Iuc291cmNlO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsTGluZSAtIG1hcHBpbmdCLm9yaWdpbmFsTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIHJldHVybiBtYXBwaW5nQS5uYW1lIC0gbWFwcGluZ0IubmFtZTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZDtcblxuZnVuY3Rpb24gc3RyY21wKGFTdHIxLCBhU3RyMikge1xuICBpZiAoYVN0cjEgPT09IGFTdHIyKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoYVN0cjEgPiBhU3RyMikge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBpbmZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgc3RyaW5ncyB3aGVyZVxuICogdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBzdHJjbXAobWFwcGluZ0Euc291cmNlLCBtYXBwaW5nQi5zb3VyY2UpO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsTGluZSAtIG1hcHBpbmdCLm9yaWdpbmFsTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIHJldHVybiBzdHJjbXAobWFwcGluZ0EubmFtZSwgbWFwcGluZ0IubmFtZSk7XG59XG5leHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQ7XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFjay1nZW5lcmF0b3InLCBbJ3N0YWNrZnJhbWUnXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ3N0YWNrZnJhbWUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja0dlbmVyYXRvciA9IGZhY3Rvcnkocm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uKFN0YWNrRnJhbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBiYWNrdHJhY2U6IGZ1bmN0aW9uIFN0YWNrR2VuZXJhdG9yJCRiYWNrdHJhY2Uob3B0cykge1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gW107XG4gICAgICAgICAgICB2YXIgbWF4U3RhY2tTaXplID0gMTA7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9wdHMubWF4U3RhY2tTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIG1heFN0YWNrU2l6ZSA9IG9wdHMubWF4U3RhY2tTaXplO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY3VyciA9IGFyZ3VtZW50cy5jYWxsZWU7XG4gICAgICAgICAgICB3aGlsZSAoY3VyciAmJiBzdGFjay5sZW5ndGggPCBtYXhTdGFja1NpemUgJiYgY3VyclsnYXJndW1lbnRzJ10pIHtcbiAgICAgICAgICAgICAgICAvLyBBbGxvdyBWOCBvcHRpbWl6YXRpb25zXG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoY3VyclsnYXJndW1lbnRzJ10ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1tpXSA9IGN1cnJbJ2FyZ3VtZW50cyddW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoL2Z1bmN0aW9uKD86XFxzKyhbXFx3JF0rKSkrXFxzKlxcKC8udGVzdChjdXJyLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3IFN0YWNrRnJhbWUoe2Z1bmN0aW9uTmFtZTogUmVnRXhwLiQxIHx8IHVuZGVmaW5lZCwgYXJnczogYXJnc30pKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ldyBTdGFja0ZyYW1lKHthcmdzOiBhcmdzfSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLmNhbGxlcjtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdGFjaztcbiAgICAgICAgfVxuICAgIH07XG59KSk7XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFja3RyYWNlLWdwcycsIFsnc291cmNlLW1hcCcsICdzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyJyksIHJlcXVpcmUoJ3N0YWNrZnJhbWUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja1RyYWNlR1BTID0gZmFjdG9yeShyb290LlNvdXJjZU1hcCB8fCByb290LnNvdXJjZU1hcCwgcm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uKFNvdXJjZU1hcCwgU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIE1ha2UgYSBYLURvbWFpbiByZXF1ZXN0IHRvIHVybCBhbmQgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IHdpdGggcmVzcG9uc2UgdGV4dCBpZiBmdWxmaWxsZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfeGRyKHVybCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICByZXEub3BlbignZ2V0JywgdXJsKTtcbiAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIG9ucmVhZHlzdGF0ZWNoYW5nZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChyZXEuc3RhdHVzID49IDIwMCAmJiByZXEuc3RhdHVzIDwgMzAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKHVybC5zdWJzdHIoMCwgNykgPT09ICdmaWxlOi8vJyAmJiByZXEucmVzcG9uc2VUZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0hUVFAgc3RhdHVzOiAnICsgcmVxLnN0YXR1cyArICcgcmV0cmlldmluZyAnICsgdXJsKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVxLnNlbmQoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgQmFzZTY0LWVuY29kZWQgc3RyaW5nIGludG8gaXRzIG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uLlxuICAgICAqIFVzZWQgZm9yIGlubGluZSBzb3VyY2VtYXBzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGI2NHN0ciBCYXNlLTY0IGVuY29kZWQgc3RyaW5nXG4gICAgICogQHJldHVybnMge1N0cmluZ30gb3JpZ2luYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NC1lbmNvZGVkIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfYXRvYihiNjRzdHIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5hdG9iKSB7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93LmF0b2IoYjY0c3RyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3VwcGx5IGEgcG9seWZpbGwgZm9yIHdpbmRvdy5hdG9iIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9wYXJzZUpzb24oc3RyaW5nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgSlNPTiAhPT0gJ3VuZGVmaW5lZCcgJiYgSlNPTi5wYXJzZSkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3VwcGx5IGEgcG9seWZpbGwgZm9yIEpTT04ucGFyc2UgaW4gdGhpcyBlbnZpcm9ubWVudCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRGdW5jdGlvbk5hbWUoc291cmNlLCBsaW5lTnVtYmVyLyosIGNvbHVtbk51bWJlciovKSB7XG4gICAgICAgIHZhciBzeW50YXhlcyA9IFtcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGZ1bmN0aW9uICh7YXJnc30pIFRPRE8gYXJncyBjYXB0dXJlXG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypmdW5jdGlvblxcYi8sXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiB7bmFtZX0oe2FyZ3N9KSBtWzFdPW5hbWUgbVsyXT1hcmdzXG4gICAgICAgICAgICAvZnVuY3Rpb25cXHMrKFteKCdcImBdKj8pXFxzKlxcKChbXildKilcXCkvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gZXZhbCgpXG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccyooPzpldmFsfG5ldyBGdW5jdGlvbilcXGIvLFxuICAgICAgICAgICAgLy8gZm5fbmFtZSgpIHtcbiAgICAgICAgICAgIC9cXGIoPyEoPzppZnxmb3J8c3dpdGNofHdoaWxlfHdpdGh8Y2F0Y2gpXFxiKSg/Oig/OnN0YXRpYylcXHMrKT8oXFxTKylcXHMqXFwoLio/XFwpXFxzKlxcey8sXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSAoKSA9PiB7XG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypcXCguKj9cXClcXHMqPT4vXG4gICAgICAgIF07XG4gICAgICAgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgnXFxuJyk7XG5cbiAgICAgICAgLy8gV2FsayBiYWNrd2FyZHMgaW4gdGhlIHNvdXJjZSBsaW5lcyB1bnRpbCB3ZSBmaW5kIHRoZSBsaW5lIHdoaWNoIG1hdGNoZXMgb25lIG9mIHRoZSBwYXR0ZXJucyBhYm92ZVxuICAgICAgICB2YXIgY29kZSA9ICcnO1xuICAgICAgICB2YXIgbWF4TGluZXMgPSBNYXRoLm1pbihsaW5lTnVtYmVyLCAyMCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4TGluZXM7ICsraSkge1xuICAgICAgICAgICAgLy8gbGluZU5vIGlzIDEtYmFzZWQsIHNvdXJjZVtdIGlzIDAtYmFzZWRcbiAgICAgICAgICAgIHZhciBsaW5lID0gbGluZXNbbGluZU51bWJlciAtIGkgLSAxXTtcbiAgICAgICAgICAgIHZhciBjb21tZW50UG9zID0gbGluZS5pbmRleE9mKCcvLycpO1xuICAgICAgICAgICAgaWYgKGNvbW1lbnRQb3MgPj0gMCkge1xuICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cigwLCBjb21tZW50UG9zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gbGluZSArIGNvZGU7XG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IHN5bnRheGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtID0gc3ludGF4ZXNbaW5kZXhdLmV4ZWMoY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG1bMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtWzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Vuc3VyZVN1cHBvcnRlZEVudmlyb25tZW50KCkge1xuICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY29uc3VtZSBzb3VyY2UgbWFwcyBpbiBvbGRlciBicm93c2VycycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGFja2ZyYW1lICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gU3RhY2tGcmFtZSBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUuZmlsZU5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBmaWxlIG5hbWUgaXMgbm90IGEgU3RyaW5nJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUubGluZU51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciAlIDEgIT09IDAgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGxpbmUgbnVtYmVyIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGNvbHVtbiBudW1iZXIgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSkge1xuICAgICAgICB2YXIgc291cmNlTWFwcGluZ1VybFJlZ0V4cCA9IC9cXC9cXC9bI0BdID9zb3VyY2VNYXBwaW5nVVJMPShbXlxccydcIl0rKVxccyokL21nO1xuICAgICAgICB2YXIgbGFzdFNvdXJjZU1hcHBpbmdVcmw7XG4gICAgICAgIHZhciBtYXRjaFNvdXJjZU1hcHBpbmdVcmw7XG4gICAgICAgIHdoaWxlIChtYXRjaFNvdXJjZU1hcHBpbmdVcmwgPSBzb3VyY2VNYXBwaW5nVXJsUmVnRXhwLmV4ZWMoc291cmNlKSkgeyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgICAgIGxhc3RTb3VyY2VNYXBwaW5nVXJsID0gbWF0Y2hTb3VyY2VNYXBwaW5nVXJsWzFdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXN0U291cmNlTWFwcGluZ1VybCkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzb3VyY2VNYXBwaW5nVVJMIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwU291cmNlKHN0YWNrZnJhbWUsIHNvdXJjZU1hcENvbnN1bWVyLCBzb3VyY2VDYWNoZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgbG9jID0gc291cmNlTWFwQ29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgICAgICAgICAgbGluZTogc3RhY2tmcmFtZS5saW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAobG9jLnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIC8vIGNhY2hlIG1hcHBlZCBzb3VyY2VzXG4gICAgICAgICAgICAgICAgdmFyIG1hcHBlZFNvdXJjZSA9IHNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IobG9jLnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hcHBlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VDYWNoZVtsb2Muc291cmNlXSA9IG1hcHBlZFNvdXJjZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAvLyBnaXZlbiBzdGFja2ZyYW1lIGFuZCBzb3VyY2UgbG9jYXRpb24sIHVwZGF0ZSBzdGFja2ZyYW1lXG4gICAgICAgICAgICAgICAgICAgIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbG9jLm5hbWUgfHwgc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBzdGFja2ZyYW1lLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbG9jLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvYy5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2MuY29sdW1uXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IGdldCBvcmlnaW5hbCBzb3VyY2UgZm9yIGdpdmVuIHN0YWNrZnJhbWUgYW5kIHNvdXJjZSBtYXAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICogICAgICBvcHRzLnNvdXJjZUNhY2hlID0ge3VybDogXCJTb3VyY2UgU3RyaW5nXCJ9ID0+IHByZWxvYWQgc291cmNlIGNhY2hlXG4gICAgICogICAgICBvcHRzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgPSB7L3BhdGgvZmlsZS5qcy5tYXA6IFNvdXJjZU1hcENvbnN1bWVyfVxuICAgICAqICAgICAgb3B0cy5vZmZsaW5lID0gVHJ1ZSB0byBwcmV2ZW50IG5ldHdvcmsgcmVxdWVzdHMuXG4gICAgICogICAgICAgICAgICAgIEJlc3QgZWZmb3J0IHdpdGhvdXQgc291cmNlcyBvciBzb3VyY2UgbWFwcy5cbiAgICAgKiAgICAgIG9wdHMuYWpheCA9IFByb21pc2UgcmV0dXJuaW5nIGZ1bmN0aW9uIHRvIG1ha2UgWC1Eb21haW4gcmVxdWVzdHNcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyhvcHRzKSB7XG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdGFja1RyYWNlR1BTKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja1RyYWNlR1BTKG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuc291cmNlQ2FjaGUgPSBvcHRzLnNvdXJjZUNhY2hlIHx8IHt9O1xuICAgICAgICB0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgPSBvcHRzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgfHwge307XG5cbiAgICAgICAgdGhpcy5hamF4ID0gb3B0cy5hamF4IHx8IF94ZHI7XG5cbiAgICAgICAgdGhpcy5fYXRvYiA9IG9wdHMuYXRvYiB8fCBfYXRvYjtcblxuICAgICAgICB0aGlzLl9nZXQgPSBmdW5jdGlvbiBfZ2V0KGxvY2F0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzRGF0YVVybCA9IGxvY2F0aW9uLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRzLm9mZmxpbmUgJiYgIWlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdDYW5ub3QgbWFrZSBuZXR3b3JrIHJlcXVlc3RzIGluIG9mZmxpbmUgbW9kZScpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNEYXRhVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIFVSTHMgY2FuIGhhdmUgcGFyYW1ldGVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VwcG9ydGVkRW5jb2RpbmdSZWdleHAgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9eZGF0YTphcHBsaWNhdGlvblxcL2pzb247KFtcXHc9OlwiLV0rOykqYmFzZTY0LC87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsb2NhdGlvbi5tYXRjaChzdXBwb3J0ZWRFbmNvZGluZ1JlZ2V4cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwU3RhcnQgPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kZWRTb3VyY2UgPSBsb2NhdGlvbi5zdWJzdHIoc291cmNlTWFwU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLl9hdG9iKGVuY29kZWRTb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0gc291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVGhlIGVuY29kaW5nIG9mIHRoZSBpbmxpbmUgc291cmNlbWFwIGlzIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGhyUHJvbWlzZSA9IHRoaXMuYWpheChsb2NhdGlvbiwge21ldGhvZDogJ2dldCd9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhY2hlIHRoZSBQcm9taXNlIHRvIHByZXZlbnQgZHVwbGljYXRlIGluLWZsaWdodCByZXF1ZXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0gPSB4aHJQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyUHJvbWlzZS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGluZyBTb3VyY2VNYXBDb25zdW1lcnMgaXMgZXhwZW5zaXZlLCBzbyB0aGlzIHdyYXBzIHRoZSBjcmVhdGlvbiBvZiBhXG4gICAgICAgICAqIFNvdXJjZU1hcENvbnN1bWVyIGluIGEgcGVyLWluc3RhbmNlIGNhY2hlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc291cmNlTWFwcGluZ1VSTCA9IFVSTCB0byBmZXRjaCBzb3VyY2UgbWFwIGZyb21cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGRlZmF1bHRTb3VyY2VSb290ID0gRGVmYXVsdCBzb3VyY2Ugcm9vdCBmb3Igc291cmNlIG1hcCBpZiB1bmRlZmluZWRcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgYSBTb3VyY2VNYXBDb25zdW1lclxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fZ2V0U291cmNlTWFwQ29uc3VtZXIgPSBmdW5jdGlvbiBfZ2V0U291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwcGluZ1VSTCwgZGVmYXVsdFNvdXJjZVJvb3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwQ29uc3VtZXJQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KHNvdXJjZU1hcHBpbmdVUkwpLnRoZW4oZnVuY3Rpb24oc291cmNlTWFwU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VNYXBTb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcFNvdXJjZSA9IF9wYXJzZUpzb24oc291cmNlTWFwU291cmNlLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VNYXBTb3VyY2Uuc291cmNlUm9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwU291cmNlLnNvdXJjZVJvb3QgPSBkZWZhdWx0U291cmNlUm9vdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBTb3VyY2VNYXAuU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwU291cmNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGVbc291cmNlTWFwcGluZ1VSTF0gPSBzb3VyY2VNYXBDb25zdW1lclByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc291cmNlTWFwQ29uc3VtZXJQcm9taXNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIFN0YWNrRnJhbWUsIGVuaGFuY2UgZnVuY3Rpb24gbmFtZSBhbmQgdXNlIHNvdXJjZSBtYXBzIGZvciBhXG4gICAgICAgICAqIGJldHRlciBTdGFja0ZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWUgb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggd2l0aCBzb3VyY2UtbWFwcGVkIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGlucG9pbnQgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRwaW5wb2ludChzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKS50aGVuKGZ1bmN0aW9uKG1hcHBlZFN0YWNrRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lKG1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlLCByZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIFsnY2F0Y2gnXShyZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCByZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBndWVzcyBmdW5jdGlvbiBuYW1lIGZyb20gbG9jYXRpb24gaW5mb3JtYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbmRGdW5jdGlvbk5hbWUgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRmaW5kRnVuY3Rpb25OYW1lKHN0YWNrZnJhbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBfZW5zdXJlU3RhY2tGcmFtZUlzTGVnaXQoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0KHN0YWNrZnJhbWUuZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24gZ2V0U291cmNlQ2FsbGJhY2soc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gc3RhY2tmcmFtZS5saW5lTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uTnVtYmVyID0gc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBndWVzc2VkRnVuY3Rpb25OYW1lID0gX2ZpbmRGdW5jdGlvbk5hbWUoc291cmNlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHJlcGxhY2UgZnVuY3Rpb25OYW1lIGlmIHdlIGZvdW5kIHNvbWV0aGluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3Vlc3NlZEZ1bmN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBndWVzc2VkRnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHN0YWNrZnJhbWUuYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogc3RhY2tmcmFtZS5maWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBzZWVrIHNvdXJjZS1tYXBwZWQgbG9jYXRpb24gYW5kIHJldHVybiBuZXcgZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZ2V0TWFwcGVkTG9jYXRpb24gPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRnZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN1cHBvcnRlZEVudmlyb25tZW50KCk7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZTtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBzdGFja2ZyYW1lLmZpbGVOYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChmaWxlTmFtZSkudGhlbihmdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmdVUkwgPSBfZmluZFNvdXJjZU1hcHBpbmdVUkwoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzRGF0YVVybCA9IHNvdXJjZU1hcHBpbmdVUkwuc3Vic3RyKDAsIDUpID09PSAnZGF0YTonO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdFNvdXJjZVJvb3QgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgZmlsZU5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VNYXBwaW5nVVJMWzBdICE9PSAnLycgJiYgIWlzRGF0YVVybCAmJiAhKC9eaHR0cHM/OlxcL1xcL3xeXFwvXFwvL2kpLnRlc3Qoc291cmNlTWFwcGluZ1VSTCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcHBpbmdVUkwgPSBkZWZhdWx0U291cmNlUm9vdCArIHNvdXJjZU1hcHBpbmdVUkw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwcGluZ1VSTCwgZGVmYXVsdFNvdXJjZVJvb3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihzb3VyY2VNYXBDb25zdW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZXh0cmFjdExvY2F0aW9uSW5mb0Zyb21Tb3VyY2VNYXBTb3VyY2Uoc3RhY2tmcmFtZSwgc291cmNlTWFwQ29uc3VtZXIsIHNvdXJjZUNhY2hlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVsnY2F0Y2gnXShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZScsIFsnZXJyb3Itc3RhY2stcGFyc2VyJywgJ3N0YWNrLWdlbmVyYXRvcicsICdzdGFja3RyYWNlLWdwcyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnZXJyb3Itc3RhY2stcGFyc2VyJyksIHJlcXVpcmUoJ3N0YWNrLWdlbmVyYXRvcicpLCByZXF1aXJlKCdzdGFja3RyYWNlLWdwcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2UgPSBmYWN0b3J5KHJvb3QuRXJyb3JTdGFja1BhcnNlciwgcm9vdC5TdGFja0dlbmVyYXRvciwgcm9vdC5TdGFja1RyYWNlR1BTKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIFN0YWNrVHJhY2UoRXJyb3JTdGFja1BhcnNlciwgU3RhY2tHZW5lcmF0b3IsIFN0YWNrVHJhY2VHUFMpIHtcbiAgICB2YXIgX29wdGlvbnMgPSB7XG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBzdGFja2ZyYW1lcyBmb3IgdGhpcyBsaWJyYXJ5IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2UkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignRXJyb3JTdGFja1BhcnNlciQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlR1BTJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrR2VuZXJhdG9yJCQnKSA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZUNhY2hlOiB7fVxuICAgIH07XG5cbiAgICB2YXIgX2dlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRHZW5lcmF0ZUVycm9yKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRXJyb3IgbXVzdCBiZSB0aHJvd24gdG8gZ2V0IHN0YWNrIGluIElFXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdlIDIgZ2l2ZW4gT2JqZWN0cy4gSWYgYSBjb25mbGljdCBvY2N1cnMgdGhlIHNlY29uZCBvYmplY3Qgd2lucy5cbiAgICAgKiBEb2VzIG5vdCBkbyBkZWVwIG1lcmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaXJzdCBiYXNlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWNvbmQgb3ZlcnJpZGVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gbWVyZ2VkIGZpcnN0IGFuZCBzZWNvbmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tZXJnZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcblxuICAgICAgICBbZmlyc3QsIHNlY29uZF0uZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVyci5zdGFjayB8fCBlcnJbJ29wZXJhI3NvdXJjZWxvYyddO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXJlZChzdGFja2ZyYW1lcywgZmlsdGVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXMuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrZnJhbWVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0KG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikgPyB0aGlzLmZyb21FcnJvcihlcnIsIG9wdHMpIDogdGhpcy5nZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgYmFja3RyYWNlIGZyb20gaW52b2NhdGlvbiBwb2ludC5cbiAgICAgICAgICogSU1QT1JUQU5UOiBEb2VzIG5vdCBoYW5kbGUgc291cmNlIG1hcHMgb3IgZ3Vlc3MgZnVuY3Rpb24gbmFtZXMhXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0U3luYzogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0U3luYyhvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyKSA6IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyZWQoc3RhY2ssIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3Igb2JqZWN0LCBwYXJzZSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmb3IgQXJyYXlbU3RhY2tGcmFtZX1cbiAgICAgICAgICovXG4gICAgICAgIGZyb21FcnJvcjogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZnJvbUVycm9yKGVycm9yLCBvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBncHMgPSBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrZnJhbWVzID0gX2ZpbHRlcmVkKEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyb3IpLCBvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShQcm9taXNlLmFsbChzdGFja2ZyYW1lcy5tYXAoZnVuY3Rpb24oc2YpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVPcmlnaW5hbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ3BzLnBpbnBvaW50KHNmKS50aGVuKHJlc29sdmUsIHJlc29sdmVPcmlnaW5hbClbJ2NhdGNoJ10ocmVzb2x2ZU9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBTdGFja0dlbmVyYXRvciB0byBnZW5lcmF0ZSBhIGJhY2t0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IG9mIEFycmF5W1N0YWNrRnJhbWVdXG4gICAgICAgICAqL1xuICAgICAgICBnZW5lcmF0ZUFydGlmaWNpYWxseTogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2VuZXJhdGVBcnRpZmljaWFsbHkob3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgc3RhY2tGcmFtZXMgPSBTdGFja0dlbmVyYXRvci5iYWNrdHJhY2Uob3B0cyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgc3RhY2tGcmFtZXMgPSBzdGFja0ZyYW1lcy5maWx0ZXIob3B0cy5maWx0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGFja0ZyYW1lcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24sIHdyYXAgaXQgc3VjaCB0aGF0IGludm9jYXRpb25zIHRyaWdnZXIgYSBjYWxsYmFjayB0aGF0XG4gICAgICAgICAqIGlzIGNhbGxlZCB3aXRoIGEgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGluc3RydW1lbnRlZFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdpdGggYSBzdGFjayB0cmFjZSBvbiBpbnZvY2F0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVycmJhY2sgb3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGVycm9yIGlmIHVuYWJsZSB0byBnZXQgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIG9wdGlvbmFsIGNvbnRleHQgb2JqZWN0IChlLmcuIHdpbmRvdylcbiAgICAgICAgICovXG4gICAgICAgIGluc3RydW1lbnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnQoZm4sIGNhbGxiYWNrLCBlcnJiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBpbnN0cnVtZW50ZWQsIHJldHVybiBnaXZlbiBGdW5jdGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGluc3RydW1lbnRlZCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnRlZCgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCgpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZyB8fCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb21FcnJvcihlKS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrKVsnY2F0Y2gnXShlcnJiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGluc3RydW1lbnRlZC5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID0gZm47XG5cbiAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50ZWQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBpbnN0cnVtZW50ZWQsXG4gICAgICAgICAqIHJldmVydCB0aGUgZnVuY3Rpb24gdG8gaXQncyBvcmlnaW5hbCAobm9uLWluc3RydW1lbnRlZCkgc3RhdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGRlLWluc3RydW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGRlaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZGVpbnN0cnVtZW50KGZuKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGUtaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIG5vdCBpbnN0cnVtZW50ZWQsIHJldHVybiBvcmlnaW5hbFxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3IgbWVzc2FnZSBhbmQgQXJyYXkgb2YgU3RhY2tGcmFtZXMsIHNlcmlhbGl6ZSBhbmQgUE9TVCB0byBnaXZlbiBVUkwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrZnJhbWVzXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVycm9yTXNnXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0T3B0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgcmVwb3J0OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRyZXBvcnQoc3RhY2tmcmFtZXMsIHVybCwgZXJyb3JNc2csIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPj0gMjAwICYmIHJlcS5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdQT1NUIHRvICcgKyB1cmwgKyAnIGZhaWxlZCB3aXRoIHN0YXR1czogJyArIHJlcS5zdGF0dXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVxLm9wZW4oJ3Bvc3QnLCB1cmwpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHJlcXVlc3QgaGVhZGVyc1xuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucyAmJiB0eXBlb2YgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgaGVhZGVyc1toZWFkZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZXBvcnRQYXlsb2FkID0ge3N0YWNrOiBzdGFja2ZyYW1lc307XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQgJiYgZXJyb3JNc2cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0UGF5bG9hZC5tZXNzYWdlID0gZXJyb3JNc2c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVwb3J0UGF5bG9hZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIl19 diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index 40d39c0..8d496a0 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.StackTrace=e()}}(function(){var e;return function n(e,r,t){function o(a,s){if(!r[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=r[a]={exports:{}};e[a][0].call(l.exports,function(n){var r=e[a][1][n];return o(r?r:n)},l,l.exports,n,e,r,t)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var r=n.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),t=this.extractLocation(r.pop()),o=r.join(" ")||void 0,i=["eval",""].indexOf(t[0])>-1?void 0:t[0];return new e({functionName:o,fileName:i,lineNumber:t[1],columnNumber:t[2],source:n})},this)},parseFFOrSafari:function(n){var r=n.stack.split("\n").filter(function(e){return!e.match(t)},this);return r.map(function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),n.indexOf("@")===-1&&n.indexOf(":")===-1)return new e({functionName:n});var r=/((.*".+"[^@]*)?[^@]*)(?:@)/,t=n.match(r),o=t&&t[1]?t[1]:void 0,i=this.extractLocation(n.replace(r,""));return new e({functionName:o,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:n})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,t=n.message.split("\n"),o=[],i=2,a=t.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:n})},this)}}})},{stackframe:3}],2:[function(n,r,t){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof t?r.exports=i(n("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var r=[],t=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(t=n.maxStackSize);for(var o=arguments.callee;o&&r.length=0&&e>1;return n?-r:r}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(n|=c),r+=i.encode(n);while(o>0);return r},r.decode=function(e,n,r){var t,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(s&c),s&=u,f+=s<0?n-u>1?t(u,n,o,i,a,s):s==r.LEAST_UPPER_BOUND?n1?t(e,u,o,i,a,s):s==r.LEAST_UPPER_BOUND?u:e<0?-1:e}r.GREATEST_LOWER_BOUND=1,r.LEAST_UPPER_BOUND=2,r.search=function(e,n,o,i){if(0===n.length)return-1;var a=t(-1,n.length,e,n,o,i||r.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],8:[function(e,n,r){function t(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,r,a){if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},r.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=c.fromArray(e._names.toArray(),!0),t=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;p1&&(r.source=m+o[1],m+=o[1],r.originalLine=g+o[2],g=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),"number"==typeof r.originalLine&&b.push(r)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=s.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},r.BasicSourceMapConsumer=o,a.prototype=Object.create(t.prototype),a.prototype.constructor=t,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),t?(t.path=n,i(t)):n}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=o(n),t=o(e);if(t&&(e=t.path||"/"),r&&!r.scheme)return t&&(r.scheme=t.scheme),i(r);if(r||n.match(_))return n;if(t&&!t.host&&!t.path)return t.host=n,i(t);var s="/"===n.charAt(0)?n:a(e.replace(/\/+$/,"")+"/"+n);return t?(t.path=s,i(t)):s}function u(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function g(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=m(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:m(e.name,n.name)))))}r.getArg=t;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;r.urlParse=o,r.urlGenerate=i,r.normalize=a,r.join=s,r.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},r.relative=u;var y=function(){var e=Object.create(null);return!("__proto__"in e)}();r.toSetString=y?c:l,r.fromSetString=y?c:f,r.compareByOriginalPositions=g,r.compareByGeneratedPositionsDeflated=h,r.compareByGeneratedPositionsInflated=d},{}],11:[function(n,r,t){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stacktrace-gps",["source-map","stackframe"],i):"object"==typeof t?r.exports=i(n("source-map/lib/source-map-consumer"),n("stackframe")):o.StackTraceGPS=i(o.SourceMap||o.sourceMap,o.StackFrame)}(this,function(e,n){"use strict";function r(e){return new Promise(function(n,r){var t=new XMLHttpRequest;t.open("get",e),t.onerror=r,t.onreadystatechange=function(){4===t.readyState&&(t.status>=200&&t.status<300||"file://"===e.substr(0,7)&&t.responseText?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],t=e.split("\n"),o="",i=Math.min(n,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=r.length,l=0;l=200&&a.status<400?o(a.responseText):i(new Error("POST to "+n+" failed with status: "+a.status)))},a.open("post",n),a.setRequestHeader("Content-Type","application/json"),t&&"object"==typeof t.headers){var s=t.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==r&&null!==r&&(c.message=r),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":2,"stacktrace-gps":11}]},{},[12])(12)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.StackTrace=e()}}(function(){var e;return function n(e,r,t){function o(a,s){if(!r[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=r[a]={exports:{}};e[a][0].call(l.exports,function(n){var r=e[a][1][n];return o(r?r:n)},l,l.exports,n,e,r,t)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var r=n.replace(/^\s+/,"").replace(/\(eval code/g,"("),t=r.match(/ (\((.+):(\d+):(\d+)\)$)/);r=t?r.replace(t[0],""):r;var o=r.split(/\s+/).slice(1),i=this.extractLocation(t?t[1]:o.pop()),a=o.join(" ")||void 0,s=["eval",""].indexOf(i[0])>-1?void 0:i[0];return new e({functionName:a,fileName:s,lineNumber:i[1],columnNumber:i[2],source:n})},this)},parseFFOrSafari:function(n){var r=n.stack.split("\n").filter(function(e){return!e.match(t)},this);return r.map(function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),n.indexOf("@")===-1&&n.indexOf(":")===-1)return new e({functionName:n});var r=/((.*".+"[^@]*)?[^@]*)(?:@)/,t=n.match(r),o=t&&t[1]?t[1]:void 0,i=this.extractLocation(n.replace(r,""));return new e({functionName:o,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:n})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,t=n.message.split("\n"),o=[],i=2,a=t.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:n})},this)}}})},{stackframe:2}],2:[function(n,r,t){!function(n,o){"use strict";"function"==typeof e&&e.amd?e("stackframe",[],o):"object"==typeof t?r.exports=o():n.StackFrame=o()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e){return e.charAt(0).toUpperCase()+e.substring(1)}function r(e){return function(){return this[e]}}function t(e){if(e instanceof Object)for(var r=0;r=0&&e>1;return n?-r:r}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(n|=c),r+=i.encode(n);while(o>0);return r},r.decode=function(e,n,r){var t,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(s&c),s&=u,f+=s<0?n-u>1?t(u,n,o,i,a,s):s==r.LEAST_UPPER_BOUND?n1?t(e,u,o,i,a,s):s==r.LEAST_UPPER_BOUND?u:e<0?-1:e}r.GREATEST_LOWER_BOUND=1,r.LEAST_UPPER_BOUND=2,r.search=function(e,n,o,i){if(0===n.length)return-1;var a=t(-1,n.length,e,n,o,i||r.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],7:[function(e,n,r){function t(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,r,a){if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},r.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=c.fromArray(e._names.toArray(),!0),t=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;p1&&(r.source=m+o[1],m+=o[1],r.originalLine=g+o[2],g=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),O.push(r),"number"==typeof r.originalLine&&b.push(r)}f(O,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=O,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=s.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},r.BasicSourceMapConsumer=o,a.prototype=Object.create(t.prototype),a.prototype.constructor=t,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),t?(t.path=n,i(t)):n}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=o(n),t=o(e);if(t&&(e=t.path||"/"),r&&!r.scheme)return t&&(r.scheme=t.scheme),i(r);if(r||n.match(_))return n;if(t&&!t.host&&!t.path)return t.host=n,i(t);var s="/"===n.charAt(0)?n:a(e.replace(/\/+$/,"")+"/"+n);return t?(t.path=s,i(t)):s}function u(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function g(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=m(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:m(e.name,n.name)))))}r.getArg=t;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;r.urlParse=o,r.urlGenerate=i,r.normalize=a,r.join=s,r.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},r.relative=u;var y=function(){var e=Object.create(null);return!("__proto__"in e)}();r.toSetString=y?c:l,r.fromSetString=y?c:f,r.compareByOriginalPositions=g,r.compareByGeneratedPositionsDeflated=h,r.compareByGeneratedPositionsInflated=d},{}],10:[function(e,n,r){arguments[4][2][0].apply(r,arguments)},{dup:2}],11:[function(n,r,t){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof t?r.exports=i(n("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var r=[],t=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(t=n.maxStackSize);for(var o=arguments.callee;o&&r.length=200&&t.status<300||"file://"===e.substr(0,7)&&t.responseText?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],t=e.split("\n"),o="",i=Math.min(n,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=r.length,l=0;l=200&&a.status<400?o(a.responseText):i(new Error("POST to "+n+" failed with status: "+a.status)))},a.open("post",n),a.setRequestHeader("Content-Type","application/json"),t&&"object"==typeof t.headers){var s=t.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==r&&null!==r&&(c.message=r),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":11,"stacktrace-gps":13}]},{},[14])(14)}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/package-lock.json b/package-lock.json index 9695d82..e77be19 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,8 @@ "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=", "dev": true, "requires": { - "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", - "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz" + "normalize-path": "^2.0.1", + "through2": "^2.0.3" } }, "@types/geojson": { @@ -26,8 +26,8 @@ "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", "dev": true, "requires": { - "jsonparse": "1.3.1", - "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" } }, "JSV": { @@ -37,7 +37,8 @@ "dev": true }, "abbrev": { - "version": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", "dev": true }, @@ -47,7 +48,7 @@ "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", "dev": true, "requires": { - "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", + "mime-types": "~2.1.11", "negotiator": "0.6.1" } }, @@ -75,8 +76,8 @@ "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", "dev": true, "requires": { - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "semver": "5.0.3" + "extend": "~3.0.0", + "semver": "~5.0.1" }, "dependencies": { "semver": { @@ -88,13 +89,14 @@ } }, "align-text": { - "version": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", - "longest": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "alter": { @@ -103,11 +105,12 @@ "integrity": "sha1-x1iICGF1cgNKrmJICvJrHU0cs80=", "dev": true, "requires": { - "stable": "0.1.8" + "stable": "~0.1.3" } }, "amdefine": { - "version": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, @@ -121,12 +124,14 @@ } }, "ansi-regex": { - "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=", "dev": true }, "ansi-styles": { - "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, @@ -142,8 +147,8 @@ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, "requires": { - "micromatch": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, "archiver": { @@ -152,15 +157,15 @@ "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=", "dev": true, "requires": { - "archiver-utils": "1.3.0", - "async": "2.5.0", - "buffer-crc32": "0.2.13", - "glob": "7.1.2", - "lodash": "4.17.4", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "tar-stream": "1.5.4", - "walkdir": "0.0.11", - "zip-stream": "1.2.0" + "archiver-utils": "^1.3.0", + "async": "^2.0.0", + "buffer-crc32": "^0.2.1", + "glob": "^7.0.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0", + "tar-stream": "^1.5.0", + "walkdir": "^0.0.11", + "zip-stream": "^1.1.0" }, "dependencies": { "async": { @@ -169,7 +174,7 @@ "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.14.0" } }, "balanced-match": { @@ -184,8 +189,8 @@ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "balanced-match": "1.0.0", - "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "glob": { @@ -194,12 +199,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "3.0.4", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "lodash": { @@ -214,7 +219,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } } } @@ -225,12 +230,12 @@ "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", "dev": true, "requires": { - "glob": "7.1.2", - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "lazystream": "1.0.0", - "lodash": "4.17.4", - "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + "glob": "^7.0.0", + "graceful-fs": "^4.1.0", + "lazystream": "^1.0.0", + "lodash": "^4.8.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" }, "dependencies": { "balanced-match": { @@ -245,8 +250,8 @@ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "balanced-match": "1.0.0", - "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "glob": { @@ -255,12 +260,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "3.0.4", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "lodash": { @@ -275,7 +280,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } } } @@ -287,23 +292,26 @@ "dev": true }, "argparse": { - "version": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", "dev": true, "requires": { - "sprintf-js": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "sprintf-js": "~1.0.2" } }, "arr-diff": { - "version": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz" + "arr-flatten": "^1.0.1" } }, "arr-flatten": { - "version": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz", "integrity": "sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=", "dev": true }, @@ -332,7 +340,8 @@ "dev": true }, "array-find-index": { - "version": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, @@ -360,16 +369,18 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + "array-uniq": "^1.0.1" } }, "array-uniq": { - "version": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, "array-unique": { - "version": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, @@ -380,7 +391,8 @@ "dev": true }, "asn1": { - "version": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", "dev": true }, @@ -390,9 +402,9 @@ "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimalistic-assert": "1.0.0" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -405,7 +417,8 @@ } }, "assert-plus": { - "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", "dev": true }, @@ -433,7 +446,7 @@ "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", "dev": true, "requires": { - "acorn": "4.0.13" + "acorn": "^4.0.3" } }, "async": { @@ -449,7 +462,8 @@ "dev": true }, "asynckit": { - "version": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, @@ -460,12 +474,14 @@ "dev": true }, "aws-sign2": { - "version": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", "dev": true }, "aws4": { - "version": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", "integrity": "sha1-Cin/t5wxyecS7rCH6OemS0pW11U=", "dev": true }, @@ -475,52 +491,52 @@ "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", "dev": true, "requires": { - "babel-plugin-constant-folding": "1.0.1", - "babel-plugin-dead-code-elimination": "1.0.2", - "babel-plugin-eval": "1.0.1", - "babel-plugin-inline-environment-variables": "1.0.1", - "babel-plugin-jscript": "1.0.4", - "babel-plugin-member-expression-literals": "1.0.1", - "babel-plugin-property-literals": "1.0.1", - "babel-plugin-proto-to-assign": "1.0.4", - "babel-plugin-react-constant-elements": "1.0.3", - "babel-plugin-react-display-name": "1.0.3", - "babel-plugin-remove-console": "1.0.1", - "babel-plugin-remove-debugger": "1.0.1", - "babel-plugin-runtime": "1.0.7", - "babel-plugin-undeclared-variables-check": "1.0.2", - "babel-plugin-undefined-to-void": "1.1.6", - "babylon": "5.8.38", - "bluebird": "2.11.0", - "chalk": "1.1.3", - "convert-source-map": "1.5.1", - "core-js": "1.2.7", - "debug": "2.6.9", - "detect-indent": "3.0.1", - "esutils": "2.0.2", - "fs-readdir-recursive": "0.1.2", - "globals": "6.4.1", - "home-or-tmp": "1.0.0", - "is-integer": "1.0.7", + "babel-plugin-constant-folding": "^1.0.1", + "babel-plugin-dead-code-elimination": "^1.0.2", + "babel-plugin-eval": "^1.0.1", + "babel-plugin-inline-environment-variables": "^1.0.1", + "babel-plugin-jscript": "^1.0.4", + "babel-plugin-member-expression-literals": "^1.0.1", + "babel-plugin-property-literals": "^1.0.1", + "babel-plugin-proto-to-assign": "^1.0.3", + "babel-plugin-react-constant-elements": "^1.0.3", + "babel-plugin-react-display-name": "^1.0.3", + "babel-plugin-remove-console": "^1.0.1", + "babel-plugin-remove-debugger": "^1.0.1", + "babel-plugin-runtime": "^1.0.7", + "babel-plugin-undeclared-variables-check": "^1.0.2", + "babel-plugin-undefined-to-void": "^1.1.6", + "babylon": "^5.8.38", + "bluebird": "^2.9.33", + "chalk": "^1.0.0", + "convert-source-map": "^1.1.0", + "core-js": "^1.0.0", + "debug": "^2.1.1", + "detect-indent": "^3.0.0", + "esutils": "^2.0.0", + "fs-readdir-recursive": "^0.1.0", + "globals": "^6.4.0", + "home-or-tmp": "^1.0.0", + "is-integer": "^1.0.4", "js-tokens": "1.0.1", - "json5": "0.4.0", - "lodash": "3.10.1", - "minimatch": "2.0.10", - "output-file-sync": "1.1.2", - "path-exists": "1.0.0", - "path-is-absolute": "1.0.1", - "private": "0.1.8", + "json5": "^0.4.0", + "lodash": "^3.10.0", + "minimatch": "^2.0.3", + "output-file-sync": "^1.1.0", + "path-exists": "^1.0.0", + "path-is-absolute": "^1.0.0", + "private": "^0.1.6", "regenerator": "0.8.40", - "regexpu": "1.3.0", - "repeating": "1.1.3", - "resolve": "1.7.1", - "shebang-regex": "1.0.0", - "slash": "1.0.0", - "source-map": "0.5.7", - "source-map-support": "0.2.10", - "to-fast-properties": "1.0.3", - "trim-right": "1.0.1", - "try-resolve": "1.0.1" + "regexpu": "^1.3.0", + "repeating": "^1.1.2", + "resolve": "^1.1.6", + "shebang-regex": "^1.0.0", + "slash": "^1.0.0", + "source-map": "^0.5.0", + "source-map-support": "^0.2.10", + "to-fast-properties": "^1.0.0", + "trim-right": "^1.0.0", + "try-resolve": "^1.0.0" }, "dependencies": { "ansi-regex": { @@ -553,7 +569,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -563,11 +579,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "concat-map": { @@ -609,7 +625,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "is-finite": { @@ -618,7 +634,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "lodash": { @@ -633,7 +649,7 @@ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.0.0" } }, "ms": { @@ -666,7 +682,7 @@ "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "resolve": { @@ -675,7 +691,7 @@ "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, "source-map": { @@ -690,7 +706,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -707,8 +723,8 @@ "integrity": "sha1-CjRwRrSBRay8pW6MjtX3NrxU+dA=", "dev": true, "requires": { - "babel-core": "5.8.38", - "lodash.assign": "3.2.0" + "babel-core": "~5.8.3", + "lodash.assign": "^3.2.0" } }, "babel-plugin-constant-folding": { @@ -759,7 +775,7 @@ "integrity": "sha1-xJ56/QL1d7xNoF6i3wAiUM980SM=", "dev": true, "requires": { - "lodash": "3.10.1" + "lodash": "^3.9.3" }, "dependencies": { "lodash": { @@ -806,7 +822,7 @@ "integrity": "sha1-XPGqU52BP/ZOmWQSkK9iCWX2Xe4=", "dev": true, "requires": { - "leven": "1.0.2" + "leven": "^1.0.2" } }, "babel-plugin-undefined-to-void": { @@ -828,7 +844,8 @@ "dev": true }, "balanced-match": { - "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", "dev": true }, @@ -838,13 +855,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "component-emitter": { @@ -859,7 +876,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -868,7 +885,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -877,7 +894,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -886,9 +903,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { @@ -924,12 +941,13 @@ "dev": true }, "bcrypt-pbkdf": { - "version": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz", "integrity": "sha1-PKdrhSQccXC/fZcD57mqdGMAQNQ=", "dev": true, "optional": true, "requires": { - "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + "tweetnacl": "^0.14.3" } }, "beeper": { @@ -954,24 +972,26 @@ "dev": true }, "bl": { - "version": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", "dev": true, "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz" + "readable-stream": "~2.0.5" }, "dependencies": { "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" } } } @@ -983,7 +1003,8 @@ "dev": true }, "bluebird": { - "version": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", "dev": true }, @@ -1000,15 +1021,15 @@ "dev": true, "requires": { "bytes": "2.4.0", - "content-type": "1.0.2", + "content-type": "~1.0.2", "debug": "2.6.7", - "depd": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", - "http-errors": "1.6.2", - "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "on-finished": "2.3.0", + "depd": "~1.1.0", + "http-errors": "~1.6.1", + "iconv-lite": "0.4.15", + "on-finished": "~2.3.0", "qs": "6.4.0", - "raw-body": "2.2.0", - "type-is": "1.6.15" + "raw-body": "~2.2.0", + "type-is": "~1.6.15" }, "dependencies": { "debug": { @@ -1035,30 +1056,33 @@ } }, "boom": { - "version": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, "requires": { - "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" + "hoek": "2.x.x" } }, "brace-expansion": { - "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=", "dev": true, "requires": { - "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "balanced-match": "^0.4.1", + "concat-map": "0.0.1" } }, "braces": { - "version": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "preserve": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "breakable": { @@ -1079,11 +1103,11 @@ "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", "dev": true, "requires": { - "JSONStream": "1.3.1", - "combine-source-map": "0.7.2", - "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "umd": "3.0.1" + "JSONStream": "^1.0.3", + "combine-source-map": "~0.7.1", + "defined": "^1.0.0", + "through2": "^2.0.0", + "umd": "^3.0.0" } }, "browser-resolve": { @@ -1109,53 +1133,53 @@ "integrity": "sha1-tanJAgJD8McORnW+yCI7xifkFc4=", "dev": true, "requires": { - "JSONStream": "1.3.1", - "assert": "1.4.1", - "browser-pack": "6.0.2", - "browser-resolve": "1.11.2", - "browserify-zlib": "0.1.4", - "buffer": "4.9.1", - "cached-path-relative": "1.0.1", - "concat-stream": "1.5.2", - "console-browserify": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.11.1", - "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "deps-sort": "2.0.0", - "domain-browser": "1.1.7", - "duplexer2": "0.1.4", - "events": "1.1.1", - "glob": "7.1.2", - "has": "1.0.1", - "htmlescape": "1.1.1", - "https-browserify": "0.0.1", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "insert-module-globals": "7.0.1", - "labeled-stream-splicer": "2.0.0", - "module-deps": "4.1.1", - "os-browserify": "0.1.2", - "parents": "1.0.1", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "querystring-es3": "0.2.1", - "read-only-stream": "2.0.0", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", - "shasum": "1.0.2", - "shell-quote": "1.6.1", - "stream-browserify": "2.0.1", - "stream-http": "2.7.2", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "subarg": "1.0.0", - "syntax-error": "1.3.0", - "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "timers-browserify": "1.4.2", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + "JSONStream": "^1.0.3", + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^1.11.0", + "browserify-zlib": "~0.1.2", + "buffer": "^4.1.0", + "cached-path-relative": "^1.0.0", + "concat-stream": "~1.5.1", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.0", + "domain-browser": "~1.1.0", + "duplexer2": "~0.1.2", + "events": "~1.1.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "~0.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.0.0", + "labeled-stream-splicer": "^2.0.0", + "module-deps": "^4.0.8", + "os-browserify": "~0.1.1", + "parents": "^1.0.1", + "path-browserify": "~0.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^2.0.0", + "stream-http": "^2.0.0", + "string_decoder": "~0.10.0", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "~0.0.0", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "~0.0.1", + "xtend": "^4.0.0" }, "dependencies": { "balanced-match": { @@ -1170,8 +1194,8 @@ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "balanced-match": "1.0.0", - "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "glob": { @@ -1180,12 +1204,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "3.0.4", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "minimatch": { @@ -1194,7 +1218,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } } } @@ -1205,11 +1229,11 @@ "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.0", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "buffer-xor": "^1.0.2", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "inherits": "^2.0.1" } }, "browserify-cipher": { @@ -1218,9 +1242,9 @@ "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", "dev": true, "requires": { - "browserify-aes": "1.0.6", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.0" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -1229,9 +1253,9 @@ "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1" } }, "browserify-rsa": { @@ -1240,8 +1264,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.5" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -1250,13 +1274,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "parse-asn1": "5.1.0" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -1265,7 +1289,7 @@ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", "dev": true, "requires": { - "pako": "0.2.9" + "pako": "~0.2.0" } }, "buffer": { @@ -1274,9 +1298,9 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.2.1", - "ieee754": "1.1.8", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-crc32": { @@ -1286,7 +1310,8 @@ "dev": true }, "buffer-shims": { - "version": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", "dev": true }, @@ -1297,7 +1322,8 @@ "dev": true }, "builtin-modules": { - "version": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, @@ -1319,15 +1345,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" }, "dependencies": { "component-emitter": { @@ -1357,44 +1383,49 @@ "dev": true }, "camelcase": { - "version": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", "dev": true }, "camelcase-keys": { - "version": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "map-obj": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" } }, "caseless": { - "version": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", "dev": true }, "center-align": { - "version": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "dev": true, "optional": true, "requires": { - "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "lazy-cache": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chalk": { - "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "chokidar": { @@ -1403,15 +1434,15 @@ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.2", - "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "is-binary-path": "1.0.1", - "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "readdirp": "2.1.0" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, "cipher-base": { @@ -1420,8 +1451,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "class-utils": { @@ -1430,10 +1461,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -1442,7 +1473,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "isobject": { @@ -1460,7 +1491,7 @@ "dev": true, "requires": { "exit": "0.1.2", - "glob": "7.1.2" + "glob": "^7.1.1" }, "dependencies": { "balanced-match": { @@ -1475,7 +1506,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1503,12 +1534,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "inflight": { @@ -1517,8 +1548,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -1533,7 +1564,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "once": { @@ -1542,7 +1573,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "path-is-absolute": { @@ -1577,18 +1608,20 @@ } }, "cliui": { - "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, "optional": true, "requires": { - "center-align": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "right-align": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" } }, "clone": { - "version": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", "dev": true }, @@ -1599,7 +1632,8 @@ "dev": true }, "clone-stats": { - "version": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", "dev": true }, @@ -1609,9 +1643,9 @@ "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", "dev": true, "requires": { - "inherits": "2.0.3", - "process-nextick-args": "2.0.0", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" }, "dependencies": { "core-util-is": { @@ -1644,13 +1678,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -1659,7 +1693,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "util-deprecate": { @@ -1676,8 +1710,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-support": { @@ -1698,7 +1732,7 @@ "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.5.0" }, "dependencies": { "lodash": { @@ -1715,26 +1749,28 @@ "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", "dev": true, "requires": { - "convert-source-map": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "inline-source-map": "0.6.2", - "lodash.memoize": "3.0.4", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" } }, "combined-stream": { - "version": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", "dev": true, "requires": { - "delayed-stream": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + "delayed-stream": "~1.0.0" } }, "commander": { - "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", "dev": true, "requires": { - "graceful-readlink": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" + "graceful-readlink": ">= 1.0.0" } }, "comment-parser": { @@ -1743,7 +1779,7 @@ "integrity": "sha1-PAPwd2uGo239mgosl8YwfzMggv4=", "dev": true, "requires": { - "readable-stream": "2.3.6" + "readable-stream": "^2.0.4" }, "dependencies": { "core-util-is": { @@ -1776,13 +1812,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -1791,7 +1827,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "util-deprecate": { @@ -1808,15 +1844,15 @@ "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", "dev": true, "requires": { - "commander": "2.15.1", - "detective": "4.7.1", - "glob": "5.0.15", - "graceful-fs": "4.1.11", - "iconv-lite": "0.4.23", - "mkdirp": "0.5.1", - "private": "0.1.8", - "q": "1.5.1", - "recast": "0.11.23" + "commander": "^2.5.0", + "detective": "^4.3.1", + "glob": "^5.0.15", + "graceful-fs": "^4.1.2", + "iconv-lite": "^0.4.5", + "mkdirp": "^0.5.0", + "private": "^0.1.6", + "q": "^1.1.2", + "recast": "^0.11.17" }, "dependencies": { "acorn": { @@ -1837,7 +1873,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1865,8 +1901,8 @@ "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", "dev": true, "requires": { - "acorn": "5.6.0", - "defined": "1.0.0" + "acorn": "^5.2.1", + "defined": "^1.0.0" } }, "esprima": { @@ -1881,11 +1917,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "graceful-fs": { @@ -1900,7 +1936,7 @@ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "inflight": { @@ -1909,8 +1945,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -1925,7 +1961,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -1949,7 +1985,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "path-is-absolute": { @@ -1971,9 +2007,9 @@ "dev": true, "requires": { "ast-types": "0.9.6", - "esprima": "3.1.3", - "private": "0.1.8", - "source-map": "0.5.7" + "esprima": "~3.1.0", + "private": "~0.1.5", + "source-map": "~0.5.0" } }, "source-map": { @@ -2014,14 +2050,15 @@ "integrity": "sha1-WFhwku8g03y1i68AARLJJ4/3O58=", "dev": true, "requires": { - "buffer-crc32": "0.2.13", - "crc32-stream": "2.0.0", - "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + "buffer-crc32": "^0.2.1", + "crc32-stream": "^2.0.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" } }, "concat-map": { - "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, @@ -2031,9 +2068,9 @@ "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", "dev": true, "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "readable-stream": "2.0.6", - "typedarray": "0.0.6" + "inherits": "~2.0.1", + "readable-stream": "~2.0.0", + "typedarray": "~0.0.5" }, "dependencies": { "readable-stream": { @@ -2042,12 +2079,12 @@ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" } } } @@ -2058,7 +2095,7 @@ "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", "dev": true, "requires": { - "source-map": "0.6.1" + "source-map": "^0.6.1" }, "dependencies": { "source-map": { @@ -2075,8 +2112,8 @@ "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", "dev": true, "requires": { - "ini": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "proto-list": "1.2.4" + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, "connect": { @@ -2087,7 +2124,7 @@ "requires": { "debug": "2.6.8", "finalhandler": "1.0.4", - "parseurl": "1.3.1", + "parseurl": "~1.3.1", "utils-merge": "1.0.0" }, "dependencies": { @@ -2109,11 +2146,12 @@ } }, "console-browserify": { - "version": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz" + "date-now": "^0.1.4" } }, "constants-browserify": { @@ -2129,7 +2167,8 @@ "dev": true }, "convert-source-map": { - "version": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", "dev": true }, @@ -2152,7 +2191,8 @@ "dev": true }, "core-util-is": { - "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, @@ -2175,7 +2215,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "esprima": { @@ -2190,8 +2230,8 @@ "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3" + "argparse": "^1.0.7", + "esprima": "^2.6.0" } }, "minimist": { @@ -2220,8 +2260,8 @@ "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", "dev": true, "requires": { - "crc": "3.4.4", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + "crc": "^3.4.4", + "readable-stream": "^2.0.0" } }, "create-ecdh": { @@ -2230,8 +2270,8 @@ "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -2240,10 +2280,10 @@ "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "ripemd160": "2.0.1", - "sha.js": "2.4.8" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -2252,20 +2292,21 @@ "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.8" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cryptiles": { - "version": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, "requires": { - "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz" + "boom": "2.x.x" } }, "crypto-browserify": { @@ -2274,16 +2315,16 @@ "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", "dev": true, "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "pbkdf2": "3.0.13", - "public-encrypt": "4.0.0", - "randombytes": "2.0.5" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0" } }, "css": { @@ -2292,10 +2333,10 @@ "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", "dev": true, "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "source-map": "0.1.43", - "source-map-resolve": "0.3.1", - "urix": "0.1.0" + "inherits": "^2.0.1", + "source-map": "^0.1.38", + "source-map-resolve": "^0.3.0", + "urix": "^0.1.0" }, "dependencies": { "source-map": { @@ -2304,7 +2345,7 @@ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { - "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + "amdefine": ">=0.0.4" } } } @@ -2316,11 +2357,12 @@ "dev": true }, "currently-unhandled": { - "version": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" + "array-find-index": "^1.0.1" } }, "custom-event": { @@ -2341,36 +2383,40 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.44" + "es5-ext": "^0.10.9" } }, "dashdash": { - "version": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { - "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true } } }, "date-now": { - "version": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, "dateformat": { - "version": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", "dev": true, "requires": { - "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "meow": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" + "get-stdin": "^4.0.1", + "meow": "^3.3.0" } }, "deap": { @@ -2380,11 +2426,12 @@ "dev": true }, "debug": { - "version": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", "integrity": "sha1-wE0XplTpICRkgD8JYVP3Cm8x9L4=", "dev": true, "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + "ms": "0.7.2" } }, "debug-fabulous": { @@ -2393,8 +2440,8 @@ "integrity": "sha1-+gccXYdIRoVCSAdCHKSxawsaB2M=", "dev": true, "requires": { - "debug": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", - "lazy-debug-legacy": "0.0.1", + "debug": "2.X", + "lazy-debug-legacy": "0.0.X", "object-assign": "4.1.0" }, "dependencies": { @@ -2407,7 +2454,8 @@ } }, "decamelize": { - "version": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, @@ -2435,7 +2483,7 @@ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "requires": { - "clone": "1.0.4" + "clone": "^1.0.2" }, "dependencies": { "clone": { @@ -2452,8 +2500,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -2462,7 +2510,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -2471,7 +2519,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -2480,9 +2528,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { @@ -2500,7 +2548,8 @@ } }, "defined": { - "version": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, @@ -2510,16 +2559,16 @@ "integrity": "sha1-siYJ8sehG6ej2xFoBcE5scr/qdI=", "dev": true, "requires": { - "alter": "0.2.0", - "ast-traverse": "0.1.1", - "breakable": "1.0.0", - "esprima-fb": "15001.1001.0-dev-harmony-fb", - "simple-fmt": "0.1.0", - "simple-is": "0.2.0", - "stringmap": "0.2.2", - "stringset": "0.2.1", - "tryor": "0.1.2", - "yargs": "3.27.0" + "alter": "~0.2.0", + "ast-traverse": "~0.1.1", + "breakable": "~1.0.0", + "esprima-fb": "~15001.1001.0-dev-harmony-fb", + "simple-fmt": "~0.1.0", + "simple-is": "~0.2.0", + "stringmap": "~0.2.2", + "stringset": "~0.2.1", + "tryor": "~0.1.2", + "yargs": "~3.27.0" }, "dependencies": { "align-text": { @@ -2528,9 +2577,9 @@ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "camelcase": { @@ -2545,8 +2594,8 @@ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "dev": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "cliui": { @@ -2555,8 +2604,8 @@ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" } }, @@ -2578,7 +2627,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "lazy-cache": { @@ -2605,7 +2654,7 @@ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dev": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "window-size": { @@ -2626,12 +2675,12 @@ "integrity": "sha1-ISBUaTFuk5Ex1Z8toMbX+YIh6kA=", "dev": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "os-locale": "1.4.0", - "window-size": "0.1.4", - "y18n": "3.2.1" + "camelcase": "^1.2.1", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "os-locale": "^1.4.0", + "window-size": "^0.1.2", + "y18n": "^3.2.0" } } } @@ -2642,12 +2691,12 @@ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "p-map": "1.1.1", - "pify": "3.0.0", - "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz" + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" }, "dependencies": { "pify": { @@ -2659,12 +2708,14 @@ } }, "delayed-stream": { - "version": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, "depd": { - "version": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", "dev": true }, @@ -2680,10 +2731,10 @@ "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", "dev": true, "requires": { - "JSONStream": "1.3.1", - "shasum": "1.0.2", - "subarg": "1.0.0", - "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz" + "JSONStream": "^1.0.3", + "shasum": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" } }, "des.js": { @@ -2692,8 +2743,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "detect-file": { @@ -2708,9 +2759,9 @@ "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", "dev": true, "requires": { - "get-stdin": "4.0.1", - "minimist": "1.2.0", - "repeating": "1.1.3" + "get-stdin": "^4.0.1", + "minimist": "^1.1.0", + "repeating": "^1.1.0" }, "dependencies": { "get-stdin": { @@ -2725,7 +2776,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "minimist": { @@ -2746,7 +2797,7 @@ "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } } } @@ -2758,16 +2809,18 @@ "dev": true }, "detective": { - "version": "https://registry.npmjs.org/detective/-/detective-4.3.2.tgz", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.3.2.tgz", "integrity": "sha1-d2l+LnlHrD/nyOJqbW8RUjWvqRw=", "dev": true, "requires": { - "acorn": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz" + "acorn": "^3.1.0", + "defined": "^1.0.0" }, "dependencies": { "acorn": { - "version": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", "dev": true } @@ -2785,9 +2838,9 @@ "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.0", - "randombytes": "2.0.5" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "docset-generator": { @@ -2796,9 +2849,9 @@ "integrity": "sha1-hCdOTIbxpCXIdDvmumMCRpoChHg=", "dev": true, "requires": { - "extended-fs": "0.3.3", - "sequelize": "3.33.0", - "sqlite3": "3.1.13" + "extended-fs": "^0.3.3", + "sequelize": "^3.15.1", + "sqlite3": "^3.1.1" } }, "dom-serialize": { @@ -2807,10 +2860,10 @@ "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "dev": true, "requires": { - "custom-event": "1.0.1", - "ent": "2.2.0", - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "void-elements": "2.0.1" + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" } }, "dom-serializer": { @@ -2819,8 +2872,8 @@ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" + "domelementtype": "~1.1.1", + "entities": "~1.1.1" }, "dependencies": { "domelementtype": { @@ -2855,7 +2908,7 @@ "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", "dev": true, "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "domutils": { @@ -2864,8 +2917,8 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" + "dom-serializer": "0", + "domelementtype": "1" } }, "dottie": { @@ -2880,16 +2933,17 @@ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + "readable-stream": "^2.0.2" } }, "ecc-jsbn": { - "version": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "dev": true, "optional": true, "requires": { - "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz" + "jsbn": "~0.1.0" } }, "ee-first": { @@ -2904,13 +2958,13 @@ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "encodeurl": { @@ -2925,7 +2979,7 @@ "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", "dev": true, "requires": { - "once": "1.3.3" + "once": "~1.3.0" }, "dependencies": { "once": { @@ -2934,7 +2988,7 @@ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "wrappy": { @@ -2965,7 +3019,7 @@ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", "dev": true, "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + "ms": "0.7.2" } } } @@ -2981,7 +3035,7 @@ "debug": "2.3.3", "engine.io-parser": "1.3.2", "has-cors": "1.1.0", - "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "indexof": "0.0.1", "parsejson": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", @@ -3002,7 +3056,7 @@ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", "dev": true, "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + "ms": "0.7.2" } } } @@ -3034,19 +3088,27 @@ "dev": true }, "error-ex": { - "version": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", "integrity": "sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=", "dev": true, "requires": { - "is-arrayish": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "is-arrayish": "^0.2.1" } }, "error-stack-parser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz", - "integrity": "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.4.tgz", + "integrity": "sha512-fZ0KkoxSjLFmhW5lHbUT3tLwy3nX1qEzMYo8koY1vrsAco53CMT1djnBSeC/wUjTEZRhZl9iRw7PaMaxfJ4wzQ==", "requires": { - "stackframe": "1.0.4" + "stackframe": "^1.1.0" + }, + "dependencies": { + "stackframe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.0.tgz", + "integrity": "sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg==" + } } }, "es5-ext": { @@ -3055,9 +3117,9 @@ "integrity": "sha512-TO4Vt9IhW3FzDKLDOpoA8VS9BCV4b9WTf6BqvMOgfoa8wX73F3Kh3y2J7yTstTaXlQ0k1vq4DH2vw6RSs42z+g==", "dev": true, "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" } }, "es6-iterator": { @@ -3066,9 +3128,9 @@ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.44", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, "es6-map": { @@ -3077,12 +3139,12 @@ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.44", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" } }, "es6-promise": { @@ -3097,11 +3159,11 @@ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.44", - "es6-iterator": "2.0.3", + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "event-emitter": "~0.3.5" } }, "es6-symbol": { @@ -3110,8 +3172,8 @@ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.44" + "d": "1", + "es5-ext": "~0.10.14" } }, "es6-weak-map": { @@ -3120,10 +3182,10 @@ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.44", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" } }, "escape-html": { @@ -3133,7 +3195,8 @@ "dev": true }, "escape-string-regexp": { - "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, @@ -3143,11 +3206,11 @@ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, "requires": { - "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "estraverse": "1.9.3", - "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "optionator": "0.8.2", - "source-map": "0.2.0" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" }, "dependencies": { "estraverse": { @@ -3163,7 +3226,7 @@ "dev": true, "optional": true, "requires": { - "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + "amdefine": ">=0.0.4" } } } @@ -3174,14 +3237,15 @@ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", "dev": true, "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "esprima": { - "version": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "dev": true }, @@ -3197,7 +3261,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -3207,7 +3271,8 @@ "dev": true }, "esutils": { - "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, @@ -3217,8 +3282,8 @@ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.44" + "d": "1", + "es5-ext": "~0.10.14" } }, "eventemitter3": { @@ -3239,11 +3304,12 @@ "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", "dev": true, "requires": { - "create-hash": "1.1.3" + "create-hash": "^1.1.1" } }, "exit": { - "version": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, @@ -3253,9 +3319,9 @@ "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", "dev": true, "requires": { - "array-slice": "0.2.3", - "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "braces": "0.1.5" + "array-slice": "^0.2.3", + "array-unique": "^0.2.1", + "braces": "^0.1.2" }, "dependencies": { "braces": { @@ -3264,7 +3330,7 @@ "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", "dev": true, "requires": { - "expand-range": "0.1.1" + "expand-range": "^0.1.0" } }, "expand-range": { @@ -3273,8 +3339,8 @@ "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", "dev": true, "requires": { - "is-number": "0.1.1", - "repeat-string": "0.2.2" + "is-number": "^0.1.1", + "repeat-string": "^0.2.2" } }, "is-number": { @@ -3292,19 +3358,21 @@ } }, "expand-brackets": { - "version": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz" + "is-posix-bracket": "^0.1.0" } }, "expand-range": { - "version": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz" + "fill-range": "^2.1.0" } }, "expand-tilde": { @@ -3313,11 +3381,12 @@ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "homedir-polyfill": "1.0.1" + "homedir-polyfill": "^1.0.1" } }, "extend": { - "version": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=", "dev": true }, @@ -3327,8 +3396,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -3337,7 +3406,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -3348,9 +3417,9 @@ "integrity": "sha1-i6esNx7Gb/HT1Y17F798qYInmZw=", "dev": true, "requires": { - "graceful-fs": "2.0.3", - "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "q": "0.9.7" + "graceful-fs": "2.x.x", + "mkdirp": "*", + "q": "0.9.x" }, "dependencies": { "graceful-fs": { @@ -3368,15 +3437,17 @@ } }, "extglob": { - "version": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + "is-extglob": "^1.0.0" } }, "extsprintf": { - "version": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", "dev": true }, @@ -3392,9 +3463,9 @@ "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", "dev": true, "requires": { - "ansi-gray": "0.1.1", - "color-support": "1.1.3", - "time-stamp": "1.1.0" + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "time-stamp": "^1.0.0" } }, "fast-levenshtein": { @@ -3404,20 +3475,22 @@ "dev": true }, "filename-regex": { - "version": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", "integrity": "sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=", "dev": true }, "fill-range": { - "version": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "dev": true, "requires": { - "is-number": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "isobject": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "randomatic": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", - "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "finalhandler": { @@ -3427,12 +3500,12 @@ "dev": true, "requires": { "debug": "2.6.8", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.1", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.1", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" }, "dependencies": { "debug": { @@ -3459,12 +3532,13 @@ "dev": true }, "find-up": { - "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "findup-sync": { @@ -3473,10 +3547,10 @@ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", "dev": true, "requires": { - "detect-file": "1.0.0", - "is-glob": "3.1.0", - "micromatch": "3.1.10", - "resolve-dir": "1.0.1" + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" }, "dependencies": { "arr-diff": { @@ -3503,16 +3577,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -3521,7 +3595,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -3541,13 +3615,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -3556,7 +3630,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -3565,7 +3639,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -3574,7 +3648,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -3583,7 +3657,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3594,7 +3668,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -3603,7 +3677,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3614,9 +3688,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -3633,14 +3707,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -3649,7 +3723,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -3658,7 +3732,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -3669,10 +3743,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -3681,7 +3755,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -3692,7 +3766,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-buffer": { @@ -3707,7 +3781,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -3716,9 +3790,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "is-extendable": { @@ -3739,7 +3813,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } }, "is-number": { @@ -3748,7 +3822,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -3757,7 +3831,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3780,19 +3854,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "ms": { @@ -3821,11 +3895,11 @@ "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "is-plain-object": "2.0.4", - "object.defaults": "1.1.0", - "object.pick": "1.3.0", - "parse-filepath": "1.0.2" + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" } }, "first-chunk-stream": { @@ -3841,20 +3915,23 @@ "dev": true }, "for-in": { - "version": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz", "integrity": "sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=", "dev": true }, "for-own": { - "version": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", "integrity": "sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=", "dev": true, "requires": { - "for-in": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz" + "for-in": "^0.1.5" } }, "forever-agent": { - "version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, @@ -3864,9 +3941,9 @@ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" }, "dependencies": { "asynckit": { @@ -3881,7 +3958,7 @@ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "delayed-stream": { @@ -3902,7 +3979,7 @@ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dev": true, "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.33.0" } } } @@ -3913,7 +3990,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fs-access": { @@ -3922,7 +3999,7 @@ "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "dev": true, "requires": { - "null-check": "1.0.0" + "null-check": "^1.0.0" } }, "fs-readdir-recursive": { @@ -3932,7 +4009,8 @@ "dev": true }, "fs.realpath": { - "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, @@ -3943,8 +4021,8 @@ "dev": true, "optional": true, "requires": { - "nan": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", - "node-pre-gyp": "0.6.36" + "nan": "^2.3.0", + "node-pre-gyp": "^0.6.36" }, "dependencies": { "abbrev": { @@ -3959,8 +4037,8 @@ "dev": true, "optional": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "ansi-regex": { @@ -3980,8 +4058,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "asn1": { @@ -4025,7 +4103,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "block-stream": { @@ -4033,7 +4111,7 @@ "bundled": true, "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "~2.0.0" } }, "boom": { @@ -4041,7 +4119,7 @@ "bundled": true, "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "brace-expansion": { @@ -4049,7 +4127,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "0.4.2", + "balanced-match": "^0.4.1", "concat-map": "0.0.1" } }, @@ -4080,7 +4158,7 @@ "bundled": true, "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "concat-map": { @@ -4104,7 +4182,7 @@ "dev": true, "optional": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "dashdash": { @@ -4113,7 +4191,7 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -4156,7 +4234,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "extend": { @@ -4182,9 +4260,9 @@ "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "fs.realpath": { @@ -4197,10 +4275,10 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" } }, "fstream-ignore": { @@ -4209,9 +4287,9 @@ "dev": true, "optional": true, "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" } }, "gauge": { @@ -4220,14 +4298,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "getpass": { @@ -4236,7 +4314,7 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -4252,12 +4330,12 @@ "bundled": true, "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "graceful-fs": { @@ -4277,8 +4355,8 @@ "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "^4.9.1", + "har-schema": "^1.0.5" } }, "has-unicode": { @@ -4293,10 +4371,10 @@ "dev": true, "optional": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "hoek": { @@ -4310,9 +4388,9 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "inflight": { @@ -4320,8 +4398,8 @@ "bundled": true, "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -4340,7 +4418,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-typedarray": { @@ -4366,7 +4444,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "jsbn": { @@ -4387,7 +4465,7 @@ "dev": true, "optional": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { @@ -4432,7 +4510,7 @@ "bundled": true, "dev": true, "requires": { - "mime-db": "1.27.0" + "mime-db": "~1.27.0" } }, "minimatch": { @@ -4440,7 +4518,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.7" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -4468,15 +4546,15 @@ "dev": true, "optional": true, "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "request": "^2.81.0", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^2.2.1", + "tar-pack": "^3.4.0" } }, "nopt": { @@ -4485,8 +4563,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npmlog": { @@ -4495,10 +4573,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -4523,7 +4601,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -4544,8 +4622,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -4582,10 +4660,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -4601,13 +4679,13 @@ "bundled": true, "dev": true, "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" + "buffer-shims": "~1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" } }, "request": { @@ -4616,28 +4694,28 @@ "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" } }, "rimraf": { @@ -4645,7 +4723,7 @@ "bundled": true, "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -4677,7 +4755,7 @@ "dev": true, "optional": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "sshpk": { @@ -4686,15 +4764,15 @@ "dev": true, "optional": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jodid25519": "^1.0.0", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" }, "dependencies": { "assert-plus": { @@ -4710,9 +4788,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -4720,7 +4798,7 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "^5.0.1" } }, "stringstream": { @@ -4734,7 +4812,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -4748,9 +4826,9 @@ "bundled": true, "dev": true, "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" } }, "tar-pack": { @@ -4759,14 +4837,14 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" + "debug": "^2.2.0", + "fstream": "^1.0.10", + "fstream-ignore": "^1.0.5", + "once": "^1.3.3", + "readable-stream": "^2.1.4", + "rimraf": "^2.5.1", + "tar": "^2.2.1", + "uid-number": "^0.0.6" } }, "tough-cookie": { @@ -4775,7 +4853,7 @@ "dev": true, "optional": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tunnel-agent": { @@ -4784,7 +4862,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -4825,7 +4903,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -4847,20 +4925,22 @@ "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", "dev": true, "requires": { - "globule": "0.1.0" + "globule": "~0.1.0" } }, "generate-function": { - "version": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", "dev": true }, "generate-object-property": { - "version": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", "dev": true, "requires": { - "is-property": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" + "is-property": "^1.0.0" } }, "generic-pool": { @@ -4870,7 +4950,8 @@ "dev": true }, "get-stdin": { - "version": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", "dev": true }, @@ -4881,47 +4962,52 @@ "dev": true }, "getpass": { - "version": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", "integrity": "sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=", "dev": true, "requires": { - "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { - "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true } } }, "glob": { - "version": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { - "version": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" } }, "glob-parent": { - "version": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + "is-glob": "^2.0.0" } }, "glob-stream": { @@ -4930,12 +5016,12 @@ "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", "dev": true, "requires": { - "glob": "4.5.3", - "glob2base": "0.0.12", - "minimatch": "2.0.10", - "ordered-read-streams": "0.1.0", - "through2": "0.6.5", - "unique-stream": "1.0.0" + "glob": "^4.3.1", + "glob2base": "^0.0.12", + "minimatch": "^2.0.1", + "ordered-read-streams": "^0.1.0", + "through2": "^0.6.1", + "unique-stream": "^1.0.0" }, "dependencies": { "balanced-match": { @@ -4950,7 +5036,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -4972,10 +5058,10 @@ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "2.0.10", - "once": "1.4.0" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^2.0.1", + "once": "^1.3.0" } }, "inflight": { @@ -4984,8 +5070,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -5006,7 +5092,7 @@ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.0.0" } }, "once": { @@ -5015,7 +5101,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "readable-stream": { @@ -5024,10 +5110,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -5042,8 +5128,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "wrappy": { @@ -5066,7 +5152,7 @@ "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", "dev": true, "requires": { - "gaze": "0.5.2" + "gaze": "^0.5.1" } }, "glob2base": { @@ -5075,7 +5161,7 @@ "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", "dev": true, "requires": { - "find-index": "0.1.1" + "find-index": "^0.1.1" } }, "global-modules": { @@ -5084,9 +5170,9 @@ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { - "global-prefix": "1.0.2", - "is-windows": "1.0.2", - "resolve-dir": "1.0.1" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" } }, "global-prefix": { @@ -5095,11 +5181,11 @@ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "homedir-polyfill": "1.0.1", - "ini": "1.3.5", - "is-windows": "1.0.2", - "which": "1.3.1" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" }, "dependencies": { "ini": { @@ -5120,7 +5206,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } } } @@ -5137,11 +5223,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "balanced-match": { @@ -5156,8 +5242,8 @@ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "balanced-match": "1.0.0", - "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "glob": { @@ -5166,12 +5252,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "3.0.4", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "minimatch": { @@ -5180,7 +5266,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "object-assign": { @@ -5197,9 +5283,9 @@ "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", "dev": true, "requires": { - "glob": "3.1.21", - "lodash": "1.0.2", - "minimatch": "0.2.14" + "glob": "~3.1.21", + "lodash": "~1.0.1", + "minimatch": "~0.2.11" }, "dependencies": { "glob": { @@ -5208,9 +5294,9 @@ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", "dev": true, "requires": { - "graceful-fs": "1.2.3", - "inherits": "1.0.2", - "minimatch": "0.2.14" + "graceful-fs": "~1.2.0", + "inherits": "1", + "minimatch": "~0.2.11" } }, "graceful-fs": { @@ -5231,8 +5317,8 @@ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", "dev": true, "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" + "lru-cache": "2", + "sigmund": "~1.0.0" } } } @@ -5243,16 +5329,18 @@ "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", "dev": true, "requires": { - "sparkles": "1.0.1" + "sparkles": "^1.0.0" } }, "graceful-fs": { - "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, "graceful-readlink": { - "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", "dev": true }, @@ -5262,19 +5350,19 @@ "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", "dev": true, "requires": { - "archy": "1.0.0", - "chalk": "1.1.3", - "deprecated": "0.0.1", - "gulp-util": "3.0.8", - "interpret": "1.1.0", - "liftoff": "2.5.0", - "minimist": "1.2.0", - "orchestrator": "0.3.8", - "pretty-hrtime": "1.0.3", - "semver": "4.3.6", - "tildify": "1.2.0", - "v8flags": "2.1.1", - "vinyl-fs": "0.3.14" + "archy": "^1.0.0", + "chalk": "^1.0.0", + "deprecated": "^0.0.1", + "gulp-util": "^3.0.0", + "interpret": "^1.0.0", + "liftoff": "^2.1.0", + "minimist": "^1.1.0", + "orchestrator": "^0.3.0", + "pretty-hrtime": "^1.0.0", + "semver": "^4.1.0", + "tildify": "^1.0.0", + "v8flags": "^2.0.2", + "vinyl-fs": "^0.3.0" }, "dependencies": { "ansi-regex": { @@ -5295,11 +5383,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "escape-string-regexp": { @@ -5314,7 +5402,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "minimist": { @@ -5335,7 +5423,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -5352,9 +5440,9 @@ "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", "dev": true, "requires": { - "concat-with-sourcemaps": "1.1.0", - "through2": "2.0.3", - "vinyl": "2.1.0" + "concat-with-sourcemaps": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^2.0.0" }, "dependencies": { "clone": { @@ -5399,13 +5487,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "replace-ext": { @@ -5420,7 +5508,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "through2": { @@ -5429,8 +5517,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "util-deprecate": { @@ -5445,12 +5533,12 @@ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "dev": true, "requires": { - "clone": "2.1.1", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.1.2", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } }, "xtend": { @@ -5467,9 +5555,9 @@ "integrity": "sha1-L2IKyN9i0LhrS73mTaNnzEGhkMk=", "dev": true, "requires": { - "coveralls": "2.13.3", - "gulp-util": "3.0.8", - "through2": "1.1.1" + "coveralls": "^2.11.2", + "gulp-util": "^3.0.4", + "through2": "^1.1.1" }, "dependencies": { "core-util-is": { @@ -5496,10 +5584,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -5514,8 +5602,8 @@ "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", "dev": true, "requires": { - "readable-stream": "1.1.14", - "xtend": "4.0.1" + "readable-stream": ">=1.1.13-1 <1.2.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "xtend": { @@ -5532,12 +5620,12 @@ "integrity": "sha1-I/vRuv3W+/5h6mRmenSAmpYdA94=", "dev": true, "requires": { - "gulp-util": "3.0.8", - "jshint": "2.9.5", - "lodash": "3.10.1", - "minimatch": "2.0.10", + "gulp-util": "^3.0.0", + "jshint": "^2.7.0", + "lodash": "^3.0.1", + "minimatch": "^2.0.1", "rcloader": "0.1.2", - "through2": "0.6.5" + "through2": "~0.6.1" }, "dependencies": { "balanced-match": { @@ -5552,7 +5640,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -5592,7 +5680,7 @@ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.0.0" } }, "readable-stream": { @@ -5601,10 +5689,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -5619,8 +5707,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "xtend": { @@ -5643,17 +5731,17 @@ "integrity": "sha1-eG+XyUoPloSSRl1wVY4EJCxnlZg=", "dev": true, "requires": { - "@gulp-sourcemaps/map-sources": "1.0.0", - "acorn": "4.0.13", - "convert-source-map": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "css": "2.2.1", - "debug-fabulous": "0.0.4", - "detect-newline": "2.1.0", - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "vinyl": "1.2.0" + "@gulp-sourcemaps/map-sources": "1.X", + "acorn": "4.X", + "convert-source-map": "1.X", + "css": "2.X", + "debug-fabulous": "0.0.X", + "detect-newline": "2.X", + "graceful-fs": "4.X", + "source-map": "0.X", + "strip-bom": "2.X", + "through2": "2.X", + "vinyl": "1.X" }, "dependencies": { "vinyl": { @@ -5662,9 +5750,9 @@ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "dev": true, "requires": { - "clone": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "clone-stats": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "replace-ext": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz" + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" } } } @@ -5675,14 +5763,14 @@ "integrity": "sha1-UkeI2HZm0J+dDCH7IXf5ADmmWMk=", "dev": true, "requires": { - "deap": "1.0.1", - "fancy-log": "1.3.2", - "gulp-util": "3.0.8", - "isobject": "2.1.0", - "through2": "2.0.3", + "deap": "^1.0.0", + "fancy-log": "^1.0.0", + "gulp-util": "^3.0.0", + "isobject": "^2.0.0", + "through2": "^2.0.0", "uglify-js": "2.6.4", - "uglify-save-license": "0.4.1", - "vinyl-sourcemaps-apply": "0.2.1" + "uglify-save-license": "^0.4.1", + "vinyl-sourcemaps-apply": "^0.2.0" }, "dependencies": { "align-text": { @@ -5691,9 +5779,9 @@ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "async": { @@ -5714,8 +5802,8 @@ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "dev": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "cliui": { @@ -5724,8 +5812,8 @@ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" } }, @@ -5774,7 +5862,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "lazy-cache": { @@ -5801,13 +5889,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "repeat-string": { @@ -5822,7 +5910,7 @@ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dev": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "source-map": { @@ -5837,7 +5925,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "through2": { @@ -5846,8 +5934,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "uglify-js": { @@ -5856,10 +5944,10 @@ "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=", "dev": true, "requires": { - "async": "0.2.10", - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "async": "~0.2.6", + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" } }, "uglify-to-browserify": { @@ -5898,9 +5986,9 @@ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } @@ -5912,24 +6000,24 @@ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", "dev": true, "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.2.0", - "fancy-log": "1.3.2", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" + "through2": "^2.0.0", + "vinyl": "^0.5.0" }, "dependencies": { "ansi-regex": { @@ -5956,11 +6044,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "core-util-is": { @@ -5987,7 +6075,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "inherits": { @@ -6020,13 +6108,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "replace-ext": { @@ -6041,7 +6129,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -6050,7 +6138,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -6065,8 +6153,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "util-deprecate": { @@ -6089,7 +6177,7 @@ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", "dev": true, "requires": { - "glogg": "1.0.1" + "glogg": "^1.0.0" } }, "handlebars": { @@ -6098,10 +6186,10 @@ "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", "dev": true, "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" }, "dependencies": { "source-map": { @@ -6110,20 +6198,21 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + "amdefine": ">=0.0.4" } } } }, "har-validator": { - "version": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", "dev": true, "requires": { - "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "is-my-json-valid": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" } }, "has": { @@ -6132,15 +6221,16 @@ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "dev": true, "requires": { - "function-bind": "1.1.0" + "function-bind": "^1.0.2" } }, "has-ansi": { - "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" + "ansi-regex": "^2.0.0" } }, "has-binary": { @@ -6184,7 +6274,7 @@ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", "dev": true, "requires": { - "sparkles": "1.0.1" + "sparkles": "^1.0.0" } }, "has-value": { @@ -6193,9 +6283,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" }, "dependencies": { "isobject": { @@ -6212,8 +6302,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-buffer": { @@ -6228,7 +6318,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -6237,7 +6327,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -6248,7 +6338,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -6259,7 +6349,7 @@ "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", "dev": true, "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "inherits": "^2.0.1" } }, "hash.js": { @@ -6268,19 +6358,20 @@ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "dev": true, "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" } }, "hawk": { - "version": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "dev": true, "requires": { - "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "sntp": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "hmac-drbg": { @@ -6289,13 +6380,14 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hoek": { - "version": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", "dev": true }, @@ -6305,8 +6397,8 @@ "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", "dev": true, "requires": { - "os-tmpdir": "1.0.2", - "user-home": "1.1.1" + "os-tmpdir": "^1.0.1", + "user-home": "^1.1.1" }, "dependencies": { "os-tmpdir": { @@ -6323,11 +6415,12 @@ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { - "parse-passwd": "1.0.0" + "parse-passwd": "^1.0.0" } }, "hosted-git-info": { - "version": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", "integrity": "sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=", "dev": true }, @@ -6343,11 +6436,11 @@ "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "dev": true, "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.3.0", - "domutils": "1.5.1", - "entities": "1.0.0", - "readable-stream": "1.1.14" + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" }, "dependencies": { "core-util-is": { @@ -6374,10 +6467,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -6395,9 +6488,9 @@ "dev": true, "requires": { "depd": "1.1.1", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "inherits": "2.0.3", "setprototypeof": "1.0.3", - "statuses": "1.3.1" + "statuses": ">= 1.3.1 < 2" }, "dependencies": { "depd": { @@ -6414,18 +6507,19 @@ "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", "dev": true, "requires": { - "eventemitter3": "1.2.0", - "requires-port": "1.0.0" + "eventemitter3": "1.x.x", + "requires-port": "1.x.x" } }, "http-signature": { - "version": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "dev": true, "requires": { - "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "jsprim": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", - "sshpk": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "https-browserify": { @@ -6440,9 +6534,9 @@ "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", "dev": true, "requires": { - "agent-base": "2.1.1", - "debug": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz" + "agent-base": "2", + "debug": "2", + "extend": "3" } }, "i": { @@ -6452,7 +6546,8 @@ "dev": true }, "iconv-lite": { - "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", "dev": true }, @@ -6463,15 +6558,17 @@ "dev": true }, "indent-string": { - "version": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz" + "repeating": "^2.0.0" } }, "indexof": { - "version": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "dev": true }, @@ -6482,12 +6579,13 @@ "dev": true }, "inflight": { - "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "once": "^1.3.0", + "wrappy": "1" } }, "inherit": { @@ -6497,12 +6595,14 @@ "dev": true }, "inherits": { - "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "ini": { - "version": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", "dev": true }, @@ -6512,7 +6612,7 @@ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", "dev": true, "requires": { - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" + "source-map": "~0.5.3" } }, "insert-module-globals": { @@ -6521,14 +6621,14 @@ "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", "dev": true, "requires": { - "JSONStream": "1.3.1", - "combine-source-map": "0.7.2", - "concat-stream": "1.5.2", - "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", - "lexical-scope": "1.2.0", - "process": "0.11.10", - "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + "JSONStream": "^1.0.3", + "combine-source-map": "~0.7.1", + "concat-stream": "~1.5.1", + "is-buffer": "^1.1.0", + "lexical-scope": "^1.2.0", + "process": "~0.11.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" } }, "interpret": { @@ -6549,8 +6649,8 @@ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "requires": { - "is-relative": "1.0.0", - "is-windows": "1.0.2" + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" } }, "is-accessor-descriptor": { @@ -6559,7 +6659,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "is-buffer": { @@ -6574,13 +6674,14 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } }, "is-arrayish": { - "version": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, @@ -6590,20 +6691,22 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.9.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { - "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", "integrity": "sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=", "dev": true }, "is-builtin-module": { - "version": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" + "builtin-modules": "^1.0.0" } }, "is-data-descriptor": { @@ -6612,7 +6715,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "is-buffer": { @@ -6627,7 +6730,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -6638,9 +6741,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -6652,42 +6755,48 @@ } }, "is-dotfile": { - "version": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=", "dev": true }, "is-equal-shallow": { - "version": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" + "is-primitive": "^2.0.0" } }, "is-extendable": { - "version": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, "is-extglob": { - "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, "is-finite": { - "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + "number-is-nan": "^1.0.0" } }, "is-glob": { - "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + "is-extglob": "^1.0.0" } }, "is-integer": { @@ -6696,7 +6805,7 @@ "integrity": "sha1-a96Bqs3feLZZtmKdYpytxRqIbVw=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" }, "dependencies": { "is-finite": { @@ -6705,7 +6814,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "number-is-nan": { @@ -6723,22 +6832,24 @@ "dev": true }, "is-my-json-valid": { - "version": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", "integrity": "sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=", "dev": true, "requires": { - "generate-function": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "generate-object-property": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "jsonpointer": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" } }, "is-number": { - "version": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz" + "kind-of": "^3.0.2" } }, "is-odd": { @@ -6747,7 +6858,7 @@ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "dev": true, "requires": { - "is-number": "4.0.0" + "is-number": "^4.0.0" }, "dependencies": { "is-number": { @@ -6770,7 +6881,7 @@ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", "dev": true, "requires": { - "is-path-inside": "1.0.0" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -6779,7 +6890,7 @@ "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-object": { @@ -6788,7 +6899,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" }, "dependencies": { "isobject": { @@ -6800,17 +6911,20 @@ } }, "is-posix-bracket": { - "version": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", "dev": true }, "is-primitive": { - "version": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true }, "is-property": { - "version": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", "dev": true }, @@ -6820,11 +6934,12 @@ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, "requires": { - "is-unc-path": "1.0.0" + "is-unc-path": "^1.0.0" } }, "is-typedarray": { - "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, @@ -6834,11 +6949,12 @@ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, "requires": { - "unc-path-regex": "0.1.2" + "unc-path-regex": "^0.1.2" } }, "is-utf8": { - "version": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, @@ -6849,7 +6965,8 @@ "dev": true }, "isarray": { - "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, @@ -6860,20 +6977,23 @@ "dev": true }, "isexe": { - "version": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=", "dev": true }, "isobject": { - "version": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "requires": { - "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "isarray": "1.0.0" } }, "isstream": { - "version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, @@ -6883,20 +7003,20 @@ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "async": "1.5.2", - "escodegen": "1.8.1", - "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "glob": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "handlebars": "4.0.10", - "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", - "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "nopt": "3.0.6", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "resolve": "1.1.7", - "supports-color": "3.2.3", - "which": "https://registry.npmjs.org/which/-/which-1.2.12.tgz", - "wordwrap": "1.0.0" + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" }, "dependencies": { "resolve": { @@ -6911,7 +7031,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } }, "wordwrap": { @@ -6928,9 +7048,9 @@ "integrity": "sha1-XPC7TllLRgC7QjVWA2YhKsWuobI=", "dev": true, "requires": { - "exit": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "glob": "7.1.2", - "jasmine-core": "2.7.0" + "exit": "^0.1.2", + "glob": "^7.0.6", + "jasmine-core": "~2.7.0" }, "dependencies": { "balanced-match": { @@ -6945,8 +7065,8 @@ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "balanced-match": "1.0.0", - "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "glob": { @@ -6955,12 +7075,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "3.0.4", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "minimatch": { @@ -6969,7 +7089,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } } } @@ -6987,12 +7107,13 @@ "dev": true }, "jodid25519": { - "version": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", "dev": true, "optional": true, "requires": { - "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz" + "jsbn": "~0.1.0" } }, "js-tokens": { @@ -7002,16 +7123,18 @@ "dev": true }, "js-yaml": { - "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", "dev": true, "requires": { - "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz" + "argparse": "^1.0.7", + "esprima": "^2.6.0" } }, "jsbn": { - "version": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", "integrity": "sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=", "dev": true, "optional": true @@ -7022,34 +7145,34 @@ "integrity": "sha1-bhHvDKqgdzH53MKysn2OzuHdvLY=", "dev": true, "requires": { - "babel-jscs": "2.0.5", - "chalk": "1.1.3", - "cli-table": "0.3.1", - "commander": "2.9.0", - "escope": "3.6.0", - "esprima": "2.7.3", - "estraverse": "4.2.0", - "exit": "0.1.2", - "glob": "5.0.15", + "babel-jscs": "^2.0.0", + "chalk": "~1.1.0", + "cli-table": "~0.3.1", + "commander": "~2.9.0", + "escope": "^3.2.0", + "esprima": "~2.7.0", + "estraverse": "^4.1.0", + "exit": "~0.1.2", + "glob": "^5.0.1", "htmlparser2": "3.8.3", - "js-yaml": "3.4.6", - "jscs-jsdoc": "1.3.2", - "jscs-preset-wikimedia": "1.0.1", - "jsonlint": "1.6.3", - "lodash": "3.10.1", - "minimatch": "3.0.4", - "natural-compare": "1.2.2", - "pathval": "0.1.1", - "prompt": "0.2.14", - "reserved-words": "0.1.2", - "resolve": "1.7.1", - "strip-bom": "2.0.0", - "strip-json-comments": "1.0.4", - "to-double-quotes": "2.0.0", - "to-single-quotes": "2.0.1", - "vow": "0.4.17", - "vow-fs": "0.3.6", - "xmlbuilder": "3.1.0" + "js-yaml": "~3.4.0", + "jscs-jsdoc": "^1.3.1", + "jscs-preset-wikimedia": "~1.0.0", + "jsonlint": "~1.6.2", + "lodash": "~3.10.0", + "minimatch": "~3.0.0", + "natural-compare": "~1.2.2", + "pathval": "~0.1.1", + "prompt": "~0.2.14", + "reserved-words": "^0.1.1", + "resolve": "^1.1.6", + "strip-bom": "^2.0.0", + "strip-json-comments": "~1.0.2", + "to-double-quotes": "^2.0.0", + "to-single-quotes": "^2.0.0", + "vow": "~0.4.8", + "vow-fs": "~0.3.4", + "xmlbuilder": "^3.1.0" }, "dependencies": { "ansi-regex": { @@ -7070,7 +7193,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "balanced-match": { @@ -7085,7 +7208,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -7095,11 +7218,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "commander": { @@ -7108,7 +7231,7 @@ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", "dev": true, "requires": { - "graceful-readlink": "1.0.1" + "graceful-readlink": ">= 1.0.0" } }, "concat-map": { @@ -7141,11 +7264,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "graceful-readlink": { @@ -7160,7 +7283,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "inflight": { @@ -7169,8 +7292,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -7191,9 +7314,9 @@ "integrity": "sha1-a+GyP2JJ9T0pM3D9TRqqY84bTrA=", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3", - "inherit": "2.2.6" + "argparse": "^1.0.2", + "esprima": "^2.6.0", + "inherit": "^2.2.2" } }, "lodash": { @@ -7208,7 +7331,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "once": { @@ -7217,7 +7340,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "path-is-absolute": { @@ -7232,7 +7355,7 @@ "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, "sprintf-js": { @@ -7247,7 +7370,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -7256,7 +7379,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "supports-color": { @@ -7279,8 +7402,8 @@ "integrity": "sha1-HyyCtqtLl1JNqVj0a05WLgMF+ac=", "dev": true, "requires": { - "comment-parser": "0.3.2", - "jsdoctypeparser": "1.2.0" + "comment-parser": "^0.3.1", + "jsdoctypeparser": "~1.2.0" } }, "jscs-preset-wikimedia": { @@ -7295,7 +7418,7 @@ "integrity": "sha1-8iUxyOvERmJ5pxNuVO+SDHKtEOk=", "dev": true, "requires": { - "jsdoc-docset": "0.2.1" + "jsdoc-docset": "^0.2.1" } }, "jsdoc-docset": { @@ -7304,8 +7427,8 @@ "integrity": "sha1-5XLsy4aj+lYBrnxrtkMBU1MeezU=", "dev": true, "requires": { - "docset-generator": "0.2.2", - "object-assign": "4.1.1" + "docset-generator": "^0.2.1", + "object-assign": "^4.0.1" }, "dependencies": { "object-assign": { @@ -7322,7 +7445,7 @@ "integrity": "sha1-597cFToRhJ/8UUEUSuhqfvDCU5I=", "dev": true, "requires": { - "lodash": "3.10.1" + "lodash": "^3.7.0" }, "dependencies": { "lodash": { @@ -7345,14 +7468,14 @@ "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", "dev": true, "requires": { - "cli": "1.0.1", - "console-browserify": "1.1.0", - "exit": "0.1.2", - "htmlparser2": "3.8.3", - "lodash": "3.7.0", - "minimatch": "3.0.4", - "shelljs": "0.3.0", - "strip-json-comments": "1.0.4" + "cli": "~1.0.0", + "console-browserify": "1.1.x", + "exit": "0.1.x", + "htmlparser2": "3.8.x", + "lodash": "3.7.x", + "minimatch": "~3.0.2", + "shelljs": "0.3.x", + "strip-json-comments": "1.0.x" }, "dependencies": { "balanced-match": { @@ -7367,7 +7490,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -7383,7 +7506,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "date-now": { @@ -7410,13 +7533,14 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } } } }, "json-schema": { - "version": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, @@ -7426,11 +7550,12 @@ "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", "dev": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { - "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, @@ -7458,8 +7583,8 @@ "integrity": "sha512-jMVTMzP+7gU/IyC6hvKyWpUU8tmTkK5b3BPNuMI9U8Sit+YAWLlZwB6Y6YrdCxfg2kNz05p3XY3Bmm4m26Nv3A==", "dev": true, "requires": { - "JSV": "4.0.2", - "nomnom": "1.8.1" + "JSV": "^4.0.x", + "nomnom": "^1.5.x" } }, "jsonparse": { @@ -7469,18 +7594,20 @@ "dev": true }, "jsonpointer": { - "version": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz", "integrity": "sha1-ZmHhYdL8RF8Z+YQwIxNDci4fy9U=", "dev": true }, "jsprim": { - "version": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", "integrity": "sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=", "dev": true, "requires": { - "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "json-schema": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "verror": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz" + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" } }, "karma": { @@ -7489,33 +7616,33 @@ "integrity": "sha1-b3oaQGRG+i4YfslTmGmPTO5HYmk=", "dev": true, "requires": { - "bluebird": "3.5.0", - "body-parser": "1.17.2", - "chokidar": "1.7.0", - "colors": "1.3.0", - "combine-lists": "1.0.1", - "connect": "3.6.3", - "core-js": "2.5.0", - "di": "0.0.1", - "dom-serialize": "2.2.1", - "expand-braces": "0.1.2", - "glob": "7.1.2", - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "http-proxy": "1.16.2", - "isbinaryfile": "3.0.2", - "lodash": "3.10.1", - "log4js": "0.6.38", - "mime": "1.3.6", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "optimist": "0.6.1", - "qjobs": "1.1.5", - "range-parser": "1.2.0", - "rimraf": "2.6.1", - "safe-buffer": "5.1.1", + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "chokidar": "^1.4.1", + "colors": "^1.1.0", + "combine-lists": "^1.0.0", + "connect": "^3.6.0", + "core-js": "^2.2.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "expand-braces": "^0.1.1", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^3.8.0", + "log4js": "^0.6.31", + "mime": "^1.3.4", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", "socket.io": "1.7.3", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "source-map": "^0.5.3", "tmp": "0.0.31", - "useragent": "2.2.1" + "useragent": "^2.1.12" }, "dependencies": { "balanced-match": { @@ -7536,8 +7663,8 @@ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "balanced-match": "1.0.0", - "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "core-js": { @@ -7552,12 +7679,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "3.0.4", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "dependencies": { "minimatch": { @@ -7566,7 +7693,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } } } @@ -7583,7 +7710,7 @@ "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } } } @@ -7594,8 +7721,8 @@ "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", "dev": true, "requires": { - "fs-access": "1.0.1", - "which": "https://registry.npmjs.org/which/-/which-1.2.12.tgz" + "fs-access": "^1.0.0", + "which": "^1.2.1" } }, "karma-coverage": { @@ -7604,11 +7731,11 @@ "integrity": "sha1-Wv+LOc9plNwi3kyENix2ABtjfPY=", "dev": true, "requires": { - "dateformat": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "istanbul": "0.4.5", - "lodash": "3.10.1", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" + "dateformat": "^1.0.6", + "istanbul": "^0.4.0", + "lodash": "^3.8.0", + "minimatch": "^3.0.0", + "source-map": "^0.5.1" }, "dependencies": { "lodash": { @@ -7631,7 +7758,7 @@ "integrity": "sha1-SXmGhCxJAZA0bNifVJTKmDDG1Zw=", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.6.1" }, "dependencies": { "lodash": { @@ -7654,7 +7781,7 @@ "integrity": "sha1-eLuS2Jb+MqJaGACYxHci4dlgW/w=", "dev": true, "requires": { - "jasmine-ajax": "3.4.0" + "jasmine-ajax": "^3.0.0" } }, "karma-opera-launcher": { @@ -7669,8 +7796,8 @@ "integrity": "sha1-X/jI8i0N+OZygoyoeQhiq8Amk0U=", "dev": true, "requires": { - "lodash": "3.10.1", - "phantomjs2-ext": "0.2.2" + "lodash": "^3.10.1", + "phantomjs2-ext": "^0.2.1" }, "dependencies": { "lodash": { @@ -7693,10 +7820,10 @@ "integrity": "sha1-PQg89WWdZzarl7zuXYrNhq1SIhI=", "dev": true, "requires": { - "q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "sauce-connect-launcher": "0.17.0", - "saucelabs": "1.4.0", - "wd": "1.4.0" + "q": "^1.4.1", + "sauce-connect-launcher": "^0.17.0", + "saucelabs": "^1.3.0", + "wd": "^1.0.0" } }, "karma-spec-reporter": { @@ -7705,7 +7832,7 @@ "integrity": "sha1-SDDccUihVcfXoYbmMjOaDYD63sM=", "dev": true, "requires": { - "colors": "1.3.0" + "colors": "^1.1.2" } }, "kew": { @@ -7715,11 +7842,12 @@ "dev": true }, "kind-of": { - "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", "integrity": "sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=", "dev": true, "requires": { - "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz" + "is-buffer": "^1.0.2" } }, "labeled-stream-splicer": { @@ -7728,9 +7856,9 @@ "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", "dev": true, "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "0.0.1", - "stream-splicer": "2.0.0" + "inherits": "^2.0.1", + "isarray": "~0.0.1", + "stream-splicer": "^2.0.0" }, "dependencies": { "isarray": { @@ -7742,7 +7870,8 @@ } }, "lazy-cache": { - "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", "dev": true, "optional": true @@ -7759,7 +7888,7 @@ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "dev": true, "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + "readable-stream": "^2.0.5" } }, "lcid": { @@ -7768,7 +7897,7 @@ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "lcov-parse": { @@ -7789,8 +7918,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "lexical-scope": { @@ -7799,7 +7928,7 @@ "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", "dev": true, "requires": { - "astw": "2.2.0" + "astw": "^2.0.0" } }, "liftoff": { @@ -7808,14 +7937,14 @@ "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", "dev": true, "requires": { - "extend": "3.0.1", - "findup-sync": "2.0.0", - "fined": "1.1.0", - "flagged-respawn": "1.0.0", - "is-plain-object": "2.0.4", - "object.map": "1.0.1", - "rechoir": "0.6.2", - "resolve": "1.7.1" + "extend": "^3.0.0", + "findup-sync": "^2.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" }, "dependencies": { "extend": { @@ -7830,21 +7959,22 @@ "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } } } }, "load-json-file": { - "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "parse-json": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, "lodash": { @@ -7859,8 +7989,8 @@ "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" } }, "lodash._basecopy": { @@ -7893,9 +8023,9 @@ "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", "dev": true, "requires": { - "lodash._bindcallback": "3.0.1", - "lodash._isiterateecall": "3.0.9", - "lodash.restparam": "3.6.1" + "lodash._bindcallback": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash.restparam": "^3.0.0" } }, "lodash._getnative": { @@ -7940,9 +8070,9 @@ "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", "dev": true, "requires": { - "lodash._baseassign": "3.2.0", - "lodash._createassigner": "3.1.1", - "lodash.keys": "3.1.2" + "lodash._baseassign": "^3.0.0", + "lodash._createassigner": "^3.0.0", + "lodash.keys": "^3.0.0" } }, "lodash.clonedeep": { @@ -7957,7 +8087,7 @@ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", "dev": true, "requires": { - "lodash._root": "3.0.1" + "lodash._root": "^3.0.0" } }, "lodash.isarguments": { @@ -7978,9 +8108,9 @@ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, "lodash.memoize": { @@ -8001,15 +8131,15 @@ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" } }, "lodash.templatesettings": { @@ -8018,8 +8148,8 @@ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", "dev": true, "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" } }, "log-driver": { @@ -8034,8 +8164,8 @@ "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz" + "readable-stream": "~1.0.2", + "semver": "~4.3.3" }, "dependencies": { "isarray": { @@ -8050,26 +8180,28 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + "string_decoder": "~0.10.x" } } } }, "longest": { - "version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", "dev": true }, "loud-rejection": { - "version": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "signal-exit": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lru-cache": { @@ -8084,7 +8216,7 @@ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.2" }, "dependencies": { "kind-of": { @@ -8102,7 +8234,8 @@ "dev": true }, "map-obj": { - "version": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true }, @@ -8112,7 +8245,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "media-typer": { @@ -8122,47 +8255,50 @@ "dev": true }, "meow": { - "version": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "camelcase-keys": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "loud-rejection": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "map-obj": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", - "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "read-pkg-up": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "redent": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "trim-newlines": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" }, "dependencies": { "object-assign": { - "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", "dev": true } } }, "micromatch": { - "version": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "braces": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "expand-brackets": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "extglob": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "filename-regex": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", - "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", - "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", - "object.omit": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "parse-glob": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "regex-cache": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } }, "miller-rabin": { @@ -8171,8 +8307,8 @@ "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { @@ -8182,16 +8318,18 @@ "dev": true }, "mime-db": { - "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz", + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz", "integrity": "sha1-wY29fHOl2/b0SgJNwNFloeexw5I=", "dev": true }, "mime-types": { - "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", "integrity": "sha1-4HqqnGxrmnyjASxpADrSWjnpKog=", "dev": true, "requires": { - "mime-db": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz" + "mime-db": "~1.25.0" } }, "minimalistic-assert": { @@ -8207,15 +8345,17 @@ "dev": true }, "minimatch": { - "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", "dev": true, "requires": { - "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" + "brace-expansion": "^1.0.0" } }, "minimist": { - "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -8225,8 +8365,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "for-in": { @@ -8241,21 +8381,23 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } }, "mkdirp": { - "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { - "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + "minimist": "0.0.8" }, "dependencies": { "minimist": { - "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true } @@ -8267,21 +8409,21 @@ "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", "dev": true, "requires": { - "JSONStream": "1.3.1", - "browser-resolve": "1.11.2", - "cached-path-relative": "1.0.1", - "concat-stream": "1.5.2", - "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "detective": "https://registry.npmjs.org/detective/-/detective-4.3.2.tgz", - "duplexer2": "0.1.4", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "parents": "1.0.1", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", - "stream-combiner2": "1.1.1", - "subarg": "1.0.0", - "through2": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + "JSONStream": "^1.0.3", + "browser-resolve": "^1.7.0", + "cached-path-relative": "^1.0.0", + "concat-stream": "~1.5.0", + "defined": "^1.0.0", + "detective": "^4.0.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.3", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" } }, "moment": { @@ -8296,11 +8438,12 @@ "integrity": "sha512-Y/JpVEWIOA9Gho4vO15MTnW1FCmHi3ypprrkUaxsZ1TKg3uqC8q/qMBjTddkHoiwwZN3qvZSr4zJP7x9V3LpXA==", "dev": true, "requires": { - "moment": "2.22.1" + "moment": ">= 2.9.0" } }, "ms": { - "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", "dev": true }, @@ -8325,7 +8468,7 @@ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", "dev": true, "requires": { - "readable-stream": "1.1.14" + "readable-stream": "~1.1.9" } }, "inherits": { @@ -8346,10 +8489,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -8367,7 +8510,8 @@ "dev": true }, "nan": { - "version": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", "integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=", "dev": true, "optional": true @@ -8378,18 +8522,18 @@ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-odd": "2.0.0", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-odd": "^2.0.0", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "arr-diff": { @@ -8443,7 +8587,8 @@ "dev": true }, "node-uuid": { - "version": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", "integrity": "sha1-baWhdmjEs91ZYjvaEc9/pMH2Cm8=", "dev": true }, @@ -8453,8 +8598,8 @@ "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", "dev": true, "requires": { - "chalk": "0.4.0", - "underscore": "1.6.0" + "chalk": "~0.4.0", + "underscore": "~1.6.0" }, "dependencies": { "ansi-styles": { @@ -8469,9 +8614,9 @@ "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", "dev": true, "requires": { - "ansi-styles": "1.0.0", - "has-color": "0.1.7", - "strip-ansi": "0.1.1" + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" } }, "strip-ansi": { @@ -8488,22 +8633,24 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz" + "abbrev": "1" } }, "normalize-package-data": { - "version": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", "integrity": "sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=", "dev": true, "requires": { - "hosted-git-info": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", - "is-builtin-module": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "validate-npm-package-license": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { - "version": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", "integrity": "sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=", "dev": true }, @@ -8513,14 +8660,14 @@ "integrity": "sha1-ombH5cVmlet/VcrzpacyjyRRDa4=", "dev": true, "requires": { - "config-chain": "1.1.11", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "ini": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "nopt": "3.0.6", - "once": "1.3.3", - "osenv": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "config-chain": "~1.1.8", + "inherits": "~2.0.0", + "ini": "^1.2.0", + "mkdirp": "^0.5.0", + "nopt": "~3.0.1", + "once": "~1.3.0", + "osenv": "^0.1.0", + "semver": "2 || 3 || 4", "uid-number": "0.0.5" }, "dependencies": { @@ -8530,7 +8677,7 @@ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", "dev": true, "requires": { - "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "wrappy": "1" } } } @@ -8542,12 +8689,14 @@ "dev": true }, "number-is-nan": { - "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, "oauth-sign": { - "version": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", "dev": true }, @@ -8569,9 +8718,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -8580,7 +8729,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "is-buffer": { @@ -8595,7 +8744,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8606,7 +8755,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" }, "dependencies": { "isobject": { @@ -8623,10 +8772,10 @@ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", "dev": true, "requires": { - "array-each": "1.0.1", - "array-slice": "1.1.0", - "for-own": "1.0.0", - "isobject": "3.0.1" + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" }, "dependencies": { "array-slice": { @@ -8647,7 +8796,7 @@ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "isobject": { @@ -8664,8 +8813,8 @@ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", "dev": true, "requires": { - "for-own": "1.0.0", - "make-iterator": "1.0.1" + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" }, "dependencies": { "for-in": { @@ -8680,18 +8829,19 @@ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } } } }, "object.omit": { - "version": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", - "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "object.pick": { @@ -8700,7 +8850,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" }, "dependencies": { "isobject": { @@ -8721,11 +8871,12 @@ } }, "once": { - "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "wrappy": "1" } }, "optimist": { @@ -8734,8 +8885,8 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "0.0.10", - "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" }, "dependencies": { "minimist": { @@ -8752,12 +8903,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" }, "dependencies": { "wordwrap": { @@ -8780,9 +8931,9 @@ "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", "dev": true, "requires": { - "end-of-stream": "0.1.5", - "sequencify": "0.0.7", - "stream-consume": "0.1.1" + "end-of-stream": "~0.1.5", + "sequencify": "~0.0.7", + "stream-consume": "~0.1.0" } }, "ordered-read-streams": { @@ -8798,7 +8949,8 @@ "dev": true }, "os-homedir": { - "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, @@ -8808,21 +8960,23 @@ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { - "lcid": "1.0.0" + "lcid": "^1.0.0" } }, "os-tmpdir": { - "version": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, "osenv": { - "version": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", "dev": true, "requires": { - "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "output-file-sync": { @@ -8831,9 +8985,9 @@ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" + "graceful-fs": "^4.1.4", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.0" }, "dependencies": { "graceful-fs": { @@ -8883,7 +9037,7 @@ "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", "dev": true, "requires": { - "path-platform": "0.11.15" + "path-platform": "~0.11.15" } }, "parse-asn1": { @@ -8892,11 +9046,11 @@ "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", "dev": true, "requires": { - "asn1.js": "4.9.1", - "browserify-aes": "1.0.6", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.0", - "pbkdf2": "3.0.13" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parse-filepath": { @@ -8905,28 +9059,30 @@ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", "dev": true, "requires": { - "is-absolute": "1.0.0", - "map-cache": "0.2.2", - "path-root": "0.1.1" + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" } }, "parse-glob": { - "version": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "is-dotfile": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", - "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" } }, "parse-json": { - "version": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz" + "error-ex": "^1.2.0" } }, "parse-passwd": { @@ -8941,7 +9097,7 @@ "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", "dev": true, "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseqs": { @@ -8950,7 +9106,7 @@ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "dev": true, "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseuri": { @@ -8959,7 +9115,7 @@ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "dev": true, "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseurl": { @@ -8981,15 +9137,17 @@ "dev": true }, "path-exists": { - "version": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { - "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, @@ -9017,7 +9175,7 @@ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", "dev": true, "requires": { - "path-root-regex": "0.1.2" + "path-root-regex": "^0.1.0" } }, "path-root-regex": { @@ -9027,13 +9185,14 @@ "dev": true }, "path-type": { - "version": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pathval": { @@ -9048,11 +9207,11 @@ "integrity": "sha512-+dCHxDH+djNtjgWmvVC/my3SYBAKpKNqKSjLkp+GtWWYe4XPE+e/PSD2aCanlEZZnqPk2uekTKNC/ccbwd2X2Q==", "dev": true, "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.8" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "phantomjs2-ext": { @@ -9064,13 +9223,13 @@ "adm-zip": "0.4.7", "kew": "0.5.0", "mkdirp": "0.5.0", - "ncp": "2.0.0", + "ncp": "~2.0.0", "npmconf": "2.1.1", "progress": "1.1.8", "request": "2.55.0", "request-progress": "0.3.1", - "rimraf": "2.3.4", - "which": "1.0.9" + "rimraf": "~2.3.2", + "which": "~1.0.9" }, "dependencies": { "asn1": { @@ -9103,7 +9262,7 @@ "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", "dev": true, "requires": { - "readable-stream": "1.0.34" + "readable-stream": "~1.0.26" } }, "caseless": { @@ -9133,9 +9292,9 @@ "integrity": "sha1-Jvi8JtpkQOKZy9z7aQNcT3em5GY=", "dev": true, "requires": { - "async": "0.9.2", - "combined-stream": "0.0.7", - "mime-types": "2.0.14" + "async": "~0.9.0", + "combined-stream": "~0.0.4", + "mime-types": "~2.0.3" } }, "glob": { @@ -9144,10 +9303,10 @@ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", "dev": true, "requires": { - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "2.0.10", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^2.0.1", + "once": "^1.3.0" } }, "har-validator": { @@ -9156,10 +9315,10 @@ "integrity": "sha1-2DhCsOtMQ1lgrrEIoGejqpTA7rI=", "dev": true, "requires": { - "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "is-my-json-valid": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz" + "bluebird": "^2.9.30", + "chalk": "^1.0.0", + "commander": "^2.8.1", + "is-my-json-valid": "^2.12.0" } }, "hawk": { @@ -9168,10 +9327,10 @@ "integrity": "sha1-HnMc45RH+h0PbXB/e87r7A/R7B8=", "dev": true, "requires": { - "boom": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "sntp": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "http-signature": { @@ -9181,7 +9340,7 @@ "dev": true, "requires": { "asn1": "0.1.11", - "assert-plus": "0.1.5", + "assert-plus": "^0.1.5", "ctype": "0.5.3" } }, @@ -9203,7 +9362,7 @@ "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", "dev": true, "requires": { - "mime-db": "1.12.0" + "mime-db": "~1.12.0" } }, "minimatch": { @@ -9212,7 +9371,7 @@ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz" + "brace-expansion": "^1.0.0" } }, "minimist": { @@ -9254,10 +9413,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + "string_decoder": "~0.10.x" } }, "request": { @@ -9266,24 +9425,24 @@ "integrity": "sha1-11wc32eddrsQD5v/4f5VG1wk6T0=", "dev": true, "requires": { - "aws-sign2": "0.5.0", - "bl": "0.9.5", - "caseless": "0.9.0", - "combined-stream": "0.0.7", - "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "form-data": "0.2.0", - "har-validator": "1.8.0", - "hawk": "2.3.1", - "http-signature": "0.10.1", - "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "mime-types": "2.0.14", - "node-uuid": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", - "oauth-sign": "0.6.0", - "qs": "2.4.2", - "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "tunnel-agent": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz" + "aws-sign2": "~0.5.0", + "bl": "~0.9.0", + "caseless": "~0.9.0", + "combined-stream": "~0.0.5", + "forever-agent": "~0.6.0", + "form-data": "~0.2.0", + "har-validator": "^1.4.0", + "hawk": "~2.3.0", + "http-signature": "~0.10.0", + "isstream": "~0.1.1", + "json-stringify-safe": "~5.0.0", + "mime-types": "~2.0.1", + "node-uuid": "~1.4.0", + "oauth-sign": "~0.6.0", + "qs": "~2.4.0", + "stringstream": "~0.0.4", + "tough-cookie": ">=0.12.0", + "tunnel-agent": "~0.4.0" } }, "rimraf": { @@ -9292,7 +9451,7 @@ "integrity": "sha1-gtm8Gy/PMeIFrHsoE4oCXQjpFZo=", "dev": true, "requires": { - "glob": "4.5.3" + "glob": "^4.4.2" } }, "which": { @@ -9304,21 +9463,24 @@ } }, "pify": { - "version": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, "pinkie": { - "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", "dev": true }, "pinkie-promise": { - "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + "pinkie": "^2.0.0" } }, "pkginfo": { @@ -9340,7 +9502,8 @@ "dev": true }, "preserve": { - "version": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, @@ -9363,7 +9526,8 @@ "dev": true }, "process-nextick-args": { - "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", "dev": true }, @@ -9379,11 +9543,11 @@ "integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=", "dev": true, "requires": { - "pkginfo": "0.4.1", - "read": "1.0.7", - "revalidator": "0.1.8", - "utile": "0.2.1", - "winston": "0.8.3" + "pkginfo": "0.x.x", + "read": "1.0.x", + "revalidator": "0.1.x", + "utile": "0.2.x", + "winston": "0.8.x" } }, "proto-list": { @@ -9398,20 +9562,22 @@ "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.5" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" } }, "punycode": { - "version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, "q": { - "version": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", "dev": true }, @@ -9440,12 +9606,13 @@ "dev": true }, "randomatic": { - "version": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=", "dev": true, "requires": { - "is-number": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz" + "is-number": "^2.0.2", + "kind-of": "^3.0.2" } }, "randombytes": { @@ -9454,7 +9621,7 @@ "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -9470,7 +9637,7 @@ "dev": true, "requires": { "bytes": "2.4.0", - "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "iconv-lite": "0.4.15", "unpipe": "1.0.0" } }, @@ -9480,7 +9647,7 @@ "integrity": "sha1-8+gPOH3fmugK4wpBADKWQuroERU=", "dev": true, "requires": { - "lodash.clonedeep": "4.5.0" + "lodash.clonedeep": "^4.3.2" } }, "rcloader": { @@ -9489,8 +9656,8 @@ "integrity": "sha1-oJY6ZDfQnvjLktky0trUl7DRc2w=", "dev": true, "requires": { - "lodash": "2.4.2", - "rcfinder": "0.1.9" + "lodash": "~2.4.1", + "rcfinder": "~0.1.6" }, "dependencies": { "lodash": { @@ -9507,7 +9674,7 @@ "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", "dev": true, "requires": { - "mute-stream": "0.0.7" + "mute-stream": "~0.0.4" } }, "read-only-stream": { @@ -9516,40 +9683,43 @@ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", "dev": true, "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + "readable-stream": "^2.0.2" } }, "read-pkg": { - "version": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", - "path-type": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { - "version": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "read-pkg": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" } }, "readable-stream": { - "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=", "dev": true, "requires": { - "buffer-shims": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "buffer-shims": "^1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -9558,10 +9728,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "recast": { @@ -9571,9 +9741,9 @@ "dev": true, "requires": { "ast-types": "0.8.12", - "esprima-fb": "15001.1001.0-dev-harmony-fb", - "private": "0.1.8", - "source-map": "0.5.7" + "esprima-fb": "~15001.1001.0-dev-harmony-fb", + "private": "~0.1.5", + "source-map": "~0.5.0" }, "dependencies": { "ast-types": { @@ -9596,7 +9766,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.7.1" + "resolve": "^1.1.6" }, "dependencies": { "resolve": { @@ -9605,18 +9775,19 @@ "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } } } }, "redent": { - "version": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, "requires": { - "indent-string": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "strip-indent": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, "regenerate": { @@ -9631,12 +9802,12 @@ "integrity": "sha1-oORXxY69uuV1yfjNdRJ+k3VkNdg=", "dev": true, "requires": { - "commoner": "0.10.8", - "defs": "1.1.1", - "esprima-fb": "15001.1001.0-dev-harmony-fb", - "private": "0.1.8", + "commoner": "~0.10.3", + "defs": "~1.1.0", + "esprima-fb": "~15001.1001.0-dev-harmony-fb", + "private": "~0.1.5", "recast": "0.10.33", - "through": "2.3.8" + "through": "~2.3.8" }, "dependencies": { "through": { @@ -9648,12 +9819,13 @@ } }, "regex-cache": { - "version": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", "dev": true, "requires": { - "is-equal-shallow": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "is-primitive": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" + "is-equal-shallow": "^0.1.3", + "is-primitive": "^2.0.0" } }, "regex-not": { @@ -9662,8 +9834,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "regexpu": { @@ -9672,11 +9844,11 @@ "integrity": "sha1-5TTcmRqeWEYFDJjebX3UpVyeoW0=", "dev": true, "requires": { - "esprima": "2.7.3", - "recast": "0.10.33", - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "esprima": "^2.6.0", + "recast": "^0.10.10", + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" }, "dependencies": { "esprima": { @@ -9699,7 +9871,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" } }, "remove-trailing-separator": { @@ -9709,25 +9881,29 @@ "dev": true }, "repeat-element": { - "version": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", "dev": true }, "repeat-string": { - "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, "repeating": { - "version": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz" + "is-finite": "^1.0.0" } }, "replace-ext": { - "version": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", "dev": true }, @@ -9737,26 +9913,26 @@ "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", "dev": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.7.0", - "caseless": "0.11.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.6", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.4.3", - "uuid": "3.2.1" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.11.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~2.0.6", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "qs": "~6.3.0", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "~0.4.1", + "uuid": "^3.0.0" }, "dependencies": { "ansi-regex": { @@ -9802,7 +9978,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "boom": { @@ -9811,7 +9987,7 @@ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "caseless": { @@ -9826,11 +10002,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "combined-stream": { @@ -9839,7 +10015,7 @@ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -9860,7 +10036,7 @@ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "dashdash": { @@ -9869,7 +10045,7 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -9893,7 +10069,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "escape-string-regexp": { @@ -9932,7 +10108,7 @@ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", "dev": true, "requires": { - "is-property": "1.0.2" + "is-property": "^1.0.0" } }, "getpass": { @@ -9941,7 +10117,7 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -9958,10 +10134,10 @@ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", "dev": true, "requires": { - "chalk": "1.1.3", - "commander": "2.15.1", - "is-my-json-valid": "2.17.2", - "pinkie-promise": "2.0.1" + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" } }, "has-ansi": { @@ -9970,7 +10146,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "hawk": { @@ -9979,10 +10155,10 @@ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "dev": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "hoek": { @@ -9997,9 +10173,9 @@ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "dev": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "is-my-json-valid": { @@ -10008,11 +10184,11 @@ "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", "dev": true, "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" } }, "is-property": { @@ -10090,7 +10266,7 @@ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dev": true, "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.33.0" } }, "oauth-sign": { @@ -10111,7 +10287,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "punycode": { @@ -10126,7 +10302,7 @@ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "sshpk": { @@ -10135,14 +10311,14 @@ "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "dev": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" }, "dependencies": { "assert-plus": { @@ -10165,7 +10341,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -10180,7 +10356,7 @@ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "dev": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tunnel-agent": { @@ -10202,9 +10378,9 @@ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" }, "dependencies": { "assert-plus": { @@ -10229,7 +10405,7 @@ "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=", "dev": true, "requires": { - "throttleit": "0.0.2" + "throttleit": "~0.0.2" } }, "requires-port": { @@ -10245,7 +10421,8 @@ "dev": true }, "resolve": { - "version": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", "integrity": "sha1-lYnD8vYUnRQXpAvswWY9tuxrwmw=", "dev": true }, @@ -10255,8 +10432,8 @@ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "global-modules": "1.0.0" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" } }, "resolve-url": { @@ -10277,8 +10454,8 @@ "integrity": "sha1-zZdO5P2bX+A8vzGHHuSCIcB3N7c=", "dev": true, "requires": { - "bluebird": "3.5.1", - "debug": "2.6.9" + "bluebird": "^3.4.6", + "debug": "^2.6.9" }, "dependencies": { "bluebird": { @@ -10311,33 +10488,36 @@ "dev": true }, "right-align": { - "version": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dev": true, "optional": true, "requires": { - "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz" + "align-text": "^0.1.1" } }, "rimraf": { - "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", "dev": true, "requires": { - "glob": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz" + "glob": "^7.0.5" }, "dependencies": { "glob": { - "version": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", "dev": true, "requires": { - "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } } } @@ -10348,8 +10528,8 @@ "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", "dev": true, "requires": { - "hash-base": "2.0.2", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "hash-base": "^2.0.0", + "inherits": "^2.0.1" } }, "run-sequence": { @@ -10358,8 +10538,8 @@ "integrity": "sha1-UJWgvr6YczsBQL0I3YDsAw3azes=", "dev": true, "requires": { - "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "gulp-util": "3.0.8" + "chalk": "*", + "gulp-util": "*" } }, "safe-buffer": { @@ -10374,7 +10554,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "safer-buffer": { @@ -10389,9 +10569,9 @@ "integrity": "sha1-kI2TEeyvF92bRkehQ1/UogcugM4=", "dev": true, "requires": { - "adm-zip": "0.4.7", + "adm-zip": "~0.4.3", "async": "1.4.0", - "https-proxy-agent": "1.0.0", + "https-proxy-agent": "~1.0.0", "lodash": "3.10.1", "rimraf": "2.4.3" }, @@ -10414,7 +10594,7 @@ "integrity": "sha1-5bUclDekxYKtuVXp8oz42UXicq8=", "dev": true, "requires": { - "glob": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" + "glob": "^5.0.14" } } } @@ -10425,11 +10605,12 @@ "integrity": "sha1-uTSpr52ih0s/QKrh/N5QpEZvXzg=", "dev": true, "requires": { - "https-proxy-agent": "1.0.0" + "https-proxy-agent": "^1.0.0" } }, "semver": { - "version": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", "dev": true }, @@ -10439,21 +10620,21 @@ "integrity": "sha1-sOsSuHIjre0Q5QqdeFBuDdQvkgg=", "dev": true, "requires": { - "bluebird": "3.5.1", - "depd": "1.1.2", - "dottie": "1.1.1", + "bluebird": "^3.3.4", + "depd": "^1.1.0", + "dottie": "^1.0.0", "generic-pool": "2.4.2", - "inflection": "1.12.0", - "lodash": "4.17.10", - "moment": "2.22.1", - "moment-timezone": "0.5.17", - "retry-as-promised": "2.3.2", - "semver": "5.5.0", + "inflection": "^1.6.0", + "lodash": "^4.17.10", + "moment": "^2.13.0", + "moment-timezone": "^0.5.4", + "retry-as-promised": "^2.0.0", + "semver": "^5.0.1", "shimmer": "1.1.0", - "terraformer-wkt-parser": "1.2.0", - "toposort-class": "1.0.1", - "uuid": "3.2.1", - "validator": "5.7.0", + "terraformer-wkt-parser": "^1.1.0", + "toposort-class": "^1.0.1", + "uuid": "^3.0.0", + "validator": "^5.2.0", "wkx": "0.2.0" }, "dependencies": { @@ -10501,10 +10682,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -10513,7 +10694,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-extendable": { @@ -10536,7 +10717,7 @@ "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", "dev": true, "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "inherits": "^2.0.1" } }, "shasum": { @@ -10545,8 +10726,8 @@ "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", "dev": true, "requires": { - "json-stable-stringify": "0.0.1", - "sha.js": "2.4.8" + "json-stable-stringify": "~0.0.0", + "sha.js": "~2.4.4" } }, "shebang-regex": { @@ -10561,10 +10742,10 @@ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", "dev": true, "requires": { - "array-filter": "0.0.1", - "array-map": "0.0.0", - "array-reduce": "0.0.0", - "jsonify": "0.0.0" + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" } }, "shelljs": { @@ -10586,7 +10767,8 @@ "dev": true }, "signal-exit": { - "version": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, @@ -10614,14 +10796,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.0" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "atob": { @@ -10645,7 +10827,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -10654,7 +10836,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-extendable": { @@ -10681,11 +10863,11 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "2.1.1", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { @@ -10702,9 +10884,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -10713,7 +10895,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -10722,7 +10904,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -10731,7 +10913,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -10740,9 +10922,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "isobject": { @@ -10765,7 +10947,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "is-buffer": { @@ -10780,17 +10962,18 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } }, "sntp": { - "version": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, "requires": { - "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" + "hoek": "2.x.x" } }, "socket.io": { @@ -10814,7 +10997,7 @@ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", "dev": true, "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + "ms": "0.7.2" } }, "object-assign": { @@ -10841,7 +11024,7 @@ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", "dev": true, "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + "ms": "0.7.2" } } } @@ -10858,7 +11041,7 @@ "debug": "2.3.3", "engine.io-client": "1.8.3", "has-binary": "0.1.7", - "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "indexof": "0.0.1", "object-component": "0.0.3", "parseuri": "0.0.5", "socket.io-parser": "2.3.1", @@ -10877,7 +11060,7 @@ "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", "dev": true, "requires": { - "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + "ms": "0.7.2" } } } @@ -10918,9 +11101,9 @@ } }, "source-map": { - "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", - "dev": true + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" }, "source-map-resolve": { "version": "0.3.1", @@ -10928,10 +11111,10 @@ "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", "dev": true, "requires": { - "atob": "1.1.3", - "resolve-url": "0.2.1", - "source-map-url": "0.3.0", - "urix": "0.1.0" + "atob": "~1.1.0", + "resolve-url": "~0.2.1", + "source-map-url": "~0.3.0", + "urix": "~0.1.0" } }, "source-map-support": { @@ -10955,7 +11138,7 @@ "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -10973,20 +11156,23 @@ "dev": true }, "spdx-correct": { - "version": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", "dev": true, "requires": { - "spdx-license-ids": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz" + "spdx-license-ids": "^1.0.2" } }, "spdx-expression-parse": { - "version": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", "dev": true }, "spdx-license-ids": { - "version": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", "dev": true }, @@ -10996,11 +11182,12 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { - "version": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, @@ -11010,8 +11197,8 @@ "integrity": "sha512-JxXKPJnkZ6NuHRojq+g2WXWBt3M1G9sjZaYiHEWSTGijDM3cwju/0T2XbWqMXFmPqDgw+iB7zKQvnns4bvzXlw==", "dev": true, "requires": { - "nan": "2.7.0", - "node-pre-gyp": "0.6.38" + "nan": "~2.7.0", + "node-pre-gyp": "~0.6.38" }, "dependencies": { "abbrev": { @@ -11024,8 +11211,8 @@ "bundled": true, "dev": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "ansi-regex": { @@ -11043,8 +11230,8 @@ "bundled": true, "dev": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.3" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "asn1": { @@ -11083,7 +11270,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "block-stream": { @@ -11091,7 +11278,7 @@ "bundled": true, "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "~2.0.0" } }, "boom": { @@ -11099,7 +11286,7 @@ "bundled": true, "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "brace-expansion": { @@ -11107,7 +11294,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -11131,7 +11318,7 @@ "bundled": true, "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "concat-map": { @@ -11154,7 +11341,7 @@ "bundled": true, "dev": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "dashdash": { @@ -11162,7 +11349,7 @@ "bundled": true, "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -11201,7 +11388,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "extend": { @@ -11224,9 +11411,9 @@ "bundled": true, "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "fs.realpath": { @@ -11239,10 +11426,10 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" } }, "fstream-ignore": { @@ -11250,9 +11437,9 @@ "bundled": true, "dev": true, "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" } }, "gauge": { @@ -11260,14 +11447,14 @@ "bundled": true, "dev": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "getpass": { @@ -11275,7 +11462,7 @@ "bundled": true, "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -11290,12 +11477,12 @@ "bundled": true, "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "graceful-fs": { @@ -11313,8 +11500,8 @@ "bundled": true, "dev": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "^4.9.1", + "har-schema": "^1.0.5" } }, "has-unicode": { @@ -11327,10 +11514,10 @@ "bundled": true, "dev": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "hoek": { @@ -11343,9 +11530,9 @@ "bundled": true, "dev": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "inflight": { @@ -11353,8 +11540,8 @@ "bundled": true, "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -11372,7 +11559,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-typedarray": { @@ -11406,7 +11593,7 @@ "bundled": true, "dev": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { @@ -11447,7 +11634,7 @@ "bundled": true, "dev": true, "requires": { - "mime-db": "1.30.0" + "mime-db": "~1.30.0" } }, "minimatch": { @@ -11455,7 +11642,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -11488,15 +11675,15 @@ "dev": true, "requires": { "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.2", - "rc": "1.2.1", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.0.2", + "rc": "^1.1.7", "request": "2.81.0", - "rimraf": "2.6.2", - "semver": "5.4.1", - "tar": "2.2.1", - "tar-pack": "3.4.0" + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^2.2.1", + "tar-pack": "^3.4.0" } }, "nopt": { @@ -11504,8 +11691,8 @@ "bundled": true, "dev": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.4" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npmlog": { @@ -11513,10 +11700,10 @@ "bundled": true, "dev": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -11539,7 +11726,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -11557,8 +11744,8 @@ "bundled": true, "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -11591,10 +11778,10 @@ "bundled": true, "dev": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -11609,13 +11796,13 @@ "bundled": true, "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "request": { @@ -11623,28 +11810,28 @@ "bundled": true, "dev": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" } }, "rimraf": { @@ -11652,7 +11839,7 @@ "bundled": true, "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -11680,7 +11867,7 @@ "bundled": true, "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "sshpk": { @@ -11688,14 +11875,14 @@ "bundled": true, "dev": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" }, "dependencies": { "assert-plus": { @@ -11710,9 +11897,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -11720,7 +11907,7 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "stringstream": { @@ -11733,7 +11920,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -11746,9 +11933,9 @@ "bundled": true, "dev": true, "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" } }, "tar-pack": { @@ -11756,14 +11943,14 @@ "bundled": true, "dev": true, "requires": { - "debug": "2.6.9", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.3.3", - "rimraf": "2.6.2", - "tar": "2.2.1", - "uid-number": "0.0.6" + "debug": "^2.2.0", + "fstream": "^1.0.10", + "fstream-ignore": "^1.0.5", + "once": "^1.3.3", + "readable-stream": "^2.1.4", + "rimraf": "^2.5.1", + "tar": "^2.2.1", + "uid-number": "^0.0.6" } }, "tough-cookie": { @@ -11771,7 +11958,7 @@ "bundled": true, "dev": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tunnel-agent": { @@ -11779,7 +11966,7 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -11808,9 +11995,9 @@ "bundled": true, "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" }, "dependencies": { "assert-plus": { @@ -11825,7 +12012,7 @@ "bundled": true, "dev": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -11836,23 +12023,25 @@ } }, "sshpk": { - "version": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz", "integrity": "sha1-MOGl0ykkSXShr2FREznVla9mOLA=", "dev": true, "requires": { - "asn1": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "bcrypt-pbkdf": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz", - "dashdash": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "ecc-jsbn": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "getpass": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", - "jodid25519": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", - "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jodid25519": "^1.0.0", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" }, "dependencies": { "assert-plus": { - "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true } @@ -11865,11 +12054,18 @@ "dev": true }, "stack-generator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.3.tgz", - "integrity": "sha512-kdzGoqrnqsMxOEuXsXyQTmvWXZmG0f3Ql2GDx5NtmZs59sT2Bt9Vdyq0XdtxUi58q/+nxtbF9KOQ9HkV1QznGg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.4.tgz", + "integrity": "sha512-ha1gosTNcgxwzo9uKTQ8zZ49aUp5FIUW58YHFxCqaAHtE0XqBg0chGFYA1MfmW//x1KWq3F4G7Ug7bJh4RiRtg==", "requires": { - "stackframe": "1.0.4" + "stackframe": "^1.1.0" + }, + "dependencies": { + "stackframe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.0.tgz", + "integrity": "sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg==" + } } }, "stack-trace": { @@ -11879,24 +12075,17 @@ "dev": true }, "stackframe": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", - "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.0.tgz", + "integrity": "sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg==" }, "stacktrace-gps": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.2.tgz", - "integrity": "sha512-9o+nWhiz5wFnrB3hBHs2PTyYrS60M1vvpSzHxwxnIbtY2q9Nt51hZvhrG1+2AxD374ecwyS+IUwfkHRE/2zuGg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.3.tgz", + "integrity": "sha512-51Rr7dXkyFUKNmhY/vqZWK+EvdsfFSRiQVtgHTFlAdNIYaDD7bVh21yBHXaNWAvTD+w+QSjxHg7/v6Tz4veExA==", "requires": { "source-map": "0.5.6", - "stackframe": "1.0.4" - }, - "dependencies": { - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" - } + "stackframe": "^1.1.0" } }, "static-extend": { @@ -11905,8 +12094,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -11915,7 +12104,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -11932,8 +12121,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-combiner2": { @@ -11942,8 +12131,8 @@ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, "requires": { - "duplexer2": "0.1.4", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" } }, "stream-consume": { @@ -11958,11 +12147,11 @@ "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "readable-stream": "2.3.3", - "to-arraybuffer": "1.0.1", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.2.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" }, "dependencies": { "readable-stream": { @@ -11971,13 +12160,13 @@ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { - "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -11986,7 +12175,7 @@ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } } } @@ -11997,12 +12186,13 @@ "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", "dev": true, "requires": { - "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" } }, "string_decoder": { - "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, @@ -12019,32 +12209,36 @@ "dev": true }, "stringstream": { - "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", "dev": true }, "strip-ansi": { - "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" + "ansi-regex": "^2.0.0" } }, "strip-bom": { - "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + "is-utf8": "^0.2.0" } }, "strip-indent": { - "version": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, "requires": { - "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" + "get-stdin": "^4.0.1" } }, "strip-json-comments": { @@ -12059,11 +12253,12 @@ "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", "dev": true, "requires": { - "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" + "minimist": "^1.1.0" } }, "supports-color": { - "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, @@ -12073,7 +12268,7 @@ "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", "dev": true, "requires": { - "acorn": "4.0.13" + "acorn": "^4.0.3" } }, "tar-stream": { @@ -12082,10 +12277,10 @@ "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", "dev": true, "requires": { - "bl": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", - "end-of-stream": "1.4.0", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + "bl": "^1.0.0", + "end-of-stream": "^1.0.0", + "readable-stream": "^2.0.0", + "xtend": "^4.0.0" }, "dependencies": { "end-of-stream": { @@ -12094,7 +12289,7 @@ "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", "dev": true, "requires": { - "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "once": "^1.4.0" } } } @@ -12105,7 +12300,7 @@ "integrity": "sha1-UeCtiXRvzyFh3G9lqnDkI3fItZM=", "dev": true, "requires": { - "@types/geojson": "1.0.6" + "@types/geojson": "^1.0.0" } }, "terraformer-wkt-parser": { @@ -12114,8 +12309,8 @@ "integrity": "sha512-QU3iA54St5lF8Za1jg1oj4NYc8sn5tCZ08aNSWDeGzrsaV48eZk1iAVWasxhNspYBoCqdHuoot1pUTUrE1AJ4w==", "dev": true, "requires": { - "@types/geojson": "1.0.6", - "terraformer": "1.0.8" + "@types/geojson": "^1.0.0", + "terraformer": "~1.0.5" } }, "throttleit": { @@ -12125,17 +12320,19 @@ "dev": true }, "through": { - "version": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "through2": { - "version": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "tildify": { @@ -12144,7 +12341,7 @@ "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", "dev": true, "requires": { - "os-homedir": "1.0.2" + "os-homedir": "^1.0.0" }, "dependencies": { "os-homedir": { @@ -12167,7 +12364,7 @@ "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", "dev": true, "requires": { - "process": "0.11.10" + "process": "~0.11.0" } }, "tmp": { @@ -12176,7 +12373,7 @@ "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", "dev": true, "requires": { - "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + "os-tmpdir": "~1.0.1" } }, "to-array": { @@ -12209,7 +12406,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "is-buffer": { @@ -12224,7 +12421,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -12235,10 +12432,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -12247,8 +12444,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "dependencies": { "is-buffer": { @@ -12263,7 +12460,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "kind-of": { @@ -12272,7 +12469,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "repeat-string": { @@ -12296,15 +12493,17 @@ "dev": true }, "tough-cookie": { - "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", "dev": true, "requires": { - "punycode": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + "punycode": "^1.4.1" } }, "trim-newlines": { - "version": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", "dev": true }, @@ -12333,12 +12532,14 @@ "dev": true }, "tunnel-agent": { - "version": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", "dev": true }, "tweetnacl": { - "version": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true, "optional": true @@ -12349,7 +12550,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-is": { @@ -12359,7 +12560,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.16" + "mime-types": "~2.1.15" }, "dependencies": { "mime-db": { @@ -12374,7 +12575,7 @@ "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", "dev": true, "requires": { - "mime-db": "1.29.0" + "mime-db": "~1.29.0" } } } @@ -12386,19 +12587,21 @@ "dev": true }, "uglify-js": { - "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=", "dev": true, "optional": true, "requires": { - "async": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "uglify-to-browserify": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "yargs": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz" + "async": "~0.2.6", + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "async": { - "version": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", "dev": true, "optional": true @@ -12412,7 +12615,8 @@ "dev": true }, "uglify-to-browserify": { - "version": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "dev": true, "optional": true @@ -12453,8 +12657,8 @@ "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", "dev": true, "requires": { - "sprintf-js": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "sprintf-js": "^1.0.3", + "util-deprecate": "^1.0.2" } }, "union-value": { @@ -12463,10 +12667,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -12475,7 +12679,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-extendable": { @@ -12490,10 +12694,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -12516,8 +12720,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -12526,9 +12730,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -12592,7 +12796,7 @@ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.2" }, "dependencies": { "kind-of": { @@ -12615,8 +12819,8 @@ "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", "dev": true, "requires": { - "lru-cache": "2.2.4", - "tmp": "0.0.31" + "lru-cache": "2.2.x", + "tmp": "0.0.x" }, "dependencies": { "lru-cache": { @@ -12645,7 +12849,8 @@ } }, "util-deprecate": { - "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, @@ -12655,12 +12860,12 @@ "integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=", "dev": true, "requires": { - "async": "0.2.10", - "deep-equal": "1.0.1", - "i": "0.3.6", - "mkdirp": "0.5.1", - "ncp": "0.4.2", - "rimraf": "2.6.2" + "async": "~0.2.9", + "deep-equal": "*", + "i": "0.3.x", + "mkdirp": "0.x.x", + "ncp": "0.4.x", + "rimraf": "2.x.x" }, "dependencies": { "async": { @@ -12681,7 +12886,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -12703,12 +12908,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "inflight": { @@ -12717,8 +12922,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -12733,7 +12938,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -12757,7 +12962,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "path-is-absolute": { @@ -12772,7 +12977,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "wrappy": { @@ -12801,16 +13006,17 @@ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { - "user-home": "1.1.1" + "user-home": "^1.1.1" } }, "validate-npm-package-license": { - "version": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", "dev": true, "requires": { - "spdx-correct": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "spdx-expression-parse": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz" + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" } }, "validator": { @@ -12826,11 +13032,12 @@ "dev": true }, "verror": { - "version": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", "dev": true, "requires": { - "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz" + "extsprintf": "1.0.2" } }, "vinyl": { @@ -12839,8 +13046,8 @@ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", "dev": true, "requires": { - "clone": "1.0.4", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" }, "dependencies": { @@ -12870,8 +13077,8 @@ "integrity": "sha1-lsGjR5uMU5JULGEgKQE7Wyf4i78=", "dev": true, "requires": { - "bl": "1.2.2", - "through2": "2.0.3" + "bl": "^1.2.1", + "through2": "^2.0.3" }, "dependencies": { "bl": { @@ -12880,8 +13087,8 @@ "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, "requires": { - "readable-stream": "2.3.6", - "safe-buffer": "5.1.1" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, "core-util-is": { @@ -12914,13 +13121,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -12929,7 +13136,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "through2": { @@ -12938,8 +13145,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "util-deprecate": { @@ -12962,14 +13169,14 @@ "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", "dev": true, "requires": { - "defaults": "1.0.3", - "glob-stream": "3.1.18", - "glob-watcher": "0.0.6", - "graceful-fs": "3.0.11", - "mkdirp": "0.5.1", - "strip-bom": "1.0.0", - "through2": "0.6.5", - "vinyl": "0.4.6" + "defaults": "^1.0.0", + "glob-stream": "^3.1.5", + "glob-watcher": "^0.0.6", + "graceful-fs": "^3.0.0", + "mkdirp": "^0.5.0", + "strip-bom": "^1.0.0", + "through2": "^0.6.1", + "vinyl": "^0.4.0" }, "dependencies": { "clone": { @@ -12996,7 +13203,7 @@ "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", "dev": true, "requires": { - "natives": "1.1.4" + "natives": "^1.1.0" } }, "inherits": { @@ -13038,10 +13245,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -13056,8 +13263,8 @@ "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", "dev": true, "requires": { - "first-chunk-stream": "1.0.0", - "is-utf8": "0.2.1" + "first-chunk-stream": "^1.0.0", + "is-utf8": "^0.2.0" } }, "through2": { @@ -13066,8 +13273,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "vinyl": { @@ -13076,8 +13283,8 @@ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" + "clone": "^0.2.0", + "clone-stats": "^0.0.1" } }, "xtend": { @@ -13094,8 +13301,8 @@ "integrity": "sha1-YrU6E1YQqJbpjKlr7jqH8Aio54A=", "dev": true, "requires": { - "through2": "2.0.3", - "vinyl": "0.4.6" + "through2": "^2.0.3", + "vinyl": "^0.4.3" }, "dependencies": { "clone": { @@ -13140,13 +13347,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -13155,7 +13362,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "through2": { @@ -13164,8 +13371,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "util-deprecate": { @@ -13180,8 +13387,8 @@ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" + "clone": "^0.2.0", + "clone-stats": "^0.0.1" } }, "xtend": { @@ -13198,7 +13405,7 @@ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "^0.5.1" }, "dependencies": { "source-map": { @@ -13215,7 +13422,7 @@ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", "dev": true, "requires": { - "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz" + "indexof": "0.0.1" } }, "void-elements": { @@ -13236,10 +13443,10 @@ "integrity": "sha1-LUxZviLivyYY3fWXq0uqkjvnIA0=", "dev": true, "requires": { - "glob": "7.1.2", - "uuid": "2.0.3", - "vow": "0.4.17", - "vow-queue": "0.4.3" + "glob": "^7.0.5", + "uuid": "^2.0.2", + "vow": "^0.4.7", + "vow-queue": "^0.4.1" }, "dependencies": { "balanced-match": { @@ -13254,7 +13461,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -13276,12 +13483,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "inflight": { @@ -13290,8 +13497,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -13306,7 +13513,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "once": { @@ -13315,7 +13522,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "path-is-absolute": { @@ -13344,7 +13551,7 @@ "integrity": "sha512-/poAKDTFL3zYbeQg7cl4BGcfP4sGgXKrHnRFSKj97dteUFu8oyXMwIcdwu8NSx/RmPGIuYx1Bik/y5vU4H/VKw==", "dev": true, "requires": { - "vow": "0.4.17" + "vow": "^0.4.17" } }, "walkdir": { @@ -13362,8 +13569,8 @@ "archiver": "1.3.0", "async": "2.0.1", "lodash": "4.16.2", - "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "mkdirp": "^0.5.1", + "q": "1.4.1", "request": "2.79.0", "underscore.string": "3.3.4", "vargs": "0.1.0" @@ -13375,7 +13582,7 @@ "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", "dev": true, "requires": { - "lodash": "4.16.2" + "lodash": "^4.8.0" } }, "form-data": { @@ -13384,9 +13591,9 @@ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "dev": true, "requires": { - "asynckit": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "lodash": { @@ -13407,26 +13614,26 @@ "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", "dev": true, "requires": { - "aws-sign2": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "aws4": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", - "caseless": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "extend": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "form-data": "2.1.4", - "har-validator": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "hawk": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "http-signature": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "is-typedarray": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", - "oauth-sign": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "qs": "6.3.2", - "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "tunnel-agent": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "uuid": "3.1.0" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.11.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~2.0.6", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "qs": "~6.3.0", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "~0.4.1", + "uuid": "^3.0.0" } }, "uuid": { @@ -13438,15 +13645,17 @@ } }, "which": { - "version": "https://registry.npmjs.org/which/-/which-1.2.12.tgz", + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.12.tgz", "integrity": "sha1-3me15FAmnxlJCe8j7OTr5Bb6EZI=", "dev": true, "requires": { - "isexe": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz" + "isexe": "^1.1.1" } }, "window-size": { - "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", "dev": true, "optional": true @@ -13457,13 +13666,13 @@ "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=", "dev": true, "requires": { - "async": "0.2.10", - "colors": "0.6.2", - "cycle": "1.0.3", - "eyes": "0.1.8", - "isstream": "0.1.2", - "pkginfo": "0.3.1", - "stack-trace": "0.0.10" + "async": "0.2.x", + "colors": "0.6.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "pkginfo": "0.3.x", + "stack-trace": "0.0.x" }, "dependencies": { "async": { @@ -13499,12 +13708,14 @@ "dev": true }, "wordwrap": { - "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", "dev": true }, "wrappy": { - "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, @@ -13514,8 +13725,8 @@ "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", "dev": true, "requires": { - "options": "0.0.6", - "ultron": "1.0.2" + "options": ">=0.0.5", + "ultron": "1.0.x" } }, "wtf-8": { @@ -13530,7 +13741,7 @@ "integrity": "sha1-LIaIjy1OrehQ+jjKf3Ij9yCVFuE=", "dev": true, "requires": { - "lodash": "3.10.1" + "lodash": "^3.5.0" }, "dependencies": { "lodash": { @@ -13548,7 +13759,8 @@ "dev": true }, "xtend": { - "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true }, @@ -13559,19 +13771,21 @@ "dev": true }, "yargs": { - "version": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, "optional": true, "requires": { - "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "cliui": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "window-size": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz" + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" }, "dependencies": { "camelcase": { - "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", "dev": true, "optional": true @@ -13590,10 +13804,10 @@ "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", "dev": true, "requires": { - "archiver-utils": "1.3.0", - "compress-commons": "1.2.0", - "lodash": "4.17.4", - "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz" + "archiver-utils": "^1.3.0", + "compress-commons": "^1.2.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0" }, "dependencies": { "lodash": { diff --git a/package.json b/package.json index 94ac47e..fb83b44 100644 --- a/package.json +++ b/package.json @@ -22,9 +22,9 @@ "url": "git://github.com/stacktracejs/stacktrace.js.git" }, "dependencies": { - "error-stack-parser": "^2.0.2", - "stack-generator": "^2.0.3", - "stacktrace-gps": "^3.0.2" + "error-stack-parser": "^2.0.4", + "stack-generator": "^2.0.4", + "stacktrace-gps": "^3.0.3" }, "devDependencies": { "browserify": "^13.3.0", From ef763697b6a430fcdb66a3fe2dcc4c5da6f1b533 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Tue, 17 Sep 2019 19:58:36 -0700 Subject: [PATCH 102/110] Add dist/ to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index cf8dc59..69b61ff 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ coverage .idea .coveralls.yml +dist From c934e1f1c8cf80b6c41e16c17e9d65e990b0fb42 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Tue, 17 Sep 2019 19:58:47 -0700 Subject: [PATCH 103/110] 2.0.1 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index e77be19..6f232f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "stacktrace-js", - "version": "2.0.0", + "version": "2.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index fb83b44..8590031 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "Oliver Salzburg (https://github.com/oliversalzburg)", "Ben Gourley (https://github.com/bengourley)" ], - "version": "2.0.0", + "version": "2.0.1", "license": "MIT", "keywords": [ "stacktrace", From 4d60cccd5ec10ac9f68c87025d17f89a4efbbfd8 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Mon, 6 Jan 2020 20:53:10 -0700 Subject: [PATCH 104/110] Replace JSCS and JSHint with ESLint --- .eslintrc.yml | 38 + .jscsrc | 28 - .jshintignore | 1 - .jshintrc | 50 - .travis.yml | 8 +- ...ktrace-with-promises-and-json-polyfills.js | 47 +- ...ce-with-promises-and-json-polyfills.min.js | 4 +- dist/stacktrace.js | 47 +- dist/stacktrace.min.js | 2 +- gulpfile.js | 49 +- karma.conf.ci.js | 94 +- karma.conf.js | 2 +- package-lock.json | 13889 ++++++---------- package.json | 34 +- spec/fixtures/errors.js | 12 +- stacktrace.js | 4 +- 16 files changed, 5622 insertions(+), 8687 deletions(-) create mode 100644 .eslintrc.yml delete mode 100644 .jscsrc delete mode 100644 .jshintignore delete mode 100644 .jshintrc diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 0000000..7272f98 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,38 @@ +env: + browser: true + commonjs: true + node: true +extends: 'eslint:recommended' +globals: + afterEach: false + beforeEach: false + define: false + describe: false + expect: false + it: false + jasmine: false + ES6Promise: false + Promise: false + SourceMap: false + StackFrame: false + StackTrace: false + StackTraceGPS: false +parserOptions: + ecmaVersion: 5 +rules: + indent: + - error + - 4 + linebreak-style: + - error + - unix + quotes: + - error + - single + semi: + - error + - always + no-console: + - error + - allow: + - error diff --git a/.jscsrc b/.jscsrc deleted file mode 100644 index 21f8767..0000000 --- a/.jscsrc +++ /dev/null @@ -1,28 +0,0 @@ -{ - "preset": "google", - "fileExtensions": [ - ".js" - ], - "requireSemicolons": true, - "requireParenthesesAroundIIFE": true, - "maximumLineLength": 120, - "validateLineBreaks": "LF", - "validateIndentation": 4, - "disallowTrailingComma": true, - "disallowSpacesInsideObjectBrackets": null, - "disallowImplicitTypeConversion": [ - "string" - ], - "jsDoc": { - "checkAnnotations": "closurecompiler", - "checkParamNames": true, - "requireParamTypes": true, - "checkRedundantParams": true, - "checkReturnTypes": true, - "checkRedundantReturns": true, - "requireReturnTypes": true, - "checkTypes": "capitalizedNativeCase", - "checkRedundantAccess": true, - "requireNewlineAfterDescription": true - } -} diff --git a/.jshintignore b/.jshintignore deleted file mode 100644 index a261f29..0000000 --- a/.jshintignore +++ /dev/null @@ -1 +0,0 @@ -dist/* diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index f05a6c9..0000000 --- a/.jshintrc +++ /dev/null @@ -1,50 +0,0 @@ -{ - "nonew": true, - "curly": true, - "noarg": true, - "trailing": true, - "forin": true, - "noempty": true, - "node": true, - "eqeqeq": true, - "undef": true, - "newcap": true, - "immed": true, - "browser": true, - "es3": true, - "camelcase": true, - "nonbsp": true, - "predef": { - "StackTrace": false, - "StackFrame": false, - "ErrorStackParser": false, - "StackTraceGPS": false, - "Promise": false, - "afterEach": false, - "beforeEach": false, - "define": false, - "describe": false, - "xdescribe": false, - "expect": false, - "exports": false, - "it": false, - "xit": false, - "jasmine": false, - "sinon": false, - "require": false, - "runs": false, - "waits": false, - "spyOn": false, - "waitsFor": false, - "files": true, - "exclude": true, - "autoWatch": true, - "reporters": true, - "port": true, - "JASMINE": true, - "JASMINE_ADAPTER": true, - "matchers": true, - "priv": true, - "JSON": true - } -} diff --git a/.travis.yml b/.travis.yml index 81240ae..904ab62 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,9 +14,9 @@ addons: services: - xvfb before_install: -- export CHROME_BIN=chromium-browser -- export DISPLAY=:99.0 + - export CHROME_BIN=chromium-browser + - export DISPLAY=:99.0 before_script: -- npm install + - npm install script: -- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then gulp ci; else gulp pr; fi + - if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then npm run lint && npm run test-ci; else npm run test-pr; fi diff --git a/dist/stacktrace-with-promises-and-json-polyfills.js b/dist/stacktrace-with-promises-and-json-polyfills.js index 9c2ba0b..66f24e1 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.js @@ -14,9 +14,9 @@ }(this, function ErrorStackParser(StackFrame) { 'use strict'; - var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\S+\:\d+/; - var CHROME_IE_STACK_REGEXP = /^\s*at .*(\S+\:\d+|\(native\))/m; - var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\[native code\])?$/; + var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\S+:\d+/; + var CHROME_IE_STACK_REGEXP = /^\s*at .*(\S+:\d+|\(native\))/m; + var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\[native code])?$/; return { /** @@ -44,8 +44,8 @@ return [urlLike]; } - var regExp = /(.+?)(?:\:(\d+))?(?:\:(\d+))?$/; - var parts = regExp.exec(urlLike.replace(/[\(\)]/g, '')); + var regExp = /(.+?)(?::(\d+))?(?::(\d+))?$/; + var parts = regExp.exec(urlLike.replace(/[()]/g, '')); return [parts[1], parts[2] || undefined, parts[3] || undefined]; }, @@ -57,7 +57,7 @@ return filtered.map(function(line) { if (line.indexOf('(eval ') > -1) { // Throw away eval information until we implement stacktrace.js/stackframe#8 - line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^\()]*)|(\)\,.*$)/g, ''); + line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^()]*)|(\),.*$)/g, ''); } var sanitizedLine = line.replace(/^\s+/, '').replace(/\(eval code/g, '('); @@ -92,7 +92,7 @@ return filtered.map(function(line) { // Throw away eval information until we implement stacktrace.js/stackframe#8 if (line.indexOf(' > eval') > -1) { - line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g, ':$1'); + line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g, ':$1'); } if (line.indexOf('@') === -1 && line.indexOf(':') === -1) { @@ -180,11 +180,11 @@ var locationParts = this.extractLocation(tokens.pop()); var functionCall = (tokens.shift() || ''); var functionName = functionCall - .replace(//, '$2') - .replace(/\([^\)]*\)/g, '') || undefined; + .replace(//, '$2') + .replace(/\([^)]*\)/g, '') || undefined; var argsRaw; - if (functionCall.match(/\(([^\)]*)\)/)) { - argsRaw = functionCall.replace(/^[^\(]+\(([^\)]*)\)$/, '$1'); + if (functionCall.match(/\(([^)]*)\)/)) { + argsRaw = functionCall.replace(/^[^(]+\(([^)]*)\)$/, '$1'); } var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(','); @@ -239,11 +239,10 @@ var props = booleanProps.concat(numericProps, stringProps, arrayProps); function StackFrame(obj) { - if (obj instanceof Object) { - for (var i = 0; i < props.length; i++) { - if (obj.hasOwnProperty(props[i]) && obj[props[i]] !== undefined) { - this['set' + _capitalize(props[i])](obj[props[i]]); - } + if (!obj) return; + for (var i = 0; i < props.length; i++) { + if (obj[props[i]] !== undefined) { + this['set' + _capitalize(props[i])](obj[props[i]]); } } } @@ -4830,7 +4829,8 @@ arguments[4][2][0].apply(exports,arguments) var sourceMappingUrlRegExp = /\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/mg; var lastSourceMappingUrl; var matchSourceMappingUrl; - while (matchSourceMappingUrl = sourceMappingUrlRegExp.exec(source)) { // jshint ignore:line + // eslint-disable-next-line no-cond-assign + while (matchSourceMappingUrl = sourceMappingUrlRegExp.exec(source)) { lastSourceMappingUrl = matchSourceMappingUrl[1]; } if (lastSourceMappingUrl) { @@ -4933,7 +4933,7 @@ arguments[4][2][0].apply(exports,arguments) * @returns {Promise} that resolves a SourceMapConsumer */ this._getSourceMapConsumer = function _getSourceMapConsumer(sourceMappingURL, defaultSourceRoot) { - return new Promise(function(resolve, reject) { + return new Promise(function(resolve) { if (this.sourceMapConsumerCache[sourceMappingURL]) { resolve(this.sourceMapConsumerCache[sourceMappingURL]); } else { @@ -4971,6 +4971,7 @@ arguments[4][2][0].apply(exports,arguments) this.findFunctionName(mappedStackFrame) .then(resolve, resolveMappedStackFrame) + // eslint-disable-next-line no-unexpected-multiline ['catch'](resolveMappedStackFrame); }.bind(this), reject); }.bind(this)); @@ -5031,8 +5032,8 @@ arguments[4][2][0].apply(exports,arguments) .then(function(sourceMapConsumer) { return _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) .then(resolve)['catch'](function() { - resolve(stackframe); - }); + resolve(stackframe); + }); }); }.bind(this), reject)['catch'](reject); }.bind(this)); @@ -5217,7 +5218,7 @@ if (!Array.prototype.forEach) { [first, second].forEach(function(obj) { for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { + if (Object.prototype.hasOwnProperty.call(obj, prop)) { target[prop] = obj[prop]; } } @@ -5381,7 +5382,7 @@ if (!Array.prototype.forEach) { if (requestOptions && typeof requestOptions.headers === 'object') { var headers = requestOptions.headers; for (var header in headers) { - if (headers.hasOwnProperty(header)) { + if (Object.prototype.hasOwnProperty.call(headers, header)) { req.setRequestHeader(header, headers[header]); } } @@ -5400,4 +5401,4 @@ if (!Array.prototype.forEach) { },{"error-stack-parser":1,"stack-generator":14,"stacktrace-gps":16}]},{},[3,4,17,18])(18) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9lcnJvci1zdGFjay1wYXJzZXIvbm9kZV9tb2R1bGVzL3N0YWNrZnJhbWUvc3RhY2tmcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9lczYtcHJvbWlzZS9kaXN0L2VzNi1wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2pzb24zL2xpYi9qc29uMy5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYXJyYXktc2V0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2Jhc2U2NC12bHEuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2JpbmFyeS1zZWFyY2guanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvcXVpY2stc29ydC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyLmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3V0aWwuanMiLCJub2RlX21vZHVsZXMvc3RhY2stZ2VuZXJhdG9yL3N0YWNrLWdlbmVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja3RyYWNlLWdwcy9zdGFja3RyYWNlLWdwcy5qcyIsInBvbHlmaWxscy5qcyIsInN0YWNrdHJhY2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQy9JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2pvQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDdDRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMWpDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ2phQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnZXJyb3Itc3RhY2stcGFyc2VyJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuRXJyb3JTdGFja1BhcnNlciA9IGZhY3Rvcnkocm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIoU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFAgPSAvKF58QClcXFMrXFw6XFxkKy87XG4gICAgdmFyIENIUk9NRV9JRV9TVEFDS19SRUdFWFAgPSAvXlxccyphdCAuKihcXFMrXFw6XFxkK3xcXChuYXRpdmVcXCkpL207XG4gICAgdmFyIFNBRkFSSV9OQVRJVkVfQ09ERV9SRUdFWFAgPSAvXihldmFsQCk/KFxcW25hdGl2ZSBjb2RlXFxdKT8kLztcblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhbiBFcnJvciBvYmplY3QsIGV4dHJhY3QgdGhlIG1vc3QgaW5mb3JtYXRpb24gZnJvbSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBvZiBTdGFja0ZyYW1lc1xuICAgICAgICAgKi9cbiAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVycm9yLnN0YWNrdHJhY2UgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBlcnJvclsnb3BlcmEjc291cmNlbG9jJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YWNrICYmIGVycm9yLnN0YWNrLm1hdGNoKENIUk9NRV9JRV9TVEFDS19SRUdFWFApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VWOE9ySUUoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRkZPclNhZmFyaShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIGdpdmVuIEVycm9yIG9iamVjdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFNlcGFyYXRlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGZyb20gYSBzdHJpbmcgb2YgdGhlIGZvcm06IChVUkk6TGluZTpDb2x1bW4pXG4gICAgICAgIGV4dHJhY3RMb2NhdGlvbjogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkZXh0cmFjdExvY2F0aW9uKHVybExpa2UpIHtcbiAgICAgICAgICAgIC8vIEZhaWwtZmFzdCBidXQgcmV0dXJuIGxvY2F0aW9ucyBsaWtlIFwiKG5hdGl2ZSlcIlxuICAgICAgICAgICAgaWYgKHVybExpa2UuaW5kZXhPZignOicpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbdXJsTGlrZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByZWdFeHAgPSAvKC4rPykoPzpcXDooXFxkKykpPyg/OlxcOihcXGQrKSk/JC87XG4gICAgICAgICAgICB2YXIgcGFydHMgPSByZWdFeHAuZXhlYyh1cmxMaWtlLnJlcGxhY2UoL1tcXChcXCldL2csICcnKSk7XG4gICAgICAgICAgICByZXR1cm4gW3BhcnRzWzFdLCBwYXJ0c1syXSB8fCB1bmRlZmluZWQsIHBhcnRzWzNdIHx8IHVuZGVmaW5lZF07XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VWOE9ySUU6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlVjhPcklFKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFsaW5lLm1hdGNoKENIUk9NRV9JRV9TVEFDS19SRUdFWFApO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJyhldmFsICcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSBldmFsIGluZm9ybWF0aW9uIHVudGlsIHdlIGltcGxlbWVudCBzdGFja3RyYWNlLmpzL3N0YWNrZnJhbWUjOFxuICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC9ldmFsIGNvZGUvZywgJ2V2YWwnKS5yZXBsYWNlKC8oXFwoZXZhbCBhdCBbXlxcKCldKil8KFxcKVxcLC4qJCkvZywgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgc2FuaXRpemVkTGluZSA9IGxpbmUucmVwbGFjZSgvXlxccysvLCAnJykucmVwbGFjZSgvXFwoZXZhbCBjb2RlL2csICcoJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBjYXB0dXJlIGFuZCBwcmVzZXZlIHRoZSBwYXJlbnRoZXNpemVkIGxvY2F0aW9uIFwiKC9mb28vbXkgYmFyLmpzOjEyOjg3KVwiIGluXG4gICAgICAgICAgICAgICAgLy8gY2FzZSBpdCBoYXMgc3BhY2VzIGluIGl0LCBhcyB0aGUgc3RyaW5nIGlzIHNwbGl0IG9uIFxccysgbGF0ZXIgb25cbiAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24gPSBzYW5pdGl6ZWRMaW5lLm1hdGNoKC8gKFxcKCguKyk6KFxcZCspOihcXGQrKVxcKSQpLyk7XG5cbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIHBhcmVudGhlc2l6ZWQgbG9jYXRpb24gZnJvbSB0aGUgbGluZSwgaWYgaXQgd2FzIG1hdGNoZWRcbiAgICAgICAgICAgICAgICBzYW5pdGl6ZWRMaW5lID0gbG9jYXRpb24gPyBzYW5pdGl6ZWRMaW5lLnJlcGxhY2UobG9jYXRpb25bMF0sICcnKSA6IHNhbml0aXplZExpbmU7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gc2FuaXRpemVkTGluZS5zcGxpdCgvXFxzKy8pLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIC8vIGlmIGEgbG9jYXRpb24gd2FzIG1hdGNoZWQsIHBhc3MgaXQgdG8gZXh0cmFjdExvY2F0aW9uKCkgb3RoZXJ3aXNlIHBvcCB0aGUgbGFzdCB0b2tlblxuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24obG9jYXRpb24gPyBsb2NhdGlvblsxXSA6IHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRva2Vucy5qb2luKCcgJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IFsnZXZhbCcsICc8YW5vbnltb3VzPiddLmluZGV4T2YobG9jYXRpb25QYXJ0c1swXSkgPiAtMSA/IHVuZGVmaW5lZCA6IGxvY2F0aW9uUGFydHNbMF07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VGRk9yU2FmYXJpOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZUZGT3JTYWZhcmkoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhbGluZS5tYXRjaChTQUZBUklfTkFUSVZFX0NPREVfUkVHRVhQKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IGV2YWwgaW5mb3JtYXRpb24gdW50aWwgd2UgaW1wbGVtZW50IHN0YWNrdHJhY2UuanMvc3RhY2tmcmFtZSM4XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignID4gZXZhbCcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvIGxpbmUgKFxcZCspKD86ID4gZXZhbCBsaW5lIFxcZCspKiA+IGV2YWxcXDpcXGQrXFw6XFxkKy9nLCAnOiQxJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignQCcpID09PSAtMSAmJiBsaW5lLmluZGV4T2YoJzonKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIGV2YWwgZnJhbWVzIG9ubHkgaGF2ZSBmdW5jdGlvbiBuYW1lcyBhbmQgbm90aGluZyBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGxpbmVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZVJlZ2V4ID0gLygoLipcIi4rXCJbXkBdKik/W15AXSopKD86QCkvO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IGxpbmUubWF0Y2goZnVuY3Rpb25OYW1lUmVnZXgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gbWF0Y2hlcyAmJiBtYXRjaGVzWzFdID8gbWF0Y2hlc1sxXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbihsaW5lLnJlcGxhY2UoZnVuY3Rpb25OYW1lUmVnZXgsICcnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmEoZSkge1xuICAgICAgICAgICAgaWYgKCFlLnN0YWNrdHJhY2UgfHwgKGUubWVzc2FnZS5pbmRleE9mKCdcXG4nKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlLnNwbGl0KCdcXG4nKS5sZW5ndGggPiBlLnN0YWNrdHJhY2Uuc3BsaXQoJ1xcbicpLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhOShlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWUuc3RhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTAoZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmExMShlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhOTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTkoZSkge1xuICAgICAgICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspL2k7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBlLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMiwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lUkUuZXhlYyhsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lc1tpXVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmExMDogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTEwKGUpIHtcbiAgICAgICAgICAgIHZhciBsaW5lUkUgPSAvTGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKSg/OjogSW4gZnVuY3Rpb24gKFxcUyspKT8kL2k7XG4gICAgICAgICAgICB2YXIgbGluZXMgPSBlLnN0YWNrdHJhY2Uuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbGluZXMubGVuZ3RoOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lUkUuZXhlYyhsaW5lc1tpXSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbWF0Y2hbM10gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVzW2ldXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICAvLyBPcGVyYSAxMC42NSsgRXJyb3Iuc3RhY2sgdmVyeSBzaW1pbGFyIHRvIEZGL1NhZmFyaVxuICAgICAgICBwYXJzZU9wZXJhMTE6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFApICYmICFsaW5lLm1hdGNoKC9eRXJyb3IgY3JlYXRlZCBhdC8pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBsaW5lLnNwbGl0KCdAJyk7XG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbih0b2tlbnMucG9wKCkpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbkNhbGwgPSAodG9rZW5zLnNoaWZ0KCkgfHwgJycpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbkNhbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88YW5vbnltb3VzIGZ1bmN0aW9uKDogKFxcdyspKT8+LywgJyQyJylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXChbXlxcKV0qXFwpL2csICcnKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3NSYXc7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uQ2FsbC5tYXRjaCgvXFwoKFteXFwpXSopXFwpLykpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1JhdyA9IGZ1bmN0aW9uQ2FsbC5yZXBsYWNlKC9eW15cXChdK1xcKChbXlxcKV0qKVxcKSQvLCAnJDEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSAoYXJnc1JhdyA9PT0gdW5kZWZpbmVkIHx8IGFyZ3NSYXcgPT09ICdbYXJndW1lbnRzIG5vdCBhdmFpbGFibGVdJykgP1xuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgOiBhcmdzUmF3LnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG59KSk7XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFja2ZyYW1lJywgW10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tGcmFtZSA9IGZhY3RvcnkoKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uKCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICBmdW5jdGlvbiBfaXNOdW1iZXIobikge1xuICAgICAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQobikpICYmIGlzRmluaXRlKG4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9jYXBpdGFsaXplKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZ2V0dGVyKHApIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbcF07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGJvb2xlYW5Qcm9wcyA9IFsnaXNDb25zdHJ1Y3RvcicsICdpc0V2YWwnLCAnaXNOYXRpdmUnLCAnaXNUb3BsZXZlbCddO1xuICAgIHZhciBudW1lcmljUHJvcHMgPSBbJ2NvbHVtbk51bWJlcicsICdsaW5lTnVtYmVyJ107XG4gICAgdmFyIHN0cmluZ1Byb3BzID0gWydmaWxlTmFtZScsICdmdW5jdGlvbk5hbWUnLCAnc291cmNlJ107XG4gICAgdmFyIGFycmF5UHJvcHMgPSBbJ2FyZ3MnXTtcblxuICAgIHZhciBwcm9wcyA9IGJvb2xlYW5Qcm9wcy5jb25jYXQobnVtZXJpY1Byb3BzLCBzdHJpbmdQcm9wcywgYXJyYXlQcm9wcyk7XG5cbiAgICBmdW5jdGlvbiBTdGFja0ZyYW1lKG9iaikge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wc1tpXSkgJiYgb2JqW3Byb3BzW2ldXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbJ3NldCcgKyBfY2FwaXRhbGl6ZShwcm9wc1tpXSldKG9ialtwcm9wc1tpXV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIFN0YWNrRnJhbWUucHJvdG90eXBlID0ge1xuICAgICAgICBnZXRBcmdzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFyZ3M7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEFyZ3M6IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodikgIT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmdzIG11c3QgYmUgYW4gQXJyYXknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXJncyA9IHY7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0RXZhbE9yaWdpbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmFsT3JpZ2luO1xuICAgICAgICB9LFxuICAgICAgICBzZXRFdmFsT3JpZ2luOiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICBpZiAodiBpbnN0YW5jZW9mIFN0YWNrRnJhbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2YWxPcmlnaW4gPSB2O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2IGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsT3JpZ2luID0gbmV3IFN0YWNrRnJhbWUodik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V2YWwgT3JpZ2luIG11c3QgYmUgYW4gT2JqZWN0IG9yIFN0YWNrRnJhbWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSB0aGlzLmdldEZpbGVOYW1lKCkgfHwgJyc7XG4gICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHRoaXMuZ2V0TGluZU51bWJlcigpIHx8ICcnO1xuICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHRoaXMuZ2V0Q29sdW1uTnVtYmVyKCkgfHwgJyc7XG4gICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gdGhpcy5nZXRGdW5jdGlvbk5hbWUoKSB8fCAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLmdldElzRXZhbCgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW2V2YWxdICgnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJzonICsgY29sdW1uTnVtYmVyICsgJyknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tldmFsXTonICsgbGluZU51bWJlciArICc6JyArIGNvbHVtbk51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb25OYW1lICsgJyAoJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICc6JyArIGNvbHVtbk51bWJlciArICcpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnOicgKyBjb2x1bW5OdW1iZXI7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgU3RhY2tGcmFtZS5mcm9tU3RyaW5nID0gZnVuY3Rpb24gU3RhY2tGcmFtZSQkZnJvbVN0cmluZyhzdHIpIHtcbiAgICAgICAgdmFyIGFyZ3NTdGFydEluZGV4ID0gc3RyLmluZGV4T2YoJygnKTtcbiAgICAgICAgdmFyIGFyZ3NFbmRJbmRleCA9IHN0ci5sYXN0SW5kZXhPZignKScpO1xuXG4gICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBzdHIuc3Vic3RyaW5nKDAsIGFyZ3NTdGFydEluZGV4KTtcbiAgICAgICAgdmFyIGFyZ3MgPSBzdHIuc3Vic3RyaW5nKGFyZ3NTdGFydEluZGV4ICsgMSwgYXJnc0VuZEluZGV4KS5zcGxpdCgnLCcpO1xuICAgICAgICB2YXIgbG9jYXRpb25TdHJpbmcgPSBzdHIuc3Vic3RyaW5nKGFyZ3NFbmRJbmRleCArIDEpO1xuXG4gICAgICAgIGlmIChsb2NhdGlvblN0cmluZy5pbmRleE9mKCdAJykgPT09IDApIHtcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IC9AKC4rPykoPzo6KFxcZCspKT8oPzo6KFxcZCspKT8kLy5leGVjKGxvY2F0aW9uU3RyaW5nLCAnJyk7XG4gICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBwYXJ0c1sxXTtcbiAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gcGFydHNbMl07XG4gICAgICAgICAgICB2YXIgY29sdW1uTnVtYmVyID0gcGFydHNbM107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICBhcmdzOiBhcmdzIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcbiAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBjb2x1bW5OdW1iZXIgfHwgdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvb2xlYW5Qcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKGJvb2xlYW5Qcm9wc1tpXSldID0gX2dldHRlcihib29sZWFuUHJvcHNbaV0pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKGJvb2xlYW5Qcm9wc1tpXSldID0gKGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgdGhpc1twXSA9IEJvb2xlYW4odik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShib29sZWFuUHJvcHNbaV0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtZXJpY1Byb3BzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUobnVtZXJpY1Byb3BzW2pdKV0gPSBfZ2V0dGVyKG51bWVyaWNQcm9wc1tqXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUobnVtZXJpY1Byb3BzW2pdKV0gPSAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc051bWJlcih2KSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHAgKyAnIG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpc1twXSA9IE51bWJlcih2KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKG51bWVyaWNQcm9wc1tqXSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBzdHJpbmdQcm9wcy5sZW5ndGg7IGsrKykge1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKHN0cmluZ1Byb3BzW2tdKV0gPSBfZ2V0dGVyKHN0cmluZ1Byb3BzW2tdKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShzdHJpbmdQcm9wc1trXSldID0gKGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgdGhpc1twXSA9IFN0cmluZyh2KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKHN0cmluZ1Byb3BzW2tdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RhY2tGcmFtZTtcbn0pKTtcbiIsIi8qIVxuICogQG92ZXJ2aWV3IGVzNi1wcm9taXNlIC0gYSB0aW55IGltcGxlbWVudGF0aW9uIG9mIFByb21pc2VzL0ErLlxuICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIDIwMTQgWWVodWRhIEthdHosIFRvbSBEYWxlLCBTdGVmYW4gUGVubmVyIGFuZCBjb250cmlidXRvcnMgKENvbnZlcnNpb24gdG8gRVM2IEFQSSBieSBKYWtlIEFyY2hpYmFsZClcbiAqIEBsaWNlbnNlICAgTGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2VcbiAqICAgICAgICAgICAgU2VlIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zdGVmYW5wZW5uZXIvZXM2LXByb21pc2UvbWFzdGVyL0xJQ0VOU0VcbiAqIEB2ZXJzaW9uICAgMy4zLjFcbiAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIChnbG9iYWwuRVM2UHJvbWlzZSA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gb2JqZWN0T3JGdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeCAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxudmFyIF9pc0FycmF5ID0gdW5kZWZpbmVkO1xuaWYgKCFBcnJheS5pc0FycmF5KSB7XG4gIF9pc0FycmF5ID0gZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xufSBlbHNlIHtcbiAgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xufVxuXG52YXIgaXNBcnJheSA9IF9pc0FycmF5O1xuXG52YXIgbGVuID0gMDtcbnZhciB2ZXJ0eE5leHQgPSB1bmRlZmluZWQ7XG52YXIgY3VzdG9tU2NoZWR1bGVyRm4gPSB1bmRlZmluZWQ7XG5cbnZhciBhc2FwID0gZnVuY3Rpb24gYXNhcChjYWxsYmFjaywgYXJnKSB7XG4gIHF1ZXVlW2xlbl0gPSBjYWxsYmFjaztcbiAgcXVldWVbbGVuICsgMV0gPSBhcmc7XG4gIGxlbiArPSAyO1xuICBpZiAobGVuID09PSAyKSB7XG4gICAgLy8gSWYgbGVuIGlzIDIsIHRoYXQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHNjaGVkdWxlIGFuIGFzeW5jIGZsdXNoLlxuICAgIC8vIElmIGFkZGl0aW9uYWwgY2FsbGJhY2tzIGFyZSBxdWV1ZWQgYmVmb3JlIHRoZSBxdWV1ZSBpcyBmbHVzaGVkLCB0aGV5XG4gICAgLy8gd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhpcyBmbHVzaCB0aGF0IHdlIGFyZSBzY2hlZHVsaW5nLlxuICAgIGlmIChjdXN0b21TY2hlZHVsZXJGbikge1xuICAgICAgY3VzdG9tU2NoZWR1bGVyRm4oZmx1c2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2hlZHVsZUZsdXNoKCk7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBzZXRTY2hlZHVsZXIoc2NoZWR1bGVGbikge1xuICBjdXN0b21TY2hlZHVsZXJGbiA9IHNjaGVkdWxlRm47XG59XG5cbmZ1bmN0aW9uIHNldEFzYXAoYXNhcEZuKSB7XG4gIGFzYXAgPSBhc2FwRm47XG59XG5cbnZhciBicm93c2VyV2luZG93ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB1bmRlZmluZWQ7XG52YXIgYnJvd3Nlckdsb2JhbCA9IGJyb3dzZXJXaW5kb3cgfHwge307XG52YXIgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIgPSBicm93c2VyR2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgYnJvd3Nlckdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGlzTm9kZSA9IHR5cGVvZiBzZWxmID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgKHt9KS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXSc7XG5cbi8vIHRlc3QgZm9yIHdlYiB3b3JrZXIgYnV0IG5vdCBpbiBJRTEwXG52YXIgaXNXb3JrZXIgPSB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBub2RlXG5mdW5jdGlvbiB1c2VOZXh0VGljaygpIHtcbiAgLy8gbm9kZSB2ZXJzaW9uIDAuMTAueCBkaXNwbGF5cyBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2hlbiBuZXh0VGljayBpcyB1c2VkIHJlY3Vyc2l2ZWx5XG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY3Vqb2pzL3doZW4vaXNzdWVzLzQxMCBmb3IgZGV0YWlsc1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgfTtcbn1cblxuLy8gdmVydHhcbmZ1bmN0aW9uIHVzZVZlcnR4VGltZXIoKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmVydHhOZXh0KGZsdXNoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcigpIHtcbiAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpO1xuICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBub2RlLmRhdGEgPSBpdGVyYXRpb25zID0gKytpdGVyYXRpb25zICUgMjtcbiAgfTtcbn1cblxuLy8gd2ViIHdvcmtlclxuZnVuY3Rpb24gdXNlTWVzc2FnZUNoYW5uZWwoKSB7XG4gIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZmx1c2g7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVNldFRpbWVvdXQoKSB7XG4gIC8vIFN0b3JlIHNldFRpbWVvdXQgcmVmZXJlbmNlIHNvIGVzNi1wcm9taXNlIHdpbGwgYmUgdW5hZmZlY3RlZCBieVxuICAvLyBvdGhlciBjb2RlIG1vZGlmeWluZyBzZXRUaW1lb3V0IChsaWtlIHNpbm9uLnVzZUZha2VUaW1lcnMoKSlcbiAgdmFyIGdsb2JhbFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnbG9iYWxTZXRUaW1lb3V0KGZsdXNoLCAxKTtcbiAgfTtcbn1cblxudmFyIHF1ZXVlID0gbmV3IEFycmF5KDEwMDApO1xuZnVuY3Rpb24gZmx1c2goKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICB2YXIgY2FsbGJhY2sgPSBxdWV1ZVtpXTtcbiAgICB2YXIgYXJnID0gcXVldWVbaSArIDFdO1xuXG4gICAgY2FsbGJhY2soYXJnKTtcblxuICAgIHF1ZXVlW2ldID0gdW5kZWZpbmVkO1xuICAgIHF1ZXVlW2kgKyAxXSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxlbiA9IDA7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRWZXJ0eCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgciA9IHJlcXVpcmU7XG4gICAgdmFyIHZlcnR4ID0gcigndmVydHgnKTtcbiAgICB2ZXJ0eE5leHQgPSB2ZXJ0eC5ydW5Pbkxvb3AgfHwgdmVydHgucnVuT25Db250ZXh0O1xuICAgIHJldHVybiB1c2VWZXJ0eFRpbWVyKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdXNlU2V0VGltZW91dCgpO1xuICB9XG59XG5cbnZhciBzY2hlZHVsZUZsdXNoID0gdW5kZWZpbmVkO1xuLy8gRGVjaWRlIHdoYXQgYXN5bmMgbWV0aG9kIHRvIHVzZSB0byB0cmlnZ2VyaW5nIHByb2Nlc3Npbmcgb2YgcXVldWVkIGNhbGxiYWNrczpcbmlmIChpc05vZGUpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZU5leHRUaWNrKCk7XG59IGVsc2UgaWYgKEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNdXRhdGlvbk9ic2VydmVyKCk7XG59IGVsc2UgaWYgKGlzV29ya2VyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNZXNzYWdlQ2hhbm5lbCgpO1xufSBlbHNlIGlmIChicm93c2VyV2luZG93ID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IGF0dGVtcHRWZXJ0eCgpO1xufSBlbHNlIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZVNldFRpbWVvdXQoKTtcbn1cblxuZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX2FyZ3VtZW50cyA9IGFyZ3VtZW50cztcblxuICB2YXIgcGFyZW50ID0gdGhpcztcblxuICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcihub29wKTtcblxuICBpZiAoY2hpbGRbUFJPTUlTRV9JRF0gPT09IHVuZGVmaW5lZCkge1xuICAgIG1ha2VQcm9taXNlKGNoaWxkKTtcbiAgfVxuXG4gIHZhciBfc3RhdGUgPSBwYXJlbnQuX3N0YXRlO1xuXG4gIGlmIChfc3RhdGUpIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNhbGxiYWNrID0gX2FyZ3VtZW50c1tfc3RhdGUgLSAxXTtcbiAgICAgIGFzYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gaW52b2tlQ2FsbGJhY2soX3N0YXRlLCBjaGlsZCwgY2FsbGJhY2ssIHBhcmVudC5fcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pKCk7XG4gIH0gZWxzZSB7XG4gICAgc3Vic2NyaWJlKHBhcmVudCwgY2hpbGQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZDtcbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlc29sdmVgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgcmVzb2x2ZWQgd2l0aCB0aGVcbiAgcGFzc2VkIGB2YWx1ZWAuIEl0IGlzIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICByZXNvbHZlKDEpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGFib3ZlLCB5b3VyIGNvZGUgbm93IHNpbXBseSBiZWNvbWVzIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgxKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIHJlc29sdmVcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gdmFsdWUgdmFsdWUgdGhhdCB0aGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGhcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCB3aWxsIGJlY29tZSBmdWxmaWxsZWQgd2l0aCB0aGUgZ2l2ZW5cbiAgYHZhbHVlYFxuKi9cbmZ1bmN0aW9uIHJlc29sdmUob2JqZWN0KSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QuY29uc3RydWN0b3IgPT09IENvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVzb2x2ZShwcm9taXNlLCBvYmplY3QpO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIFBST01JU0VfSUQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpO1xuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIFBFTkRJTkcgPSB2b2lkIDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG5cbnZhciBHRVRfVEhFTl9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiBzZWxmRnVsZmlsbG1lbnQoKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZlwiKTtcbn1cblxuZnVuY3Rpb24gY2Fubm90UmV0dXJuT3duKCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcignQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLicpO1xufVxuXG5mdW5jdGlvbiBnZXRUaGVuKHByb21pc2UpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcHJvbWlzZS50aGVuO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIEdFVF9USEVOX0VSUk9SLmVycm9yID0gZXJyb3I7XG4gICAgcmV0dXJuIEdFVF9USEVOX0VSUk9SO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVRoZW4odGhlbiwgdmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcikge1xuICB0cnkge1xuICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSwgdGhlbikge1xuICBhc2FwKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgdmFyIHNlYWxlZCA9IGZhbHNlO1xuICAgIHZhciBlcnJvciA9IHRyeVRoZW4odGhlbiwgdGhlbmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkge1xuICAgICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoc2VhbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlYWxlZCA9IHRydWU7XG5cbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9LCAnU2V0dGxlOiAnICsgKHByb21pc2UuX2xhYmVsIHx8ICcgdW5rbm93biBwcm9taXNlJykpO1xuXG4gICAgaWYgKCFzZWFsZWQgJiYgZXJyb3IpIHtcbiAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9XG4gIH0sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSkge1xuICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBGVUxGSUxMRUQpIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2UgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZSh0aGVuYWJsZSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUsIHRoZW4kJCkge1xuICBpZiAobWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3RvciA9PT0gcHJvbWlzZS5jb25zdHJ1Y3RvciAmJiB0aGVuJCQgPT09IHRoZW4gJiYgbWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3Rvci5yZXNvbHZlID09PSByZXNvbHZlKSB7XG4gICAgaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRoZW4kJCA9PT0gR0VUX1RIRU5fRVJST1IpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgR0VUX1RIRU5fRVJST1IuZXJyb3IpO1xuICAgIH0gZWxzZSBpZiAodGhlbiQkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoZW4kJCkpIHtcbiAgICAgIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuJCQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHNlbGZGdWxmaWxsbWVudCgpKTtcbiAgfSBlbHNlIGlmIChvYmplY3RPckZ1bmN0aW9uKHZhbHVlKSkge1xuICAgIGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUsIGdldFRoZW4odmFsdWUpKTtcbiAgfSBlbHNlIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdWJsaXNoUmVqZWN0aW9uKHByb21pc2UpIHtcbiAgaWYgKHByb21pc2UuX29uZXJyb3IpIHtcbiAgICBwcm9taXNlLl9vbmVycm9yKHByb21pc2UuX3Jlc3VsdCk7XG4gIH1cblxuICBwdWJsaXNoKHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHByb21pc2UsIHZhbHVlKSB7XG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHByb21pc2UuX3Jlc3VsdCA9IHZhbHVlO1xuICBwcm9taXNlLl9zdGF0ZSA9IEZVTEZJTExFRDtcblxuICBpZiAocHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgYXNhcChwdWJsaXNoLCBwcm9taXNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVqZWN0KHByb21pc2UsIHJlYXNvbikge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJvbWlzZS5fc3RhdGUgPSBSRUpFQ1RFRDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gcmVhc29uO1xuXG4gIGFzYXAocHVibGlzaFJlamVjdGlvbiwgcHJvbWlzZSk7XG59XG5cbmZ1bmN0aW9uIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX3N1YnNjcmliZXJzID0gcGFyZW50Ll9zdWJzY3JpYmVycztcbiAgdmFyIGxlbmd0aCA9IF9zdWJzY3JpYmVycy5sZW5ndGg7XG5cbiAgcGFyZW50Ll9vbmVycm9yID0gbnVsbDtcblxuICBfc3Vic2NyaWJlcnNbbGVuZ3RoXSA9IGNoaWxkO1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgRlVMRklMTEVEXSA9IG9uRnVsZmlsbG1lbnQ7XG4gIF9zdWJzY3JpYmVyc1tsZW5ndGggKyBSRUpFQ1RFRF0gPSBvblJlamVjdGlvbjtcblxuICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHtcbiAgICBhc2FwKHB1Ymxpc2gsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaChwcm9taXNlKSB7XG4gIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJzO1xuICB2YXIgc2V0dGxlZCA9IHByb21pc2UuX3N0YXRlO1xuXG4gIGlmIChzdWJzY3JpYmVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY2hpbGQgPSB1bmRlZmluZWQsXG4gICAgICBjYWxsYmFjayA9IHVuZGVmaW5lZCxcbiAgICAgIGRldGFpbCA9IHByb21pc2UuX3Jlc3VsdDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgY2hpbGQgPSBzdWJzY3JpYmVyc1tpXTtcbiAgICBjYWxsYmFjayA9IHN1YnNjcmliZXJzW2kgKyBzZXR0bGVkXTtcblxuICAgIGlmIChjaGlsZCkge1xuICAgICAgaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgY2hpbGQsIGNhbGxiYWNrLCBkZXRhaWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhkZXRhaWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG59XG5cbmZ1bmN0aW9uIEVycm9yT2JqZWN0KCkge1xuICB0aGlzLmVycm9yID0gbnVsbDtcbn1cblxudmFyIFRSWV9DQVRDSF9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGRldGFpbCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBUUllfQ0FUQ0hfRVJST1IuZXJyb3IgPSBlO1xuICAgIHJldHVybiBUUllfQ0FUQ0hfRVJST1I7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgcHJvbWlzZSwgY2FsbGJhY2ssIGRldGFpbCkge1xuICB2YXIgaGFzQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKGNhbGxiYWNrKSxcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkLFxuICAgICAgZXJyb3IgPSB1bmRlZmluZWQsXG4gICAgICBzdWNjZWVkZWQgPSB1bmRlZmluZWQsXG4gICAgICBmYWlsZWQgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKGhhc0NhbGxiYWNrKSB7XG4gICAgdmFsdWUgPSB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gVFJZX0NBVENIX0VSUk9SKSB7XG4gICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgZXJyb3IgPSB2YWx1ZS5lcnJvcjtcbiAgICAgIHZhbHVlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgY2Fubm90UmV0dXJuT3duKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGRldGFpbDtcbiAgICBzdWNjZWVkZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgLy8gbm9vcFxuICB9IGVsc2UgaWYgKGhhc0NhbGxiYWNrICYmIHN1Y2NlZWRlZCkge1xuICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoZmFpbGVkKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9IGVsc2UgaWYgKHNldHRsZWQgPT09IEZVTEZJTExFRCkge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplUHJvbWlzZShwcm9taXNlLCByZXNvbHZlcikge1xuICB0cnkge1xuICAgIHJlc29sdmVyKGZ1bmN0aW9uIHJlc29sdmVQcm9taXNlKHZhbHVlKSB7XG4gICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gcmVqZWN0UHJvbWlzZShyZWFzb24pIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIF9yZWplY3QocHJvbWlzZSwgZSk7XG4gIH1cbn1cblxudmFyIGlkID0gMDtcbmZ1bmN0aW9uIG5leHRJZCgpIHtcbiAgcmV0dXJuIGlkKys7XG59XG5cbmZ1bmN0aW9uIG1ha2VQcm9taXNlKHByb21pc2UpIHtcbiAgcHJvbWlzZVtQUk9NSVNFX0lEXSA9IGlkKys7XG4gIHByb21pc2UuX3N0YXRlID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9yZXN1bHQgPSB1bmRlZmluZWQ7XG4gIHByb21pc2UuX3N1YnNjcmliZXJzID0gW107XG59XG5cbmZ1bmN0aW9uIEVudW1lcmF0b3IoQ29uc3RydWN0b3IsIGlucHV0KSB7XG4gIHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgdGhpcy5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuXG4gIGlmICghdGhpcy5wcm9taXNlW1BST01JU0VfSURdKSB7XG4gICAgbWFrZVByb21pc2UodGhpcy5wcm9taXNlKTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5sZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgdGhpcy5fcmVtYWluaW5nID0gaW5wdXQubGVuZ3RoO1xuXG4gICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGggfHwgMDtcbiAgICAgIHRoaXMuX2VudW1lcmF0ZSgpO1xuICAgICAgaWYgKHRoaXMuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICBmdWxmaWxsKHRoaXMucHJvbWlzZSwgdGhpcy5fcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgX3JlamVjdCh0aGlzLnByb21pc2UsIHZhbGlkYXRpb25FcnJvcigpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0aW9uRXJyb3IoKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0FycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheScpO1xufTtcblxuRW51bWVyYXRvci5wcm90b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICB2YXIgX2lucHV0ID0gdGhpcy5faW5wdXQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IHRoaXMuX3N0YXRlID09PSBQRU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHRoaXMuX2VhY2hFbnRyeShfaW5wdXRbaV0sIGkpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVudHJ5ID0gZnVuY3Rpb24gKGVudHJ5LCBpKSB7XG4gIHZhciBjID0gdGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcjtcbiAgdmFyIHJlc29sdmUkJCA9IGMucmVzb2x2ZTtcblxuICBpZiAocmVzb2x2ZSQkID09PSByZXNvbHZlKSB7XG4gICAgdmFyIF90aGVuID0gZ2V0VGhlbihlbnRyeSk7XG5cbiAgICBpZiAoX3RoZW4gPT09IHRoZW4gJiYgZW50cnkuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgICB0aGlzLl9zZXR0bGVkQXQoZW50cnkuX3N0YXRlLCBpLCBlbnRyeS5fcmVzdWx0KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBfdGhlbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fcmVtYWluaW5nLS07XG4gICAgICB0aGlzLl9yZXN1bHRbaV0gPSBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGMgPT09IFByb21pc2UpIHtcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IGMobm9vcCk7XG4gICAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIGVudHJ5LCBfdGhlbik7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQocHJvbWlzZSwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgYyhmdW5jdGlvbiAocmVzb2x2ZSQkKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlJCQoZW50cnkpO1xuICAgICAgfSksIGkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl93aWxsU2V0dGxlQXQocmVzb2x2ZSQkKGVudHJ5KSwgaSk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl9zZXR0bGVkQXQgPSBmdW5jdGlvbiAoc3RhdGUsIGksIHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gUEVORElORykge1xuICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuXG4gICAgaWYgKHN0YXRlID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jlc3VsdFtpXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbiAocHJvbWlzZSwgaSkge1xuICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgc3Vic2NyaWJlKHByb21pc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVudW1lcmF0b3IuX3NldHRsZWRBdChGVUxGSUxMRUQsIGksIHZhbHVlKTtcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoUkVKRUNURUQsIGksIHJlYXNvbik7XG4gIH0pO1xufTtcblxuLyoqXG4gIGBQcm9taXNlLmFsbGAgYWNjZXB0cyBhbiBhcnJheSBvZiBwcm9taXNlcywgYW5kIHJldHVybnMgYSBuZXcgcHJvbWlzZSB3aGljaFxuICBpcyBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSBvZiBmdWxmaWxsbWVudCB2YWx1ZXMgZm9yIHRoZSBwYXNzZWQgcHJvbWlzZXMsIG9yXG4gIHJlamVjdGVkIHdpdGggdGhlIHJlYXNvbiBvZiB0aGUgZmlyc3QgcGFzc2VkIHByb21pc2UgdG8gYmUgcmVqZWN0ZWQuIEl0IGNhc3RzIGFsbFxuICBlbGVtZW50cyBvZiB0aGUgcGFzc2VkIGl0ZXJhYmxlIHRvIHByb21pc2VzIGFzIGl0IHJ1bnMgdGhpcyBhbGdvcml0aG0uXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlc29sdmUoMik7XG4gIGxldCBwcm9taXNlMyA9IHJlc29sdmUoMyk7XG4gIGxldCBwcm9taXNlcyA9IFsgcHJvbWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdO1xuXG4gIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGFycmF5KXtcbiAgICAvLyBUaGUgYXJyYXkgaGVyZSB3b3VsZCBiZSBbIDEsIDIsIDMgXTtcbiAgfSk7XG4gIGBgYFxuXG4gIElmIGFueSBvZiB0aGUgYHByb21pc2VzYCBnaXZlbiB0byBgYWxsYCBhcmUgcmVqZWN0ZWQsIHRoZSBmaXJzdCBwcm9taXNlXG4gIHRoYXQgaXMgcmVqZWN0ZWQgd2lsbCBiZSBnaXZlbiBhcyBhbiBhcmd1bWVudCB0byB0aGUgcmV0dXJuZWQgcHJvbWlzZXMnc1xuICByZWplY3Rpb24gaGFuZGxlci4gRm9yIGV4YW1wbGU6XG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlamVjdChuZXcgRXJyb3IoXCIyXCIpKTtcbiAgbGV0IHByb21pc2UzID0gcmVqZWN0KG5ldyBFcnJvcihcIjNcIikpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gQ29kZSBoZXJlIG5ldmVyIHJ1bnMgYmVjYXVzZSB0aGVyZSBhcmUgcmVqZWN0ZWQgcHJvbWlzZXMhXG4gIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgLy8gZXJyb3IubWVzc2FnZSA9PT0gXCIyXCJcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgYWxsXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBcnJheX0gZW50cmllcyBhcnJheSBvZiBwcm9taXNlc1xuICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsIGBwcm9taXNlc2AgaGF2ZSBiZWVuXG4gIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQgaWYgYW55IG9mIHRoZW0gYmVjb21lIHJlamVjdGVkLlxuICBAc3RhdGljXG4qL1xuZnVuY3Rpb24gYWxsKGVudHJpZXMpIHtcbiAgcmV0dXJuIG5ldyBFbnVtZXJhdG9yKHRoaXMsIGVudHJpZXMpLnByb21pc2U7XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yYWNlYCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2ggaXMgc2V0dGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlXG4gIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIHNldHRsZS5cblxuICBFeGFtcGxlOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMicpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIHJlc3VsdCA9PT0gJ3Byb21pc2UgMicgYmVjYXVzZSBpdCB3YXMgcmVzb2x2ZWQgYmVmb3JlIHByb21pc2UxXG4gICAgLy8gd2FzIHJlc29sdmVkLlxuICB9KTtcbiAgYGBgXG5cbiAgYFByb21pc2UucmFjZWAgaXMgZGV0ZXJtaW5pc3RpYyBpbiB0aGF0IG9ubHkgdGhlIHN0YXRlIG9mIHRoZSBmaXJzdFxuICBzZXR0bGVkIHByb21pc2UgbWF0dGVycy4gRm9yIGV4YW1wbGUsIGV2ZW4gaWYgb3RoZXIgcHJvbWlzZXMgZ2l2ZW4gdG8gdGhlXG4gIGBwcm9taXNlc2AgYXJyYXkgYXJndW1lbnQgYXJlIHJlc29sdmVkLCBidXQgdGhlIGZpcnN0IHNldHRsZWQgcHJvbWlzZSBoYXNcbiAgYmVjb21lIHJlamVjdGVkIGJlZm9yZSB0aGUgb3RoZXIgcHJvbWlzZXMgYmVjYW1lIGZ1bGZpbGxlZCwgdGhlIHJldHVybmVkXG4gIHByb21pc2Ugd2lsbCBiZWNvbWUgcmVqZWN0ZWQ6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMScpO1xuICAgIH0sIDIwMCk7XG4gIH0pO1xuXG4gIGxldCBwcm9taXNlMiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcigncHJvbWlzZSAyJykpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgcHJvbWlzZSAyIGJlY2FtZSByZWplY3RlZCBiZWZvcmVcbiAgICAvLyBwcm9taXNlIDEgYmVjYW1lIGZ1bGZpbGxlZFxuICB9KTtcbiAgYGBgXG5cbiAgQW4gZXhhbXBsZSByZWFsLXdvcmxkIHVzZSBjYXNlIGlzIGltcGxlbWVudGluZyB0aW1lb3V0czpcblxuICBgYGBqYXZhc2NyaXB0XG4gIFByb21pc2UucmFjZShbYWpheCgnZm9vLmpzb24nKSwgdGltZW91dCg1MDAwKV0pXG4gIGBgYFxuXG4gIEBtZXRob2QgcmFjZVxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IHByb21pc2VzIGFycmF5IG9mIHByb21pc2VzIHRvIG9ic2VydmVcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2Ugd2hpY2ggc2V0dGxlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGZpcnN0IHBhc3NlZFxuICBwcm9taXNlIHRvIHNldHRsZS5cbiovXG5mdW5jdGlvbiByYWNlKGVudHJpZXMpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuICBpZiAoIWlzQXJyYXkoZW50cmllcykpIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChfLCByZWplY3QpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLicpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBsZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgQ29uc3RydWN0b3IucmVzb2x2ZShlbnRyaWVzW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlamVjdGAgcmV0dXJucyBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgcGFzc2VkIGByZWFzb25gLlxuICBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgcmVqZWN0KG5ldyBFcnJvcignV0hPT1BTJykpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCByZWplY3RcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gcmVhc29uIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCB3aXRoLlxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSByZWplY3RlZCB3aXRoIHRoZSBnaXZlbiBgcmVhc29uYC5cbiovXG5mdW5jdGlvbiByZWplY3QocmVhc29uKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBuZWVkc1Jlc29sdmVyKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yJyk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzTmV3KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xufVxuXG4vKipcbiAgUHJvbWlzZSBvYmplY3RzIHJlcHJlc2VudCB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFRoZVxuICBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaFxuICByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb25cbiAgd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG5cbiAgVGVybWlub2xvZ3lcbiAgLS0tLS0tLS0tLS1cblxuICAtIGBwcm9taXNlYCBpcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24gd2l0aCBhIGB0aGVuYCBtZXRob2Qgd2hvc2UgYmVoYXZpb3IgY29uZm9ybXMgdG8gdGhpcyBzcGVjaWZpY2F0aW9uLlxuICAtIGB0aGVuYWJsZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBhIGB0aGVuYCBtZXRob2QuXG4gIC0gYHZhbHVlYCBpcyBhbnkgbGVnYWwgSmF2YVNjcmlwdCB2YWx1ZSAoaW5jbHVkaW5nIHVuZGVmaW5lZCwgYSB0aGVuYWJsZSwgb3IgYSBwcm9taXNlKS5cbiAgLSBgZXhjZXB0aW9uYCBpcyBhIHZhbHVlIHRoYXQgaXMgdGhyb3duIHVzaW5nIHRoZSB0aHJvdyBzdGF0ZW1lbnQuXG4gIC0gYHJlYXNvbmAgaXMgYSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aHkgYSBwcm9taXNlIHdhcyByZWplY3RlZC5cbiAgLSBgc2V0dGxlZGAgdGhlIGZpbmFsIHJlc3Rpbmcgc3RhdGUgb2YgYSBwcm9taXNlLCBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG5cbiAgQSBwcm9taXNlIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOiBwZW5kaW5nLCBmdWxmaWxsZWQsIG9yIHJlamVjdGVkLlxuXG4gIFByb21pc2VzIHRoYXQgYXJlIGZ1bGZpbGxlZCBoYXZlIGEgZnVsZmlsbG1lbnQgdmFsdWUgYW5kIGFyZSBpbiB0aGUgZnVsZmlsbGVkXG4gIHN0YXRlLiAgUHJvbWlzZXMgdGhhdCBhcmUgcmVqZWN0ZWQgaGF2ZSBhIHJlamVjdGlvbiByZWFzb24gYW5kIGFyZSBpbiB0aGVcbiAgcmVqZWN0ZWQgc3RhdGUuICBBIGZ1bGZpbGxtZW50IHZhbHVlIGlzIG5ldmVyIGEgdGhlbmFibGUuXG5cbiAgUHJvbWlzZXMgY2FuIGFsc28gYmUgc2FpZCB0byAqcmVzb2x2ZSogYSB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgYWxzbyBhXG4gIHByb21pc2UsIHRoZW4gdGhlIG9yaWdpbmFsIHByb21pc2UncyBzZXR0bGVkIHN0YXRlIHdpbGwgbWF0Y2ggdGhlIHZhbHVlJ3NcbiAgc2V0dGxlZCBzdGF0ZS4gIFNvIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyB3aWxsXG4gIGl0c2VsZiByZWplY3QsIGFuZCBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpbGxcbiAgaXRzZWxmIGZ1bGZpbGwuXG5cblxuICBCYXNpYyBVc2FnZTpcbiAgLS0tLS0tLS0tLS0tXG5cbiAgYGBganNcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAvLyBvbiBzdWNjZXNzXG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG5cbiAgICAvLyBvbiBmYWlsdXJlXG4gICAgcmVqZWN0KHJlYXNvbik7XG4gIH0pO1xuXG4gIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgQWR2YW5jZWQgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLS0tLVxuXG4gIFByb21pc2VzIHNoaW5lIHdoZW4gYWJzdHJhY3RpbmcgYXdheSBhc3luY2hyb25vdXMgaW50ZXJhY3Rpb25zIHN1Y2ggYXNcbiAgYFhNTEh0dHBSZXF1ZXN0YHMuXG5cbiAgYGBganNcbiAgZnVuY3Rpb24gZ2V0SlNPTih1cmwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICAgIGxldCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7XG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHhoci5zZW5kKCk7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IHRoaXMuRE9ORSkge1xuICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdnZXRKU09OOiBgJyArIHVybCArICdgIGZhaWxlZCB3aXRoIHN0YXR1czogWycgKyB0aGlzLnN0YXR1cyArICddJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEpTT04oJy9wb3N0cy5qc29uJykudGhlbihmdW5jdGlvbihqc29uKSB7XG4gICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgLy8gb24gcmVqZWN0aW9uXG4gIH0pO1xuICBgYGBcblxuICBVbmxpa2UgY2FsbGJhY2tzLCBwcm9taXNlcyBhcmUgZ3JlYXQgY29tcG9zYWJsZSBwcmltaXRpdmVzLlxuXG4gIGBgYGpzXG4gIFByb21pc2UuYWxsKFtcbiAgICBnZXRKU09OKCcvcG9zdHMnKSxcbiAgICBnZXRKU09OKCcvY29tbWVudHMnKVxuICBdKS50aGVuKGZ1bmN0aW9uKHZhbHVlcyl7XG4gICAgdmFsdWVzWzBdIC8vID0+IHBvc3RzSlNPTlxuICAgIHZhbHVlc1sxXSAvLyA9PiBjb21tZW50c0pTT05cblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH0pO1xuICBgYGBcblxuICBAY2xhc3MgUHJvbWlzZVxuICBAcGFyYW0ge2Z1bmN0aW9ufSByZXNvbHZlclxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEBjb25zdHJ1Y3RvclxuKi9cbmZ1bmN0aW9uIFByb21pc2UocmVzb2x2ZXIpIHtcbiAgdGhpc1tQUk9NSVNFX0lEXSA9IG5leHRJZCgpO1xuICB0aGlzLl9yZXN1bHQgPSB0aGlzLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fc3Vic2NyaWJlcnMgPSBbXTtcblxuICBpZiAobm9vcCAhPT0gcmVzb2x2ZXIpIHtcbiAgICB0eXBlb2YgcmVzb2x2ZXIgIT09ICdmdW5jdGlvbicgJiYgbmVlZHNSZXNvbHZlcigpO1xuICAgIHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlID8gaW5pdGlhbGl6ZVByb21pc2UodGhpcywgcmVzb2x2ZXIpIDogbmVlZHNOZXcoKTtcbiAgfVxufVxuXG5Qcm9taXNlLmFsbCA9IGFsbDtcblByb21pc2UucmFjZSA9IHJhY2U7XG5Qcm9taXNlLnJlc29sdmUgPSByZXNvbHZlO1xuUHJvbWlzZS5yZWplY3QgPSByZWplY3Q7XG5Qcm9taXNlLl9zZXRTY2hlZHVsZXIgPSBzZXRTY2hlZHVsZXI7XG5Qcm9taXNlLl9zZXRBc2FwID0gc2V0QXNhcDtcblByb21pc2UuX2FzYXAgPSBhc2FwO1xuXG5Qcm9taXNlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFByb21pc2UsXG5cbiAgLyoqXG4gICAgVGhlIHByaW1hcnkgd2F5IG9mIGludGVyYWN0aW5nIHdpdGggYSBwcm9taXNlIGlzIHRocm91Z2ggaXRzIGB0aGVuYCBtZXRob2QsXG4gICAgd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGVcbiAgICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uKHVzZXIpe1xuICAgICAgLy8gdXNlciBpcyBhdmFpbGFibGVcbiAgICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gdXNlciBpcyB1bmF2YWlsYWJsZSwgYW5kIHlvdSBhcmUgZ2l2ZW4gdGhlIHJlYXNvbiB3aHlcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQ2hhaW5pbmdcbiAgICAtLS0tLS0tLVxuICBcbiAgICBUaGUgcmV0dXJuIHZhbHVlIG9mIGB0aGVuYCBpcyBpdHNlbGYgYSBwcm9taXNlLiAgVGhpcyBzZWNvbmQsICdkb3duc3RyZWFtJ1xuICAgIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmaXJzdCBwcm9taXNlJ3MgZnVsZmlsbG1lbnRcbiAgICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiB1c2VyLm5hbWU7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuICdkZWZhdWx0IG5hbWUnO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHVzZXJOYW1lKSB7XG4gICAgICAvLyBJZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHVzZXJOYW1lYCB3aWxsIGJlIHRoZSB1c2VyJ3MgbmFtZSwgb3RoZXJ3aXNlIGl0XG4gICAgICAvLyB3aWxsIGJlIGAnZGVmYXVsdCBuYW1lJ2BcbiAgICB9KTtcbiAgXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jyk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdyZSB1bmhhcHB5Jyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAvLyBpZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHJlYXNvbmAgd2lsbCBiZSAnRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknLlxuICAgICAgLy8gSWYgYGZpbmRVc2VyYCByZWplY3RlZCwgYHJlYXNvbmAgd2lsbCBiZSAnYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScuXG4gICAgfSk7XG4gICAgYGBgXG4gICAgSWYgdGhlIGRvd25zdHJlYW0gcHJvbWlzZSBkb2VzIG5vdCBzcGVjaWZ5IGEgcmVqZWN0aW9uIGhhbmRsZXIsIHJlamVjdGlvbiByZWFzb25zIHdpbGwgYmUgcHJvcGFnYXRlZCBmdXJ0aGVyIGRvd25zdHJlYW0uXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEFzc2ltaWxhdGlvblxuICAgIC0tLS0tLS0tLS0tLVxuICBcbiAgICBTb21ldGltZXMgdGhlIHZhbHVlIHlvdSB3YW50IHRvIHByb3BhZ2F0ZSB0byBhIGRvd25zdHJlYW0gcHJvbWlzZSBjYW4gb25seSBiZVxuICAgIHJldHJpZXZlZCBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpbiB0aGVcbiAgICBmdWxmaWxsbWVudCBvciByZWplY3Rpb24gaGFuZGxlci4gVGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIHRoZW4gYmUgcGVuZGluZ1xuICAgIHVudGlsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHNldHRsZWQuIFRoaXMgaXMgY2FsbGVkICphc3NpbWlsYXRpb24qLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBUaGUgdXNlcidzIGNvbW1lbnRzIGFyZSBub3cgYXZhaWxhYmxlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIElmIHRoZSBhc3NpbWxpYXRlZCBwcm9taXNlIHJlamVjdHMsIHRoZW4gdGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIGFsc28gcmVqZWN0LlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIGZ1bGZpbGxzLCB3ZSdsbCBoYXZlIHRoZSB2YWx1ZSBoZXJlXG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCByZWplY3RzLCB3ZSdsbCBoYXZlIHRoZSByZWFzb24gaGVyZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBTaW1wbGUgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCByZXN1bHQ7XG4gIFxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBmaW5kUmVzdWx0KCk7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9XG4gICAgYGBgXG4gIFxuICAgIEVycmJhY2sgRXhhbXBsZVxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRSZXN1bHQoZnVuY3Rpb24ocmVzdWx0LCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIFByb21pc2UgRXhhbXBsZTtcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGZpbmRSZXN1bHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQWR2YW5jZWQgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCBhdXRob3IsIGJvb2tzO1xuICBcbiAgICB0cnkge1xuICAgICAgYXV0aG9yID0gZmluZEF1dGhvcigpO1xuICAgICAgYm9va3MgID0gZmluZEJvb2tzQnlBdXRob3IoYXV0aG9yKTtcbiAgICAgIC8vIHN1Y2Nlc3NcbiAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgLy8gZmFpbHVyZVxuICAgIH1cbiAgICBgYGBcbiAgXG4gICAgRXJyYmFjayBFeGFtcGxlXG4gIFxuICAgIGBgYGpzXG4gIFxuICAgIGZ1bmN0aW9uIGZvdW5kQm9va3MoYm9va3MpIHtcbiAgXG4gICAgfVxuICBcbiAgICBmdW5jdGlvbiBmYWlsdXJlKHJlYXNvbikge1xuICBcbiAgICB9XG4gIFxuICAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgIC8vIGZhaWx1cmVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvdW5kQm9va3MoYm9va3MpO1xuICAgICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICAgIGZhaWx1cmUocmVhc29uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgUHJvbWlzZSBFeGFtcGxlO1xuICBcbiAgICBgYGBqYXZhc2NyaXB0XG4gICAgZmluZEF1dGhvcigpLlxuICAgICAgdGhlbihmaW5kQm9va3NCeUF1dGhvcikuXG4gICAgICB0aGVuKGZ1bmN0aW9uKGJvb2tzKXtcbiAgICAgICAgLy8gZm91bmQgYm9va3NcbiAgICB9KS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQG1ldGhvZCB0aGVuXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25GdWxmaWxsZWRcbiAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG4gIHRoZW46IHRoZW4sXG5cbiAgLyoqXG4gICAgYGNhdGNoYCBpcyBzaW1wbHkgc3VnYXIgZm9yIGB0aGVuKHVuZGVmaW5lZCwgb25SZWplY3Rpb24pYCB3aGljaCBtYWtlcyBpdCB0aGUgc2FtZVxuICAgIGFzIHRoZSBjYXRjaCBibG9jayBvZiBhIHRyeS9jYXRjaCBzdGF0ZW1lbnQuXG4gIFxuICAgIGBgYGpzXG4gICAgZnVuY3Rpb24gZmluZEF1dGhvcigpe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZG4ndCBmaW5kIHRoYXQgYXV0aG9yJyk7XG4gICAgfVxuICBcbiAgICAvLyBzeW5jaHJvbm91c1xuICAgIHRyeSB7XG4gICAgICBmaW5kQXV0aG9yKCk7XG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfVxuICBcbiAgICAvLyBhc3luYyB3aXRoIHByb21pc2VzXG4gICAgZmluZEF1dGhvcigpLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBAbWV0aG9kIGNhdGNoXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgQHJldHVybiB7UHJvbWlzZX1cbiAgKi9cbiAgJ2NhdGNoJzogZnVuY3Rpb24gX2NhdGNoKG9uUmVqZWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGlvbik7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHBvbHlmaWxsKCkge1xuICAgIHZhciBsb2NhbCA9IHVuZGVmaW5lZDtcblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IGdsb2JhbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvY2FsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBQID0gbG9jYWwuUHJvbWlzZTtcblxuICAgIGlmIChQKSB7XG4gICAgICAgIHZhciBwcm9taXNlVG9TdHJpbmcgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvbWlzZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFAucmVzb2x2ZSgpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gc2lsZW50bHkgaWdub3JlZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb21pc2VUb1N0cmluZyA9PT0gJ1tvYmplY3QgUHJvbWlzZV0nICYmICFQLmNhc3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvY2FsLlByb21pc2UgPSBQcm9taXNlO1xufVxuXG5wb2x5ZmlsbCgpO1xuLy8gU3RyYW5nZSBjb21wYXQuLlxuUHJvbWlzZS5wb2x5ZmlsbCA9IHBvbHlmaWxsO1xuUHJvbWlzZS5Qcm9taXNlID0gUHJvbWlzZTtcblxucmV0dXJuIFByb21pc2U7XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lczYtcHJvbWlzZS5tYXAiLCIvKiEgSlNPTiB2My4zLjIgfCBodHRwOi8vYmVzdGllanMuZ2l0aHViLmlvL2pzb24zIHwgQ29weXJpZ2h0IDIwMTItMjAxNCwgS2l0IENhbWJyaWRnZSB8IGh0dHA6Ly9raXQubWl0LWxpY2Vuc2Uub3JnICovXG47KGZ1bmN0aW9uICgpIHtcbiAgLy8gRGV0ZWN0IHRoZSBgZGVmaW5lYCBmdW5jdGlvbiBleHBvc2VkIGJ5IGFzeW5jaHJvbm91cyBtb2R1bGUgbG9hZGVycy4gVGhlXG4gIC8vIHN0cmljdCBgZGVmaW5lYCBjaGVjayBpcyBuZWNlc3NhcnkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBgci5qc2AuXG4gIHZhciBpc0xvYWRlciA9IHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kO1xuXG4gIC8vIEEgc2V0IG9mIHR5cGVzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggb2JqZWN0cyBmcm9tIHByaW1pdGl2ZXMuXG4gIHZhciBvYmplY3RUeXBlcyA9IHtcbiAgICBcImZ1bmN0aW9uXCI6IHRydWUsXG4gICAgXCJvYmplY3RcIjogdHJ1ZVxuICB9O1xuXG4gIC8vIERldGVjdCB0aGUgYGV4cG9ydHNgIG9iamVjdCBleHBvc2VkIGJ5IENvbW1vbkpTIGltcGxlbWVudGF0aW9ucy5cbiAgdmFyIGZyZWVFeHBvcnRzID0gb2JqZWN0VHlwZXNbdHlwZW9mIGV4cG9ydHNdICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuICAvLyBVc2UgdGhlIGBnbG9iYWxgIG9iamVjdCBleHBvc2VkIGJ5IE5vZGUgKGluY2x1ZGluZyBCcm93c2VyaWZ5IHZpYVxuICAvLyBgaW5zZXJ0LW1vZHVsZS1nbG9iYWxzYCksIE5hcndoYWwsIGFuZCBSaW5nbyBhcyB0aGUgZGVmYXVsdCBjb250ZXh0LFxuICAvLyBhbmQgdGhlIGB3aW5kb3dgIG9iamVjdCBpbiBicm93c2Vycy4gUmhpbm8gZXhwb3J0cyBhIGBnbG9iYWxgIGZ1bmN0aW9uXG4gIC8vIGluc3RlYWQuXG4gIHZhciByb290ID0gb2JqZWN0VHlwZXNbdHlwZW9mIHdpbmRvd10gJiYgd2luZG93IHx8IHRoaXMsXG4gICAgICBmcmVlR2xvYmFsID0gZnJlZUV4cG9ydHMgJiYgb2JqZWN0VHlwZXNbdHlwZW9mIG1vZHVsZV0gJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgdHlwZW9mIGdsb2JhbCA9PSBcIm9iamVjdFwiICYmIGdsb2JhbDtcblxuICBpZiAoZnJlZUdsb2JhbCAmJiAoZnJlZUdsb2JhbFtcImdsb2JhbFwiXSA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsW1wid2luZG93XCJdID09PSBmcmVlR2xvYmFsIHx8IGZyZWVHbG9iYWxbXCJzZWxmXCJdID09PSBmcmVlR2xvYmFsKSkge1xuICAgIHJvb3QgPSBmcmVlR2xvYmFsO1xuICB9XG5cbiAgLy8gUHVibGljOiBJbml0aWFsaXplcyBKU09OIDMgdXNpbmcgdGhlIGdpdmVuIGBjb250ZXh0YCBvYmplY3QsIGF0dGFjaGluZyB0aGVcbiAgLy8gYHN0cmluZ2lmeWAgYW5kIGBwYXJzZWAgZnVuY3Rpb25zIHRvIHRoZSBzcGVjaWZpZWQgYGV4cG9ydHNgIG9iamVjdC5cbiAgZnVuY3Rpb24gcnVuSW5Db250ZXh0KGNvbnRleHQsIGV4cG9ydHMpIHtcbiAgICBjb250ZXh0IHx8IChjb250ZXh0ID0gcm9vdFtcIk9iamVjdFwiXSgpKTtcbiAgICBleHBvcnRzIHx8IChleHBvcnRzID0gcm9vdFtcIk9iamVjdFwiXSgpKTtcblxuICAgIC8vIE5hdGl2ZSBjb25zdHJ1Y3RvciBhbGlhc2VzLlxuICAgIHZhciBOdW1iZXIgPSBjb250ZXh0W1wiTnVtYmVyXCJdIHx8IHJvb3RbXCJOdW1iZXJcIl0sXG4gICAgICAgIFN0cmluZyA9IGNvbnRleHRbXCJTdHJpbmdcIl0gfHwgcm9vdFtcIlN0cmluZ1wiXSxcbiAgICAgICAgT2JqZWN0ID0gY29udGV4dFtcIk9iamVjdFwiXSB8fCByb290W1wiT2JqZWN0XCJdLFxuICAgICAgICBEYXRlID0gY29udGV4dFtcIkRhdGVcIl0gfHwgcm9vdFtcIkRhdGVcIl0sXG4gICAgICAgIFN5bnRheEVycm9yID0gY29udGV4dFtcIlN5bnRheEVycm9yXCJdIHx8IHJvb3RbXCJTeW50YXhFcnJvclwiXSxcbiAgICAgICAgVHlwZUVycm9yID0gY29udGV4dFtcIlR5cGVFcnJvclwiXSB8fCByb290W1wiVHlwZUVycm9yXCJdLFxuICAgICAgICBNYXRoID0gY29udGV4dFtcIk1hdGhcIl0gfHwgcm9vdFtcIk1hdGhcIl0sXG4gICAgICAgIG5hdGl2ZUpTT04gPSBjb250ZXh0W1wiSlNPTlwiXSB8fCByb290W1wiSlNPTlwiXTtcblxuICAgIC8vIERlbGVnYXRlIHRvIHRoZSBuYXRpdmUgYHN0cmluZ2lmeWAgYW5kIGBwYXJzZWAgaW1wbGVtZW50YXRpb25zLlxuICAgIGlmICh0eXBlb2YgbmF0aXZlSlNPTiA9PSBcIm9iamVjdFwiICYmIG5hdGl2ZUpTT04pIHtcbiAgICAgIGV4cG9ydHMuc3RyaW5naWZ5ID0gbmF0aXZlSlNPTi5zdHJpbmdpZnk7XG4gICAgICBleHBvcnRzLnBhcnNlID0gbmF0aXZlSlNPTi5wYXJzZTtcbiAgICB9XG5cbiAgICAvLyBDb252ZW5pZW5jZSBhbGlhc2VzLlxuICAgIHZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgICAgIGdldENsYXNzID0gb2JqZWN0UHJvdG8udG9TdHJpbmcsXG4gICAgICAgIGlzUHJvcGVydHksIGZvckVhY2gsIHVuZGVmO1xuXG4gICAgLy8gVGVzdCB0aGUgYERhdGUjZ2V0VVRDKmAgbWV0aG9kcy4gQmFzZWQgb24gd29yayBieSBAWWFmZmxlLlxuICAgIHZhciBpc0V4dGVuZGVkID0gbmV3IERhdGUoLTM1MDk4MjczMzQ1NzMyOTIpO1xuICAgIHRyeSB7XG4gICAgICAvLyBUaGUgYGdldFVUQ0Z1bGxZZWFyYCwgYE1vbnRoYCwgYW5kIGBEYXRlYCBtZXRob2RzIHJldHVybiBub25zZW5zaWNhbFxuICAgICAgLy8gcmVzdWx0cyBmb3IgY2VydGFpbiBkYXRlcyBpbiBPcGVyYSA+PSAxMC41My5cbiAgICAgIGlzRXh0ZW5kZWQgPSBpc0V4dGVuZGVkLmdldFVUQ0Z1bGxZZWFyKCkgPT0gLTEwOTI1MiAmJiBpc0V4dGVuZGVkLmdldFVUQ01vbnRoKCkgPT09IDAgJiYgaXNFeHRlbmRlZC5nZXRVVENEYXRlKCkgPT09IDEgJiZcbiAgICAgICAgLy8gU2FmYXJpIDwgMi4wLjIgc3RvcmVzIHRoZSBpbnRlcm5hbCBtaWxsaXNlY29uZCB0aW1lIHZhbHVlIGNvcnJlY3RseSxcbiAgICAgICAgLy8gYnV0IGNsaXBzIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIGRhdGUgbWV0aG9kcyB0byB0aGUgcmFuZ2Ugb2ZcbiAgICAgICAgLy8gc2lnbmVkIDMyLWJpdCBpbnRlZ2VycyAoWy0yICoqIDMxLCAyICoqIDMxIC0gMV0pLlxuICAgICAgICBpc0V4dGVuZGVkLmdldFVUQ0hvdXJzKCkgPT0gMTAgJiYgaXNFeHRlbmRlZC5nZXRVVENNaW51dGVzKCkgPT0gMzcgJiYgaXNFeHRlbmRlZC5nZXRVVENTZWNvbmRzKCkgPT0gNiAmJiBpc0V4dGVuZGVkLmdldFVUQ01pbGxpc2Vjb25kcygpID09IDcwODtcbiAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG5cbiAgICAvLyBJbnRlcm5hbDogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBuYXRpdmUgYEpTT04uc3RyaW5naWZ5YCBhbmQgYHBhcnNlYFxuICAgIC8vIGltcGxlbWVudGF0aW9ucyBhcmUgc3BlYy1jb21wbGlhbnQuIEJhc2VkIG9uIHdvcmsgYnkgS2VuIFNueWRlci5cbiAgICBmdW5jdGlvbiBoYXMobmFtZSkge1xuICAgICAgaWYgKGhhc1tuYW1lXSAhPT0gdW5kZWYpIHtcbiAgICAgICAgLy8gUmV0dXJuIGNhY2hlZCBmZWF0dXJlIHRlc3QgcmVzdWx0LlxuICAgICAgICByZXR1cm4gaGFzW25hbWVdO1xuICAgICAgfVxuICAgICAgdmFyIGlzU3VwcG9ydGVkO1xuICAgICAgaWYgKG5hbWUgPT0gXCJidWctc3RyaW5nLWNoYXItaW5kZXhcIikge1xuICAgICAgICAvLyBJRSA8PSA3IGRvZXNuJ3Qgc3VwcG9ydCBhY2Nlc3Npbmcgc3RyaW5nIGNoYXJhY3RlcnMgdXNpbmcgc3F1YXJlXG4gICAgICAgIC8vIGJyYWNrZXQgbm90YXRpb24uIElFIDggb25seSBzdXBwb3J0cyB0aGlzIGZvciBwcmltaXRpdmVzLlxuICAgICAgICBpc1N1cHBvcnRlZCA9IFwiYVwiWzBdICE9IFwiYVwiO1xuICAgICAgfSBlbHNlIGlmIChuYW1lID09IFwianNvblwiKSB7XG4gICAgICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIGJvdGggYEpTT04uc3RyaW5naWZ5YCBhbmQgYEpTT04ucGFyc2VgIGFyZVxuICAgICAgICAvLyBzdXBwb3J0ZWQuXG4gICAgICAgIGlzU3VwcG9ydGVkID0gaGFzKFwianNvbi1zdHJpbmdpZnlcIikgJiYgaGFzKFwianNvbi1wYXJzZVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB2YWx1ZSwgc2VyaWFsaXplZCA9ICd7XCJhXCI6WzEsdHJ1ZSxmYWxzZSxudWxsLFwiXFxcXHUwMDAwXFxcXGJcXFxcblxcXFxmXFxcXHJcXFxcdFwiXX0nO1xuICAgICAgICAvLyBUZXN0IGBKU09OLnN0cmluZ2lmeWAuXG4gICAgICAgIGlmIChuYW1lID09IFwianNvbi1zdHJpbmdpZnlcIikge1xuICAgICAgICAgIHZhciBzdHJpbmdpZnkgPSBleHBvcnRzLnN0cmluZ2lmeSwgc3RyaW5naWZ5U3VwcG9ydGVkID0gdHlwZW9mIHN0cmluZ2lmeSA9PSBcImZ1bmN0aW9uXCIgJiYgaXNFeHRlbmRlZDtcbiAgICAgICAgICBpZiAoc3RyaW5naWZ5U3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAvLyBBIHRlc3QgZnVuY3Rpb24gb2JqZWN0IHdpdGggYSBjdXN0b20gYHRvSlNPTmAgbWV0aG9kLlxuICAgICAgICAgICAgKHZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH0pLnRvSlNPTiA9IHZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc3RyaW5naWZ5U3VwcG9ydGVkID1cbiAgICAgICAgICAgICAgICAvLyBGaXJlZm94IDMuMWIxIGFuZCBiMiBzZXJpYWxpemUgc3RyaW5nLCBudW1iZXIsIGFuZCBib29sZWFuXG4gICAgICAgICAgICAgICAgLy8gcHJpbWl0aXZlcyBhcyBvYmplY3QgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KDApID09PSBcIjBcIiAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCBiMiwgYW5kIEpTT04gMiBzZXJpYWxpemUgd3JhcHBlZCBwcmltaXRpdmVzIGFzIG9iamVjdFxuICAgICAgICAgICAgICAgIC8vIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgTnVtYmVyKCkpID09PSBcIjBcIiAmJlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgU3RyaW5nKCkpID09ICdcIlwiJyAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCAyIHRocm93IGFuIGVycm9yIGlmIHRoZSB2YWx1ZSBpcyBgbnVsbGAsIGB1bmRlZmluZWRgLCBvclxuICAgICAgICAgICAgICAgIC8vIGRvZXMgbm90IGRlZmluZSBhIGNhbm9uaWNhbCBKU09OIHJlcHJlc2VudGF0aW9uICh0aGlzIGFwcGxpZXMgdG9cbiAgICAgICAgICAgICAgICAvLyBvYmplY3RzIHdpdGggYHRvSlNPTmAgcHJvcGVydGllcyBhcyB3ZWxsLCAqdW5sZXNzKiB0aGV5IGFyZSBuZXN0ZWRcbiAgICAgICAgICAgICAgICAvLyB3aXRoaW4gYW4gb2JqZWN0IG9yIGFycmF5KS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoZ2V0Q2xhc3MpID09PSB1bmRlZiAmJlxuICAgICAgICAgICAgICAgIC8vIElFIDggc2VyaWFsaXplcyBgdW5kZWZpbmVkYCBhcyBgXCJ1bmRlZmluZWRcImAuIFNhZmFyaSA8PSA1LjEuNyBhbmRcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMyBwYXNzIHRoaXMgdGVzdC5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkodW5kZWYpID09PSB1bmRlZiAmJlxuICAgICAgICAgICAgICAgIC8vIFNhZmFyaSA8PSA1LjEuNyBhbmQgRkYgMy4xYjMgdGhyb3cgYEVycm9yYHMgYW5kIGBUeXBlRXJyb3JgcyxcbiAgICAgICAgICAgICAgICAvLyByZXNwZWN0aXZlbHksIGlmIHRoZSB2YWx1ZSBpcyBvbWl0dGVkIGVudGlyZWx5LlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSgpID09PSB1bmRlZiAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCAyIHRocm93IGFuIGVycm9yIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBub3QgYSBudW1iZXIsXG4gICAgICAgICAgICAgICAgLy8gc3RyaW5nLCBhcnJheSwgb2JqZWN0LCBCb29sZWFuLCBvciBgbnVsbGAgbGl0ZXJhbC4gVGhpcyBhcHBsaWVzIHRvXG4gICAgICAgICAgICAgICAgLy8gb2JqZWN0cyB3aXRoIGN1c3RvbSBgdG9KU09OYCBtZXRob2RzIGFzIHdlbGwsIHVubGVzcyB0aGV5IGFyZSBuZXN0ZWRcbiAgICAgICAgICAgICAgICAvLyBpbnNpZGUgb2JqZWN0IG9yIGFycmF5IGxpdGVyYWxzLiBZVUkgMy4wLjBiMSBpZ25vcmVzIGN1c3RvbSBgdG9KU09OYFxuICAgICAgICAgICAgICAgIC8vIG1ldGhvZHMgZW50aXJlbHkuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KHZhbHVlKSA9PT0gXCIxXCIgJiZcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoW3ZhbHVlXSkgPT0gXCJbMV1cIiAmJlxuICAgICAgICAgICAgICAgIC8vIFByb3RvdHlwZSA8PSAxLjYuMSBzZXJpYWxpemVzIGBbdW5kZWZpbmVkXWAgYXMgYFwiW11cImAgaW5zdGVhZCBvZlxuICAgICAgICAgICAgICAgIC8vIGBcIltudWxsXVwiYC5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoW3VuZGVmXSkgPT0gXCJbbnVsbF1cIiAmJlxuICAgICAgICAgICAgICAgIC8vIFlVSSAzLjAuMGIxIGZhaWxzIHRvIHNlcmlhbGl6ZSBgbnVsbGAgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG51bGwpID09IFwibnVsbFwiICYmXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjEsIDIgaGFsdHMgc2VyaWFsaXphdGlvbiBpZiBhbiBhcnJheSBjb250YWlucyBhIGZ1bmN0aW9uOlxuICAgICAgICAgICAgICAgIC8vIGBbMSwgdHJ1ZSwgZ2V0Q2xhc3MsIDFdYCBzZXJpYWxpemVzIGFzIFwiWzEsdHJ1ZSxdLFwiLiBGRiAzLjFiM1xuICAgICAgICAgICAgICAgIC8vIGVsaWRlcyBub24tSlNPTiB2YWx1ZXMgZnJvbSBvYmplY3RzIGFuZCBhcnJheXMsIHVubGVzcyB0aGV5XG4gICAgICAgICAgICAgICAgLy8gZGVmaW5lIGN1c3RvbSBgdG9KU09OYCBtZXRob2RzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShbdW5kZWYsIGdldENsYXNzLCBudWxsXSkgPT0gXCJbbnVsbCxudWxsLG51bGxdXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBTaW1wbGUgc2VyaWFsaXphdGlvbiB0ZXN0LiBGRiAzLjFiMSB1c2VzIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlc1xuICAgICAgICAgICAgICAgIC8vIHdoZXJlIGNoYXJhY3RlciBlc2NhcGUgY29kZXMgYXJlIGV4cGVjdGVkIChlLmcuLCBgXFxiYCA9PiBgXFx1MDAwOGApLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSh7IFwiYVwiOiBbdmFsdWUsIHRydWUsIGZhbHNlLCBudWxsLCBcIlxceDAwXFxiXFxuXFxmXFxyXFx0XCJdIH0pID09IHNlcmlhbGl6ZWQgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSBhbmQgYjIgaWdub3JlIHRoZSBgZmlsdGVyYCBhbmQgYHdpZHRoYCBhcmd1bWVudHMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG51bGwsIHZhbHVlKSA9PT0gXCIxXCIgJiZcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoWzEsIDJdLCBudWxsLCAxKSA9PSBcIltcXG4gMSxcXG4gMlxcbl1cIiAmJlxuICAgICAgICAgICAgICAgIC8vIEpTT04gMiwgUHJvdG90eXBlIDw9IDEuNywgYW5kIG9sZGVyIFdlYktpdCBidWlsZHMgaW5jb3JyZWN0bHlcbiAgICAgICAgICAgICAgICAvLyBzZXJpYWxpemUgZXh0ZW5kZWQgeWVhcnMuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBEYXRlKC04LjY0ZTE1KSkgPT0gJ1wiLTI3MTgyMS0wNC0yMFQwMDowMDowMC4wMDBaXCInICYmXG4gICAgICAgICAgICAgICAgLy8gVGhlIG1pbGxpc2Vjb25kcyBhcmUgb3B0aW9uYWwgaW4gRVMgNSwgYnV0IHJlcXVpcmVkIGluIDUuMS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IERhdGUoOC42NGUxNSkpID09ICdcIisyNzU3NjAtMDktMTNUMDA6MDA6MDAuMDAwWlwiJyAmJlxuICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggPD0gMTEuMCBpbmNvcnJlY3RseSBzZXJpYWxpemVzIHllYXJzIHByaW9yIHRvIDAgYXMgbmVnYXRpdmVcbiAgICAgICAgICAgICAgICAvLyBmb3VyLWRpZ2l0IHllYXJzIGluc3RlYWQgb2Ygc2l4LWRpZ2l0IHllYXJzLiBDcmVkaXRzOiBAWWFmZmxlLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgRGF0ZSgtNjIxOTg3NTUyZTUpKSA9PSAnXCItMDAwMDAxLTAxLTAxVDAwOjAwOjAwLjAwMFpcIicgJiZcbiAgICAgICAgICAgICAgICAvLyBTYWZhcmkgPD0gNS4xLjUgYW5kIE9wZXJhID49IDEwLjUzIGluY29ycmVjdGx5IHNlcmlhbGl6ZSBtaWxsaXNlY29uZFxuICAgICAgICAgICAgICAgIC8vIHZhbHVlcyBsZXNzIHRoYW4gMTAwMC4gQ3JlZGl0czogQFlhZmZsZS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IERhdGUoLTEpKSA9PSAnXCIxOTY5LTEyLTMxVDIzOjU5OjU5Ljk5OVpcIic7XG4gICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgc3RyaW5naWZ5U3VwcG9ydGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlzU3VwcG9ydGVkID0gc3RyaW5naWZ5U3VwcG9ydGVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRlc3QgYEpTT04ucGFyc2VgLlxuICAgICAgICBpZiAobmFtZSA9PSBcImpzb24tcGFyc2VcIikge1xuICAgICAgICAgIHZhciBwYXJzZSA9IGV4cG9ydHMucGFyc2U7XG4gICAgICAgICAgaWYgKHR5cGVvZiBwYXJzZSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCBiMiB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhIGJhcmUgbGl0ZXJhbCBpcyBwcm92aWRlZC5cbiAgICAgICAgICAgICAgLy8gQ29uZm9ybWluZyBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGFsc28gY29lcmNlIHRoZSBpbml0aWFsIGFyZ3VtZW50IHRvXG4gICAgICAgICAgICAgIC8vIGEgc3RyaW5nIHByaW9yIHRvIHBhcnNpbmcuXG4gICAgICAgICAgICAgIGlmIChwYXJzZShcIjBcIikgPT09IDAgJiYgIXBhcnNlKGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIC8vIFNpbXBsZSBwYXJzaW5nIHRlc3QuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZShzZXJpYWxpemVkKTtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VTdXBwb3J0ZWQgPSB2YWx1ZVtcImFcIl0ubGVuZ3RoID09IDUgJiYgdmFsdWVbXCJhXCJdWzBdID09PSAxO1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDUuMS4yIGFuZCBGRiAzLjFiMSBhbGxvdyB1bmVzY2FwZWQgdGFicyBpbiBzdHJpbmdzLlxuICAgICAgICAgICAgICAgICAgICBwYXJzZVN1cHBvcnRlZCA9ICFwYXJzZSgnXCJcXHRcIicpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gRkYgNC4wIGFuZCA0LjAuMSBhbGxvdyBsZWFkaW5nIGArYCBzaWducyBhbmQgbGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGRlY2ltYWwgcG9pbnRzLiBGRiA0LjAsIDQuMC4xLCBhbmQgSUUgOS0xMCBhbHNvIGFsbG93XG4gICAgICAgICAgICAgICAgICAgICAgLy8gY2VydGFpbiBvY3RhbCBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICAgICAgICBwYXJzZVN1cHBvcnRlZCA9IHBhcnNlKFwiMDFcIikgIT09IDE7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge31cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEZGIDQuMCwgNC4wLjEsIGFuZCBSaGlubyAxLjdSMy1SNCBhbGxvdyB0cmFpbGluZyBkZWNpbWFsXG4gICAgICAgICAgICAgICAgICAgICAgLy8gcG9pbnRzLiBUaGVzZSBlbnZpcm9ubWVudHMsIGFsb25nIHdpdGggRkYgMy4xYjEgYW5kIDIsXG4gICAgICAgICAgICAgICAgICAgICAgLy8gYWxzbyBhbGxvdyB0cmFpbGluZyBjb21tYXMgaW4gSlNPTiBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgICAgICAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSBwYXJzZShcIjEuXCIpICE9PSAxO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaXNTdXBwb3J0ZWQgPSBwYXJzZVN1cHBvcnRlZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc1tuYW1lXSA9ICEhaXNTdXBwb3J0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFoYXMoXCJqc29uXCIpKSB7XG4gICAgICAvLyBDb21tb24gYFtbQ2xhc3NdXWAgbmFtZSBhbGlhc2VzLlxuICAgICAgdmFyIGZ1bmN0aW9uQ2xhc3MgPSBcIltvYmplY3QgRnVuY3Rpb25dXCIsXG4gICAgICAgICAgZGF0ZUNsYXNzID0gXCJbb2JqZWN0IERhdGVdXCIsXG4gICAgICAgICAgbnVtYmVyQ2xhc3MgPSBcIltvYmplY3QgTnVtYmVyXVwiLFxuICAgICAgICAgIHN0cmluZ0NsYXNzID0gXCJbb2JqZWN0IFN0cmluZ11cIixcbiAgICAgICAgICBhcnJheUNsYXNzID0gXCJbb2JqZWN0IEFycmF5XVwiLFxuICAgICAgICAgIGJvb2xlYW5DbGFzcyA9IFwiW29iamVjdCBCb29sZWFuXVwiO1xuXG4gICAgICAvLyBEZXRlY3QgaW5jb21wbGV0ZSBzdXBwb3J0IGZvciBhY2Nlc3Npbmcgc3RyaW5nIGNoYXJhY3RlcnMgYnkgaW5kZXguXG4gICAgICB2YXIgY2hhckluZGV4QnVnZ3kgPSBoYXMoXCJidWctc3RyaW5nLWNoYXItaW5kZXhcIik7XG5cbiAgICAgIC8vIERlZmluZSBhZGRpdGlvbmFsIHV0aWxpdHkgbWV0aG9kcyBpZiB0aGUgYERhdGVgIG1ldGhvZHMgYXJlIGJ1Z2d5LlxuICAgICAgaWYgKCFpc0V4dGVuZGVkKSB7XG4gICAgICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG4gICAgICAgIC8vIEEgbWFwcGluZyBiZXR3ZWVuIHRoZSBtb250aHMgb2YgdGhlIHllYXIgYW5kIHRoZSBudW1iZXIgb2YgZGF5cyBiZXR3ZWVuXG4gICAgICAgIC8vIEphbnVhcnkgMXN0IGFuZCB0aGUgZmlyc3Qgb2YgdGhlIHJlc3BlY3RpdmUgbW9udGguXG4gICAgICAgIHZhciBNb250aHMgPSBbMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzRdO1xuICAgICAgICAvLyBJbnRlcm5hbDogQ2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIGRheXMgYmV0d2VlbiB0aGUgVW5peCBlcG9jaCBhbmQgdGhlXG4gICAgICAgIC8vIGZpcnN0IGRheSBvZiB0aGUgZ2l2ZW4gbW9udGguXG4gICAgICAgIHZhciBnZXREYXkgPSBmdW5jdGlvbiAoeWVhciwgbW9udGgpIHtcbiAgICAgICAgICByZXR1cm4gTW9udGhzW21vbnRoXSArIDM2NSAqICh5ZWFyIC0gMTk3MCkgKyBmbG9vcigoeWVhciAtIDE5NjkgKyAobW9udGggPSArKG1vbnRoID4gMSkpKSAvIDQpIC0gZmxvb3IoKHllYXIgLSAxOTAxICsgbW9udGgpIC8gMTAwKSArIGZsb29yKCh5ZWFyIC0gMTYwMSArIG1vbnRoKSAvIDQwMCk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEludGVybmFsOiBEZXRlcm1pbmVzIGlmIGEgcHJvcGVydHkgaXMgYSBkaXJlY3QgcHJvcGVydHkgb2YgdGhlIGdpdmVuXG4gICAgICAvLyBvYmplY3QuIERlbGVnYXRlcyB0byB0aGUgbmF0aXZlIGBPYmplY3QjaGFzT3duUHJvcGVydHlgIG1ldGhvZC5cbiAgICAgIGlmICghKGlzUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eSkpIHtcbiAgICAgICAgaXNQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgIHZhciBtZW1iZXJzID0ge30sIGNvbnN0cnVjdG9yO1xuICAgICAgICAgIGlmICgobWVtYmVycy5fX3Byb3RvX18gPSBudWxsLCBtZW1iZXJzLl9fcHJvdG9fXyA9IHtcbiAgICAgICAgICAgIC8vIFRoZSAqcHJvdG8qIHByb3BlcnR5IGNhbm5vdCBiZSBzZXQgbXVsdGlwbGUgdGltZXMgaW4gcmVjZW50XG4gICAgICAgICAgICAvLyB2ZXJzaW9ucyBvZiBGaXJlZm94IGFuZCBTZWFNb25rZXkuXG4gICAgICAgICAgICBcInRvU3RyaW5nXCI6IDFcbiAgICAgICAgICB9LCBtZW1iZXJzKS50b1N0cmluZyAhPSBnZXRDbGFzcykge1xuICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDIuMC4zIGRvZXNuJ3QgaW1wbGVtZW50IGBPYmplY3QjaGFzT3duUHJvcGVydHlgLCBidXRcbiAgICAgICAgICAgIC8vIHN1cHBvcnRzIHRoZSBtdXRhYmxlICpwcm90byogcHJvcGVydHkuXG4gICAgICAgICAgICBpc1Byb3BlcnR5ID0gZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIC8vIENhcHR1cmUgYW5kIGJyZWFrIHRoZSBvYmplY3QncyBwcm90b3R5cGUgY2hhaW4gKHNlZSBzZWN0aW9uIDguNi4yXG4gICAgICAgICAgICAgIC8vIG9mIHRoZSBFUyA1LjEgc3BlYykuIFRoZSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24gcHJldmVudHMgYW5cbiAgICAgICAgICAgICAgLy8gdW5zYWZlIHRyYW5zZm9ybWF0aW9uIGJ5IHRoZSBDbG9zdXJlIENvbXBpbGVyLlxuICAgICAgICAgICAgICB2YXIgb3JpZ2luYWwgPSB0aGlzLl9fcHJvdG9fXywgcmVzdWx0ID0gcHJvcGVydHkgaW4gKHRoaXMuX19wcm90b19fID0gbnVsbCwgdGhpcyk7XG4gICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb3RvdHlwZSBjaGFpbi5cbiAgICAgICAgICAgICAgdGhpcy5fX3Byb3RvX18gPSBvcmlnaW5hbDtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENhcHR1cmUgYSByZWZlcmVuY2UgdG8gdGhlIHRvcC1sZXZlbCBgT2JqZWN0YCBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gbWVtYmVycy5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgYGNvbnN0cnVjdG9yYCBwcm9wZXJ0eSB0byBzaW11bGF0ZSBgT2JqZWN0I2hhc093blByb3BlcnR5YCBpblxuICAgICAgICAgICAgLy8gb3RoZXIgZW52aXJvbm1lbnRzLlxuICAgICAgICAgICAgaXNQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gKHRoaXMuY29uc3RydWN0b3IgfHwgY29uc3RydWN0b3IpLnByb3RvdHlwZTtcbiAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5IGluIHRoaXMgJiYgIShwcm9wZXJ0eSBpbiBwYXJlbnQgJiYgdGhpc1twcm9wZXJ0eV0gPT09IHBhcmVudFtwcm9wZXJ0eV0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWVtYmVycyA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGlzUHJvcGVydHkuY2FsbCh0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEludGVybmFsOiBOb3JtYWxpemVzIHRoZSBgZm9yLi4uaW5gIGl0ZXJhdGlvbiBhbGdvcml0aG0gYWNyb3NzXG4gICAgICAvLyBlbnZpcm9ubWVudHMuIEVhY2ggZW51bWVyYXRlZCBrZXkgaXMgeWllbGRlZCB0byBhIGBjYWxsYmFja2AgZnVuY3Rpb24uXG4gICAgICBmb3JFYWNoID0gZnVuY3Rpb24gKG9iamVjdCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNpemUgPSAwLCBQcm9wZXJ0aWVzLCBtZW1iZXJzLCBwcm9wZXJ0eTtcblxuICAgICAgICAvLyBUZXN0cyBmb3IgYnVncyBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCdzIGBmb3IuLi5pbmAgYWxnb3JpdGhtLiBUaGVcbiAgICAgICAgLy8gYHZhbHVlT2ZgIHByb3BlcnR5IGluaGVyaXRzIHRoZSBub24tZW51bWVyYWJsZSBmbGFnIGZyb21cbiAgICAgICAgLy8gYE9iamVjdC5wcm90b3R5cGVgIGluIG9sZGVyIHZlcnNpb25zIG9mIElFLCBOZXRzY2FwZSwgYW5kIE1vemlsbGEuXG4gICAgICAgIChQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMudmFsdWVPZiA9IDA7XG4gICAgICAgIH0pLnByb3RvdHlwZS52YWx1ZU9mID0gMDtcblxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGBQcm9wZXJ0aWVzYCBjbGFzcy5cbiAgICAgICAgbWVtYmVycyA9IG5ldyBQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGZvciAocHJvcGVydHkgaW4gbWVtYmVycykge1xuICAgICAgICAgIC8vIElnbm9yZSBhbGwgcHJvcGVydGllcyBpbmhlcml0ZWQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuXG4gICAgICAgICAgaWYgKGlzUHJvcGVydHkuY2FsbChtZW1iZXJzLCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgIHNpemUrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgUHJvcGVydGllcyA9IG1lbWJlcnMgPSBudWxsO1xuXG4gICAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgaXRlcmF0aW9uIGFsZ29yaXRobS5cbiAgICAgICAgaWYgKCFzaXplKSB7XG4gICAgICAgICAgLy8gQSBsaXN0IG9mIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgaW5oZXJpdGVkIGZyb20gYE9iamVjdC5wcm90b3R5cGVgLlxuICAgICAgICAgIG1lbWJlcnMgPSBbXCJ2YWx1ZU9mXCIsIFwidG9TdHJpbmdcIiwgXCJ0b0xvY2FsZVN0cmluZ1wiLCBcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsIFwiaXNQcm90b3R5cGVPZlwiLCBcImhhc093blByb3BlcnR5XCIsIFwiY29uc3RydWN0b3JcIl07XG4gICAgICAgICAgLy8gSUUgPD0gOCwgTW96aWxsYSAxLjAsIGFuZCBOZXRzY2FwZSA2LjIgaWdub3JlIHNoYWRvd2VkIG5vbi1lbnVtZXJhYmxlXG4gICAgICAgICAgLy8gcHJvcGVydGllcy5cbiAgICAgICAgICBmb3JFYWNoID0gZnVuY3Rpb24gKG9iamVjdCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHZhciBpc0Z1bmN0aW9uID0gZ2V0Q2xhc3MuY2FsbChvYmplY3QpID09IGZ1bmN0aW9uQ2xhc3MsIHByb3BlcnR5LCBsZW5ndGg7XG4gICAgICAgICAgICB2YXIgaGFzUHJvcGVydHkgPSAhaXNGdW5jdGlvbiAmJiB0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yICE9IFwiZnVuY3Rpb25cIiAmJiBvYmplY3RUeXBlc1t0eXBlb2Ygb2JqZWN0Lmhhc093blByb3BlcnR5XSAmJiBvYmplY3QuaGFzT3duUHJvcGVydHkgfHwgaXNQcm9wZXJ0eTtcbiAgICAgICAgICAgIGZvciAocHJvcGVydHkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgIC8vIEdlY2tvIDw9IDEuMCBlbnVtZXJhdGVzIHRoZSBgcHJvdG90eXBlYCBwcm9wZXJ0eSBvZiBmdW5jdGlvbnMgdW5kZXJcbiAgICAgICAgICAgICAgLy8gY2VydGFpbiBjb25kaXRpb25zOyBJRSBkb2VzIG5vdC5cbiAgICAgICAgICAgICAgaWYgKCEoaXNGdW5jdGlvbiAmJiBwcm9wZXJ0eSA9PSBcInByb3RvdHlwZVwiKSAmJiBoYXNQcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2socHJvcGVydHkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNYW51YWxseSBpbnZva2UgdGhlIGNhbGxiYWNrIGZvciBlYWNoIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5LlxuICAgICAgICAgICAgZm9yIChsZW5ndGggPSBtZW1iZXJzLmxlbmd0aDsgcHJvcGVydHkgPSBtZW1iZXJzWy0tbGVuZ3RoXTsgaGFzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSAmJiBjYWxsYmFjayhwcm9wZXJ0eSkpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoc2l6ZSA9PSAyKSB7XG4gICAgICAgICAgLy8gU2FmYXJpIDw9IDIuMC40IGVudW1lcmF0ZXMgc2hhZG93ZWQgcHJvcGVydGllcyB0d2ljZS5cbiAgICAgICAgICBmb3JFYWNoID0gZnVuY3Rpb24gKG9iamVjdCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHNldCBvZiBpdGVyYXRlZCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICAgdmFyIG1lbWJlcnMgPSB7fSwgaXNGdW5jdGlvbiA9IGdldENsYXNzLmNhbGwob2JqZWN0KSA9PSBmdW5jdGlvbkNsYXNzLCBwcm9wZXJ0eTtcbiAgICAgICAgICAgIGZvciAocHJvcGVydHkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgIC8vIFN0b3JlIGVhY2ggcHJvcGVydHkgbmFtZSB0byBwcmV2ZW50IGRvdWJsZSBlbnVtZXJhdGlvbi4gVGhlXG4gICAgICAgICAgICAgIC8vIGBwcm90b3R5cGVgIHByb3BlcnR5IG9mIGZ1bmN0aW9ucyBpcyBub3QgZW51bWVyYXRlZCBkdWUgdG8gY3Jvc3MtXG4gICAgICAgICAgICAgIC8vIGVudmlyb25tZW50IGluY29uc2lzdGVuY2llcy5cbiAgICAgICAgICAgICAgaWYgKCEoaXNGdW5jdGlvbiAmJiBwcm9wZXJ0eSA9PSBcInByb3RvdHlwZVwiKSAmJiAhaXNQcm9wZXJ0eS5jYWxsKG1lbWJlcnMsIHByb3BlcnR5KSAmJiAobWVtYmVyc1twcm9wZXJ0eV0gPSAxKSAmJiBpc1Byb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vIGJ1Z3MgZGV0ZWN0ZWQ7IHVzZSB0aGUgc3RhbmRhcmQgYGZvci4uLmluYCBhbGdvcml0aG0uXG4gICAgICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IGdldENsYXNzLmNhbGwob2JqZWN0KSA9PSBmdW5jdGlvbkNsYXNzLCBwcm9wZXJ0eSwgaXNDb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgIGZvciAocHJvcGVydHkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgIGlmICghKGlzRnVuY3Rpb24gJiYgcHJvcGVydHkgPT0gXCJwcm90b3R5cGVcIikgJiYgaXNQcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpICYmICEoaXNDb25zdHJ1Y3RvciA9IHByb3BlcnR5ID09PSBcImNvbnN0cnVjdG9yXCIpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2socHJvcGVydHkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBNYW51YWxseSBpbnZva2UgdGhlIGNhbGxiYWNrIGZvciB0aGUgYGNvbnN0cnVjdG9yYCBwcm9wZXJ0eSBkdWUgdG9cbiAgICAgICAgICAgIC8vIGNyb3NzLWVudmlyb25tZW50IGluY29uc2lzdGVuY2llcy5cbiAgICAgICAgICAgIGlmIChpc0NvbnN0cnVjdG9yIHx8IGlzUHJvcGVydHkuY2FsbChvYmplY3QsIChwcm9wZXJ0eSA9IFwiY29uc3RydWN0b3JcIikpKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JFYWNoKG9iamVjdCwgY2FsbGJhY2spO1xuICAgICAgfTtcblxuICAgICAgLy8gUHVibGljOiBTZXJpYWxpemVzIGEgSmF2YVNjcmlwdCBgdmFsdWVgIGFzIGEgSlNPTiBzdHJpbmcuIFRoZSBvcHRpb25hbFxuICAgICAgLy8gYGZpbHRlcmAgYXJndW1lbnQgbWF5IHNwZWNpZnkgZWl0aGVyIGEgZnVuY3Rpb24gdGhhdCBhbHRlcnMgaG93IG9iamVjdCBhbmRcbiAgICAgIC8vIGFycmF5IG1lbWJlcnMgYXJlIHNlcmlhbGl6ZWQsIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MgYW5kIG51bWJlcnMgdGhhdFxuICAgICAgLy8gaW5kaWNhdGVzIHdoaWNoIHByb3BlcnRpZXMgc2hvdWxkIGJlIHNlcmlhbGl6ZWQuIFRoZSBvcHRpb25hbCBgd2lkdGhgXG4gICAgICAvLyBhcmd1bWVudCBtYXkgYmUgZWl0aGVyIGEgc3RyaW5nIG9yIG51bWJlciB0aGF0IHNwZWNpZmllcyB0aGUgaW5kZW50YXRpb25cbiAgICAgIC8vIGxldmVsIG9mIHRoZSBvdXRwdXQuXG4gICAgICBpZiAoIWhhcyhcImpzb24tc3RyaW5naWZ5XCIpKSB7XG4gICAgICAgIC8vIEludGVybmFsOiBBIG1hcCBvZiBjb250cm9sIGNoYXJhY3RlcnMgYW5kIHRoZWlyIGVzY2FwZWQgZXF1aXZhbGVudHMuXG4gICAgICAgIHZhciBFc2NhcGVzID0ge1xuICAgICAgICAgIDkyOiBcIlxcXFxcXFxcXCIsXG4gICAgICAgICAgMzQ6ICdcXFxcXCInLFxuICAgICAgICAgIDg6IFwiXFxcXGJcIixcbiAgICAgICAgICAxMjogXCJcXFxcZlwiLFxuICAgICAgICAgIDEwOiBcIlxcXFxuXCIsXG4gICAgICAgICAgMTM6IFwiXFxcXHJcIixcbiAgICAgICAgICA5OiBcIlxcXFx0XCJcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogQ29udmVydHMgYHZhbHVlYCBpbnRvIGEgemVyby1wYWRkZWQgc3RyaW5nIHN1Y2ggdGhhdCBpdHNcbiAgICAgICAgLy8gbGVuZ3RoIGlzIGF0IGxlYXN0IGVxdWFsIHRvIGB3aWR0aGAuIFRoZSBgd2lkdGhgIG11c3QgYmUgPD0gNi5cbiAgICAgICAgdmFyIGxlYWRpbmdaZXJvZXMgPSBcIjAwMDAwMFwiO1xuICAgICAgICB2YXIgdG9QYWRkZWRTdHJpbmcgPSBmdW5jdGlvbiAod2lkdGgsIHZhbHVlKSB7XG4gICAgICAgICAgLy8gVGhlIGB8fCAwYCBleHByZXNzaW9uIGlzIG5lY2Vzc2FyeSB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpblxuICAgICAgICAgIC8vIE9wZXJhIDw9IDcuNTR1MiB3aGVyZSBgMCA9PSAtMGAsIGJ1dCBgU3RyaW5nKC0wKSAhPT0gXCIwXCJgLlxuICAgICAgICAgIHJldHVybiAobGVhZGluZ1plcm9lcyArICh2YWx1ZSB8fCAwKSkuc2xpY2UoLXdpZHRoKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogRG91YmxlLXF1b3RlcyBhIHN0cmluZyBgdmFsdWVgLCByZXBsYWNpbmcgYWxsIEFTQ0lJIGNvbnRyb2xcbiAgICAgICAgLy8gY2hhcmFjdGVycyAoY2hhcmFjdGVycyB3aXRoIGNvZGUgdW5pdCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAzMSkgd2l0aFxuICAgICAgICAvLyB0aGVpciBlc2NhcGVkIGVxdWl2YWxlbnRzLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZVxuICAgICAgICAvLyBgUXVvdGUodmFsdWUpYCBvcGVyYXRpb24gZGVmaW5lZCBpbiBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLlxuICAgICAgICB2YXIgdW5pY29kZVByZWZpeCA9IFwiXFxcXHUwMFwiO1xuICAgICAgICB2YXIgcXVvdGUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gJ1wiJywgaW5kZXggPSAwLCBsZW5ndGggPSB2YWx1ZS5sZW5ndGgsIHVzZUNoYXJJbmRleCA9ICFjaGFySW5kZXhCdWdneSB8fCBsZW5ndGggPiAxMDtcbiAgICAgICAgICB2YXIgc3ltYm9scyA9IHVzZUNoYXJJbmRleCAmJiAoY2hhckluZGV4QnVnZ3kgPyB2YWx1ZS5zcGxpdChcIlwiKSA6IHZhbHVlKTtcbiAgICAgICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIHZhciBjaGFyQ29kZSA9IHZhbHVlLmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgICAgICAgICAgLy8gSWYgdGhlIGNoYXJhY3RlciBpcyBhIGNvbnRyb2wgY2hhcmFjdGVyLCBhcHBlbmQgaXRzIFVuaWNvZGUgb3JcbiAgICAgICAgICAgIC8vIHNob3J0aGFuZCBlc2NhcGUgc2VxdWVuY2U7IG90aGVyd2lzZSwgYXBwZW5kIHRoZSBjaGFyYWN0ZXIgYXMtaXMuXG4gICAgICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7XG4gICAgICAgICAgICAgIGNhc2UgODogY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEyOiBjYXNlIDEzOiBjYXNlIDM0OiBjYXNlIDkyOlxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBFc2NhcGVzW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPCAzMikge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHVuaWNvZGVQcmVmaXggKyB0b1BhZGRlZFN0cmluZygyLCBjaGFyQ29kZS50b1N0cmluZygxNikpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB1c2VDaGFySW5kZXggPyBzeW1ib2xzW2luZGV4XSA6IHZhbHVlLmNoYXJBdChpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnXCInO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZWN1cnNpdmVseSBzZXJpYWxpemVzIGFuIG9iamVjdC4gSW1wbGVtZW50cyB0aGVcbiAgICAgICAgLy8gYFN0cihrZXksIGhvbGRlcilgLCBgSk8odmFsdWUpYCwgYW5kIGBKQSh2YWx1ZSlgIG9wZXJhdGlvbnMuXG4gICAgICAgIHZhciBzZXJpYWxpemUgPSBmdW5jdGlvbiAocHJvcGVydHksIG9iamVjdCwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIGluZGVudGF0aW9uLCBzdGFjaykge1xuICAgICAgICAgIHZhciB2YWx1ZSwgY2xhc3NOYW1lLCB5ZWFyLCBtb250aCwgZGF0ZSwgdGltZSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1pbGxpc2Vjb25kcywgcmVzdWx0cywgZWxlbWVudCwgaW5kZXgsIGxlbmd0aCwgcHJlZml4LCByZXN1bHQ7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIE5lY2Vzc2FyeSBmb3IgaG9zdCBvYmplY3Qgc3VwcG9ydC5cbiAgICAgICAgICAgIHZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTtcbiAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT0gZGF0ZUNsYXNzICYmICFpc1Byb3BlcnR5LmNhbGwodmFsdWUsIFwidG9KU09OXCIpKSB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZSA+IC0xIC8gMCAmJiB2YWx1ZSA8IDEgLyAwKSB7XG4gICAgICAgICAgICAgICAgLy8gRGF0ZXMgYXJlIHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIHRoZSBgRGF0ZSN0b0pTT05gIG1ldGhvZFxuICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllZCBpbiBFUyA1LjEgc2VjdGlvbiAxNS45LjUuNDQuIFNlZSBzZWN0aW9uIDE1LjkuMS4xNVxuICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgSVNPIDg2MDEgZGF0ZSB0aW1lIHN0cmluZyBmb3JtYXQuXG4gICAgICAgICAgICAgICAgaWYgKGdldERheSkge1xuICAgICAgICAgICAgICAgICAgLy8gTWFudWFsbHkgY29tcHV0ZSB0aGUgeWVhciwgbW9udGgsIGRhdGUsIGhvdXJzLCBtaW51dGVzLFxuICAgICAgICAgICAgICAgICAgLy8gc2Vjb25kcywgYW5kIG1pbGxpc2Vjb25kcyBpZiB0aGUgYGdldFVUQypgIG1ldGhvZHMgYXJlXG4gICAgICAgICAgICAgICAgICAvLyBidWdneS4gQWRhcHRlZCBmcm9tIEBZYWZmbGUncyBgZGF0ZS1zaGltYCBwcm9qZWN0LlxuICAgICAgICAgICAgICAgICAgZGF0ZSA9IGZsb29yKHZhbHVlIC8gODY0ZTUpO1xuICAgICAgICAgICAgICAgICAgZm9yICh5ZWFyID0gZmxvb3IoZGF0ZSAvIDM2NS4yNDI1KSArIDE5NzAgLSAxOyBnZXREYXkoeWVhciArIDEsIDApIDw9IGRhdGU7IHllYXIrKyk7XG4gICAgICAgICAgICAgICAgICBmb3IgKG1vbnRoID0gZmxvb3IoKGRhdGUgLSBnZXREYXkoeWVhciwgMCkpIC8gMzAuNDIpOyBnZXREYXkoeWVhciwgbW9udGggKyAxKSA8PSBkYXRlOyBtb250aCsrKTtcbiAgICAgICAgICAgICAgICAgIGRhdGUgPSAxICsgZGF0ZSAtIGdldERheSh5ZWFyLCBtb250aCk7XG4gICAgICAgICAgICAgICAgICAvLyBUaGUgYHRpbWVgIHZhbHVlIHNwZWNpZmllcyB0aGUgdGltZSB3aXRoaW4gdGhlIGRheSAoc2VlIEVTXG4gICAgICAgICAgICAgICAgICAvLyA1LjEgc2VjdGlvbiAxNS45LjEuMikuIFRoZSBmb3JtdWxhIGAoQSAlIEIgKyBCKSAlIEJgIGlzIHVzZWRcbiAgICAgICAgICAgICAgICAgIC8vIHRvIGNvbXB1dGUgYEEgbW9kdWxvIEJgLCBhcyB0aGUgYCVgIG9wZXJhdG9yIGRvZXMgbm90XG4gICAgICAgICAgICAgICAgICAvLyBjb3JyZXNwb25kIHRvIHRoZSBgbW9kdWxvYCBvcGVyYXRpb24gZm9yIG5lZ2F0aXZlIG51bWJlcnMuXG4gICAgICAgICAgICAgICAgICB0aW1lID0gKHZhbHVlICUgODY0ZTUgKyA4NjRlNSkgJSA4NjRlNTtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBob3VycywgbWludXRlcywgc2Vjb25kcywgYW5kIG1pbGxpc2Vjb25kcyBhcmUgb2J0YWluZWQgYnlcbiAgICAgICAgICAgICAgICAgIC8vIGRlY29tcG9zaW5nIHRoZSB0aW1lIHdpdGhpbiB0aGUgZGF5LiBTZWUgc2VjdGlvbiAxNS45LjEuMTAuXG4gICAgICAgICAgICAgICAgICBob3VycyA9IGZsb29yKHRpbWUgLyAzNmU1KSAlIDI0O1xuICAgICAgICAgICAgICAgICAgbWludXRlcyA9IGZsb29yKHRpbWUgLyA2ZTQpICUgNjA7XG4gICAgICAgICAgICAgICAgICBzZWNvbmRzID0gZmxvb3IodGltZSAvIDFlMykgJSA2MDtcbiAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IHRpbWUgJSAxZTM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHllYXIgPSB2YWx1ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgICAgbW9udGggPSB2YWx1ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgICAgICAgZGF0ZSA9IHZhbHVlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgICAgICAgICAgIGhvdXJzID0gdmFsdWUuZ2V0VVRDSG91cnMoKTtcbiAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSB2YWx1ZS5nZXRVVENNaW51dGVzKCk7XG4gICAgICAgICAgICAgICAgICBzZWNvbmRzID0gdmFsdWUuZ2V0VVRDU2Vjb25kcygpO1xuICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdmFsdWUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSBleHRlbmRlZCB5ZWFycyBjb3JyZWN0bHkuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSAoeWVhciA8PSAwIHx8IHllYXIgPj0gMWU0ID8gKHllYXIgPCAwID8gXCItXCIgOiBcIitcIikgKyB0b1BhZGRlZFN0cmluZyg2LCB5ZWFyIDwgMCA/IC15ZWFyIDogeWVhcikgOiB0b1BhZGRlZFN0cmluZyg0LCB5ZWFyKSkgK1xuICAgICAgICAgICAgICAgICAgXCItXCIgKyB0b1BhZGRlZFN0cmluZygyLCBtb250aCArIDEpICsgXCItXCIgKyB0b1BhZGRlZFN0cmluZygyLCBkYXRlKSArXG4gICAgICAgICAgICAgICAgICAvLyBNb250aHMsIGRhdGVzLCBob3VycywgbWludXRlcywgYW5kIHNlY29uZHMgc2hvdWxkIGhhdmUgdHdvXG4gICAgICAgICAgICAgICAgICAvLyBkaWdpdHM7IG1pbGxpc2Vjb25kcyBzaG91bGQgaGF2ZSB0aHJlZS5cbiAgICAgICAgICAgICAgICAgIFwiVFwiICsgdG9QYWRkZWRTdHJpbmcoMiwgaG91cnMpICsgXCI6XCIgKyB0b1BhZGRlZFN0cmluZygyLCBtaW51dGVzKSArIFwiOlwiICsgdG9QYWRkZWRTdHJpbmcoMiwgc2Vjb25kcykgK1xuICAgICAgICAgICAgICAgICAgLy8gTWlsbGlzZWNvbmRzIGFyZSBvcHRpb25hbCBpbiBFUyA1LjAsIGJ1dCByZXF1aXJlZCBpbiA1LjEuXG4gICAgICAgICAgICAgICAgICBcIi5cIiArIHRvUGFkZGVkU3RyaW5nKDMsIG1pbGxpc2Vjb25kcykgKyBcIlpcIjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlLnRvSlNPTiA9PSBcImZ1bmN0aW9uXCIgJiYgKChjbGFzc05hbWUgIT0gbnVtYmVyQ2xhc3MgJiYgY2xhc3NOYW1lICE9IHN0cmluZ0NsYXNzICYmIGNsYXNzTmFtZSAhPSBhcnJheUNsYXNzKSB8fCBpc1Byb3BlcnR5LmNhbGwodmFsdWUsIFwidG9KU09OXCIpKSkge1xuICAgICAgICAgICAgICAvLyBQcm90b3R5cGUgPD0gMS42LjEgYWRkcyBub24tc3RhbmRhcmQgYHRvSlNPTmAgbWV0aG9kcyB0byB0aGVcbiAgICAgICAgICAgICAgLy8gYE51bWJlcmAsIGBTdHJpbmdgLCBgRGF0ZWAsIGFuZCBgQXJyYXlgIHByb3RvdHlwZXMuIEpTT04gM1xuICAgICAgICAgICAgICAvLyBpZ25vcmVzIGFsbCBgdG9KU09OYCBtZXRob2RzIG9uIHRoZXNlIG9iamVjdHMgdW5sZXNzIHRoZXkgYXJlXG4gICAgICAgICAgICAgIC8vIGRlZmluZWQgZGlyZWN0bHkgb24gYW4gaW5zdGFuY2UuXG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKHByb3BlcnR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBJZiBhIHJlcGxhY2VtZW50IGZ1bmN0aW9uIHdhcyBwcm92aWRlZCwgY2FsbCBpdCB0byBvYnRhaW4gdGhlIHZhbHVlXG4gICAgICAgICAgICAvLyBmb3Igc2VyaWFsaXphdGlvbi5cbiAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2suY2FsbChvYmplY3QsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKHZhbHVlKTtcbiAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IGJvb2xlYW5DbGFzcykge1xuICAgICAgICAgICAgLy8gQm9vbGVhbnMgYXJlIHJlcHJlc2VudGVkIGxpdGVyYWxseS5cbiAgICAgICAgICAgIHJldHVybiBcIlwiICsgdmFsdWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChjbGFzc05hbWUgPT0gbnVtYmVyQ2xhc3MpIHtcbiAgICAgICAgICAgIC8vIEpTT04gbnVtYmVycyBtdXN0IGJlIGZpbml0ZS4gYEluZmluaXR5YCBhbmQgYE5hTmAgYXJlIHNlcmlhbGl6ZWQgYXNcbiAgICAgICAgICAgIC8vIGBcIm51bGxcImAuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPiAtMSAvIDAgJiYgdmFsdWUgPCAxIC8gMCA/IFwiXCIgKyB2YWx1ZSA6IFwibnVsbFwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IHN0cmluZ0NsYXNzKSB7XG4gICAgICAgICAgICAvLyBTdHJpbmdzIGFyZSBkb3VibGUtcXVvdGVkIGFuZCBlc2NhcGVkLlxuICAgICAgICAgICAgcmV0dXJuIHF1b3RlKFwiXCIgKyB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNlcmlhbGl6ZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgY3ljbGljIHN0cnVjdHVyZXMuIFRoaXMgaXMgYSBsaW5lYXIgc2VhcmNoOyBwZXJmb3JtYW5jZVxuICAgICAgICAgICAgLy8gaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIHVuaXF1ZSBuZXN0ZWQgb2JqZWN0cy5cbiAgICAgICAgICAgIGZvciAobGVuZ3RoID0gc3RhY2subGVuZ3RoOyBsZW5ndGgtLTspIHtcbiAgICAgICAgICAgICAgaWYgKHN0YWNrW2xlbmd0aF0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgLy8gQ3ljbGljIHN0cnVjdHVyZXMgY2Fubm90IGJlIHNlcmlhbGl6ZWQgYnkgYEpTT04uc3RyaW5naWZ5YC5cbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQWRkIHRoZSBvYmplY3QgdG8gdGhlIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgICAgICAgICAgc3RhY2sucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICByZXN1bHRzID0gW107XG4gICAgICAgICAgICAvLyBTYXZlIHRoZSBjdXJyZW50IGluZGVudGF0aW9uIGxldmVsIGFuZCBpbmRlbnQgb25lIGFkZGl0aW9uYWwgbGV2ZWwuXG4gICAgICAgICAgICBwcmVmaXggPSBpbmRlbnRhdGlvbjtcbiAgICAgICAgICAgIGluZGVudGF0aW9uICs9IHdoaXRlc3BhY2U7XG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IGFycmF5Q2xhc3MpIHtcbiAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgc2VyaWFsaXplIGFycmF5IGVsZW1lbnRzLlxuICAgICAgICAgICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gdmFsdWUubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBzZXJpYWxpemUoaW5kZXgsIHZhbHVlLCBjYWxsYmFjaywgcHJvcGVydGllcywgd2hpdGVzcGFjZSwgaW5kZW50YXRpb24sIHN0YWNrKTtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudCA9PT0gdW5kZWYgPyBcIm51bGxcIiA6IGVsZW1lbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdHMubGVuZ3RoID8gKHdoaXRlc3BhY2UgPyBcIltcXG5cIiArIGluZGVudGF0aW9uICsgcmVzdWx0cy5qb2luKFwiLFxcblwiICsgaW5kZW50YXRpb24pICsgXCJcXG5cIiArIHByZWZpeCArIFwiXVwiIDogKFwiW1wiICsgcmVzdWx0cy5qb2luKFwiLFwiKSArIFwiXVwiKSkgOiBcIltdXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXJpYWxpemUgb2JqZWN0IG1lbWJlcnMuIE1lbWJlcnMgYXJlIHNlbGVjdGVkIGZyb21cbiAgICAgICAgICAgICAgLy8gZWl0aGVyIGEgdXNlci1zcGVjaWZpZWQgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lcywgb3IgdGhlIG9iamVjdFxuICAgICAgICAgICAgICAvLyBpdHNlbGYuXG4gICAgICAgICAgICAgIGZvckVhY2gocHJvcGVydGllcyB8fCB2YWx1ZSwgZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBzZXJpYWxpemUocHJvcGVydHksIHZhbHVlLCBjYWxsYmFjaywgcHJvcGVydGllcywgd2hpdGVzcGFjZSwgaW5kZW50YXRpb24sIHN0YWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCAhPT0gdW5kZWYpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zOiBcIklmIGBnYXBgIHt3aGl0ZXNwYWNlfVxuICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCBgbWVtYmVyYCB7cXVvdGUocHJvcGVydHkpICsgXCI6XCJ9XG4gICAgICAgICAgICAgICAgICAvLyBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBgbWVtYmVyYCBhbmQgdGhlIGBzcGFjZWAgY2hhcmFjdGVyLlwiXG4gICAgICAgICAgICAgICAgICAvLyBUaGUgXCJgc3BhY2VgIGNoYXJhY3RlclwiIHJlZmVycyB0byB0aGUgbGl0ZXJhbCBzcGFjZVxuICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVyLCBub3QgdGhlIGBzcGFjZWAge3dpZHRofSBhcmd1bWVudCBwcm92aWRlZCB0b1xuICAgICAgICAgICAgICAgICAgLy8gYEpTT04uc3RyaW5naWZ5YC5cbiAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChxdW90ZShwcm9wZXJ0eSkgKyBcIjpcIiArICh3aGl0ZXNwYWNlID8gXCIgXCIgOiBcIlwiKSArIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdHMubGVuZ3RoID8gKHdoaXRlc3BhY2UgPyBcIntcXG5cIiArIGluZGVudGF0aW9uICsgcmVzdWx0cy5qb2luKFwiLFxcblwiICsgaW5kZW50YXRpb24pICsgXCJcXG5cIiArIHByZWZpeCArIFwifVwiIDogKFwie1wiICsgcmVzdWx0cy5qb2luKFwiLFwiKSArIFwifVwiKSkgOiBcInt9XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG9iamVjdCBmcm9tIHRoZSB0cmF2ZXJzZWQgb2JqZWN0IHN0YWNrLlxuICAgICAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQdWJsaWM6IGBKU09OLnN0cmluZ2lmeWAuIFNlZSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4zLlxuICAgICAgICBleHBvcnRzLnN0cmluZ2lmeSA9IGZ1bmN0aW9uIChzb3VyY2UsIGZpbHRlciwgd2lkdGgpIHtcbiAgICAgICAgICB2YXIgd2hpdGVzcGFjZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIGNsYXNzTmFtZTtcbiAgICAgICAgICBpZiAob2JqZWN0VHlwZXNbdHlwZW9mIGZpbHRlcl0gJiYgZmlsdGVyKSB7XG4gICAgICAgICAgICBpZiAoKGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwoZmlsdGVyKSkgPT0gZnVuY3Rpb25DbGFzcykge1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGZpbHRlcjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IGFycmF5Q2xhc3MpIHtcbiAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgcHJvcGVydHkgbmFtZXMgYXJyYXkgaW50byBhIG1ha2VzaGlmdCBzZXQuXG4gICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwLCBsZW5ndGggPSBmaWx0ZXIubGVuZ3RoLCB2YWx1ZTsgaW5kZXggPCBsZW5ndGg7IHZhbHVlID0gZmlsdGVyW2luZGV4KytdLCAoKGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwodmFsdWUpKSwgY2xhc3NOYW1lID09IHN0cmluZ0NsYXNzIHx8IGNsYXNzTmFtZSA9PSBudW1iZXJDbGFzcykgJiYgKHByb3BlcnRpZXNbdmFsdWVdID0gMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAod2lkdGgpIHtcbiAgICAgICAgICAgIGlmICgoY2xhc3NOYW1lID0gZ2V0Q2xhc3MuY2FsbCh3aWR0aCkpID09IG51bWJlckNsYXNzKSB7XG4gICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGB3aWR0aGAgdG8gYW4gaW50ZWdlciBhbmQgY3JlYXRlIGEgc3RyaW5nIGNvbnRhaW5pbmdcbiAgICAgICAgICAgICAgLy8gYHdpZHRoYCBudW1iZXIgb2Ygc3BhY2UgY2hhcmFjdGVycy5cbiAgICAgICAgICAgICAgaWYgKCh3aWR0aCAtPSB3aWR0aCAlIDEpID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAod2hpdGVzcGFjZSA9IFwiXCIsIHdpZHRoID4gMTAgJiYgKHdpZHRoID0gMTApOyB3aGl0ZXNwYWNlLmxlbmd0aCA8IHdpZHRoOyB3aGl0ZXNwYWNlICs9IFwiIFwiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjbGFzc05hbWUgPT0gc3RyaW5nQ2xhc3MpIHtcbiAgICAgICAgICAgICAgd2hpdGVzcGFjZSA9IHdpZHRoLmxlbmd0aCA8PSAxMCA/IHdpZHRoIDogd2lkdGguc2xpY2UoMCwgMTApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBPcGVyYSA8PSA3LjU0dTIgZGlzY2FyZHMgdGhlIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggZW1wdHkgc3RyaW5nIGtleXNcbiAgICAgICAgICAvLyAoYFwiXCJgKSBvbmx5IGlmIHRoZXkgYXJlIHVzZWQgZGlyZWN0bHkgd2l0aGluIGFuIG9iamVjdCBtZW1iZXIgbGlzdFxuICAgICAgICAgIC8vIChlLmcuLCBgIShcIlwiIGluIHsgXCJcIjogMX0pYCkuXG4gICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShcIlwiLCAodmFsdWUgPSB7fSwgdmFsdWVbXCJcIl0gPSBzb3VyY2UsIHZhbHVlKSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIFwiXCIsIFtdKTtcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gUHVibGljOiBQYXJzZXMgYSBKU09OIHNvdXJjZSBzdHJpbmcuXG4gICAgICBpZiAoIWhhcyhcImpzb24tcGFyc2VcIikpIHtcbiAgICAgICAgdmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IEEgbWFwIG9mIGVzY2FwZWQgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCB0aGVpciB1bmVzY2FwZWRcbiAgICAgICAgLy8gZXF1aXZhbGVudHMuXG4gICAgICAgIHZhciBVbmVzY2FwZXMgPSB7XG4gICAgICAgICAgOTI6IFwiXFxcXFwiLFxuICAgICAgICAgIDM0OiAnXCInLFxuICAgICAgICAgIDQ3OiBcIi9cIixcbiAgICAgICAgICA5ODogXCJcXGJcIixcbiAgICAgICAgICAxMTY6IFwiXFx0XCIsXG4gICAgICAgICAgMTEwOiBcIlxcblwiLFxuICAgICAgICAgIDEwMjogXCJcXGZcIixcbiAgICAgICAgICAxMTQ6IFwiXFxyXCJcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogU3RvcmVzIHRoZSBwYXJzZXIgc3RhdGUuXG4gICAgICAgIHZhciBJbmRleCwgU291cmNlO1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZXNldHMgdGhlIHBhcnNlciBzdGF0ZSBhbmQgdGhyb3dzIGEgYFN5bnRheEVycm9yYC5cbiAgICAgICAgdmFyIGFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIEluZGV4ID0gU291cmNlID0gbnVsbDtcbiAgICAgICAgICB0aHJvdyBTeW50YXhFcnJvcigpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZXR1cm5zIHRoZSBuZXh0IHRva2VuLCBvciBgXCIkXCJgIGlmIHRoZSBwYXJzZXIgaGFzIHJlYWNoZWRcbiAgICAgICAgLy8gdGhlIGVuZCBvZiB0aGUgc291cmNlIHN0cmluZy4gQSB0b2tlbiBtYXkgYmUgYSBzdHJpbmcsIG51bWJlciwgYG51bGxgXG4gICAgICAgIC8vIGxpdGVyYWwsIG9yIEJvb2xlYW4gbGl0ZXJhbC5cbiAgICAgICAgdmFyIGxleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgc291cmNlID0gU291cmNlLCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoLCB2YWx1ZSwgYmVnaW4sIHBvc2l0aW9uLCBpc1NpZ25lZCwgY2hhckNvZGU7XG4gICAgICAgICAgd2hpbGUgKEluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KTtcbiAgICAgICAgICAgIHN3aXRjaCAoY2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuICAgICAgICAgICAgICAgIC8vIFNraXAgd2hpdGVzcGFjZSB0b2tlbnMsIGluY2x1ZGluZyB0YWJzLCBjYXJyaWFnZSByZXR1cm5zLCBsaW5lXG4gICAgICAgICAgICAgICAgLy8gZmVlZHMsIGFuZCBzcGFjZSBjaGFyYWN0ZXJzLlxuICAgICAgICAgICAgICAgIEluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgMTIzOiBjYXNlIDEyNTogY2FzZSA5MTogY2FzZSA5MzogY2FzZSA1ODogY2FzZSA0NDpcbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBhIHB1bmN0dWF0b3IgdG9rZW4gKGB7YCwgYH1gLCBgW2AsIGBdYCwgYDpgLCBvciBgLGApIGF0XG4gICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgcG9zaXRpb24uXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBjaGFySW5kZXhCdWdneSA/IHNvdXJjZS5jaGFyQXQoSW5kZXgpIDogc291cmNlW0luZGV4XTtcbiAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgICAgICAvLyBgXCJgIGRlbGltaXRzIGEgSlNPTiBzdHJpbmc7IGFkdmFuY2UgdG8gdGhlIG5leHQgY2hhcmFjdGVyIGFuZFxuICAgICAgICAgICAgICAgIC8vIGJlZ2luIHBhcnNpbmcgdGhlIHN0cmluZy4gU3RyaW5nIHRva2VucyBhcmUgcHJlZml4ZWQgd2l0aCB0aGVcbiAgICAgICAgICAgICAgICAvLyBzZW50aW5lbCBgQGAgY2hhcmFjdGVyIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSBwdW5jdHVhdG9ycyBhbmRcbiAgICAgICAgICAgICAgICAvLyBlbmQtb2Ytc3RyaW5nIHRva2Vucy5cbiAgICAgICAgICAgICAgICBmb3IgKHZhbHVlID0gXCJAXCIsIEluZGV4Kys7IEluZGV4IDwgbGVuZ3RoOykge1xuICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPCAzMikge1xuICAgICAgICAgICAgICAgICAgICAvLyBVbmVzY2FwZWQgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzICh0aG9zZSB3aXRoIGEgY29kZSB1bml0XG4gICAgICAgICAgICAgICAgICAgIC8vIGxlc3MgdGhhbiB0aGUgc3BhY2UgY2hhcmFjdGVyKSBhcmUgbm90IHBlcm1pdHRlZC5cbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhckNvZGUgPT0gOTIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSByZXZlcnNlIHNvbGlkdXMgKGBcXGApIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYW4gZXNjYXBlZFxuICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9sIGNoYXJhY3RlciAoaW5jbHVkaW5nIGBcImAsIGBcXGAsIGFuZCBgL2ApIG9yIFVuaWNvZGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSA5MjogY2FzZSAzNDogY2FzZSA0NzogY2FzZSA5ODogY2FzZSAxMTY6IGNhc2UgMTEwOiBjYXNlIDEwMjogY2FzZSAxMTQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZpdmUgZXNjYXBlZCBjb250cm9sIGNoYXJhY3RlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBVbmVzY2FwZXNbY2hhckNvZGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTE3OlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYFxcdWAgbWFya3MgdGhlIGJlZ2lubmluZyBvZiBhIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFuZCB2YWxpZGF0ZSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdXItZGlnaXQgY29kZSBwb2ludC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luID0gKytJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocG9zaXRpb24gPSBJbmRleCArIDQ7IEluZGV4IDwgcG9zaXRpb247IEluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgdmFsaWQgc2VxdWVuY2UgY29tcHJpc2VzIGZvdXIgaGV4ZGlnaXRzIChjYXNlLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbnNlbnNpdGl2ZSkgdGhhdCBmb3JtIGEgc2luZ2xlIGhleGFkZWNpbWFsIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1NyB8fCBjaGFyQ29kZSA+PSA5NyAmJiBjaGFyQ29kZSA8PSAxMDIgfHwgY2hhckNvZGUgPj0gNjUgJiYgY2hhckNvZGUgPD0gNzApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXZpdmUgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gZnJvbUNoYXJDb2RlKFwiMHhcIiArIHNvdXJjZS5zbGljZShiZWdpbiwgSW5kZXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSAzNCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEFuIHVuZXNjYXBlZCBkb3VibGUtcXVvdGUgY2hhcmFjdGVyIG1hcmtzIHRoZSBlbmQgb2YgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgLy8gc3RyaW5nLlxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBiZWdpbiA9IEluZGV4O1xuICAgICAgICAgICAgICAgICAgICAvLyBPcHRpbWl6ZSBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGEgc3RyaW5nIGlzIHZhbGlkLlxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hhckNvZGUgPj0gMzIgJiYgY2hhckNvZGUgIT0gOTIgJiYgY2hhckNvZGUgIT0gMzQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgc3RyaW5nIGFzLWlzLlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBzb3VyY2Uuc2xpY2UoYmVnaW4sIEluZGV4KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KSA9PSAzNCkge1xuICAgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgYW5kIHJldHVybiB0aGUgcmV2aXZlZCBzdHJpbmcuXG4gICAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBVbnRlcm1pbmF0ZWQgc3RyaW5nLlxuICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgbnVtYmVycyBhbmQgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgYmVnaW4gPSBJbmRleDtcbiAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHBhc3QgdGhlIG5lZ2F0aXZlIHNpZ24sIGlmIG9uZSBpcyBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDQ1KSB7XG4gICAgICAgICAgICAgICAgICBpc1NpZ25lZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBQYXJzZSBhbiBpbnRlZ2VyIG9yIGZsb2F0aW5nLXBvaW50IHZhbHVlLlxuICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nykge1xuICAgICAgICAgICAgICAgICAgLy8gTGVhZGluZyB6ZXJvZXMgYXJlIGludGVycHJldGVkIGFzIG9jdGFsIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDQ4ICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCArIDEpKSwgY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWwgb2N0YWwgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlzU2lnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAvLyBQYXJzZSB0aGUgaW50ZWdlciBjb21wb25lbnQuXG4gICAgICAgICAgICAgICAgICBmb3IgKDsgSW5kZXggPCBsZW5ndGggJiYgKChjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KTsgSW5kZXgrKyk7XG4gICAgICAgICAgICAgICAgICAvLyBGbG9hdHMgY2Fubm90IGNvbnRhaW4gYSBsZWFkaW5nIGRlY2ltYWwgcG9pbnQ7IGhvd2V2ZXIsIHRoaXNcbiAgICAgICAgICAgICAgICAgIC8vIGNhc2UgaXMgYWxyZWFkeSBhY2NvdW50ZWQgZm9yIGJ5IHRoZSBwYXJzZXIuXG4gICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpID09IDQ2KSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gKytJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGhlIGRlY2ltYWwgY29tcG9uZW50LlxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcG9zaXRpb24gPCBsZW5ndGggJiYgKChjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KHBvc2l0aW9uKSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KTsgcG9zaXRpb24rKyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWwgdHJhaWxpbmcgZGVjaW1hbC5cbiAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEluZGV4ID0gcG9zaXRpb247XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvLyBQYXJzZSBleHBvbmVudHMuIFRoZSBgZWAgZGVub3RpbmcgdGhlIGV4cG9uZW50IGlzXG4gICAgICAgICAgICAgICAgICAvLyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gMTAxIHx8IGNoYXJDb2RlID09IDY5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoKytJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNraXAgcGFzdCB0aGUgc2lnbiBmb2xsb3dpbmcgdGhlIGV4cG9uZW50LCBpZiBvbmUgaXNcbiAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gNDMgfHwgY2hhckNvZGUgPT0gNDUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIHRoZSBleHBvbmVudGlhbCBjb21wb25lbnQuXG4gICAgICAgICAgICAgICAgICAgIGZvciAocG9zaXRpb24gPSBJbmRleDsgcG9zaXRpb24gPCBsZW5ndGggJiYgKChjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KHBvc2l0aW9uKSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KTsgcG9zaXRpb24rKyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIElsbGVnYWwgZW1wdHkgZXhwb25lbnQuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBJbmRleCA9IHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy8gQ29lcmNlIHRoZSBwYXJzZWQgdmFsdWUgdG8gYSBKYXZhU2NyaXB0IG51bWJlci5cbiAgICAgICAgICAgICAgICAgIHJldHVybiArc291cmNlLnNsaWNlKGJlZ2luLCBJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEEgbmVnYXRpdmUgc2lnbiBtYXkgb25seSBwcmVjZWRlIG51bWJlcnMuXG4gICAgICAgICAgICAgICAgaWYgKGlzU2lnbmVkKSB7XG4gICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBgdHJ1ZWAsIGBmYWxzZWAsIGFuZCBgbnVsbGAgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5zbGljZShJbmRleCwgSW5kZXggKyA0KSA9PSBcInRydWVcIikge1xuICAgICAgICAgICAgICAgICAgSW5kZXggKz0gNDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlLnNsaWNlKEluZGV4LCBJbmRleCArIDUpID09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgICAgICAgSW5kZXggKz0gNTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZS5zbGljZShJbmRleCwgSW5kZXggKyA0KSA9PSBcIm51bGxcIikge1xuICAgICAgICAgICAgICAgICAgSW5kZXggKz0gNDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBVbnJlY29nbml6ZWQgdG9rZW4uXG4gICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmV0dXJuIHRoZSBzZW50aW5lbCBgJGAgY2hhcmFjdGVyIGlmIHRoZSBwYXJzZXIgaGFzIHJlYWNoZWQgdGhlIGVuZFxuICAgICAgICAgIC8vIG9mIHRoZSBzb3VyY2Ugc3RyaW5nLlxuICAgICAgICAgIHJldHVybiBcIiRcIjtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUGFyc2VzIGEgSlNPTiBgdmFsdWVgIHRva2VuLlxuICAgICAgICB2YXIgZ2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdHMsIGhhc01lbWJlcnM7XG4gICAgICAgICAgaWYgKHZhbHVlID09IFwiJFwiKSB7XG4gICAgICAgICAgICAvLyBVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dC5cbiAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaWYgKChjaGFySW5kZXhCdWdneSA/IHZhbHVlLmNoYXJBdCgwKSA6IHZhbHVlWzBdKSA9PSBcIkBcIikge1xuICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHNlbnRpbmVsIGBAYCBjaGFyYWN0ZXIuXG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zbGljZSgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFBhcnNlIG9iamVjdCBhbmQgYXJyYXkgbGl0ZXJhbHMuXG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJbXCIpIHtcbiAgICAgICAgICAgICAgLy8gUGFyc2VzIGEgSlNPTiBhcnJheSwgcmV0dXJuaW5nIGEgbmV3IEphdmFTY3JpcHQgYXJyYXkuXG4gICAgICAgICAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yICg7OyBoYXNNZW1iZXJzIHx8IChoYXNNZW1iZXJzID0gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGxleCgpO1xuICAgICAgICAgICAgICAgIC8vIEEgY2xvc2luZyBzcXVhcmUgYnJhY2tldCBtYXJrcyB0aGUgZW5kIG9mIHRoZSBhcnJheSBsaXRlcmFsLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIl1cIikge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBhcnJheSBsaXRlcmFsIGNvbnRhaW5zIGVsZW1lbnRzLCB0aGUgY3VycmVudCB0b2tlblxuICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBhIGNvbW1hIHNlcGFyYXRpbmcgdGhlIHByZXZpb3VzIGVsZW1lbnQgZnJvbSB0aGVcbiAgICAgICAgICAgICAgICAvLyBuZXh0LlxuICAgICAgICAgICAgICAgIGlmIChoYXNNZW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiXVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVW5leHBlY3RlZCB0cmFpbGluZyBgLGAgaW4gYXJyYXkgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBBIGAsYCBtdXN0IHNlcGFyYXRlIGVhY2ggYXJyYXkgZWxlbWVudC5cbiAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRWxpc2lvbnMgYW5kIGxlYWRpbmcgY29tbWFzIGFyZSBub3QgcGVybWl0dGVkLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIixcIikge1xuICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGdldCh2YWx1ZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBcIntcIikge1xuICAgICAgICAgICAgICAvLyBQYXJzZXMgYSBKU09OIG9iamVjdCwgcmV0dXJuaW5nIGEgbmV3IEphdmFTY3JpcHQgb2JqZWN0LlxuICAgICAgICAgICAgICByZXN1bHRzID0ge307XG4gICAgICAgICAgICAgIGZvciAoOzsgaGFzTWVtYmVycyB8fCAoaGFzTWVtYmVycyA9IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAvLyBBIGNsb3NpbmcgY3VybHkgYnJhY2UgbWFya3MgdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwifVwiKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBsaXRlcmFsIGNvbnRhaW5zIG1lbWJlcnMsIHRoZSBjdXJyZW50IHRva2VuXG4gICAgICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGEgY29tbWEgc2VwYXJhdG9yLlxuICAgICAgICAgICAgICAgIGlmIChoYXNNZW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwifVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gVW5leHBlY3RlZCB0cmFpbGluZyBgLGAgaW4gb2JqZWN0IGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBgLGAgbXVzdCBzZXBhcmF0ZSBlYWNoIG9iamVjdCBtZW1iZXIuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIExlYWRpbmcgY29tbWFzIGFyZSBub3QgcGVybWl0dGVkLCBvYmplY3QgcHJvcGVydHkgbmFtZXMgbXVzdCBiZVxuICAgICAgICAgICAgICAgIC8vIGRvdWJsZS1xdW90ZWQgc3RyaW5ncywgYW5kIGEgYDpgIG11c3Qgc2VwYXJhdGUgZWFjaCBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIC8vIG5hbWUgYW5kIHZhbHVlLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIixcIiB8fCB0eXBlb2YgdmFsdWUgIT0gXCJzdHJpbmdcIiB8fCAoY2hhckluZGV4QnVnZ3kgPyB2YWx1ZS5jaGFyQXQoMCkgOiB2YWx1ZVswXSkgIT0gXCJAXCIgfHwgbGV4KCkgIT0gXCI6XCIpIHtcbiAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHNbdmFsdWUuc2xpY2UoMSldID0gZ2V0KGxleCgpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdG9rZW4gZW5jb3VudGVyZWQuXG4gICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFVwZGF0ZXMgYSB0cmF2ZXJzZWQgb2JqZWN0IG1lbWJlci5cbiAgICAgICAgdmFyIHVwZGF0ZSA9IGZ1bmN0aW9uIChzb3VyY2UsIHByb3BlcnR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIHZhciBlbGVtZW50ID0gd2Fsayhzb3VyY2UsIHByb3BlcnR5LCBjYWxsYmFjayk7XG4gICAgICAgICAgaWYgKGVsZW1lbnQgPT09IHVuZGVmKSB7XG4gICAgICAgICAgICBkZWxldGUgc291cmNlW3Byb3BlcnR5XTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc291cmNlW3Byb3BlcnR5XSA9IGVsZW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBSZWN1cnNpdmVseSB0cmF2ZXJzZXMgYSBwYXJzZWQgSlNPTiBvYmplY3QsIGludm9raW5nIHRoZVxuICAgICAgICAvLyBgY2FsbGJhY2tgIGZ1bmN0aW9uIGZvciBlYWNoIHZhbHVlLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZVxuICAgICAgICAvLyBgV2Fsayhob2xkZXIsIG5hbWUpYCBvcGVyYXRpb24gZGVmaW5lZCBpbiBFUyA1LjEgc2VjdGlvbiAxNS4xMi4yLlxuICAgICAgICB2YXIgd2FsayA9IGZ1bmN0aW9uIChzb3VyY2UsIHByb3BlcnR5LCBjYWxsYmFjaykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVtwcm9wZXJ0eV0sIGxlbmd0aDtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGBmb3JFYWNoYCBjYW4ndCBiZSB1c2VkIHRvIHRyYXZlcnNlIGFuIGFycmF5IGluIE9wZXJhIDw9IDguNTRcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgaXRzIGBPYmplY3QjaGFzT3duUHJvcGVydHlgIGltcGxlbWVudGF0aW9uIHJldHVybnMgYGZhbHNlYFxuICAgICAgICAgICAgLy8gZm9yIGFycmF5IGluZGljZXMgKGUuZy4sIGAhWzEsIDIsIDNdLmhhc093blByb3BlcnR5KFwiMFwiKWApLlxuICAgICAgICAgICAgaWYgKGdldENsYXNzLmNhbGwodmFsdWUpID09IGFycmF5Q2xhc3MpIHtcbiAgICAgICAgICAgICAgZm9yIChsZW5ndGggPSB2YWx1ZS5sZW5ndGg7IGxlbmd0aC0tOykge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSh2YWx1ZSwgbGVuZ3RoLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZvckVhY2godmFsdWUsIGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSh2YWx1ZSwgcHJvcGVydHksIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKHNvdXJjZSwgcHJvcGVydHksIHZhbHVlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBQdWJsaWM6IGBKU09OLnBhcnNlYC4gU2VlIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjIuXG4gICAgICAgIGV4cG9ydHMucGFyc2UgPSBmdW5jdGlvbiAoc291cmNlLCBjYWxsYmFjaykge1xuICAgICAgICAgIHZhciByZXN1bHQsIHZhbHVlO1xuICAgICAgICAgIEluZGV4ID0gMDtcbiAgICAgICAgICBTb3VyY2UgPSBcIlwiICsgc291cmNlO1xuICAgICAgICAgIHJlc3VsdCA9IGdldChsZXgoKSk7XG4gICAgICAgICAgLy8gSWYgYSBKU09OIHN0cmluZyBjb250YWlucyBtdWx0aXBsZSB0b2tlbnMsIGl0IGlzIGludmFsaWQuXG4gICAgICAgICAgaWYgKGxleCgpICE9IFwiJFwiKSB7XG4gICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZXNldCB0aGUgcGFyc2VyIHN0YXRlLlxuICAgICAgICAgIEluZGV4ID0gU291cmNlID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sgJiYgZ2V0Q2xhc3MuY2FsbChjYWxsYmFjaykgPT0gZnVuY3Rpb25DbGFzcyA/IHdhbGsoKHZhbHVlID0ge30sIHZhbHVlW1wiXCJdID0gcmVzdWx0LCB2YWx1ZSksIFwiXCIsIGNhbGxiYWNrKSA6IHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnRzW1wicnVuSW5Db250ZXh0XCJdID0gcnVuSW5Db250ZXh0O1xuICAgIHJldHVybiBleHBvcnRzO1xuICB9XG5cbiAgaWYgKGZyZWVFeHBvcnRzICYmICFpc0xvYWRlcikge1xuICAgIC8vIEV4cG9ydCBmb3IgQ29tbW9uSlMgZW52aXJvbm1lbnRzLlxuICAgIHJ1bkluQ29udGV4dChyb290LCBmcmVlRXhwb3J0cyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRXhwb3J0IGZvciB3ZWIgYnJvd3NlcnMgYW5kIEphdmFTY3JpcHQgZW5naW5lcy5cbiAgICB2YXIgbmF0aXZlSlNPTiA9IHJvb3QuSlNPTixcbiAgICAgICAgcHJldmlvdXNKU09OID0gcm9vdFtcIkpTT04zXCJdLFxuICAgICAgICBpc1Jlc3RvcmVkID0gZmFsc2U7XG5cbiAgICB2YXIgSlNPTjMgPSBydW5JbkNvbnRleHQocm9vdCwgKHJvb3RbXCJKU09OM1wiXSA9IHtcbiAgICAgIC8vIFB1YmxpYzogUmVzdG9yZXMgdGhlIG9yaWdpbmFsIHZhbHVlIG9mIHRoZSBnbG9iYWwgYEpTT05gIG9iamVjdCBhbmRcbiAgICAgIC8vIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGBKU09OM2Agb2JqZWN0LlxuICAgICAgXCJub0NvbmZsaWN0XCI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFpc1Jlc3RvcmVkKSB7XG4gICAgICAgICAgaXNSZXN0b3JlZCA9IHRydWU7XG4gICAgICAgICAgcm9vdC5KU09OID0gbmF0aXZlSlNPTjtcbiAgICAgICAgICByb290W1wiSlNPTjNcIl0gPSBwcmV2aW91c0pTT047XG4gICAgICAgICAgbmF0aXZlSlNPTiA9IHByZXZpb3VzSlNPTiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04zO1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIHJvb3QuSlNPTiA9IHtcbiAgICAgIFwicGFyc2VcIjogSlNPTjMucGFyc2UsXG4gICAgICBcInN0cmluZ2lmeVwiOiBKU09OMy5zdHJpbmdpZnlcbiAgICB9O1xuICB9XG5cbiAgLy8gRXhwb3J0IGZvciBhc3luY2hyb25vdXMgbW9kdWxlIGxvYWRlcnMuXG4gIGlmIChpc0xvYWRlcikge1xuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gSlNPTjM7XG4gICAgfSk7XG4gIH1cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3XG4gKiBtZW1iZXIgaXMgTygxKSwgdGVzdGluZyBmb3IgbWVtYmVyc2hpcCBpcyBPKDEpLCBhbmQgZmluZGluZyB0aGUgaW5kZXggb2YgYW5cbiAqIGVsZW1lbnQgaXMgTygxKS4gUmVtb3ZpbmcgZWxlbWVudHMgZnJvbSB0aGUgc2V0IGlzIG5vdCBzdXBwb3J0ZWQuIE9ubHlcbiAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgbWVtYmVyc2hpcC5cbiAqL1xuZnVuY3Rpb24gQXJyYXlTZXQoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8qKlxuICogU3RhdGljIG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gKi9cbkFycmF5U2V0LmZyb21BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X2Zyb21BcnJheShhQXJyYXksIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYUFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgc2V0LmFkZChhQXJyYXlbaV0sIGFBbGxvd0R1cGxpY2F0ZXMpO1xuICB9XG4gIHJldHVybiBzZXQ7XG59O1xuXG4vKipcbiAqIFJldHVybiBob3cgbWFueSB1bmlxdWUgaXRlbXMgYXJlIGluIHRoaXMgQXJyYXlTZXQuIElmIGR1cGxpY2F0ZXMgaGF2ZSBiZWVuXG4gKiBhZGRlZCwgdGhhbiB0aG9zZSBkbyBub3QgY291bnQgdG93YXJkcyB0aGUgc2l6ZS5cbiAqXG4gKiBAcmV0dXJucyBOdW1iZXJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiBBcnJheVNldF9zaXplKCkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fc2V0KS5sZW5ndGg7XG59O1xuXG4vKipcbiAqIEFkZCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoaXMgc2V0LlxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gQXJyYXlTZXRfYWRkKGFTdHIsIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICB2YXIgaXNEdXBsaWNhdGUgPSBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB2YXIgaWR4ID0gdGhpcy5fYXJyYXkubGVuZ3RoO1xuICBpZiAoIWlzRHVwbGljYXRlIHx8IGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICB0aGlzLl9hcnJheS5wdXNoKGFTdHIpO1xuICB9XG4gIGlmICghaXNEdXBsaWNhdGUpIHtcbiAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gIH1cbn07XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIHN0cmluZyBhIG1lbWJlciBvZiB0aGlzIHNldD9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIEFycmF5U2V0X2hhcyhhU3RyKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgcmV0dXJuIGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIGlmIChoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgaW50VG9DaGFyTWFwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcblxuLyoqXG4gKiBFbmNvZGUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMCB0byA2MyB0byBhIHNpbmdsZSBiYXNlIDY0IGRpZ2l0LlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgaWYgKDAgPD0gbnVtYmVyICYmIG51bWJlciA8IGludFRvQ2hhck1hcC5sZW5ndGgpIHtcbiAgICByZXR1cm4gaW50VG9DaGFyTWFwW251bWJlcl07XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogXCIgKyBudW1iZXIpO1xufTtcblxuLyoqXG4gKiBEZWNvZGUgYSBzaW5nbGUgYmFzZSA2NCBjaGFyYWN0ZXIgY29kZSBkaWdpdCB0byBhbiBpbnRlZ2VyLiBSZXR1cm5zIC0xIG9uXG4gKiBmYWlsdXJlLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIChjaGFyQ29kZSkge1xuICB2YXIgYmlnQSA9IDY1OyAgICAgLy8gJ0EnXG4gIHZhciBiaWdaID0gOTA7ICAgICAvLyAnWidcblxuICB2YXIgbGl0dGxlQSA9IDk3OyAgLy8gJ2EnXG4gIHZhciBsaXR0bGVaID0gMTIyOyAvLyAneidcblxuICB2YXIgemVybyA9IDQ4OyAgICAgLy8gJzAnXG4gIHZhciBuaW5lID0gNTc7ICAgICAvLyAnOSdcblxuICB2YXIgcGx1cyA9IDQzOyAgICAgLy8gJysnXG4gIHZhciBzbGFzaCA9IDQ3OyAgICAvLyAnLydcblxuICB2YXIgbGl0dGxlT2Zmc2V0ID0gMjY7XG4gIHZhciBudW1iZXJPZmZzZXQgPSA1MjtcblxuICAvLyAwIC0gMjU6IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXG4gIGlmIChiaWdBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGJpZ1opIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gYmlnQSk7XG4gIH1cblxuICAvLyAyNiAtIDUxOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuICBpZiAobGl0dGxlQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBsaXR0bGVaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGxpdHRsZUEgKyBsaXR0bGVPZmZzZXQpO1xuICB9XG5cbiAgLy8gNTIgLSA2MTogMDEyMzQ1Njc4OVxuICBpZiAoemVybyA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBuaW5lKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIHplcm8gKyBudW1iZXJPZmZzZXQpO1xuICB9XG5cbiAgLy8gNjI6ICtcbiAgaWYgKGNoYXJDb2RlID09IHBsdXMpIHtcbiAgICByZXR1cm4gNjI7XG4gIH1cblxuICAvLyA2MzogL1xuICBpZiAoY2hhckNvZGUgPT0gc2xhc2gpIHtcbiAgICByZXR1cm4gNjM7XG4gIH1cblxuICAvLyBJbnZhbGlkIGJhc2U2NCBkaWdpdC5cbiAgcmV0dXJuIC0xO1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5leHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBSZWN1cnNpdmUgaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaC5cbiAqXG4gKiBAcGFyYW0gYUxvdyBJbmRpY2VzIGhlcmUgYW5kIGxvd2VyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYUhpZ2ggSW5kaWNlcyBoZXJlIGFuZCBoaWdoZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IGJlaW5nIHNlYXJjaGVkIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIG5vbi1lbXB0eSBhcnJheSBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBGdW5jdGlvbiB3aGljaCB0YWtlcyB0d28gZWxlbWVudHMgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgLy9cbiAgLy8gICAxLiBXZSBmaW5kIHRoZSBleGFjdCBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgLy9cbiAgLy8gICAyLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGJ1dCB3ZSBjYW4gcmV0dXJuIHRoZSBpbmRleCBvZlxuICAvLyAgICAgIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudC5cbiAgLy9cbiAgLy8gICAzLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGFuZCB0aGVyZSBpcyBubyBuZXh0LWNsb3Nlc3RcbiAgLy8gICAgICBlbGVtZW50IHRoYW4gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgc28gd2UgcmV0dXJuIC0xLlxuICB2YXIgbWlkID0gTWF0aC5mbG9vcigoYUhpZ2ggLSBhTG93KSAvIDIpICsgYUxvdztcbiAgdmFyIGNtcCA9IGFDb21wYXJlKGFOZWVkbGUsIGFIYXlzdGFja1ttaWRdLCB0cnVlKTtcbiAgaWYgKGNtcCA9PT0gMCkge1xuICAgIC8vIEZvdW5kIHRoZSBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgICByZXR1cm4gbWlkO1xuICB9XG4gIGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGdyZWF0ZXIgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAoYUhpZ2ggLSBtaWQgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgdXBwZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2gobWlkLCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIFRoZSBleGFjdCBuZWVkbGUgZWxlbWVudCB3YXMgbm90IGZvdW5kIGluIHRoaXMgaGF5c3RhY2suIERldGVybWluZSBpZlxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBhSGlnaCA8IGFIYXlzdGFjay5sZW5ndGggPyBhSGlnaCA6IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGxlc3MgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAobWlkIC0gYUxvdyA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSBsb3dlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBtaWQsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYUxvdyA8IDAgPyAtMSA6IGFMb3c7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoIHdoaWNoIHdpbGwgYWx3YXlzIHRyeSBhbmQgcmV0dXJuXG4gKiB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgZWxlbWVudCBpZiB0aGVyZSBpcyBubyBleGFjdCBoaXQuIFRoaXMgaXMgYmVjYXVzZVxuICogbWFwcGluZ3MgYmV0d2VlbiBvcmlnaW5hbCBhbmQgZ2VuZXJhdGVkIGxpbmUvY29sIHBhaXJzIGFyZSBzaW5nbGUgcG9pbnRzLFxuICogYW5kIHRoZXJlIGlzIGFuIGltcGxpY2l0IHJlZ2lvbiBiZXR3ZWVuIGVhY2ggb2YgdGhlbSwgc28gYSBtaXNzIGp1c3QgbWVhbnNcbiAqIHRoYXQgeW91IGFyZW4ndCBvbiB0aGUgdmVyeSBzdGFydCBvZiBhIHJlZ2lvbi5cbiAqXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCB5b3UgYXJlIGxvb2tpbmcgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgYXJyYXkgdGhhdCBpcyBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBuZWVkbGUgYW5kIGFuIGVsZW1lbnQgaW4gdGhlXG4gKiAgICAgYXJyYXkgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5lZWRsZSBpcyBsZXNzXG4gKiAgICAgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgZWxlbWVudCwgcmVzcGVjdGl2ZWx5LlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICovXG5leHBvcnRzLnNlYXJjaCA9IGZ1bmN0aW9uIHNlYXJjaChhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICBpZiAoYUhheXN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHJlY3Vyc2l2ZVNlYXJjaCgtMSwgYUhheXN0YWNrLmxlbmd0aCwgYU5lZWRsZSwgYUhheXN0YWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbXBhcmUsIGFCaWFzIHx8IGV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLy8gV2UgaGF2ZSBmb3VuZCBlaXRoZXIgdGhlIGV4YWN0IGVsZW1lbnQsIG9yIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudCB0aGFuXG4gIC8vIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIHN1Y2hcbiAgLy8gZWxlbWVudC4gTWFrZSBzdXJlIHdlIGFsd2F5cyByZXR1cm4gdGhlIHNtYWxsZXN0IG9mIHRoZXNlLlxuICB3aGlsZSAoaW5kZXggLSAxID49IDApIHtcbiAgICBpZiAoYUNvbXBhcmUoYUhheXN0YWNrW2luZGV4XSwgYUhheXN0YWNrW2luZGV4IC0gMV0sIHRydWUpICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLS1pbmRleDtcbiAgfVxuXG4gIHJldHVybiBpbmRleDtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGdldHRpbmcgdmFsdWVzIGZyb20gcGFyYW1ldGVyL29wdGlvbnNcbiAqIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGFyZ3MgVGhlIG9iamVjdCB3ZSBhcmUgZXh0cmFjdGluZyB2YWx1ZXMgZnJvbVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdlIGFyZSBnZXR0aW5nLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBBbiBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmdcbiAqIGZyb20gdGhlIG9iamVjdC4gSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkIGFuZCB0aGUgcHJvcGVydHkgaXMgbWlzc2luZywgYW5cbiAqIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICovXG5mdW5jdGlvbiBnZXRBcmcoYUFyZ3MsIGFOYW1lLCBhRGVmYXVsdFZhbHVlKSB7XG4gIGlmIChhTmFtZSBpbiBhQXJncykge1xuICAgIHJldHVybiBhQXJnc1thTmFtZV07XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBhRGVmYXVsdFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYU5hbWUgKyAnXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKTtcbiAgfVxufVxuZXhwb3J0cy5nZXRBcmcgPSBnZXRBcmc7XG5cbnZhciB1cmxSZWdleHAgPSAvXig/OihbXFx3K1xcLS5dKyk6KT9cXC9cXC8oPzooXFx3KzpcXHcrKUApPyhbXFx3Ll0qKSg/OjooXFxkKykpPyhcXFMqKSQvO1xudmFyIGRhdGFVcmxSZWdleHAgPSAvXmRhdGE6LitcXCwuKyQvO1xuXG5mdW5jdGlvbiB1cmxQYXJzZShhVXJsKSB7XG4gIHZhciBtYXRjaCA9IGFVcmwubWF0Y2godXJsUmVnZXhwKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NoZW1lOiBtYXRjaFsxXSxcbiAgICBhdXRoOiBtYXRjaFsyXSxcbiAgICBob3N0OiBtYXRjaFszXSxcbiAgICBwb3J0OiBtYXRjaFs0XSxcbiAgICBwYXRoOiBtYXRjaFs1XVxuICB9O1xufVxuZXhwb3J0cy51cmxQYXJzZSA9IHVybFBhcnNlO1xuXG5mdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFyc2VkVXJsKSB7XG4gIHZhciB1cmwgPSAnJztcbiAgaWYgKGFQYXJzZWRVcmwuc2NoZW1lKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuc2NoZW1lICsgJzonO1xuICB9XG4gIHVybCArPSAnLy8nO1xuICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuYXV0aCArICdAJztcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuaG9zdDtcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7XG4gICAgdXJsICs9IFwiOlwiICsgYVBhcnNlZFVybC5wb3J0XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucGF0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnBhdGg7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cbmV4cG9ydHMudXJsR2VuZXJhdGUgPSB1cmxHZW5lcmF0ZTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGF0aCwgb3IgdGhlIHBhdGggcG9ydGlvbiBvZiBhIFVSTDpcbiAqXG4gKiAtIFJlcGxhY2VzIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aCBvbmUgc2xhc2guXG4gKiAtIFJlbW92ZXMgdW5uZWNlc3NhcnkgJy4nIHBhcnRzLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICc8ZGlyPi8uLicgcGFydHMuXG4gKlxuICogQmFzZWQgb24gY29kZSBpbiB0aGUgTm9kZS5qcyAncGF0aCcgY29yZSBtb2R1bGUuXG4gKlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIHVybCB0byBub3JtYWxpemUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhUGF0aCkge1xuICB2YXIgcGF0aCA9IGFQYXRoO1xuICB2YXIgdXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICBpZiAodXJsKSB7XG4gICAgaWYgKCF1cmwucGF0aCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cbiAgICBwYXRoID0gdXJsLnBhdGg7XG4gIH1cbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCk7XG5cbiAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuICBmb3IgKHZhciBwYXJ0LCB1cCA9IDAsIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHBhcnQgPSBwYXJ0c1tpXTtcbiAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXAgPiAwKSB7XG4gICAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYmxhbmsgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuIFRyeWluZyB0byBnb1xuICAgICAgICAvLyBhYm92ZSB0aGUgcm9vdCBpcyBhIG5vLW9wLiBUaGVyZWZvcmUgd2UgY2FuIHJlbW92ZSBhbGwgJy4uJyBwYXJ0c1xuICAgICAgICAvLyBkaXJlY3RseSBhZnRlciB0aGUgcm9vdC5cbiAgICAgICAgcGFydHMuc3BsaWNlKGkgKyAxLCB1cCk7XG4gICAgICAgIHVwID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShpLCAyKTtcbiAgICAgICAgdXAtLTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcblxuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICBwYXRoID0gaXNBYnNvbHV0ZSA/ICcvJyA6ICcuJztcbiAgfVxuXG4gIGlmICh1cmwpIHtcbiAgICB1cmwucGF0aCA9IHBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKHVybCk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcblxuLyoqXG4gKiBKb2lucyB0d28gcGF0aHMvVVJMcy5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIGpvaW5lZCB3aXRoIHRoZSByb290LlxuICpcbiAqIC0gSWYgYVBhdGggaXMgYSBVUkwgb3IgYSBkYXRhIFVSSSwgYVBhdGggaXMgcmV0dXJuZWQsIHVubGVzcyBhUGF0aCBpcyBhXG4gKiAgIHNjaGVtZS1yZWxhdGl2ZSBVUkw6IFRoZW4gdGhlIHNjaGVtZSBvZiBhUm9vdCwgaWYgYW55LCBpcyBwcmVwZW5kZWRcbiAqICAgZmlyc3QuXG4gKiAtIE90aGVyd2lzZSBhUGF0aCBpcyBhIHBhdGguIElmIGFSb290IGlzIGEgVVJMLCB0aGVuIGl0cyBwYXRoIHBvcnRpb25cbiAqICAgaXMgdXBkYXRlZCB3aXRoIHRoZSByZXN1bHQgYW5kIGFSb290IGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhlIHJlc3VsdFxuICogICBpcyByZXR1cm5lZC5cbiAqICAgLSBJZiBhUGF0aCBpcyBhYnNvbHV0ZSwgdGhlIHJlc3VsdCBpcyBhUGF0aC5cbiAqICAgLSBPdGhlcndpc2UgdGhlIHR3byBwYXRocyBhcmUgam9pbmVkIHdpdGggYSBzbGFzaC5cbiAqIC0gSm9pbmluZyBmb3IgZXhhbXBsZSAnaHR0cDovLycgYW5kICd3d3cuZXhhbXBsZS5jb20nIGlzIGFsc28gc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBqb2luKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG4gIGlmIChhUGF0aCA9PT0gXCJcIikge1xuICAgIGFQYXRoID0gXCIuXCI7XG4gIH1cbiAgdmFyIGFQYXRoVXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICB2YXIgYVJvb3RVcmwgPSB1cmxQYXJzZShhUm9vdCk7XG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290ID0gYVJvb3RVcmwucGF0aCB8fCAnLyc7XG4gIH1cblxuICAvLyBgam9pbihmb28sICcvL3d3dy5leGFtcGxlLm9yZycpYFxuICBpZiAoYVBhdGhVcmwgJiYgIWFQYXRoVXJsLnNjaGVtZSkge1xuICAgIGlmIChhUm9vdFVybCkge1xuICAgICAgYVBhdGhVcmwuc2NoZW1lID0gYVJvb3RVcmwuc2NoZW1lO1xuICAgIH1cbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVBhdGhVcmwpO1xuICB9XG5cbiAgaWYgKGFQYXRoVXJsIHx8IGFQYXRoLm1hdGNoKGRhdGFVcmxSZWdleHApKSB7XG4gICAgcmV0dXJuIGFQYXRoO1xuICB9XG5cbiAgLy8gYGpvaW4oJ2h0dHA6Ly8nLCAnd3d3LmV4YW1wbGUuY29tJylgXG4gIGlmIChhUm9vdFVybCAmJiAhYVJvb3RVcmwuaG9zdCAmJiAhYVJvb3RVcmwucGF0aCkge1xuICAgIGFSb290VXJsLmhvc3QgPSBhUGF0aDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG5cbiAgdmFyIGpvaW5lZCA9IGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgPyBhUGF0aFxuICAgIDogbm9ybWFsaXplKGFSb290LnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgYVBhdGgpO1xuXG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290VXJsLnBhdGggPSBqb2luZWQ7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuICByZXR1cm4gam9pbmVkO1xufVxuZXhwb3J0cy5qb2luID0gam9pbjtcblxuZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24gKGFQYXRoKSB7XG4gIHJldHVybiBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJyB8fCAhIWFQYXRoLm1hdGNoKHVybFJlZ2V4cCk7XG59O1xuXG4vKipcbiAqIE1ha2UgYSBwYXRoIHJlbGF0aXZlIHRvIGEgVVJMIG9yIGFub3RoZXIgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIG1hZGUgcmVsYXRpdmUgdG8gYVJvb3QuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0aXZlKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG5cbiAgYVJvb3QgPSBhUm9vdC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgcGF0aCB0byBiZSBhYm92ZSB0aGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBzaW1wbHlcbiAgLy8gY2hlY2tpbmcgd2hldGhlciB0aGUgcm9vdCBpcyBhIHByZWZpeCBvZiB0aGUgcGF0aCB3b24ndCB3b3JrLiBJbnN0ZWFkLCB3ZVxuICAvLyBuZWVkIHRvIHJlbW92ZSBjb21wb25lbnRzIGZyb20gdGhlIHJvb3Qgb25lIGJ5IG9uZSwgdW50aWwgZWl0aGVyIHdlIGZpbmRcbiAgLy8gYSBwcmVmaXggdGhhdCBmaXRzLCBvciB3ZSBydW4gb3V0IG9mIGNvbXBvbmVudHMgdG8gcmVtb3ZlLlxuICB2YXIgbGV2ZWwgPSAwO1xuICB3aGlsZSAoYVBhdGguaW5kZXhPZihhUm9vdCArICcvJykgIT09IDApIHtcbiAgICB2YXIgaW5kZXggPSBhUm9vdC5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBvbmx5IHBhcnQgb2YgdGhlIHJvb3QgdGhhdCBpcyBsZWZ0IGlzIHRoZSBzY2hlbWUgKGkuZS4gaHR0cDovLyxcbiAgICAvLyBmaWxlOi8vLywgZXRjLiksIG9uZSBvciBtb3JlIHNsYXNoZXMgKC8pLCBvciBzaW1wbHkgbm90aGluZyBhdCBhbGwsIHdlXG4gICAgLy8gaGF2ZSBleGhhdXN0ZWQgYWxsIGNvbXBvbmVudHMsIHNvIHRoZSBwYXRoIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcm9vdC5cbiAgICBhUm9vdCA9IGFSb290LnNsaWNlKDAsIGluZGV4KTtcbiAgICBpZiAoYVJvb3QubWF0Y2goL14oW15cXC9dKzpcXC8pP1xcLyokLykpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICArK2xldmVsO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGFkZCBhIFwiLi4vXCIgZm9yIGVhY2ggY29tcG9uZW50IHdlIHJlbW92ZWQgZnJvbSB0aGUgcm9vdC5cbiAgcmV0dXJuIEFycmF5KGxldmVsICsgMSkuam9pbihcIi4uL1wiKSArIGFQYXRoLnN1YnN0cihhUm9vdC5sZW5ndGggKyAxKTtcbn1cbmV4cG9ydHMucmVsYXRpdmUgPSByZWxhdGl2ZTtcblxudmFyIHN1cHBvcnRzTnVsbFByb3RvID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAhKCdfX3Byb3RvX18nIGluIG9iaik7XG59KCkpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSAocykge1xuICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBCZWNhdXNlIGJlaGF2aW9yIGdvZXMgd2Fja3kgd2hlbiB5b3Ugc2V0IGBfX3Byb3RvX19gIG9uIG9iamVjdHMsIHdlXG4gKiBoYXZlIHRvIHByZWZpeCBhbGwgdGhlIHN0cmluZ3MgaW4gb3VyIHNldCB3aXRoIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXIuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvcHVsbC8zMSBhbmRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzMwXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbmZ1bmN0aW9uIHRvU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gJyQnICsgYVN0cjtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy50b1NldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiB0b1NldFN0cmluZztcblxuZnVuY3Rpb24gZnJvbVNldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuIGFTdHIuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMuZnJvbVNldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiBmcm9tU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBpc1Byb3RvU3RyaW5nKHMpIHtcbiAgaWYgKCFzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IHMubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPCA5IC8qIFwiX19wcm90b19fXCIubGVuZ3RoICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHMuY2hhckNvZGVBdChsZW5ndGggLSAxKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDIpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMykgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA0KSAhPT0gMTE2IC8qICd0JyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDUpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNikgIT09IDExNCAvKiAncicgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA3KSAhPT0gMTEyIC8qICdwJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDgpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOSkgIT09IDk1ICAvKiAnXycgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gbGVuZ3RoIC0gMTA7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHMuY2hhckNvZGVBdChpKSAhPT0gMzYgLyogJyQnICovKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiwgYnV0IGRpZmZlcmVudCBnZW5lcmF0ZWRcbiAqIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhIG1hcHBpbmcgd2l0aCBhXG4gKiBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyhtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGRlZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBpbmRpY2VzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICogbWFwcGluZyB3aXRoIGEgc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQ7XG5cbmZ1bmN0aW9uIHN0cmNtcChhU3RyMSwgYVN0cjIpIHtcbiAgaWYgKGFTdHIxID09PSBhU3RyMikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKGFTdHIxID4gYVN0cjIpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggaW5mbGF0ZWQgc291cmNlIGFuZCBuYW1lIHN0cmluZ3Mgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gc3RyY21wKG1hcHBpbmdBLnNvdXJjZSwgbWFwcGluZ0Iuc291cmNlKTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gc3RyY21wKG1hcHBpbmdBLm5hbWUsIG1hcHBpbmdCLm5hbWUpO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2stZ2VuZXJhdG9yJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tHZW5lcmF0b3IgPSBmYWN0b3J5KHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTdGFja0ZyYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFja3RyYWNlOiBmdW5jdGlvbiBTdGFja0dlbmVyYXRvciQkYmFja3RyYWNlKG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICAgICAgdmFyIG1heFN0YWNrU2l6ZSA9IDEwO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcHRzLm1heFN0YWNrU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBtYXhTdGFja1NpemUgPSBvcHRzLm1heFN0YWNrU2l6ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGN1cnIgPSBhcmd1bWVudHMuY2FsbGVlO1xuICAgICAgICAgICAgd2hpbGUgKGN1cnIgJiYgc3RhY2subGVuZ3RoIDwgbWF4U3RhY2tTaXplICYmIGN1cnJbJ2FyZ3VtZW50cyddKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxsb3cgVjggb3B0aW1pemF0aW9uc1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGN1cnJbJ2FyZ3VtZW50cyddLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBjdXJyWydhcmd1bWVudHMnXVtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKC9mdW5jdGlvbig/OlxccysoW1xcdyRdKykpK1xccypcXCgvLnRlc3QoY3Vyci50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ldyBTdGFja0ZyYW1lKHtmdW5jdGlvbk5hbWU6IFJlZ0V4cC4kMSB8fCB1bmRlZmluZWQsIGFyZ3M6IGFyZ3N9KSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh7YXJnczogYXJnc30pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci5jYWxsZXI7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZS1ncHMnLCBbJ3NvdXJjZS1tYXAnLCAnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc291cmNlLW1hcC9saWIvc291cmNlLW1hcC1jb25zdW1lcicpLCByZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tUcmFjZUdQUyA9IGZhY3Rvcnkocm9vdC5Tb3VyY2VNYXAgfHwgcm9vdC5zb3VyY2VNYXAsIHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTb3VyY2VNYXAsIFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBNYWtlIGEgWC1Eb21haW4gcmVxdWVzdCB0byB1cmwgYW5kIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB3aXRoIHJlc3BvbnNlIHRleHQgaWYgZnVsZmlsbGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gX3hkcih1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgcmVxLm9wZW4oJ2dldCcsIHVybCk7XG4gICAgICAgICAgICByZXEub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocmVxLnN0YXR1cyA+PSAyMDAgJiYgcmVxLnN0YXR1cyA8IDMwMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICh1cmwuc3Vic3RyKDAsIDcpID09PSAnZmlsZTovLycgJiYgcmVxLnJlc3BvbnNlVGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVxLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdIVFRQIHN0YXR1czogJyArIHJlcS5zdGF0dXMgKyAnIHJldHJpZXZpbmcgJyArIHVybCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcS5zZW5kKCk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIEJhc2U2NC1lbmNvZGVkIHN0cmluZyBpbnRvIGl0cyBvcmlnaW5hbCByZXByZXNlbnRhdGlvbi5cbiAgICAgKiBVc2VkIGZvciBpbmxpbmUgc291cmNlbWFwcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiNjRzdHIgQmFzZS02NCBlbmNvZGVkIHN0cmluZ1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gX2F0b2IoYjY0c3RyKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuYXRvYikge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5hdG9iKGI2NHN0cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciB3aW5kb3cuYXRvYiBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcGFyc2VKc29uKHN0cmluZykge1xuICAgICAgICBpZiAodHlwZW9mIEpTT04gIT09ICd1bmRlZmluZWQnICYmIEpTT04ucGFyc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciBKU09OLnBhcnNlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlci8qLCBjb2x1bW5OdW1iZXIqLykge1xuICAgICAgICB2YXIgc3ludGF4ZXMgPSBbXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSBmdW5jdGlvbiAoe2FyZ3N9KSBUT0RPIGFyZ3MgY2FwdHVyZVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqZnVuY3Rpb25cXGIvLFxuICAgICAgICAgICAgLy8gZnVuY3Rpb24ge25hbWV9KHthcmdzfSkgbVsxXT1uYW1lIG1bMl09YXJnc1xuICAgICAgICAgICAgL2Z1bmN0aW9uXFxzKyhbXignXCJgXSo/KVxccypcXCgoW14pXSopXFwpLyxcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGV2YWwoKVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqKD86ZXZhbHxuZXcgRnVuY3Rpb24pXFxiLyxcbiAgICAgICAgICAgIC8vIGZuX25hbWUoKSB7XG4gICAgICAgICAgICAvXFxiKD8hKD86aWZ8Zm9yfHN3aXRjaHx3aGlsZXx3aXRofGNhdGNoKVxcYikoPzooPzpzdGF0aWMpXFxzKyk/KFxcUyspXFxzKlxcKC4qP1xcKVxccypcXHsvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gKCkgPT4ge1xuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqXFwoLio/XFwpXFxzKj0+L1xuICAgICAgICBdO1xuICAgICAgICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoJ1xcbicpO1xuXG4gICAgICAgIC8vIFdhbGsgYmFja3dhcmRzIGluIHRoZSBzb3VyY2UgbGluZXMgdW50aWwgd2UgZmluZCB0aGUgbGluZSB3aGljaCBtYXRjaGVzIG9uZSBvZiB0aGUgcGF0dGVybnMgYWJvdmVcbiAgICAgICAgdmFyIGNvZGUgPSAnJztcbiAgICAgICAgdmFyIG1heExpbmVzID0gTWF0aC5taW4obGluZU51bWJlciwgMjApO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heExpbmVzOyArK2kpIHtcbiAgICAgICAgICAgIC8vIGxpbmVObyBpcyAxLWJhc2VkLCBzb3VyY2VbXSBpcyAwLWJhc2VkXG4gICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVzW2xpbmVOdW1iZXIgLSBpIC0gMV07XG4gICAgICAgICAgICB2YXIgY29tbWVudFBvcyA9IGxpbmUuaW5kZXhPZignLy8nKTtcbiAgICAgICAgICAgIGlmIChjb21tZW50UG9zID49IDApIHtcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHIoMCwgY29tbWVudFBvcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgY29kZSA9IGxpbmUgKyBjb2RlO1xuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBzeW50YXhlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHN5bnRheGVzW2luZGV4XS5leGVjKGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5jcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNvbnN1bWUgc291cmNlIG1hcHMgaW4gb2xkZXIgYnJvd3NlcnMnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhY2tmcmFtZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIFN0YWNrRnJhbWUgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmZpbGVOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gZmlsZSBuYW1lIGlzIG5vdCBhIFN0cmluZycpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBsaW5lIG51bWJlciBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICUgMSAhPT0gMCB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBjb2x1bW4gbnVtYmVyIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kU291cmNlTWFwcGluZ1VSTChzb3VyY2UpIHtcbiAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmdVcmxSZWdFeHAgPSAvXFwvXFwvWyNAXSA/c291cmNlTWFwcGluZ1VSTD0oW15cXHMnXCJdKylcXHMqJC9tZztcbiAgICAgICAgdmFyIGxhc3RTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB2YXIgbWF0Y2hTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB3aGlsZSAobWF0Y2hTb3VyY2VNYXBwaW5nVXJsID0gc291cmNlTWFwcGluZ1VybFJlZ0V4cC5leGVjKHNvdXJjZSkpIHsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gICAgICAgICAgICBsYXN0U291cmNlTWFwcGluZ1VybCA9IG1hdGNoU291cmNlTWFwcGluZ1VybFsxXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGFzdFNvdXJjZU1hcHBpbmdVcmwpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0U291cmNlTWFwcGluZ1VybDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc291cmNlTWFwcGluZ1VSTCBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9leHRyYWN0TG9jYXRpb25JbmZvRnJvbVNvdXJjZU1hcFNvdXJjZShzdGFja2ZyYW1lLCBzb3VyY2VNYXBDb25zdW1lciwgc291cmNlQ2FjaGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIGxvYyA9IHNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgICAgICAgIGxpbmU6IHN0YWNrZnJhbWUubGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGxvYy5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWNoZSBtYXBwZWQgc291cmNlc1xuICAgICAgICAgICAgICAgIHZhciBtYXBwZWRTb3VyY2UgPSBzb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGxvYy5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIGlmIChtYXBwZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlQ2FjaGVbbG9jLnNvdXJjZV0gPSBtYXBwZWRTb3VyY2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2l2ZW4gc3RhY2tmcmFtZSBhbmQgc291cmNlIGxvY2F0aW9uLCB1cGRhdGUgc3RhY2tmcmFtZVxuICAgICAgICAgICAgICAgICAgICBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGxvYy5uYW1lIHx8IHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogc3RhY2tmcmFtZS5hcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvYy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2MubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jLmNvbHVtblxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgb3JpZ2luYWwgc291cmNlIGZvciBnaXZlbiBzdGFja2ZyYW1lIGFuZCBzb3VyY2UgbWFwJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAqICAgICAgb3B0cy5zb3VyY2VDYWNoZSA9IHt1cmw6IFwiU291cmNlIFN0cmluZ1wifSA9PiBwcmVsb2FkIHNvdXJjZSBjYWNoZVxuICAgICAqICAgICAgb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gey9wYXRoL2ZpbGUuanMubWFwOiBTb3VyY2VNYXBDb25zdW1lcn1cbiAgICAgKiAgICAgIG9wdHMub2ZmbGluZSA9IFRydWUgdG8gcHJldmVudCBuZXR3b3JrIHJlcXVlc3RzLlxuICAgICAqICAgICAgICAgICAgICBCZXN0IGVmZm9ydCB3aXRob3V0IHNvdXJjZXMgb3Igc291cmNlIG1hcHMuXG4gICAgICogICAgICBvcHRzLmFqYXggPSBQcm9taXNlIHJldHVybmluZyBmdW5jdGlvbiB0byBtYWtlIFgtRG9tYWluIHJlcXVlc3RzXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMob3B0cykge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3RhY2tUcmFjZUdQUykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlID0gb3B0cy5zb3VyY2VDYWNoZSB8fCB7fTtcbiAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuYWpheCA9IG9wdHMuYWpheCB8fCBfeGRyO1xuXG4gICAgICAgIHRoaXMuX2F0b2IgPSBvcHRzLmF0b2IgfHwgX2F0b2I7XG5cbiAgICAgICAgdGhpcy5fZ2V0ID0gZnVuY3Rpb24gX2dldChsb2NhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBsb2NhdGlvbi5zdWJzdHIoMCwgNSkgPT09ICdkYXRhOic7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0cy5vZmZsaW5lICYmICFpc0RhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ2Fubm90IG1ha2UgbmV0d29yayByZXF1ZXN0cyBpbiBvZmZsaW5lIG1vZGUnKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF0YSBVUkxzIGNhbiBoYXZlIHBhcmFtZXRlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM5N1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1cHBvcnRlZEVuY29kaW5nUmVnZXhwID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXmRhdGE6YXBwbGljYXRpb25cXC9qc29uOyhbXFx3PTpcIi1dKzspKmJhc2U2NCwvO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbG9jYXRpb24ubWF0Y2goc3VwcG9ydGVkRW5jb2RpbmdSZWdleHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcFN0YXJ0ID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGVkU291cmNlID0gbG9jYXRpb24uc3Vic3RyKHNvdXJjZU1hcFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fYXRvYihlbmNvZGVkU291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSA9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RoZSBlbmNvZGluZyBvZiB0aGUgaW5saW5lIHNvdXJjZW1hcCBpcyBub3Qgc3VwcG9ydGVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhoclByb21pc2UgPSB0aGlzLmFqYXgobG9jYXRpb24sIHttZXRob2Q6ICdnZXQnfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZSB0aGUgUHJvbWlzZSB0byBwcmV2ZW50IGR1cGxpY2F0ZSBpbi1mbGlnaHQgcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0geGhyUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclByb21pc2UudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRpbmcgU291cmNlTWFwQ29uc3VtZXJzIGlzIGV4cGVuc2l2ZSwgc28gdGhpcyB3cmFwcyB0aGUgY3JlYXRpb24gb2YgYVxuICAgICAgICAgKiBTb3VyY2VNYXBDb25zdW1lciBpbiBhIHBlci1pbnN0YW5jZSBjYWNoZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZU1hcHBpbmdVUkwgPSBVUkwgdG8gZmV0Y2ggc291cmNlIG1hcCBmcm9tXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBkZWZhdWx0U291cmNlUm9vdCA9IERlZmF1bHQgc291cmNlIHJvb3QgZm9yIHNvdXJjZSBtYXAgaWYgdW5kZWZpbmVkXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIGEgU291cmNlTWFwQ29uc3VtZXJcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyID0gZnVuY3Rpb24gX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldChzb3VyY2VNYXBwaW5nVVJMKS50aGVuKGZ1bmN0aW9uKHNvdXJjZU1hcFNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlTWFwU291cmNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBTb3VyY2UgPSBfcGFyc2VKc29uKHNvdXJjZU1hcFNvdXJjZS5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlTWFwU291cmNlLnNvdXJjZVJvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcFNvdXJjZS5zb3VyY2VSb290ID0gZGVmYXVsdFNvdXJjZVJvb3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU291cmNlTWFwLlNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcFNvdXJjZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdID0gc291cmNlTWFwQ29uc3VtZXJQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBlbmhhbmNlIGZ1bmN0aW9uIG5hbWUgYW5kIHVzZSBzb3VyY2UgbWFwcyBmb3IgYVxuICAgICAgICAgKiBiZXR0ZXIgU3RhY2tGcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lIG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHdpdGggc291cmNlLW1hcHBlZCBTdGFja0ZyYW1lXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBpbnBvaW50ID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkcGlucG9pbnQoc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkudGhlbihmdW5jdGlvbihtYXBwZWRTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVNYXBwZWRTdGFja0ZyYW1lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtYXBwZWRTdGFja0ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZEZ1bmN0aW9uTmFtZShtYXBwZWRTdGFja0ZyYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSwgcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ2NhdGNoJ10ocmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgZ3Vlc3MgZnVuY3Rpb24gbmFtZSBmcm9tIGxvY2F0aW9uIGluZm9ybWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWVcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBlbmhhbmNlZCBTdGFja0ZyYW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZmluZEZ1bmN0aW9uTmFtZShzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChzdGFja2ZyYW1lLmZpbGVOYW1lKS50aGVuKGZ1bmN0aW9uIGdldFNvdXJjZUNhbGxiYWNrKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHN0YWNrZnJhbWUubGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ3Vlc3NlZEZ1bmN0aW9uTmFtZSA9IF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZXBsYWNlIGZ1bmN0aW9uTmFtZSBpZiB3ZSBmb3VuZCBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICAgICAgaWYgKGd1ZXNzZWRGdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZ3Vlc3NlZEZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBzdGFja2ZyYW1lLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IHN0YWNrZnJhbWUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgc2VlayBzb3VyY2UtbWFwcGVkIGxvY2F0aW9uIGFuZCByZXR1cm4gbmV3IGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdldE1hcHBlZExvY2F0aW9uID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKTtcblxuICAgICAgICAgICAgICAgIHZhciBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGU7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gc3RhY2tmcmFtZS5maWxlTmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXQoZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VNYXBwaW5nVVJMID0gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBzb3VyY2VNYXBwaW5nVVJMLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRTb3VyY2VSb290ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlTWFwcGluZ1VSTFswXSAhPT0gJy8nICYmICFpc0RhdGFVcmwgJiYgISgvXmh0dHBzPzpcXC9cXC98XlxcL1xcLy9pKS50ZXN0KHNvdXJjZU1hcHBpbmdVUkwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBwaW5nVVJMID0gZGVmYXVsdFNvdXJjZVJvb3QgKyBzb3VyY2VNYXBwaW5nVVJMO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oc291cmNlTWFwQ29uc3VtZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwU291cmNlKHN0YWNrZnJhbWUsIHNvdXJjZU1hcENvbnN1bWVyLCBzb3VyY2VDYWNoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSlbJ2NhdGNoJ10oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbn0pKTtcbiIsIi8vIFBvbHlmaWxsIGZvciBvbGQgYnJvd3NlcnNcbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5XG5pZiAoIUFycmF5LmlzQXJyYXkpIHtcbiAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xufVxuXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgRVM2UHJvbWlzZS5wb2x5ZmlsbCgpO1xufVxuXG4vLyBFUzUgUG9seWZpbGxzXG4vLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRnVuY3Rpb24vYmluZFxuaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkge1xuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24ob1RoaXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCAtIHdoYXQgaXMgdHJ5aW5nIHRvIGJlIGJvdW5kIGlzIG5vdCBjYWxsYWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgdmFyIGZUb0JpbmQgPSB0aGlzO1xuICAgICAgICB2YXIgTm9PcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZkJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gZlRvQmluZC5hcHBseSh0aGlzIGluc3RhbmNlb2YgTm9PcCAmJiBvVGhpcyA/IHRoaXMgOiBvVGhpcyxcbiAgICAgICAgICAgICAgICBhQXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIE5vT3AucHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG4gICAgICAgIGZCb3VuZC5wcm90b3R5cGUgPSBuZXcgTm9PcCgpO1xuXG4gICAgICAgIHJldHVybiBmQm91bmQ7XG4gICAgfTtcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L21hcFxuaWYgKCFBcnJheS5wcm90b3R5cGUubWFwKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgIGlmICh0aGlzID09PSB2b2lkIDAgfHwgdGhpcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIE8gPSBPYmplY3QodGhpcyk7XG4gICAgICAgIHZhciBsZW4gPSBPLmxlbmd0aCA+Pj4gMDtcbiAgICAgICAgdmFyIFQ7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBUID0gdGhpc0FyZztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBBID0gbmV3IEFycmF5KGxlbik7XG4gICAgICAgIHZhciBrID0gMDtcblxuICAgICAgICB3aGlsZSAoayA8IGxlbikge1xuICAgICAgICAgICAgdmFyIGtWYWx1ZTtcbiAgICAgICAgICAgIHZhciBtYXBwZWRWYWx1ZTtcbiAgICAgICAgICAgIGlmIChrIGluIE8pIHtcbiAgICAgICAgICAgICAgICBrVmFsdWUgPSBPW2tdO1xuICAgICAgICAgICAgICAgIG1hcHBlZFZhbHVlID0gY2FsbGJhY2suY2FsbChULCBrVmFsdWUsIGssIE8pO1xuICAgICAgICAgICAgICAgIEFba10gPSBtYXBwZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBBO1xuICAgIH07XG59XG5cbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9maWx0ZXJcbmlmICghQXJyYXkucHJvdG90eXBlLmZpbHRlcikge1xuICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbihjYWxsYmFjay8qLCB0aGlzQXJnKi8pIHtcbiAgICAgICAgaWYgKHRoaXMgPT09IHZvaWQgMCB8fCB0aGlzID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0aGlzIGlzIG51bGwgb3Igbm90IGRlZmluZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpO1xuICAgICAgICB2YXIgbGVuID0gdC5sZW5ndGggPj4+IDA7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyID8gYXJndW1lbnRzWzFdIDogdm9pZCAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSBpbiB0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRbaV07XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2ZvckVhY2hcbmlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgIHZhciBUO1xuICAgICAgICB2YXIgaztcbiAgICAgICAgaWYgKHRoaXMgPT09IG51bGwgfHwgdGhpcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcgdGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgTyA9IE9iamVjdCh0aGlzKTtcbiAgICAgICAgdmFyIGxlbiA9IE8ubGVuZ3RoID4+PiAwO1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBUID0gdGhpc0FyZztcbiAgICAgICAgfVxuICAgICAgICBrID0gMDtcbiAgICAgICAgd2hpbGUgKGsgPCBsZW4pIHtcbiAgICAgICAgICAgIHZhciBrVmFsdWU7XG4gICAgICAgICAgICBpZiAoayBpbiBPKSB7XG4gICAgICAgICAgICAgICAga1ZhbHVlID0gT1trXTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKFQsIGtWYWx1ZSwgaywgTyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrKys7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZScsIFsnZXJyb3Itc3RhY2stcGFyc2VyJywgJ3N0YWNrLWdlbmVyYXRvcicsICdzdGFja3RyYWNlLWdwcyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnZXJyb3Itc3RhY2stcGFyc2VyJyksIHJlcXVpcmUoJ3N0YWNrLWdlbmVyYXRvcicpLCByZXF1aXJlKCdzdGFja3RyYWNlLWdwcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2UgPSBmYWN0b3J5KHJvb3QuRXJyb3JTdGFja1BhcnNlciwgcm9vdC5TdGFja0dlbmVyYXRvciwgcm9vdC5TdGFja1RyYWNlR1BTKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIFN0YWNrVHJhY2UoRXJyb3JTdGFja1BhcnNlciwgU3RhY2tHZW5lcmF0b3IsIFN0YWNrVHJhY2VHUFMpIHtcbiAgICB2YXIgX29wdGlvbnMgPSB7XG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBzdGFja2ZyYW1lcyBmb3IgdGhpcyBsaWJyYXJ5IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2UkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignRXJyb3JTdGFja1BhcnNlciQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlR1BTJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrR2VuZXJhdG9yJCQnKSA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZUNhY2hlOiB7fVxuICAgIH07XG5cbiAgICB2YXIgX2dlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRHZW5lcmF0ZUVycm9yKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRXJyb3IgbXVzdCBiZSB0aHJvd24gdG8gZ2V0IHN0YWNrIGluIElFXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdlIDIgZ2l2ZW4gT2JqZWN0cy4gSWYgYSBjb25mbGljdCBvY2N1cnMgdGhlIHNlY29uZCBvYmplY3Qgd2lucy5cbiAgICAgKiBEb2VzIG5vdCBkbyBkZWVwIG1lcmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaXJzdCBiYXNlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWNvbmQgb3ZlcnJpZGVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gbWVyZ2VkIGZpcnN0IGFuZCBzZWNvbmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tZXJnZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcblxuICAgICAgICBbZmlyc3QsIHNlY29uZF0uZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVyci5zdGFjayB8fCBlcnJbJ29wZXJhI3NvdXJjZWxvYyddO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXJlZChzdGFja2ZyYW1lcywgZmlsdGVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXMuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrZnJhbWVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0KG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikgPyB0aGlzLmZyb21FcnJvcihlcnIsIG9wdHMpIDogdGhpcy5nZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgYmFja3RyYWNlIGZyb20gaW52b2NhdGlvbiBwb2ludC5cbiAgICAgICAgICogSU1QT1JUQU5UOiBEb2VzIG5vdCBoYW5kbGUgc291cmNlIG1hcHMgb3IgZ3Vlc3MgZnVuY3Rpb24gbmFtZXMhXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0U3luYzogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0U3luYyhvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyKSA6IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyZWQoc3RhY2ssIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3Igb2JqZWN0LCBwYXJzZSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmb3IgQXJyYXlbU3RhY2tGcmFtZX1cbiAgICAgICAgICovXG4gICAgICAgIGZyb21FcnJvcjogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZnJvbUVycm9yKGVycm9yLCBvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBncHMgPSBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrZnJhbWVzID0gX2ZpbHRlcmVkKEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyb3IpLCBvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShQcm9taXNlLmFsbChzdGFja2ZyYW1lcy5tYXAoZnVuY3Rpb24oc2YpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVPcmlnaW5hbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ3BzLnBpbnBvaW50KHNmKS50aGVuKHJlc29sdmUsIHJlc29sdmVPcmlnaW5hbClbJ2NhdGNoJ10ocmVzb2x2ZU9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBTdGFja0dlbmVyYXRvciB0byBnZW5lcmF0ZSBhIGJhY2t0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IG9mIEFycmF5W1N0YWNrRnJhbWVdXG4gICAgICAgICAqL1xuICAgICAgICBnZW5lcmF0ZUFydGlmaWNpYWxseTogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2VuZXJhdGVBcnRpZmljaWFsbHkob3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgc3RhY2tGcmFtZXMgPSBTdGFja0dlbmVyYXRvci5iYWNrdHJhY2Uob3B0cyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgc3RhY2tGcmFtZXMgPSBzdGFja0ZyYW1lcy5maWx0ZXIob3B0cy5maWx0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGFja0ZyYW1lcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24sIHdyYXAgaXQgc3VjaCB0aGF0IGludm9jYXRpb25zIHRyaWdnZXIgYSBjYWxsYmFjayB0aGF0XG4gICAgICAgICAqIGlzIGNhbGxlZCB3aXRoIGEgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGluc3RydW1lbnRlZFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdpdGggYSBzdGFjayB0cmFjZSBvbiBpbnZvY2F0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVycmJhY2sgb3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGVycm9yIGlmIHVuYWJsZSB0byBnZXQgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIG9wdGlvbmFsIGNvbnRleHQgb2JqZWN0IChlLmcuIHdpbmRvdylcbiAgICAgICAgICovXG4gICAgICAgIGluc3RydW1lbnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnQoZm4sIGNhbGxiYWNrLCBlcnJiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBpbnN0cnVtZW50ZWQsIHJldHVybiBnaXZlbiBGdW5jdGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGluc3RydW1lbnRlZCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnRlZCgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCgpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZyB8fCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb21FcnJvcihlKS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrKVsnY2F0Y2gnXShlcnJiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGluc3RydW1lbnRlZC5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID0gZm47XG5cbiAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50ZWQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBpbnN0cnVtZW50ZWQsXG4gICAgICAgICAqIHJldmVydCB0aGUgZnVuY3Rpb24gdG8gaXQncyBvcmlnaW5hbCAobm9uLWluc3RydW1lbnRlZCkgc3RhdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGRlLWluc3RydW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGRlaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZGVpbnN0cnVtZW50KGZuKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGUtaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIG5vdCBpbnN0cnVtZW50ZWQsIHJldHVybiBvcmlnaW5hbFxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3IgbWVzc2FnZSBhbmQgQXJyYXkgb2YgU3RhY2tGcmFtZXMsIHNlcmlhbGl6ZSBhbmQgUE9TVCB0byBnaXZlbiBVUkwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrZnJhbWVzXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVycm9yTXNnXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0T3B0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgcmVwb3J0OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRyZXBvcnQoc3RhY2tmcmFtZXMsIHVybCwgZXJyb3JNc2csIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPj0gMjAwICYmIHJlcS5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdQT1NUIHRvICcgKyB1cmwgKyAnIGZhaWxlZCB3aXRoIHN0YXR1czogJyArIHJlcS5zdGF0dXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVxLm9wZW4oJ3Bvc3QnLCB1cmwpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHJlcXVlc3QgaGVhZGVyc1xuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucyAmJiB0eXBlb2YgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgaGVhZGVyc1toZWFkZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZXBvcnRQYXlsb2FkID0ge3N0YWNrOiBzdGFja2ZyYW1lc307XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQgJiYgZXJyb3JNc2cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0UGF5bG9hZC5tZXNzYWdlID0gZXJyb3JNc2c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVwb3J0UGF5bG9hZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIl19 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9lcnJvci1zdGFjay1wYXJzZXIvbm9kZV9tb2R1bGVzL3N0YWNrZnJhbWUvc3RhY2tmcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9lczYtcHJvbWlzZS9kaXN0L2VzNi1wcm9taXNlLmpzIiwibm9kZV9tb2R1bGVzL2pzb24zL2xpYi9qc29uMy5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYXJyYXktc2V0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2Jhc2U2NC12bHEuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2JpbmFyeS1zZWFyY2guanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvcXVpY2stc29ydC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyLmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3V0aWwuanMiLCJub2RlX21vZHVsZXMvc3RhY2stZ2VuZXJhdG9yL3N0YWNrLWdlbmVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9zdGFja3RyYWNlLWdwcy9zdGFja3RyYWNlLWdwcy5qcyIsInBvbHlmaWxscy5qcyIsInN0YWNrdHJhY2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUM5SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNqb0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3Q0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNqYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdFZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdlcnJvci1zdGFjay1wYXJzZXInLCBbJ3N0YWNrZnJhbWUnXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ3N0YWNrZnJhbWUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5FcnJvclN0YWNrUGFyc2VyID0gZmFjdG9yeShyb290LlN0YWNrRnJhbWUpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlcihTdGFja0ZyYW1lKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIEZJUkVGT1hfU0FGQVJJX1NUQUNLX1JFR0VYUCA9IC8oXnxAKVxcUys6XFxkKy87XG4gICAgdmFyIENIUk9NRV9JRV9TVEFDS19SRUdFWFAgPSAvXlxccyphdCAuKihcXFMrOlxcZCt8XFwobmF0aXZlXFwpKS9tO1xuICAgIHZhciBTQUZBUklfTkFUSVZFX0NPREVfUkVHRVhQID0gL14oZXZhbEApPyhcXFtuYXRpdmUgY29kZV0pPyQvO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGFuIEVycm9yIG9iamVjdCwgZXh0cmFjdCB0aGUgbW9zdCBpbmZvcm1hdGlvbiBmcm9tIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBvYmplY3RcbiAgICAgICAgICogQHJldHVybiB7QXJyYXl9IG9mIFN0YWNrRnJhbWVzXG4gICAgICAgICAqL1xuICAgICAgICBwYXJzZTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2UoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3Iuc3RhY2t0cmFjZSAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGVycm9yWydvcGVyYSNzb3VyY2Vsb2MnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhY2sgJiYgZXJyb3Iuc3RhY2subWF0Y2goQ0hST01FX0lFX1NUQUNLX1JFR0VYUCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZVY4T3JJRShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VGRk9yU2FmYXJpKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGFyc2UgZ2l2ZW4gRXJyb3Igb2JqZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gU2VwYXJhdGUgbGluZSBhbmQgY29sdW1uIG51bWJlcnMgZnJvbSBhIHN0cmluZyBvZiB0aGUgZm9ybTogKFVSSTpMaW5lOkNvbHVtbilcbiAgICAgICAgZXh0cmFjdExvY2F0aW9uOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRleHRyYWN0TG9jYXRpb24odXJsTGlrZSkge1xuICAgICAgICAgICAgLy8gRmFpbC1mYXN0IGJ1dCByZXR1cm4gbG9jYXRpb25zIGxpa2UgXCIobmF0aXZlKVwiXG4gICAgICAgICAgICBpZiAodXJsTGlrZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt1cmxMaWtlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHJlZ0V4cCA9IC8oLis/KSg/OjooXFxkKykpPyg/OjooXFxkKykpPyQvO1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gcmVnRXhwLmV4ZWModXJsTGlrZS5yZXBsYWNlKC9bKCldL2csICcnKSk7XG4gICAgICAgICAgICByZXR1cm4gW3BhcnRzWzFdLCBwYXJ0c1syXSB8fCB1bmRlZmluZWQsIHBhcnRzWzNdIHx8IHVuZGVmaW5lZF07XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VWOE9ySUU6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlVjhPcklFKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFsaW5lLm1hdGNoKENIUk9NRV9JRV9TVEFDS19SRUdFWFApO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJyhldmFsICcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSBldmFsIGluZm9ybWF0aW9uIHVudGlsIHdlIGltcGxlbWVudCBzdGFja3RyYWNlLmpzL3N0YWNrZnJhbWUjOFxuICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC9ldmFsIGNvZGUvZywgJ2V2YWwnKS5yZXBsYWNlKC8oXFwoZXZhbCBhdCBbXigpXSopfChcXCksLiokKS9nLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBzYW5pdGl6ZWRMaW5lID0gbGluZS5yZXBsYWNlKC9eXFxzKy8sICcnKS5yZXBsYWNlKC9cXChldmFsIGNvZGUvZywgJygnKTtcblxuICAgICAgICAgICAgICAgIC8vIGNhcHR1cmUgYW5kIHByZXNldmUgdGhlIHBhcmVudGhlc2l6ZWQgbG9jYXRpb24gXCIoL2Zvby9teSBiYXIuanM6MTI6ODcpXCIgaW5cbiAgICAgICAgICAgICAgICAvLyBjYXNlIGl0IGhhcyBzcGFjZXMgaW4gaXQsIGFzIHRoZSBzdHJpbmcgaXMgc3BsaXQgb24gXFxzKyBsYXRlciBvblxuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IHNhbml0aXplZExpbmUubWF0Y2goLyAoXFwoKC4rKTooXFxkKyk6KFxcZCspXFwpJCkvKTtcblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgcGFyZW50aGVzaXplZCBsb2NhdGlvbiBmcm9tIHRoZSBsaW5lLCBpZiBpdCB3YXMgbWF0Y2hlZFxuICAgICAgICAgICAgICAgIHNhbml0aXplZExpbmUgPSBsb2NhdGlvbiA/IHNhbml0aXplZExpbmUucmVwbGFjZShsb2NhdGlvblswXSwgJycpIDogc2FuaXRpemVkTGluZTtcblxuICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBzYW5pdGl6ZWRMaW5lLnNwbGl0KC9cXHMrLykuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgLy8gaWYgYSBsb2NhdGlvbiB3YXMgbWF0Y2hlZCwgcGFzcyBpdCB0byBleHRyYWN0TG9jYXRpb24oKSBvdGhlcndpc2UgcG9wIHRoZSBsYXN0IHRva2VuXG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uUGFydHMgPSB0aGlzLmV4dHJhY3RMb2NhdGlvbihsb2NhdGlvbiA/IGxvY2F0aW9uWzFdIDogdG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gdG9rZW5zLmpvaW4oJyAnKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gWydldmFsJywgJzxhbm9ueW1vdXM+J10uaW5kZXhPZihsb2NhdGlvblBhcnRzWzBdKSA+IC0xID8gdW5kZWZpbmVkIDogbG9jYXRpb25QYXJ0c1swXTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZUZGT3JTYWZhcmk6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlRkZPclNhZmFyaShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFsaW5lLm1hdGNoKFNBRkFSSV9OQVRJVkVfQ09ERV9SRUdFWFApO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgZXZhbCBpbmZvcm1hdGlvbiB1bnRpbCB3ZSBpbXBsZW1lbnQgc3RhY2t0cmFjZS5qcy9zdGFja2ZyYW1lIzhcbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCcgPiBldmFsJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC8gbGluZSAoXFxkKykoPzogPiBldmFsIGxpbmUgXFxkKykqID4gZXZhbDpcXGQrOlxcZCsvZywgJzokMScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJ0AnKSA9PT0gLTEgJiYgbGluZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyaSBldmFsIGZyYW1lcyBvbmx5IGhhdmUgZnVuY3Rpb24gbmFtZXMgYW5kIG5vdGhpbmcgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBsaW5lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWVSZWdleCA9IC8oKC4qXCIuK1wiW15AXSopP1teQF0qKSg/OkApLztcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBsaW5lLm1hdGNoKGZ1bmN0aW9uTmFtZVJlZ2V4KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1hdGNoZXMgJiYgbWF0Y2hlc1sxXSA/IG1hdGNoZXNbMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24obGluZS5yZXBsYWNlKGZ1bmN0aW9uTmFtZVJlZ2V4LCAnJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhKGUpIHtcbiAgICAgICAgICAgIGlmICghZS5zdGFja3RyYWNlIHx8IChlLm1lc3NhZ2UuaW5kZXhPZignXFxuJykgPiAtMSAmJlxuICAgICAgICAgICAgICAgIGUubWVzc2FnZS5zcGxpdCgnXFxuJykubGVuZ3RoID4gZS5zdGFja3RyYWNlLnNwbGl0KCdcXG4nKS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTkoZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFlLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTEwKGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTEoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTk6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmE5KGUpIHtcbiAgICAgICAgICAgIHZhciBsaW5lUkUgPSAvTGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKS9pO1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gZS5tZXNzYWdlLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDIsIGxlbiA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZVJFLmV4ZWMobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZXNbaV1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhMTA6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMChlKSB7XG4gICAgICAgICAgICB2YXIgbGluZVJFID0gL0xpbmUgKFxcZCspLipzY3JpcHQgKD86aW4gKT8oXFxTKykoPzo6IEluIGZ1bmN0aW9uIChcXFMrKSk/JC9pO1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gZS5zdGFja3RyYWNlLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZVJFLmV4ZWMobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IG1hdGNoWzNdIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lc1tpXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gT3BlcmEgMTAuNjUrIEVycm9yLnN0YWNrIHZlcnkgc2ltaWxhciB0byBGRi9TYWZhcmlcbiAgICAgICAgcGFyc2VPcGVyYTExOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhMTEoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIWxpbmUubWF0Y2goRklSRUZPWF9TQUZBUklfU1RBQ0tfUkVHRVhQKSAmJiAhbGluZS5tYXRjaCgvXkVycm9yIGNyZWF0ZWQgYXQvKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5zcGxpdCgnQCcpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25DYWxsID0gKHRva2Vucy5zaGlmdCgpIHx8ICcnKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25DYWxsXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88YW5vbnltb3VzIGZ1bmN0aW9uKDogKFxcdyspKT8+LywgJyQyJylcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKV0qXFwpL2csICcnKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3NSYXc7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uQ2FsbC5tYXRjaCgvXFwoKFteKV0qKVxcKS8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NSYXcgPSBmdW5jdGlvbkNhbGwucmVwbGFjZSgvXlteKF0rXFwoKFteKV0qKVxcKSQvLCAnJDEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSAoYXJnc1JhdyA9PT0gdW5kZWZpbmVkIHx8IGFyZ3NSYXcgPT09ICdbYXJndW1lbnRzIG5vdCBhdmFpbGFibGVdJykgP1xuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgOiBhcmdzUmF3LnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJncyxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvY2F0aW9uUGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG59KSk7XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFja2ZyYW1lJywgW10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tGcmFtZSA9IGZhY3RvcnkoKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uKCkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICBmdW5jdGlvbiBfaXNOdW1iZXIobikge1xuICAgICAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQobikpICYmIGlzRmluaXRlKG4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9jYXBpdGFsaXplKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZ2V0dGVyKHApIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbcF07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGJvb2xlYW5Qcm9wcyA9IFsnaXNDb25zdHJ1Y3RvcicsICdpc0V2YWwnLCAnaXNOYXRpdmUnLCAnaXNUb3BsZXZlbCddO1xuICAgIHZhciBudW1lcmljUHJvcHMgPSBbJ2NvbHVtbk51bWJlcicsICdsaW5lTnVtYmVyJ107XG4gICAgdmFyIHN0cmluZ1Byb3BzID0gWydmaWxlTmFtZScsICdmdW5jdGlvbk5hbWUnLCAnc291cmNlJ107XG4gICAgdmFyIGFycmF5UHJvcHMgPSBbJ2FyZ3MnXTtcblxuICAgIHZhciBwcm9wcyA9IGJvb2xlYW5Qcm9wcy5jb25jYXQobnVtZXJpY1Byb3BzLCBzdHJpbmdQcm9wcywgYXJyYXlQcm9wcyk7XG5cbiAgICBmdW5jdGlvbiBTdGFja0ZyYW1lKG9iaikge1xuICAgICAgICBpZiAoIW9iaikgcmV0dXJuO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAob2JqW3Byb3BzW2ldXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpc1snc2V0JyArIF9jYXBpdGFsaXplKHByb3BzW2ldKV0ob2JqW3Byb3BzW2ldXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBTdGFja0ZyYW1lLnByb3RvdHlwZSA9IHtcbiAgICAgICAgZ2V0QXJnczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmdzO1xuICAgICAgICB9LFxuICAgICAgICBzZXRBcmdzOiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJncyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFyZ3MgPSB2O1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldEV2YWxPcmlnaW46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZhbE9yaWdpbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0RXZhbE9yaWdpbjogZnVuY3Rpb24odikge1xuICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsT3JpZ2luID0gdjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZhbE9yaWdpbiA9IG5ldyBTdGFja0ZyYW1lKHYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFdmFsIE9yaWdpbiBtdXN0IGJlIGFuIE9iamVjdCBvciBTdGFja0ZyYW1lJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gdGhpcy5nZXRGaWxlTmFtZSgpIHx8ICcnO1xuICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSB0aGlzLmdldExpbmVOdW1iZXIoKSB8fCAnJztcbiAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSB0aGlzLmdldENvbHVtbk51bWJlcigpIHx8ICcnO1xuICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2V0RnVuY3Rpb25OYW1lKCkgfHwgJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRJc0V2YWwoKSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tldmFsXSAoJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICc6JyArIGNvbHVtbk51bWJlciArICcpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbZXZhbF06JyArIGxpbmVOdW1iZXIgKyAnOicgKyBjb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZnVuY3Rpb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZSArICcgKCcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnOicgKyBjb2x1bW5OdW1iZXIgKyAnKSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJzonICsgY29sdW1uTnVtYmVyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIFN0YWNrRnJhbWUuZnJvbVN0cmluZyA9IGZ1bmN0aW9uIFN0YWNrRnJhbWUkJGZyb21TdHJpbmcoc3RyKSB7XG4gICAgICAgIHZhciBhcmdzU3RhcnRJbmRleCA9IHN0ci5pbmRleE9mKCcoJyk7XG4gICAgICAgIHZhciBhcmdzRW5kSW5kZXggPSBzdHIubGFzdEluZGV4T2YoJyknKTtcblxuICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gc3RyLnN1YnN0cmluZygwLCBhcmdzU3RhcnRJbmRleCk7XG4gICAgICAgIHZhciBhcmdzID0gc3RyLnN1YnN0cmluZyhhcmdzU3RhcnRJbmRleCArIDEsIGFyZ3NFbmRJbmRleCkuc3BsaXQoJywnKTtcbiAgICAgICAgdmFyIGxvY2F0aW9uU3RyaW5nID0gc3RyLnN1YnN0cmluZyhhcmdzRW5kSW5kZXggKyAxKTtcblxuICAgICAgICBpZiAobG9jYXRpb25TdHJpbmcuaW5kZXhPZignQCcpID09PSAwKSB7XG4gICAgICAgICAgICB2YXIgcGFydHMgPSAvQCguKz8pKD86OihcXGQrKSk/KD86OihcXGQrKSk/JC8uZXhlYyhsb2NhdGlvblN0cmluZywgJycpO1xuICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gcGFydHNbMV07XG4gICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHBhcnRzWzJdO1xuICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHBhcnRzWzNdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgYXJnczogYXJncyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyIHx8IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib29sZWFuUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IF9nZXR0ZXIoYm9vbGVhblByb3BzW2ldKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBCb29sZWFuKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoYm9vbGVhblByb3BzW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bWVyaWNQcm9wcy5sZW5ndGg7IGorKykge1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gX2dldHRlcihudW1lcmljUHJvcHNbal0pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gKGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfaXNOdW1iZXIodikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihwICsgJyBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBOdW1iZXIodik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShudW1lcmljUHJvcHNbal0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3RyaW5nUHJvcHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShzdHJpbmdQcm9wc1trXSldID0gX2dldHRlcihzdHJpbmdQcm9wc1trXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUoc3RyaW5nUHJvcHNba10pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBTdHJpbmcodik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShzdHJpbmdQcm9wc1trXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0YWNrRnJhbWU7XG59KSk7XG4iLCIvKiFcbiAqIEBvdmVydmlldyBlczYtcHJvbWlzZSAtIGEgdGlueSBpbXBsZW1lbnRhdGlvbiBvZiBQcm9taXNlcy9BKy5cbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE0IFllaHVkYSBLYXR6LCBUb20gRGFsZSwgU3RlZmFuIFBlbm5lciBhbmQgY29udHJpYnV0b3JzIChDb252ZXJzaW9uIHRvIEVTNiBBUEkgYnkgSmFrZSBBcmNoaWJhbGQpXG4gKiBAbGljZW5zZSAgIExpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlXG4gKiAgICAgICAgICAgIFNlZSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc3RlZmFucGVubmVyL2VzNi1wcm9taXNlL21hc3Rlci9MSUNFTlNFXG4gKiBAdmVyc2lvbiAgIDMuMy4xXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsLkVTNlByb21pc2UgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG9iamVjdE9yRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG59XG5cbnZhciBfaXNBcnJheSA9IHVuZGVmaW5lZDtcbmlmICghQXJyYXkuaXNBcnJheSkge1xuICBfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcbn0gZWxzZSB7XG4gIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbn1cblxudmFyIGlzQXJyYXkgPSBfaXNBcnJheTtcblxudmFyIGxlbiA9IDA7XG52YXIgdmVydHhOZXh0ID0gdW5kZWZpbmVkO1xudmFyIGN1c3RvbVNjaGVkdWxlckZuID0gdW5kZWZpbmVkO1xuXG52YXIgYXNhcCA9IGZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGFyZykge1xuICBxdWV1ZVtsZW5dID0gY2FsbGJhY2s7XG4gIHF1ZXVlW2xlbiArIDFdID0gYXJnO1xuICBsZW4gKz0gMjtcbiAgaWYgKGxlbiA9PT0gMikge1xuICAgIC8vIElmIGxlbiBpcyAyLCB0aGF0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBhc3luYyBmbHVzaC5cbiAgICAvLyBJZiBhZGRpdGlvbmFsIGNhbGxiYWNrcyBhcmUgcXVldWVkIGJlZm9yZSB0aGUgcXVldWUgaXMgZmx1c2hlZCwgdGhleVxuICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgZmx1c2ggdGhhdCB3ZSBhcmUgc2NoZWR1bGluZy5cbiAgICBpZiAoY3VzdG9tU2NoZWR1bGVyRm4pIHtcbiAgICAgIGN1c3RvbVNjaGVkdWxlckZuKGZsdXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZWR1bGVGbHVzaCgpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gc2V0U2NoZWR1bGVyKHNjaGVkdWxlRm4pIHtcbiAgY3VzdG9tU2NoZWR1bGVyRm4gPSBzY2hlZHVsZUZuO1xufVxuXG5mdW5jdGlvbiBzZXRBc2FwKGFzYXBGbikge1xuICBhc2FwID0gYXNhcEZuO1xufVxuXG52YXIgYnJvd3NlcldpbmRvdyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdW5kZWZpbmVkO1xudmFyIGJyb3dzZXJHbG9iYWwgPSBicm93c2VyV2luZG93IHx8IHt9O1xudmFyIEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID0gYnJvd3Nlckdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGJyb3dzZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBpc05vZGUgPSB0eXBlb2Ygc2VsZiA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICh7fSkudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nO1xuXG4vLyB0ZXN0IGZvciB3ZWIgd29ya2VyIGJ1dCBub3QgaW4gSUUxMFxudmFyIGlzV29ya2VyID0gdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJztcblxuLy8gbm9kZVxuZnVuY3Rpb24gdXNlTmV4dFRpY2soKSB7XG4gIC8vIG5vZGUgdmVyc2lvbiAwLjEwLnggZGlzcGxheXMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gbmV4dFRpY2sgaXMgdXNlZCByZWN1cnNpdmVseVxuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2N1am9qcy93aGVuL2lzc3Vlcy80MTAgZm9yIGRldGFpbHNcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gIH07XG59XG5cbi8vIHZlcnR4XG5mdW5jdGlvbiB1c2VWZXJ0eFRpbWVyKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZlcnR4TmV4dChmbHVzaCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZU11dGF0aW9uT2JzZXJ2ZXIoKSB7XG4gIHZhciBpdGVyYXRpb25zID0gMDtcbiAgdmFyIG9ic2VydmVyID0gbmV3IEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKGZsdXNoKTtcbiAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gIG9ic2VydmVyLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgbm9kZS5kYXRhID0gaXRlcmF0aW9ucyA9ICsraXRlcmF0aW9ucyAlIDI7XG4gIH07XG59XG5cbi8vIHdlYiB3b3JrZXJcbmZ1bmN0aW9uIHVzZU1lc3NhZ2VDaGFubmVsKCkge1xuICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZsdXNoO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKDApO1xuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VTZXRUaW1lb3V0KCkge1xuICAvLyBTdG9yZSBzZXRUaW1lb3V0IHJlZmVyZW5jZSBzbyBlczYtcHJvbWlzZSB3aWxsIGJlIHVuYWZmZWN0ZWQgYnlcbiAgLy8gb3RoZXIgY29kZSBtb2RpZnlpbmcgc2V0VGltZW91dCAobGlrZSBzaW5vbi51c2VGYWtlVGltZXJzKCkpXG4gIHZhciBnbG9iYWxTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2xvYmFsU2V0VGltZW91dChmbHVzaCwgMSk7XG4gIH07XG59XG5cbnZhciBxdWV1ZSA9IG5ldyBBcnJheSgxMDAwKTtcbmZ1bmN0aW9uIGZsdXNoKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gcXVldWVbaV07XG4gICAgdmFyIGFyZyA9IHF1ZXVlW2kgKyAxXTtcblxuICAgIGNhbGxiYWNrKGFyZyk7XG5cbiAgICBxdWV1ZVtpXSA9IHVuZGVmaW5lZDtcbiAgICBxdWV1ZVtpICsgMV0gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBsZW4gPSAwO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0VmVydHgoKSB7XG4gIHRyeSB7XG4gICAgdmFyIHIgPSByZXF1aXJlO1xuICAgIHZhciB2ZXJ0eCA9IHIoJ3ZlcnR4Jyk7XG4gICAgdmVydHhOZXh0ID0gdmVydHgucnVuT25Mb29wIHx8IHZlcnR4LnJ1bk9uQ29udGV4dDtcbiAgICByZXR1cm4gdXNlVmVydHhUaW1lcigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHVzZVNldFRpbWVvdXQoKTtcbiAgfVxufVxuXG52YXIgc2NoZWR1bGVGbHVzaCA9IHVuZGVmaW5lZDtcbi8vIERlY2lkZSB3aGF0IGFzeW5jIG1ldGhvZCB0byB1c2UgdG8gdHJpZ2dlcmluZyBwcm9jZXNzaW5nIG9mIHF1ZXVlZCBjYWxsYmFja3M6XG5pZiAoaXNOb2RlKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VOZXh0VGljaygpO1xufSBlbHNlIGlmIChCcm93c2VyTXV0YXRpb25PYnNlcnZlcikge1xuICBzY2hlZHVsZUZsdXNoID0gdXNlTXV0YXRpb25PYnNlcnZlcigpO1xufSBlbHNlIGlmIChpc1dvcmtlcikge1xuICBzY2hlZHVsZUZsdXNoID0gdXNlTWVzc2FnZUNoYW5uZWwoKTtcbn0gZWxzZSBpZiAoYnJvd3NlcldpbmRvdyA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSBhdHRlbXB0VmVydHgoKTtcbn0gZWxzZSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VTZXRUaW1lb3V0KCk7XG59XG5cbmZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgdmFyIF9hcmd1bWVudHMgPSBhcmd1bWVudHM7XG5cbiAgdmFyIHBhcmVudCA9IHRoaXM7XG5cbiAgdmFyIGNoaWxkID0gbmV3IHRoaXMuY29uc3RydWN0b3Iobm9vcCk7XG5cbiAgaWYgKGNoaWxkW1BST01JU0VfSURdID09PSB1bmRlZmluZWQpIHtcbiAgICBtYWtlUHJvbWlzZShjaGlsZCk7XG4gIH1cblxuICB2YXIgX3N0YXRlID0gcGFyZW50Ll9zdGF0ZTtcblxuICBpZiAoX3N0YXRlKSB7XG4gICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBjYWxsYmFjayA9IF9hcmd1bWVudHNbX3N0YXRlIC0gMV07XG4gICAgICBhc2FwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrKF9zdGF0ZSwgY2hpbGQsIGNhbGxiYWNrLCBwYXJlbnQuX3Jlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbik7XG4gIH1cblxuICByZXR1cm4gY2hpbGQ7XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yZXNvbHZlYCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdpbGwgYmVjb21lIHJlc29sdmVkIHdpdGggdGhlXG4gIHBhc3NlZCBgdmFsdWVgLiBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgcmVzb2x2ZSgxKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyB2YWx1ZSA9PT0gMVxuICB9KTtcbiAgYGBgXG5cbiAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoMSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyB2YWx1ZSA9PT0gMVxuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCByZXNvbHZlXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBbnl9IHZhbHVlIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCB3aXRoXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgZnVsZmlsbGVkIHdpdGggdGhlIGdpdmVuXG4gIGB2YWx1ZWBcbiovXG5mdW5jdGlvbiByZXNvbHZlKG9iamVjdCkge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuXG4gIGlmIChvYmplY3QgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0LmNvbnN0cnVjdG9yID09PSBDb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcbiAgX3Jlc29sdmUocHJvbWlzZSwgb2JqZWN0KTtcbiAgcmV0dXJuIHByb21pc2U7XG59XG5cbnZhciBQUk9NSVNFX0lEID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDE2KTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnZhciBQRU5ESU5HID0gdm9pZCAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xuXG52YXIgR0VUX1RIRU5fRVJST1IgPSBuZXcgRXJyb3JPYmplY3QoKTtcblxuZnVuY3Rpb24gc2VsZkZ1bGZpbGxtZW50KCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGZcIik7XG59XG5cbmZ1bmN0aW9uIGNhbm5vdFJldHVybk93bigpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0EgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGhlbihwcm9taXNlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHByb21pc2UudGhlbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBHRVRfVEhFTl9FUlJPUi5lcnJvciA9IGVycm9yO1xuICAgIHJldHVybiBHRVRfVEhFTl9FUlJPUjtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlUaGVuKHRoZW4sIHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpIHtcbiAgdHJ5IHtcbiAgICB0aGVuLmNhbGwodmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUsIHRoZW4pIHtcbiAgYXNhcChmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgIHZhciBzZWFsZWQgPSBmYWxzZTtcbiAgICB2YXIgZXJyb3IgPSB0cnlUaGVuKHRoZW4sIHRoZW5hYmxlLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChzZWFsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2VhbGVkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGVuYWJsZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuXG4gICAgICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSwgJ1NldHRsZTogJyArIChwcm9taXNlLl9sYWJlbCB8fCAnIHVua25vd24gcHJvbWlzZScpKTtcblxuICAgIGlmICghc2VhbGVkICYmIGVycm9yKSB7XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgX3JlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgfVxuICB9LCBwcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUpIHtcbiAgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gRlVMRklMTEVEKSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgfSBlbHNlIGlmICh0aGVuYWJsZS5fc3RhdGUgPT09IFJFSkVDVEVEKSB7XG4gICAgX3JlamVjdChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgfSBlbHNlIHtcbiAgICBzdWJzY3JpYmUodGhlbmFibGUsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuJCQpIHtcbiAgaWYgKG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IgPT09IHByb21pc2UuY29uc3RydWN0b3IgJiYgdGhlbiQkID09PSB0aGVuICYmIG1heWJlVGhlbmFibGUuY29uc3RydWN0b3IucmVzb2x2ZSA9PT0gcmVzb2x2ZSkge1xuICAgIGhhbmRsZU93blRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICB9IGVsc2Uge1xuICAgIGlmICh0aGVuJCQgPT09IEdFVF9USEVOX0VSUk9SKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIEdFVF9USEVOX0VSUk9SLmVycm9yKTtcbiAgICB9IGVsc2UgaWYgKHRoZW4kJCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbih0aGVuJCQpKSB7XG4gICAgICBoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSwgdGhlbiQkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCBtYXliZVRoZW5hYmxlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpIHtcbiAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgX3JlamVjdChwcm9taXNlLCBzZWxmRnVsZmlsbG1lbnQoKSk7XG4gIH0gZWxzZSBpZiAob2JqZWN0T3JGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIHZhbHVlLCBnZXRUaGVuKHZhbHVlKSk7XG4gIH0gZWxzZSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaFJlamVjdGlvbihwcm9taXNlKSB7XG4gIGlmIChwcm9taXNlLl9vbmVycm9yKSB7XG4gICAgcHJvbWlzZS5fb25lcnJvcihwcm9taXNlLl9yZXN1bHQpO1xuICB9XG5cbiAgcHVibGlzaChwcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gZnVsZmlsbChwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwcm9taXNlLl9yZXN1bHQgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fc3RhdGUgPSBGVUxGSUxMRUQ7XG5cbiAgaWYgKHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIGFzYXAocHVibGlzaCwgcHJvbWlzZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3JlamVjdChwcm9taXNlLCByZWFzb24pIHtcbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByb21pc2UuX3N0YXRlID0gUkVKRUNURUQ7XG4gIHByb21pc2UuX3Jlc3VsdCA9IHJlYXNvbjtcblxuICBhc2FwKHB1Ymxpc2hSZWplY3Rpb24sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBzdWJzY3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgdmFyIF9zdWJzY3JpYmVycyA9IHBhcmVudC5fc3Vic2NyaWJlcnM7XG4gIHZhciBsZW5ndGggPSBfc3Vic2NyaWJlcnMubGVuZ3RoO1xuXG4gIHBhcmVudC5fb25lcnJvciA9IG51bGw7XG5cbiAgX3N1YnNjcmliZXJzW2xlbmd0aF0gPSBjaGlsZDtcbiAgX3N1YnNjcmliZXJzW2xlbmd0aCArIEZVTEZJTExFRF0gPSBvbkZ1bGZpbGxtZW50O1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgUkVKRUNURURdID0gb25SZWplY3Rpb247XG5cbiAgaWYgKGxlbmd0aCA9PT0gMCAmJiBwYXJlbnQuX3N0YXRlKSB7XG4gICAgYXNhcChwdWJsaXNoLCBwYXJlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1Ymxpc2gocHJvbWlzZSkge1xuICB2YXIgc3Vic2NyaWJlcnMgPSBwcm9taXNlLl9zdWJzY3JpYmVycztcbiAgdmFyIHNldHRsZWQgPSBwcm9taXNlLl9zdGF0ZTtcblxuICBpZiAoc3Vic2NyaWJlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGNoaWxkID0gdW5kZWZpbmVkLFxuICAgICAgY2FsbGJhY2sgPSB1bmRlZmluZWQsXG4gICAgICBkZXRhaWwgPSBwcm9taXNlLl9yZXN1bHQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJzY3JpYmVycy5sZW5ndGg7IGkgKz0gMykge1xuICAgIGNoaWxkID0gc3Vic2NyaWJlcnNbaV07XG4gICAgY2FsbGJhY2sgPSBzdWJzY3JpYmVyc1tpICsgc2V0dGxlZF07XG5cbiAgICBpZiAoY2hpbGQpIHtcbiAgICAgIGludm9rZUNhbGxiYWNrKHNldHRsZWQsIGNoaWxkLCBjYWxsYmFjaywgZGV0YWlsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soZGV0YWlsKTtcbiAgICB9XG4gIH1cblxuICBwcm9taXNlLl9zdWJzY3JpYmVycy5sZW5ndGggPSAwO1xufVxuXG5mdW5jdGlvbiBFcnJvck9iamVjdCgpIHtcbiAgdGhpcy5lcnJvciA9IG51bGw7XG59XG5cbnZhciBUUllfQ0FUQ0hfRVJST1IgPSBuZXcgRXJyb3JPYmplY3QoKTtcblxuZnVuY3Rpb24gdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCkge1xuICB0cnkge1xuICAgIHJldHVybiBjYWxsYmFjayhkZXRhaWwpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgVFJZX0NBVENIX0VSUk9SLmVycm9yID0gZTtcbiAgICByZXR1cm4gVFJZX0NBVENIX0VSUk9SO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZUNhbGxiYWNrKHNldHRsZWQsIHByb21pc2UsIGNhbGxiYWNrLCBkZXRhaWwpIHtcbiAgdmFyIGhhc0NhbGxiYWNrID0gaXNGdW5jdGlvbihjYWxsYmFjayksXG4gICAgICB2YWx1ZSA9IHVuZGVmaW5lZCxcbiAgICAgIGVycm9yID0gdW5kZWZpbmVkLFxuICAgICAgc3VjY2VlZGVkID0gdW5kZWZpbmVkLFxuICAgICAgZmFpbGVkID0gdW5kZWZpbmVkO1xuXG4gIGlmIChoYXNDYWxsYmFjaykge1xuICAgIHZhbHVlID0gdHJ5Q2F0Y2goY2FsbGJhY2ssIGRldGFpbCk7XG5cbiAgICBpZiAodmFsdWUgPT09IFRSWV9DQVRDSF9FUlJPUikge1xuICAgICAgZmFpbGVkID0gdHJ1ZTtcbiAgICAgIGVycm9yID0gdmFsdWUuZXJyb3I7XG4gICAgICB2YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1Y2NlZWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGNhbm5vdFJldHVybk93bigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBkZXRhaWw7XG4gICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIC8vIG5vb3BcbiAgfSBlbHNlIGlmIChoYXNDYWxsYmFjayAmJiBzdWNjZWVkZWQpIHtcbiAgICAgIF9yZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGZhaWxlZCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBGVUxGSUxMRUQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gUkVKRUNURUQpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVByb21pc2UocHJvbWlzZSwgcmVzb2x2ZXIpIHtcbiAgdHJ5IHtcbiAgICByZXNvbHZlcihmdW5jdGlvbiByZXNvbHZlUHJvbWlzZSh2YWx1ZSkge1xuICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIHJlamVjdFByb21pc2UocmVhc29uKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIGUpO1xuICB9XG59XG5cbnZhciBpZCA9IDA7XG5mdW5jdGlvbiBuZXh0SWQoKSB7XG4gIHJldHVybiBpZCsrO1xufVxuXG5mdW5jdGlvbiBtYWtlUHJvbWlzZShwcm9taXNlKSB7XG4gIHByb21pc2VbUFJPTUlTRV9JRF0gPSBpZCsrO1xuICBwcm9taXNlLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9zdWJzY3JpYmVycyA9IFtdO1xufVxuXG5mdW5jdGlvbiBFbnVtZXJhdG9yKENvbnN0cnVjdG9yLCBpbnB1dCkge1xuICB0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcblxuICBpZiAoIXRoaXMucHJvbWlzZVtQUk9NSVNFX0lEXSkge1xuICAgIG1ha2VQcm9taXNlKHRoaXMucHJvbWlzZSk7XG4gIH1cblxuICBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMubGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgIHRoaXMuX3JlbWFpbmluZyA9IGlucHV0Lmxlbmd0aDtcblxuICAgIHRoaXMuX3Jlc3VsdCA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGZ1bGZpbGwodGhpcy5wcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoIHx8IDA7XG4gICAgICB0aGlzLl9lbnVtZXJhdGUoKTtcbiAgICAgIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIF9yZWplY3QodGhpcy5wcm9taXNlLCB2YWxpZGF0aW9uRXJyb3IoKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGlvbkVycm9yKCkge1xuICByZXR1cm4gbmV3IEVycm9yKCdBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXknKTtcbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl9lbnVtZXJhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgdmFyIF9pbnB1dCA9IHRoaXMuX2lucHV0O1xuXG4gIGZvciAodmFyIGkgPSAwOyB0aGlzLl9zdGF0ZSA9PT0gUEVORElORyAmJiBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICB0aGlzLl9lYWNoRW50cnkoX2lucHV0W2ldLCBpKTtcbiAgfVxufTtcblxuRW51bWVyYXRvci5wcm90b3R5cGUuX2VhY2hFbnRyeSA9IGZ1bmN0aW9uIChlbnRyeSwgaSkge1xuICB2YXIgYyA9IHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3I7XG4gIHZhciByZXNvbHZlJCQgPSBjLnJlc29sdmU7XG5cbiAgaWYgKHJlc29sdmUkJCA9PT0gcmVzb2x2ZSkge1xuICAgIHZhciBfdGhlbiA9IGdldFRoZW4oZW50cnkpO1xuXG4gICAgaWYgKF90aGVuID09PSB0aGVuICYmIGVudHJ5Ll9zdGF0ZSAhPT0gUEVORElORykge1xuICAgICAgdGhpcy5fc2V0dGxlZEF0KGVudHJ5Ll9zdGF0ZSwgaSwgZW50cnkuX3Jlc3VsdCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgX3RoZW4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuICAgICAgdGhpcy5fcmVzdWx0W2ldID0gZW50cnk7XG4gICAgfSBlbHNlIGlmIChjID09PSBQcm9taXNlKSB7XG4gICAgICB2YXIgcHJvbWlzZSA9IG5ldyBjKG5vb3ApO1xuICAgICAgaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBlbnRyeSwgX3RoZW4pO1xuICAgICAgdGhpcy5fd2lsbFNldHRsZUF0KHByb21pc2UsIGkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQobmV3IGMoZnVuY3Rpb24gKHJlc29sdmUkJCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSQkKGVudHJ5KTtcbiAgICAgIH0pLCBpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fd2lsbFNldHRsZUF0KHJlc29sdmUkJChlbnRyeSksIGkpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fc2V0dGxlZEF0ID0gZnVuY3Rpb24gKHN0YXRlLCBpLCB2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXMucHJvbWlzZTtcblxuICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IFBFTkRJTkcpIHtcbiAgICB0aGlzLl9yZW1haW5pbmctLTtcblxuICAgIGlmIChzdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXN1bHRbaV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5fcmVtYWluaW5nID09PSAwKSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0ID0gZnVuY3Rpb24gKHByb21pc2UsIGkpIHtcbiAgdmFyIGVudW1lcmF0b3IgPSB0aGlzO1xuXG4gIHN1YnNjcmliZShwcm9taXNlLCB1bmRlZmluZWQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoRlVMRklMTEVELCBpLCB2YWx1ZSk7XG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICByZXR1cm4gZW51bWVyYXRvci5fc2V0dGxlZEF0KFJFSkVDVEVELCBpLCByZWFzb24pO1xuICB9KTtcbn07XG5cbi8qKlxuICBgUHJvbWlzZS5hbGxgIGFjY2VwdHMgYW4gYXJyYXkgb2YgcHJvbWlzZXMsIGFuZCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2hcbiAgaXMgZnVsZmlsbGVkIHdpdGggYW4gYXJyYXkgb2YgZnVsZmlsbG1lbnQgdmFsdWVzIGZvciB0aGUgcGFzc2VkIHByb21pc2VzLCBvclxuICByZWplY3RlZCB3aXRoIHRoZSByZWFzb24gb2YgdGhlIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIGJlIHJlamVjdGVkLiBJdCBjYXN0cyBhbGxcbiAgZWxlbWVudHMgb2YgdGhlIHBhc3NlZCBpdGVyYWJsZSB0byBwcm9taXNlcyBhcyBpdCBydW5zIHRoaXMgYWxnb3JpdGhtLlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSByZXNvbHZlKDEpO1xuICBsZXQgcHJvbWlzZTIgPSByZXNvbHZlKDIpO1xuICBsZXQgcHJvbWlzZTMgPSByZXNvbHZlKDMpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gVGhlIGFycmF5IGhlcmUgd291bGQgYmUgWyAxLCAyLCAzIF07XG4gIH0pO1xuICBgYGBcblxuICBJZiBhbnkgb2YgdGhlIGBwcm9taXNlc2AgZ2l2ZW4gdG8gYGFsbGAgYXJlIHJlamVjdGVkLCB0aGUgZmlyc3QgcHJvbWlzZVxuICB0aGF0IGlzIHJlamVjdGVkIHdpbGwgYmUgZ2l2ZW4gYXMgYW4gYXJndW1lbnQgdG8gdGhlIHJldHVybmVkIHByb21pc2VzJ3NcbiAgcmVqZWN0aW9uIGhhbmRsZXIuIEZvciBleGFtcGxlOlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSByZXNvbHZlKDEpO1xuICBsZXQgcHJvbWlzZTIgPSByZWplY3QobmV3IEVycm9yKFwiMlwiKSk7XG4gIGxldCBwcm9taXNlMyA9IHJlamVjdChuZXcgRXJyb3IoXCIzXCIpKTtcbiAgbGV0IHByb21pc2VzID0gWyBwcm9taXNlMSwgcHJvbWlzZTIsIHByb21pc2UzIF07XG5cbiAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oYXJyYXkpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zIGJlY2F1c2UgdGhlcmUgYXJlIHJlamVjdGVkIHByb21pc2VzIVxuICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgIC8vIGVycm9yLm1lc3NhZ2UgPT09IFwiMlwiXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIGFsbFxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IGVudHJpZXMgYXJyYXkgb2YgcHJvbWlzZXNcbiAgQHBhcmFtIHtTdHJpbmd9IGxhYmVsIG9wdGlvbmFsIHN0cmluZyBmb3IgbGFiZWxpbmcgdGhlIHByb21pc2UuXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIGFsbCBgcHJvbWlzZXNgIGhhdmUgYmVlblxuICBmdWxmaWxsZWQsIG9yIHJlamVjdGVkIGlmIGFueSBvZiB0aGVtIGJlY29tZSByZWplY3RlZC5cbiAgQHN0YXRpY1xuKi9cbmZ1bmN0aW9uIGFsbChlbnRyaWVzKSB7XG4gIHJldHVybiBuZXcgRW51bWVyYXRvcih0aGlzLCBlbnRyaWVzKS5wcm9taXNlO1xufVxuXG4vKipcbiAgYFByb21pc2UucmFjZWAgcmV0dXJucyBhIG5ldyBwcm9taXNlIHdoaWNoIGlzIHNldHRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZVxuICBmaXJzdCBwYXNzZWQgcHJvbWlzZSB0byBzZXR0bGUuXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVzb2x2ZSgncHJvbWlzZSAxJyk7XG4gICAgfSwgMjAwKTtcbiAgfSk7XG5cbiAgbGV0IHByb21pc2UyID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDInKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyByZXN1bHQgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgaXQgd2FzIHJlc29sdmVkIGJlZm9yZSBwcm9taXNlMVxuICAgIC8vIHdhcyByZXNvbHZlZC5cbiAgfSk7XG4gIGBgYFxuXG4gIGBQcm9taXNlLnJhY2VgIGlzIGRldGVybWluaXN0aWMgaW4gdGhhdCBvbmx5IHRoZSBzdGF0ZSBvZiB0aGUgZmlyc3RcbiAgc2V0dGxlZCBwcm9taXNlIG1hdHRlcnMuIEZvciBleGFtcGxlLCBldmVuIGlmIG90aGVyIHByb21pc2VzIGdpdmVuIHRvIHRoZVxuICBgcHJvbWlzZXNgIGFycmF5IGFyZ3VtZW50IGFyZSByZXNvbHZlZCwgYnV0IHRoZSBmaXJzdCBzZXR0bGVkIHByb21pc2UgaGFzXG4gIGJlY29tZSByZWplY3RlZCBiZWZvcmUgdGhlIG90aGVyIHByb21pc2VzIGJlY2FtZSBmdWxmaWxsZWQsIHRoZSByZXR1cm5lZFxuICBwcm9taXNlIHdpbGwgYmVjb21lIHJlamVjdGVkOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoJ3Byb21pc2UgMicpKTtcbiAgICB9LCAxMDApO1xuICB9KTtcblxuICBQcm9taXNlLnJhY2UoW3Byb21pc2UxLCBwcm9taXNlMl0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcbiAgICAvLyBDb2RlIGhlcmUgbmV2ZXIgcnVuc1xuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAncHJvbWlzZSAyJyBiZWNhdXNlIHByb21pc2UgMiBiZWNhbWUgcmVqZWN0ZWQgYmVmb3JlXG4gICAgLy8gcHJvbWlzZSAxIGJlY2FtZSBmdWxmaWxsZWRcbiAgfSk7XG4gIGBgYFxuXG4gIEFuIGV4YW1wbGUgcmVhbC13b3JsZCB1c2UgY2FzZSBpcyBpbXBsZW1lbnRpbmcgdGltZW91dHM6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBQcm9taXNlLnJhY2UoW2FqYXgoJ2Zvby5qc29uJyksIHRpbWVvdXQoNTAwMCldKVxuICBgYGBcblxuICBAbWV0aG9kIHJhY2VcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FycmF5fSBwcm9taXNlcyBhcnJheSBvZiBwcm9taXNlcyB0byBvYnNlcnZlXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHdoaWNoIHNldHRsZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBmaXJzdCBwYXNzZWRcbiAgcHJvbWlzZSB0byBzZXR0bGUuXG4qL1xuZnVuY3Rpb24gcmFjZShlbnRyaWVzKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKCFpc0FycmF5KGVudHJpZXMpKSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAoXywgcmVqZWN0KSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1lvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4nKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gZW50cmllcy5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLnJlc29sdmUoZW50cmllc1tpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yZWplY3RgIHJldHVybnMgYSBwcm9taXNlIHJlamVjdGVkIHdpdGggdGhlIHBhc3NlZCBgcmVhc29uYC5cbiAgSXQgaXMgc2hvcnRoYW5kIGZvciB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCFcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUydcbiAgfSk7XG4gIGBgYFxuXG4gIEluc3RlYWQgb2Ygd3JpdGluZyB0aGUgYWJvdmUsIHlvdXIgY29kZSBub3cgc2ltcGx5IGJlY29tZXMgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdXSE9PUFMnKSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyBDb2RlIGhlcmUgZG9lc24ndCBydW4gYmVjYXVzZSB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCFcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ1dIT09QUydcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgcmVqZWN0XG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBbnl9IHJlYXNvbiB2YWx1ZSB0aGF0IHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aC5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgZ2l2ZW4gYHJlYXNvbmAuXG4qL1xuZnVuY3Rpb24gcmVqZWN0KHJlYXNvbikge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcbiAgX3JlamVjdChwcm9taXNlLCByZWFzb24pO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gbmVlZHNSZXNvbHZlcigpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xufVxuXG5mdW5jdGlvbiBuZWVkc05ldygpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLlwiKTtcbn1cblxuLyoqXG4gIFByb21pc2Ugb2JqZWN0cyByZXByZXNlbnQgdGhlIGV2ZW50dWFsIHJlc3VsdCBvZiBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uLiBUaGVcbiAgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCwgd2hpY2hcbiAgcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGUgcmVhc29uXG4gIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuXG4gIFRlcm1pbm9sb2d5XG4gIC0tLS0tLS0tLS0tXG5cbiAgLSBgcHJvbWlzZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHdpdGggYSBgdGhlbmAgbWV0aG9kIHdob3NlIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoaXMgc3BlY2lmaWNhdGlvbi5cbiAgLSBgdGhlbmFibGVgIGlzIGFuIG9iamVjdCBvciBmdW5jdGlvbiB0aGF0IGRlZmluZXMgYSBgdGhlbmAgbWV0aG9kLlxuICAtIGB2YWx1ZWAgaXMgYW55IGxlZ2FsIEphdmFTY3JpcHQgdmFsdWUgKGluY2x1ZGluZyB1bmRlZmluZWQsIGEgdGhlbmFibGUsIG9yIGEgcHJvbWlzZSkuXG4gIC0gYGV4Y2VwdGlvbmAgaXMgYSB2YWx1ZSB0aGF0IGlzIHRocm93biB1c2luZyB0aGUgdGhyb3cgc3RhdGVtZW50LlxuICAtIGByZWFzb25gIGlzIGEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2h5IGEgcHJvbWlzZSB3YXMgcmVqZWN0ZWQuXG4gIC0gYHNldHRsZWRgIHRoZSBmaW5hbCByZXN0aW5nIHN0YXRlIG9mIGEgcHJvbWlzZSwgZnVsZmlsbGVkIG9yIHJlamVjdGVkLlxuXG4gIEEgcHJvbWlzZSBjYW4gYmUgaW4gb25lIG9mIHRocmVlIHN0YXRlczogcGVuZGluZywgZnVsZmlsbGVkLCBvciByZWplY3RlZC5cblxuICBQcm9taXNlcyB0aGF0IGFyZSBmdWxmaWxsZWQgaGF2ZSBhIGZ1bGZpbGxtZW50IHZhbHVlIGFuZCBhcmUgaW4gdGhlIGZ1bGZpbGxlZFxuICBzdGF0ZS4gIFByb21pc2VzIHRoYXQgYXJlIHJlamVjdGVkIGhhdmUgYSByZWplY3Rpb24gcmVhc29uIGFuZCBhcmUgaW4gdGhlXG4gIHJlamVjdGVkIHN0YXRlLiAgQSBmdWxmaWxsbWVudCB2YWx1ZSBpcyBuZXZlciBhIHRoZW5hYmxlLlxuXG4gIFByb21pc2VzIGNhbiBhbHNvIGJlIHNhaWQgdG8gKnJlc29sdmUqIGEgdmFsdWUuICBJZiB0aGlzIHZhbHVlIGlzIGFsc28gYVxuICBwcm9taXNlLCB0aGVuIHRoZSBvcmlnaW5hbCBwcm9taXNlJ3Mgc2V0dGxlZCBzdGF0ZSB3aWxsIG1hdGNoIHRoZSB2YWx1ZSdzXG4gIHNldHRsZWQgc3RhdGUuICBTbyBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IHJlamVjdHMgd2lsbFxuICBpdHNlbGYgcmVqZWN0LCBhbmQgYSBwcm9taXNlIHRoYXQgKnJlc29sdmVzKiBhIHByb21pc2UgdGhhdCBmdWxmaWxscyB3aWxsXG4gIGl0c2VsZiBmdWxmaWxsLlxuXG5cbiAgQmFzaWMgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLVxuXG4gIGBgYGpzXG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgLy8gb24gc3VjY2Vzc1xuICAgIHJlc29sdmUodmFsdWUpO1xuXG4gICAgLy8gb24gZmFpbHVyZVxuICAgIHJlamVjdChyZWFzb24pO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAvLyBvbiBmdWxmaWxsbWVudFxuICB9LCBmdW5jdGlvbihyZWFzb24pIHtcbiAgICAvLyBvbiByZWplY3Rpb25cbiAgfSk7XG4gIGBgYFxuXG4gIEFkdmFuY2VkIFVzYWdlOlxuICAtLS0tLS0tLS0tLS0tLS1cblxuICBQcm9taXNlcyBzaGluZSB3aGVuIGFic3RyYWN0aW5nIGF3YXkgYXN5bmNocm9ub3VzIGludGVyYWN0aW9ucyBzdWNoIGFzXG4gIGBYTUxIdHRwUmVxdWVzdGBzLlxuXG4gIGBgYGpzXG4gIGZ1bmN0aW9uIGdldEpTT04odXJsKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgICBsZXQgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwpO1xuICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2pzb24nO1xuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICB4aHIuc2VuZCgpO1xuXG4gICAgICBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09PSB0aGlzLkRPTkUpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignZ2V0SlNPTjogYCcgKyB1cmwgKyAnYCBmYWlsZWQgd2l0aCBzdGF0dXM6IFsnICsgdGhpcy5zdGF0dXMgKyAnXScpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRKU09OKCcvcG9zdHMuanNvbicpLnRoZW4oZnVuY3Rpb24oanNvbikge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgVW5saWtlIGNhbGxiYWNrcywgcHJvbWlzZXMgYXJlIGdyZWF0IGNvbXBvc2FibGUgcHJpbWl0aXZlcy5cblxuICBgYGBqc1xuICBQcm9taXNlLmFsbChbXG4gICAgZ2V0SlNPTignL3Bvc3RzJyksXG4gICAgZ2V0SlNPTignL2NvbW1lbnRzJylcbiAgXSkudGhlbihmdW5jdGlvbih2YWx1ZXMpe1xuICAgIHZhbHVlc1swXSAvLyA9PiBwb3N0c0pTT05cbiAgICB2YWx1ZXNbMV0gLy8gPT4gY29tbWVudHNKU09OXG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9KTtcbiAgYGBgXG5cbiAgQGNsYXNzIFByb21pc2VcbiAgQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZXJcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAY29uc3RydWN0b3JcbiovXG5mdW5jdGlvbiBQcm9taXNlKHJlc29sdmVyKSB7XG4gIHRoaXNbUFJPTUlTRV9JRF0gPSBuZXh0SWQoKTtcbiAgdGhpcy5fcmVzdWx0ID0gdGhpcy5fc3RhdGUgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX3N1YnNjcmliZXJzID0gW107XG5cbiAgaWYgKG5vb3AgIT09IHJlc29sdmVyKSB7XG4gICAgdHlwZW9mIHJlc29sdmVyICE9PSAnZnVuY3Rpb24nICYmIG5lZWRzUmVzb2x2ZXIoKTtcbiAgICB0aGlzIGluc3RhbmNlb2YgUHJvbWlzZSA/IGluaXRpYWxpemVQcm9taXNlKHRoaXMsIHJlc29sdmVyKSA6IG5lZWRzTmV3KCk7XG4gIH1cbn1cblxuUHJvbWlzZS5hbGwgPSBhbGw7XG5Qcm9taXNlLnJhY2UgPSByYWNlO1xuUHJvbWlzZS5yZXNvbHZlID0gcmVzb2x2ZTtcblByb21pc2UucmVqZWN0ID0gcmVqZWN0O1xuUHJvbWlzZS5fc2V0U2NoZWR1bGVyID0gc2V0U2NoZWR1bGVyO1xuUHJvbWlzZS5fc2V0QXNhcCA9IHNldEFzYXA7XG5Qcm9taXNlLl9hc2FwID0gYXNhcDtcblxuUHJvbWlzZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBQcm9taXNlLFxuXG4gIC8qKlxuICAgIFRoZSBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLFxuICAgIHdoaWNoIHJlZ2lzdGVycyBjYWxsYmFja3MgdG8gcmVjZWl2ZSBlaXRoZXIgYSBwcm9taXNlJ3MgZXZlbnR1YWwgdmFsdWUgb3IgdGhlXG4gICAgcmVhc29uIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbih1c2VyKXtcbiAgICAgIC8vIHVzZXIgaXMgYXZhaWxhYmxlXG4gICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIHVzZXIgaXMgdW5hdmFpbGFibGUsIGFuZCB5b3UgYXJlIGdpdmVuIHRoZSByZWFzb24gd2h5XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIENoYWluaW5nXG4gICAgLS0tLS0tLS1cbiAgXG4gICAgVGhlIHJldHVybiB2YWx1ZSBvZiBgdGhlbmAgaXMgaXRzZWxmIGEgcHJvbWlzZS4gIFRoaXMgc2Vjb25kLCAnZG93bnN0cmVhbSdcbiAgICBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZmlyc3QgcHJvbWlzZSdzIGZ1bGZpbGxtZW50XG4gICAgb3IgcmVqZWN0aW9uIGhhbmRsZXIsIG9yIHJlamVjdGVkIGlmIHRoZSBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24uXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICByZXR1cm4gdXNlci5uYW1lO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHJldHVybiAnZGVmYXVsdCBuYW1lJztcbiAgICB9KS50aGVuKGZ1bmN0aW9uICh1c2VyTmFtZSkge1xuICAgICAgLy8gSWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGB1c2VyTmFtZWAgd2lsbCBiZSB0aGUgdXNlcidzIG5hbWUsIG90aGVyd2lzZSBpdFxuICAgICAgLy8gd2lsbCBiZSBgJ2RlZmF1bHQgbmFtZSdgXG4gICAgfSk7XG4gIFxuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCB1c2VyLCBidXQgc3RpbGwgdW5oYXBweScpO1xuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgLy8gaWYgYGZpbmRVc2VyYCBmdWxmaWxsZWQsIGByZWFzb25gIHdpbGwgYmUgJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jy5cbiAgICAgIC8vIElmIGBmaW5kVXNlcmAgcmVqZWN0ZWQsIGByZWFzb25gIHdpbGwgYmUgJ2BmaW5kVXNlcmAgcmVqZWN0ZWQgYW5kIHdlJ3JlIHVuaGFwcHknLlxuICAgIH0pO1xuICAgIGBgYFxuICAgIElmIHRoZSBkb3duc3RyZWFtIHByb21pc2UgZG9lcyBub3Qgc3BlY2lmeSBhIHJlamVjdGlvbiBoYW5kbGVyLCByZWplY3Rpb24gcmVhc29ucyB3aWxsIGJlIHByb3BhZ2F0ZWQgZnVydGhlciBkb3duc3RyZWFtLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgdGhyb3cgbmV3IFBlZGFnb2dpY2FsRXhjZXB0aW9uKCdVcHN0cmVhbSBlcnJvcicpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAvLyBuZXZlciByZWFjaGVkXG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAvLyBUaGUgYFBlZGdhZ29jaWFsRXhjZXB0aW9uYCBpcyBwcm9wYWdhdGVkIGFsbCB0aGUgd2F5IGRvd24gdG8gaGVyZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBBc3NpbWlsYXRpb25cbiAgICAtLS0tLS0tLS0tLS1cbiAgXG4gICAgU29tZXRpbWVzIHRoZSB2YWx1ZSB5b3Ugd2FudCB0byBwcm9wYWdhdGUgdG8gYSBkb3duc3RyZWFtIHByb21pc2UgY2FuIG9ubHkgYmVcbiAgICByZXRyaWV2ZWQgYXN5bmNocm9ub3VzbHkuIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHJldHVybmluZyBhIHByb21pc2UgaW4gdGhlXG4gICAgZnVsZmlsbG1lbnQgb3IgcmVqZWN0aW9uIGhhbmRsZXIuIFRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCB0aGVuIGJlIHBlbmRpbmdcbiAgICB1bnRpbCB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBzZXR0bGVkLiBUaGlzIGlzIGNhbGxlZCAqYXNzaW1pbGF0aW9uKi5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgICAgLy8gVGhlIHVzZXIncyBjb21tZW50cyBhcmUgbm93IGF2YWlsYWJsZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBJZiB0aGUgYXNzaW1saWF0ZWQgcHJvbWlzZSByZWplY3RzLCB0aGVuIHRoZSBkb3duc3RyZWFtIHByb21pc2Ugd2lsbCBhbHNvIHJlamVjdC5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiBmaW5kQ29tbWVudHNCeUF1dGhvcih1c2VyKTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCBmdWxmaWxscywgd2UnbGwgaGF2ZSB0aGUgdmFsdWUgaGVyZVxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIElmIGBmaW5kQ29tbWVudHNCeUF1dGhvcmAgcmVqZWN0cywgd2UnbGwgaGF2ZSB0aGUgcmVhc29uIGhlcmVcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgU2ltcGxlIEV4YW1wbGVcbiAgICAtLS0tLS0tLS0tLS0tLVxuICBcbiAgICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBsZXQgcmVzdWx0O1xuICBcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gZmluZFJlc3VsdCgpO1xuICAgICAgLy8gc3VjY2Vzc1xuICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAvLyBmYWlsdXJlXG4gICAgfVxuICAgIGBgYFxuICBcbiAgICBFcnJiYWNrIEV4YW1wbGVcbiAgXG4gICAgYGBganNcbiAgICBmaW5kUmVzdWx0KGZ1bmN0aW9uKHJlc3VsdCwgZXJyKXtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgLy8gZmFpbHVyZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc3VjY2Vzc1xuICAgICAgfVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBQcm9taXNlIEV4YW1wbGU7XG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBmaW5kUmVzdWx0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgICAgLy8gc3VjY2Vzc1xuICAgIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAvLyBmYWlsdXJlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEFkdmFuY2VkIEV4YW1wbGVcbiAgICAtLS0tLS0tLS0tLS0tLVxuICBcbiAgICBTeW5jaHJvbm91cyBFeGFtcGxlXG4gIFxuICAgIGBgYGphdmFzY3JpcHRcbiAgICBsZXQgYXV0aG9yLCBib29rcztcbiAgXG4gICAgdHJ5IHtcbiAgICAgIGF1dGhvciA9IGZpbmRBdXRob3IoKTtcbiAgICAgIGJvb2tzICA9IGZpbmRCb29rc0J5QXV0aG9yKGF1dGhvcik7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9XG4gICAgYGBgXG4gIFxuICAgIEVycmJhY2sgRXhhbXBsZVxuICBcbiAgICBgYGBqc1xuICBcbiAgICBmdW5jdGlvbiBmb3VuZEJvb2tzKGJvb2tzKSB7XG4gIFxuICAgIH1cbiAgXG4gICAgZnVuY3Rpb24gZmFpbHVyZShyZWFzb24pIHtcbiAgXG4gICAgfVxuICBcbiAgICBmaW5kQXV0aG9yKGZ1bmN0aW9uKGF1dGhvciwgZXJyKXtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZpbmRCb29va3NCeUF1dGhvcihhdXRob3IsIGZ1bmN0aW9uKGJvb2tzLCBlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3VuZEJvb2tzKGJvb2tzKTtcbiAgICAgICAgICAgICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICBmYWlsdXJlKHJlYXNvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIFByb21pc2UgRXhhbXBsZTtcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGZpbmRBdXRob3IoKS5cbiAgICAgIHRoZW4oZmluZEJvb2tzQnlBdXRob3IpLlxuICAgICAgdGhlbihmdW5jdGlvbihib29rcyl7XG4gICAgICAgIC8vIGZvdW5kIGJvb2tzXG4gICAgfSkuY2F0Y2goZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEBtZXRob2QgdGhlblxuICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uRnVsZmlsbGVkXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3RlZFxuICAgIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgICBAcmV0dXJuIHtQcm9taXNlfVxuICAqL1xuICB0aGVuOiB0aGVuLFxuXG4gIC8qKlxuICAgIGBjYXRjaGAgaXMgc2ltcGx5IHN1Z2FyIGZvciBgdGhlbih1bmRlZmluZWQsIG9uUmVqZWN0aW9uKWAgd2hpY2ggbWFrZXMgaXQgdGhlIHNhbWVcbiAgICBhcyB0aGUgY2F0Y2ggYmxvY2sgb2YgYSB0cnkvY2F0Y2ggc3RhdGVtZW50LlxuICBcbiAgICBgYGBqc1xuICAgIGZ1bmN0aW9uIGZpbmRBdXRob3IoKXtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGRuJ3QgZmluZCB0aGF0IGF1dGhvcicpO1xuICAgIH1cbiAgXG4gICAgLy8gc3luY2hyb25vdXNcbiAgICB0cnkge1xuICAgICAgZmluZEF1dGhvcigpO1xuICAgIH0gY2F0Y2gocmVhc29uKSB7XG4gICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIH1cbiAgXG4gICAgLy8gYXN5bmMgd2l0aCBwcm9taXNlc1xuICAgIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQG1ldGhvZCBjYXRjaFxuICAgIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVqZWN0aW9uXG4gICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG4gICdjYXRjaCc6IGZ1bmN0aW9uIF9jYXRjaChvblJlamVjdGlvbikge1xuICAgIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3Rpb24pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBwb2x5ZmlsbCgpIHtcbiAgICB2YXIgbG9jYWwgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbG9jYWwgPSBnbG9iYWw7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbG9jYWwgPSBzZWxmO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2NhbCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgUCA9IGxvY2FsLlByb21pc2U7XG5cbiAgICBpZiAoUCkge1xuICAgICAgICB2YXIgcHJvbWlzZVRvU3RyaW5nID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHByb21pc2VUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChQLnJlc29sdmUoKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIHNpbGVudGx5IGlnbm9yZWRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9taXNlVG9TdHJpbmcgPT09ICdbb2JqZWN0IFByb21pc2VdJyAmJiAhUC5jYXN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2NhbC5Qcm9taXNlID0gUHJvbWlzZTtcbn1cblxucG9seWZpbGwoKTtcbi8vIFN0cmFuZ2UgY29tcGF0Li5cblByb21pc2UucG9seWZpbGwgPSBwb2x5ZmlsbDtcblByb21pc2UuUHJvbWlzZSA9IFByb21pc2U7XG5cbnJldHVybiBQcm9taXNlO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXM2LXByb21pc2UubWFwIiwiLyohIEpTT04gdjMuMy4yIHwgaHR0cDovL2Jlc3RpZWpzLmdpdGh1Yi5pby9qc29uMyB8IENvcHlyaWdodCAyMDEyLTIwMTQsIEtpdCBDYW1icmlkZ2UgfCBodHRwOi8va2l0Lm1pdC1saWNlbnNlLm9yZyAqL1xuOyhmdW5jdGlvbiAoKSB7XG4gIC8vIERldGVjdCB0aGUgYGRlZmluZWAgZnVuY3Rpb24gZXhwb3NlZCBieSBhc3luY2hyb25vdXMgbW9kdWxlIGxvYWRlcnMuIFRoZVxuICAvLyBzdHJpY3QgYGRlZmluZWAgY2hlY2sgaXMgbmVjZXNzYXJ5IGZvciBjb21wYXRpYmlsaXR5IHdpdGggYHIuanNgLlxuICB2YXIgaXNMb2FkZXIgPSB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZDtcblxuICAvLyBBIHNldCBvZiB0eXBlcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIG9iamVjdHMgZnJvbSBwcmltaXRpdmVzLlxuICB2YXIgb2JqZWN0VHlwZXMgPSB7XG4gICAgXCJmdW5jdGlvblwiOiB0cnVlLFxuICAgIFwib2JqZWN0XCI6IHRydWVcbiAgfTtcblxuICAvLyBEZXRlY3QgdGhlIGBleHBvcnRzYCBvYmplY3QgZXhwb3NlZCBieSBDb21tb25KUyBpbXBsZW1lbnRhdGlvbnMuXG4gIHZhciBmcmVlRXhwb3J0cyA9IG9iamVjdFR5cGVzW3R5cGVvZiBleHBvcnRzXSAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbiAgLy8gVXNlIHRoZSBgZ2xvYmFsYCBvYmplY3QgZXhwb3NlZCBieSBOb2RlIChpbmNsdWRpbmcgQnJvd3NlcmlmeSB2aWFcbiAgLy8gYGluc2VydC1tb2R1bGUtZ2xvYmFsc2ApLCBOYXJ3aGFsLCBhbmQgUmluZ28gYXMgdGhlIGRlZmF1bHQgY29udGV4dCxcbiAgLy8gYW5kIHRoZSBgd2luZG93YCBvYmplY3QgaW4gYnJvd3NlcnMuIFJoaW5vIGV4cG9ydHMgYSBgZ2xvYmFsYCBmdW5jdGlvblxuICAvLyBpbnN0ZWFkLlxuICB2YXIgcm9vdCA9IG9iamVjdFR5cGVzW3R5cGVvZiB3aW5kb3ddICYmIHdpbmRvdyB8fCB0aGlzLFxuICAgICAgZnJlZUdsb2JhbCA9IGZyZWVFeHBvcnRzICYmIG9iamVjdFR5cGVzW3R5cGVvZiBtb2R1bGVdICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIHR5cGVvZiBnbG9iYWwgPT0gXCJvYmplY3RcIiAmJiBnbG9iYWw7XG5cbiAgaWYgKGZyZWVHbG9iYWwgJiYgKGZyZWVHbG9iYWxbXCJnbG9iYWxcIl0gPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbFtcIndpbmRvd1wiXSA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsW1wic2VsZlwiXSA9PT0gZnJlZUdsb2JhbCkpIHtcbiAgICByb290ID0gZnJlZUdsb2JhbDtcbiAgfVxuXG4gIC8vIFB1YmxpYzogSW5pdGlhbGl6ZXMgSlNPTiAzIHVzaW5nIHRoZSBnaXZlbiBgY29udGV4dGAgb2JqZWN0LCBhdHRhY2hpbmcgdGhlXG4gIC8vIGBzdHJpbmdpZnlgIGFuZCBgcGFyc2VgIGZ1bmN0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGBleHBvcnRzYCBvYmplY3QuXG4gIGZ1bmN0aW9uIHJ1bkluQ29udGV4dChjb250ZXh0LCBleHBvcnRzKSB7XG4gICAgY29udGV4dCB8fCAoY29udGV4dCA9IHJvb3RbXCJPYmplY3RcIl0oKSk7XG4gICAgZXhwb3J0cyB8fCAoZXhwb3J0cyA9IHJvb3RbXCJPYmplY3RcIl0oKSk7XG5cbiAgICAvLyBOYXRpdmUgY29uc3RydWN0b3IgYWxpYXNlcy5cbiAgICB2YXIgTnVtYmVyID0gY29udGV4dFtcIk51bWJlclwiXSB8fCByb290W1wiTnVtYmVyXCJdLFxuICAgICAgICBTdHJpbmcgPSBjb250ZXh0W1wiU3RyaW5nXCJdIHx8IHJvb3RbXCJTdHJpbmdcIl0sXG4gICAgICAgIE9iamVjdCA9IGNvbnRleHRbXCJPYmplY3RcIl0gfHwgcm9vdFtcIk9iamVjdFwiXSxcbiAgICAgICAgRGF0ZSA9IGNvbnRleHRbXCJEYXRlXCJdIHx8IHJvb3RbXCJEYXRlXCJdLFxuICAgICAgICBTeW50YXhFcnJvciA9IGNvbnRleHRbXCJTeW50YXhFcnJvclwiXSB8fCByb290W1wiU3ludGF4RXJyb3JcIl0sXG4gICAgICAgIFR5cGVFcnJvciA9IGNvbnRleHRbXCJUeXBlRXJyb3JcIl0gfHwgcm9vdFtcIlR5cGVFcnJvclwiXSxcbiAgICAgICAgTWF0aCA9IGNvbnRleHRbXCJNYXRoXCJdIHx8IHJvb3RbXCJNYXRoXCJdLFxuICAgICAgICBuYXRpdmVKU09OID0gY29udGV4dFtcIkpTT05cIl0gfHwgcm9vdFtcIkpTT05cIl07XG5cbiAgICAvLyBEZWxlZ2F0ZSB0byB0aGUgbmF0aXZlIGBzdHJpbmdpZnlgIGFuZCBgcGFyc2VgIGltcGxlbWVudGF0aW9ucy5cbiAgICBpZiAodHlwZW9mIG5hdGl2ZUpTT04gPT0gXCJvYmplY3RcIiAmJiBuYXRpdmVKU09OKSB7XG4gICAgICBleHBvcnRzLnN0cmluZ2lmeSA9IG5hdGl2ZUpTT04uc3RyaW5naWZ5O1xuICAgICAgZXhwb3J0cy5wYXJzZSA9IG5hdGl2ZUpTT04ucGFyc2U7XG4gICAgfVxuXG4gICAgLy8gQ29udmVuaWVuY2UgYWxpYXNlcy5cbiAgICB2YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlLFxuICAgICAgICBnZXRDbGFzcyA9IG9iamVjdFByb3RvLnRvU3RyaW5nLFxuICAgICAgICBpc1Byb3BlcnR5LCBmb3JFYWNoLCB1bmRlZjtcblxuICAgIC8vIFRlc3QgdGhlIGBEYXRlI2dldFVUQypgIG1ldGhvZHMuIEJhc2VkIG9uIHdvcmsgYnkgQFlhZmZsZS5cbiAgICB2YXIgaXNFeHRlbmRlZCA9IG5ldyBEYXRlKC0zNTA5ODI3MzM0NTczMjkyKTtcbiAgICB0cnkge1xuICAgICAgLy8gVGhlIGBnZXRVVENGdWxsWWVhcmAsIGBNb250aGAsIGFuZCBgRGF0ZWAgbWV0aG9kcyByZXR1cm4gbm9uc2Vuc2ljYWxcbiAgICAgIC8vIHJlc3VsdHMgZm9yIGNlcnRhaW4gZGF0ZXMgaW4gT3BlcmEgPj0gMTAuNTMuXG4gICAgICBpc0V4dGVuZGVkID0gaXNFeHRlbmRlZC5nZXRVVENGdWxsWWVhcigpID09IC0xMDkyNTIgJiYgaXNFeHRlbmRlZC5nZXRVVENNb250aCgpID09PSAwICYmIGlzRXh0ZW5kZWQuZ2V0VVRDRGF0ZSgpID09PSAxICYmXG4gICAgICAgIC8vIFNhZmFyaSA8IDIuMC4yIHN0b3JlcyB0aGUgaW50ZXJuYWwgbWlsbGlzZWNvbmQgdGltZSB2YWx1ZSBjb3JyZWN0bHksXG4gICAgICAgIC8vIGJ1dCBjbGlwcyB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBkYXRlIG1ldGhvZHMgdG8gdGhlIHJhbmdlIG9mXG4gICAgICAgIC8vIHNpZ25lZCAzMi1iaXQgaW50ZWdlcnMgKFstMiAqKiAzMSwgMiAqKiAzMSAtIDFdKS5cbiAgICAgICAgaXNFeHRlbmRlZC5nZXRVVENIb3VycygpID09IDEwICYmIGlzRXh0ZW5kZWQuZ2V0VVRDTWludXRlcygpID09IDM3ICYmIGlzRXh0ZW5kZWQuZ2V0VVRDU2Vjb25kcygpID09IDYgJiYgaXNFeHRlbmRlZC5nZXRVVENNaWxsaXNlY29uZHMoKSA9PSA3MDg7XG4gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuXG4gICAgLy8gSW50ZXJuYWw6IERldGVybWluZXMgd2hldGhlciB0aGUgbmF0aXZlIGBKU09OLnN0cmluZ2lmeWAgYW5kIGBwYXJzZWBcbiAgICAvLyBpbXBsZW1lbnRhdGlvbnMgYXJlIHNwZWMtY29tcGxpYW50LiBCYXNlZCBvbiB3b3JrIGJ5IEtlbiBTbnlkZXIuXG4gICAgZnVuY3Rpb24gaGFzKG5hbWUpIHtcbiAgICAgIGlmIChoYXNbbmFtZV0gIT09IHVuZGVmKSB7XG4gICAgICAgIC8vIFJldHVybiBjYWNoZWQgZmVhdHVyZSB0ZXN0IHJlc3VsdC5cbiAgICAgICAgcmV0dXJuIGhhc1tuYW1lXTtcbiAgICAgIH1cbiAgICAgIHZhciBpc1N1cHBvcnRlZDtcbiAgICAgIGlmIChuYW1lID09IFwiYnVnLXN0cmluZy1jaGFyLWluZGV4XCIpIHtcbiAgICAgICAgLy8gSUUgPD0gNyBkb2Vzbid0IHN1cHBvcnQgYWNjZXNzaW5nIHN0cmluZyBjaGFyYWN0ZXJzIHVzaW5nIHNxdWFyZVxuICAgICAgICAvLyBicmFja2V0IG5vdGF0aW9uLiBJRSA4IG9ubHkgc3VwcG9ydHMgdGhpcyBmb3IgcHJpbWl0aXZlcy5cbiAgICAgICAgaXNTdXBwb3J0ZWQgPSBcImFcIlswXSAhPSBcImFcIjtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBcImpzb25cIikge1xuICAgICAgICAvLyBJbmRpY2F0ZXMgd2hldGhlciBib3RoIGBKU09OLnN0cmluZ2lmeWAgYW5kIGBKU09OLnBhcnNlYCBhcmVcbiAgICAgICAgLy8gc3VwcG9ydGVkLlxuICAgICAgICBpc1N1cHBvcnRlZCA9IGhhcyhcImpzb24tc3RyaW5naWZ5XCIpICYmIGhhcyhcImpzb24tcGFyc2VcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdmFsdWUsIHNlcmlhbGl6ZWQgPSAne1wiYVwiOlsxLHRydWUsZmFsc2UsbnVsbCxcIlxcXFx1MDAwMFxcXFxiXFxcXG5cXFxcZlxcXFxyXFxcXHRcIl19JztcbiAgICAgICAgLy8gVGVzdCBgSlNPTi5zdHJpbmdpZnlgLlxuICAgICAgICBpZiAobmFtZSA9PSBcImpzb24tc3RyaW5naWZ5XCIpIHtcbiAgICAgICAgICB2YXIgc3RyaW5naWZ5ID0gZXhwb3J0cy5zdHJpbmdpZnksIHN0cmluZ2lmeVN1cHBvcnRlZCA9IHR5cGVvZiBzdHJpbmdpZnkgPT0gXCJmdW5jdGlvblwiICYmIGlzRXh0ZW5kZWQ7XG4gICAgICAgICAgaWYgKHN0cmluZ2lmeVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgLy8gQSB0ZXN0IGZ1bmN0aW9uIG9iamVjdCB3aXRoIGEgY3VzdG9tIGB0b0pTT05gIG1ldGhvZC5cbiAgICAgICAgICAgICh2YWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9KS50b0pTT04gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHN0cmluZ2lmeVN1cHBvcnRlZCA9XG4gICAgICAgICAgICAgICAgLy8gRmlyZWZveCAzLjFiMSBhbmQgYjIgc2VyaWFsaXplIHN0cmluZywgbnVtYmVyLCBhbmQgYm9vbGVhblxuICAgICAgICAgICAgICAgIC8vIHByaW1pdGl2ZXMgYXMgb2JqZWN0IGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSgwKSA9PT0gXCIwXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgYjIsIGFuZCBKU09OIDIgc2VyaWFsaXplIHdyYXBwZWQgcHJpbWl0aXZlcyBhcyBvYmplY3RcbiAgICAgICAgICAgICAgICAvLyBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IE51bWJlcigpKSA9PT0gXCIwXCIgJiZcbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IFN0cmluZygpKSA9PSAnXCJcIicgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgMiB0aHJvdyBhbiBlcnJvciBpZiB0aGUgdmFsdWUgaXMgYG51bGxgLCBgdW5kZWZpbmVkYCwgb3JcbiAgICAgICAgICAgICAgICAvLyBkb2VzIG5vdCBkZWZpbmUgYSBjYW5vbmljYWwgSlNPTiByZXByZXNlbnRhdGlvbiAodGhpcyBhcHBsaWVzIHRvXG4gICAgICAgICAgICAgICAgLy8gb2JqZWN0cyB3aXRoIGB0b0pTT05gIHByb3BlcnRpZXMgYXMgd2VsbCwgKnVubGVzcyogdGhleSBhcmUgbmVzdGVkXG4gICAgICAgICAgICAgICAgLy8gd2l0aGluIGFuIG9iamVjdCBvciBhcnJheSkuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KGdldENsYXNzKSA9PT0gdW5kZWYgJiZcbiAgICAgICAgICAgICAgICAvLyBJRSA4IHNlcmlhbGl6ZXMgYHVuZGVmaW5lZGAgYXMgYFwidW5kZWZpbmVkXCJgLiBTYWZhcmkgPD0gNS4xLjcgYW5kXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjMgcGFzcyB0aGlzIHRlc3QuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KHVuZGVmKSA9PT0gdW5kZWYgJiZcbiAgICAgICAgICAgICAgICAvLyBTYWZhcmkgPD0gNS4xLjcgYW5kIEZGIDMuMWIzIHRocm93IGBFcnJvcmBzIGFuZCBgVHlwZUVycm9yYHMsXG4gICAgICAgICAgICAgICAgLy8gcmVzcGVjdGl2ZWx5LCBpZiB0aGUgdmFsdWUgaXMgb21pdHRlZCBlbnRpcmVseS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoKSA9PT0gdW5kZWYgJiZcbiAgICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgMiB0aHJvdyBhbiBlcnJvciBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgbm90IGEgbnVtYmVyLFxuICAgICAgICAgICAgICAgIC8vIHN0cmluZywgYXJyYXksIG9iamVjdCwgQm9vbGVhbiwgb3IgYG51bGxgIGxpdGVyYWwuIFRoaXMgYXBwbGllcyB0b1xuICAgICAgICAgICAgICAgIC8vIG9iamVjdHMgd2l0aCBjdXN0b20gYHRvSlNPTmAgbWV0aG9kcyBhcyB3ZWxsLCB1bmxlc3MgdGhleSBhcmUgbmVzdGVkXG4gICAgICAgICAgICAgICAgLy8gaW5zaWRlIG9iamVjdCBvciBhcnJheSBsaXRlcmFscy4gWVVJIDMuMC4wYjEgaWdub3JlcyBjdXN0b20gYHRvSlNPTmBcbiAgICAgICAgICAgICAgICAvLyBtZXRob2RzIGVudGlyZWx5LlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeSh2YWx1ZSkgPT09IFwiMVwiICYmXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KFt2YWx1ZV0pID09IFwiWzFdXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBQcm90b3R5cGUgPD0gMS42LjEgc2VyaWFsaXplcyBgW3VuZGVmaW5lZF1gIGFzIGBcIltdXCJgIGluc3RlYWQgb2ZcbiAgICAgICAgICAgICAgICAvLyBgXCJbbnVsbF1cImAuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KFt1bmRlZl0pID09IFwiW251bGxdXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBZVUkgMy4wLjBiMSBmYWlscyB0byBzZXJpYWxpemUgYG51bGxgIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShudWxsKSA9PSBcIm51bGxcIiAmJlxuICAgICAgICAgICAgICAgIC8vIEZGIDMuMWIxLCAyIGhhbHRzIHNlcmlhbGl6YXRpb24gaWYgYW4gYXJyYXkgY29udGFpbnMgYSBmdW5jdGlvbjpcbiAgICAgICAgICAgICAgICAvLyBgWzEsIHRydWUsIGdldENsYXNzLCAxXWAgc2VyaWFsaXplcyBhcyBcIlsxLHRydWUsXSxcIi4gRkYgMy4xYjNcbiAgICAgICAgICAgICAgICAvLyBlbGlkZXMgbm9uLUpTT04gdmFsdWVzIGZyb20gb2JqZWN0cyBhbmQgYXJyYXlzLCB1bmxlc3MgdGhleVxuICAgICAgICAgICAgICAgIC8vIGRlZmluZSBjdXN0b20gYHRvSlNPTmAgbWV0aG9kcy5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoW3VuZGVmLCBnZXRDbGFzcywgbnVsbF0pID09IFwiW251bGwsbnVsbCxudWxsXVwiICYmXG4gICAgICAgICAgICAgICAgLy8gU2ltcGxlIHNlcmlhbGl6YXRpb24gdGVzdC4gRkYgMy4xYjEgdXNlcyBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZXNcbiAgICAgICAgICAgICAgICAvLyB3aGVyZSBjaGFyYWN0ZXIgZXNjYXBlIGNvZGVzIGFyZSBleHBlY3RlZCAoZS5nLiwgYFxcYmAgPT4gYFxcdTAwMDhgKS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkoeyBcImFcIjogW3ZhbHVlLCB0cnVlLCBmYWxzZSwgbnVsbCwgXCJcXHgwMFxcYlxcblxcZlxcclxcdFwiXSB9KSA9PSBzZXJpYWxpemVkICYmXG4gICAgICAgICAgICAgICAgLy8gRkYgMy4xYjEgYW5kIGIyIGlnbm9yZSB0aGUgYGZpbHRlcmAgYW5kIGB3aWR0aGAgYXJndW1lbnRzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShudWxsLCB2YWx1ZSkgPT09IFwiMVwiICYmXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KFsxLCAyXSwgbnVsbCwgMSkgPT0gXCJbXFxuIDEsXFxuIDJcXG5dXCIgJiZcbiAgICAgICAgICAgICAgICAvLyBKU09OIDIsIFByb3RvdHlwZSA8PSAxLjcsIGFuZCBvbGRlciBXZWJLaXQgYnVpbGRzIGluY29ycmVjdGx5XG4gICAgICAgICAgICAgICAgLy8gc2VyaWFsaXplIGV4dGVuZGVkIHllYXJzLlxuICAgICAgICAgICAgICAgIHN0cmluZ2lmeShuZXcgRGF0ZSgtOC42NGUxNSkpID09ICdcIi0yNzE4MjEtMDQtMjBUMDA6MDA6MDAuMDAwWlwiJyAmJlxuICAgICAgICAgICAgICAgIC8vIFRoZSBtaWxsaXNlY29uZHMgYXJlIG9wdGlvbmFsIGluIEVTIDUsIGJ1dCByZXF1aXJlZCBpbiA1LjEuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBEYXRlKDguNjRlMTUpKSA9PSAnXCIrMjc1NzYwLTA5LTEzVDAwOjAwOjAwLjAwMFpcIicgJiZcbiAgICAgICAgICAgICAgICAvLyBGaXJlZm94IDw9IDExLjAgaW5jb3JyZWN0bHkgc2VyaWFsaXplcyB5ZWFycyBwcmlvciB0byAwIGFzIG5lZ2F0aXZlXG4gICAgICAgICAgICAgICAgLy8gZm91ci1kaWdpdCB5ZWFycyBpbnN0ZWFkIG9mIHNpeC1kaWdpdCB5ZWFycy4gQ3JlZGl0czogQFlhZmZsZS5cbiAgICAgICAgICAgICAgICBzdHJpbmdpZnkobmV3IERhdGUoLTYyMTk4NzU1MmU1KSkgPT0gJ1wiLTAwMDAwMS0wMS0wMVQwMDowMDowMC4wMDBaXCInICYmXG4gICAgICAgICAgICAgICAgLy8gU2FmYXJpIDw9IDUuMS41IGFuZCBPcGVyYSA+PSAxMC41MyBpbmNvcnJlY3RseSBzZXJpYWxpemUgbWlsbGlzZWNvbmRcbiAgICAgICAgICAgICAgICAvLyB2YWx1ZXMgbGVzcyB0aGFuIDEwMDAuIENyZWRpdHM6IEBZYWZmbGUuXG4gICAgICAgICAgICAgICAgc3RyaW5naWZ5KG5ldyBEYXRlKC0xKSkgPT0gJ1wiMTk2OS0xMi0zMVQyMzo1OTo1OS45OTlaXCInO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgIHN0cmluZ2lmeVN1cHBvcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpc1N1cHBvcnRlZCA9IHN0cmluZ2lmeVN1cHBvcnRlZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUZXN0IGBKU09OLnBhcnNlYC5cbiAgICAgICAgaWYgKG5hbWUgPT0gXCJqc29uLXBhcnNlXCIpIHtcbiAgICAgICAgICB2YXIgcGFyc2UgPSBleHBvcnRzLnBhcnNlO1xuICAgICAgICAgIGlmICh0eXBlb2YgcGFyc2UgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAvLyBGRiAzLjFiMSwgYjIgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYSBiYXJlIGxpdGVyYWwgaXMgcHJvdmlkZWQuXG4gICAgICAgICAgICAgIC8vIENvbmZvcm1pbmcgaW1wbGVtZW50YXRpb25zIHNob3VsZCBhbHNvIGNvZXJjZSB0aGUgaW5pdGlhbCBhcmd1bWVudCB0b1xuICAgICAgICAgICAgICAvLyBhIHN0cmluZyBwcmlvciB0byBwYXJzaW5nLlxuICAgICAgICAgICAgICBpZiAocGFyc2UoXCIwXCIpID09PSAwICYmICFwYXJzZShmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBTaW1wbGUgcGFyc2luZyB0ZXN0LlxuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2Uoc2VyaWFsaXplZCk7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlU3VwcG9ydGVkID0gdmFsdWVbXCJhXCJdLmxlbmd0aCA9PSA1ICYmIHZhbHVlW1wiYVwiXVswXSA9PT0gMTtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyaSA8PSA1LjEuMiBhbmQgRkYgMy4xYjEgYWxsb3cgdW5lc2NhcGVkIHRhYnMgaW4gc3RyaW5ncy5cbiAgICAgICAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSAhcGFyc2UoJ1wiXFx0XCInKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge31cbiAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIEZGIDQuMCBhbmQgNC4wLjEgYWxsb3cgbGVhZGluZyBgK2Agc2lnbnMgYW5kIGxlYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAvLyBkZWNpbWFsIHBvaW50cy4gRkYgNC4wLCA0LjAuMSwgYW5kIElFIDktMTAgYWxzbyBhbGxvd1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGNlcnRhaW4gb2N0YWwgbGl0ZXJhbHMuXG4gICAgICAgICAgICAgICAgICAgICAgcGFyc2VTdXBwb3J0ZWQgPSBwYXJzZShcIjAxXCIpICE9PSAxO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHt9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAocGFyc2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBGRiA0LjAsIDQuMC4xLCBhbmQgUmhpbm8gMS43UjMtUjQgYWxsb3cgdHJhaWxpbmcgZGVjaW1hbFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHBvaW50cy4gVGhlc2UgZW52aXJvbm1lbnRzLCBhbG9uZyB3aXRoIEZGIDMuMWIxIGFuZCAyLFxuICAgICAgICAgICAgICAgICAgICAgIC8vIGFsc28gYWxsb3cgdHJhaWxpbmcgY29tbWFzIGluIEpTT04gb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3VwcG9ydGVkID0gcGFyc2UoXCIxLlwiKSAhPT0gMTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgIHBhcnNlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlzU3VwcG9ydGVkID0gcGFyc2VTdXBwb3J0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNbbmFtZV0gPSAhIWlzU3VwcG9ydGVkO1xuICAgIH1cblxuICAgIGlmICghaGFzKFwianNvblwiKSkge1xuICAgICAgLy8gQ29tbW9uIGBbW0NsYXNzXV1gIG5hbWUgYWxpYXNlcy5cbiAgICAgIHZhciBmdW5jdGlvbkNsYXNzID0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiLFxuICAgICAgICAgIGRhdGVDbGFzcyA9IFwiW29iamVjdCBEYXRlXVwiLFxuICAgICAgICAgIG51bWJlckNsYXNzID0gXCJbb2JqZWN0IE51bWJlcl1cIixcbiAgICAgICAgICBzdHJpbmdDbGFzcyA9IFwiW29iamVjdCBTdHJpbmddXCIsXG4gICAgICAgICAgYXJyYXlDbGFzcyA9IFwiW29iamVjdCBBcnJheV1cIixcbiAgICAgICAgICBib29sZWFuQ2xhc3MgPSBcIltvYmplY3QgQm9vbGVhbl1cIjtcblxuICAgICAgLy8gRGV0ZWN0IGluY29tcGxldGUgc3VwcG9ydCBmb3IgYWNjZXNzaW5nIHN0cmluZyBjaGFyYWN0ZXJzIGJ5IGluZGV4LlxuICAgICAgdmFyIGNoYXJJbmRleEJ1Z2d5ID0gaGFzKFwiYnVnLXN0cmluZy1jaGFyLWluZGV4XCIpO1xuXG4gICAgICAvLyBEZWZpbmUgYWRkaXRpb25hbCB1dGlsaXR5IG1ldGhvZHMgaWYgdGhlIGBEYXRlYCBtZXRob2RzIGFyZSBidWdneS5cbiAgICAgIGlmICghaXNFeHRlbmRlZCkge1xuICAgICAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICAgICAgICAvLyBBIG1hcHBpbmcgYmV0d2VlbiB0aGUgbW9udGhzIG9mIHRoZSB5ZWFyIGFuZCB0aGUgbnVtYmVyIG9mIGRheXMgYmV0d2VlblxuICAgICAgICAvLyBKYW51YXJ5IDFzdCBhbmQgdGhlIGZpcnN0IG9mIHRoZSByZXNwZWN0aXZlIG1vbnRoLlxuICAgICAgICB2YXIgTW9udGhzID0gWzAsIDMxLCA1OSwgOTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0XTtcbiAgICAgICAgLy8gSW50ZXJuYWw6IENhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiBkYXlzIGJldHdlZW4gdGhlIFVuaXggZXBvY2ggYW5kIHRoZVxuICAgICAgICAvLyBmaXJzdCBkYXkgb2YgdGhlIGdpdmVuIG1vbnRoLlxuICAgICAgICB2YXIgZ2V0RGF5ID0gZnVuY3Rpb24gKHllYXIsIG1vbnRoKSB7XG4gICAgICAgICAgcmV0dXJuIE1vbnRoc1ttb250aF0gKyAzNjUgKiAoeWVhciAtIDE5NzApICsgZmxvb3IoKHllYXIgLSAxOTY5ICsgKG1vbnRoID0gKyhtb250aCA+IDEpKSkgLyA0KSAtIGZsb29yKCh5ZWFyIC0gMTkwMSArIG1vbnRoKSAvIDEwMCkgKyBmbG9vcigoeWVhciAtIDE2MDEgKyBtb250aCkgLyA0MDApO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBJbnRlcm5hbDogRGV0ZXJtaW5lcyBpZiBhIHByb3BlcnR5IGlzIGEgZGlyZWN0IHByb3BlcnR5IG9mIHRoZSBnaXZlblxuICAgICAgLy8gb2JqZWN0LiBEZWxlZ2F0ZXMgdG8gdGhlIG5hdGl2ZSBgT2JqZWN0I2hhc093blByb3BlcnR5YCBtZXRob2QuXG4gICAgICBpZiAoIShpc1Byb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHkpKSB7XG4gICAgICAgIGlzUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICB2YXIgbWVtYmVycyA9IHt9LCBjb25zdHJ1Y3RvcjtcbiAgICAgICAgICBpZiAoKG1lbWJlcnMuX19wcm90b19fID0gbnVsbCwgbWVtYmVycy5fX3Byb3RvX18gPSB7XG4gICAgICAgICAgICAvLyBUaGUgKnByb3RvKiBwcm9wZXJ0eSBjYW5ub3QgYmUgc2V0IG11bHRpcGxlIHRpbWVzIGluIHJlY2VudFxuICAgICAgICAgICAgLy8gdmVyc2lvbnMgb2YgRmlyZWZveCBhbmQgU2VhTW9ua2V5LlxuICAgICAgICAgICAgXCJ0b1N0cmluZ1wiOiAxXG4gICAgICAgICAgfSwgbWVtYmVycykudG9TdHJpbmcgIT0gZ2V0Q2xhc3MpIHtcbiAgICAgICAgICAgIC8vIFNhZmFyaSA8PSAyLjAuMyBkb2Vzbid0IGltcGxlbWVudCBgT2JqZWN0I2hhc093blByb3BlcnR5YCwgYnV0XG4gICAgICAgICAgICAvLyBzdXBwb3J0cyB0aGUgbXV0YWJsZSAqcHJvdG8qIHByb3BlcnR5LlxuICAgICAgICAgICAgaXNQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAvLyBDYXB0dXJlIGFuZCBicmVhayB0aGUgb2JqZWN0J3MgcHJvdG90eXBlIGNoYWluIChzZWUgc2VjdGlvbiA4LjYuMlxuICAgICAgICAgICAgICAvLyBvZiB0aGUgRVMgNS4xIHNwZWMpLiBUaGUgcGFyZW50aGVzaXplZCBleHByZXNzaW9uIHByZXZlbnRzIGFuXG4gICAgICAgICAgICAgIC8vIHVuc2FmZSB0cmFuc2Zvcm1hdGlvbiBieSB0aGUgQ2xvc3VyZSBDb21waWxlci5cbiAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsID0gdGhpcy5fX3Byb3RvX18sIHJlc3VsdCA9IHByb3BlcnR5IGluICh0aGlzLl9fcHJvdG9fXyA9IG51bGwsIHRoaXMpO1xuICAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBwcm90b3R5cGUgY2hhaW4uXG4gICAgICAgICAgICAgIHRoaXMuX19wcm90b19fID0gb3JpZ2luYWw7XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDYXB0dXJlIGEgcmVmZXJlbmNlIHRvIHRoZSB0b3AtbGV2ZWwgYE9iamVjdGAgY29uc3RydWN0b3IuXG4gICAgICAgICAgICBjb25zdHJ1Y3RvciA9IG1lbWJlcnMuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIGBjb25zdHJ1Y3RvcmAgcHJvcGVydHkgdG8gc2ltdWxhdGUgYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAgaW5cbiAgICAgICAgICAgIC8vIG90aGVyIGVudmlyb25tZW50cy5cbiAgICAgICAgICAgIGlzUHJvcGVydHkgPSBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudCA9ICh0aGlzLmNvbnN0cnVjdG9yIHx8IGNvbnN0cnVjdG9yKS5wcm90b3R5cGU7XG4gICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eSBpbiB0aGlzICYmICEocHJvcGVydHkgaW4gcGFyZW50ICYmIHRoaXNbcHJvcGVydHldID09PSBwYXJlbnRbcHJvcGVydHldKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIG1lbWJlcnMgPSBudWxsO1xuICAgICAgICAgIHJldHVybiBpc1Byb3BlcnR5LmNhbGwodGhpcywgcHJvcGVydHkpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBJbnRlcm5hbDogTm9ybWFsaXplcyB0aGUgYGZvci4uLmluYCBpdGVyYXRpb24gYWxnb3JpdGhtIGFjcm9zc1xuICAgICAgLy8gZW52aXJvbm1lbnRzLiBFYWNoIGVudW1lcmF0ZWQga2V5IGlzIHlpZWxkZWQgdG8gYSBgY2FsbGJhY2tgIGZ1bmN0aW9uLlxuICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBzaXplID0gMCwgUHJvcGVydGllcywgbWVtYmVycywgcHJvcGVydHk7XG5cbiAgICAgICAgLy8gVGVzdHMgZm9yIGJ1Z3MgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQncyBgZm9yLi4uaW5gIGFsZ29yaXRobS4gVGhlXG4gICAgICAgIC8vIGB2YWx1ZU9mYCBwcm9wZXJ0eSBpbmhlcml0cyB0aGUgbm9uLWVudW1lcmFibGUgZmxhZyBmcm9tXG4gICAgICAgIC8vIGBPYmplY3QucHJvdG90eXBlYCBpbiBvbGRlciB2ZXJzaW9ucyBvZiBJRSwgTmV0c2NhcGUsIGFuZCBNb3ppbGxhLlxuICAgICAgICAoUHJvcGVydGllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlT2YgPSAwO1xuICAgICAgICB9KS5wcm90b3R5cGUudmFsdWVPZiA9IDA7XG5cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBgUHJvcGVydGllc2AgY2xhc3MuXG4gICAgICAgIG1lbWJlcnMgPSBuZXcgUHJvcGVydGllcygpO1xuICAgICAgICBmb3IgKHByb3BlcnR5IGluIG1lbWJlcnMpIHtcbiAgICAgICAgICAvLyBJZ25vcmUgYWxsIHByb3BlcnRpZXMgaW5oZXJpdGVkIGZyb20gYE9iamVjdC5wcm90b3R5cGVgLlxuICAgICAgICAgIGlmIChpc1Byb3BlcnR5LmNhbGwobWVtYmVycywgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICBzaXplKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFByb3BlcnRpZXMgPSBtZW1iZXJzID0gbnVsbDtcblxuICAgICAgICAvLyBOb3JtYWxpemUgdGhlIGl0ZXJhdGlvbiBhbGdvcml0aG0uXG4gICAgICAgIGlmICghc2l6ZSkge1xuICAgICAgICAgIC8vIEEgbGlzdCBvZiBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIGluaGVyaXRlZCBmcm9tIGBPYmplY3QucHJvdG90eXBlYC5cbiAgICAgICAgICBtZW1iZXJzID0gW1widmFsdWVPZlwiLCBcInRvU3RyaW5nXCIsIFwidG9Mb2NhbGVTdHJpbmdcIiwgXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLCBcImlzUHJvdG90eXBlT2ZcIiwgXCJoYXNPd25Qcm9wZXJ0eVwiLCBcImNvbnN0cnVjdG9yXCJdO1xuICAgICAgICAgIC8vIElFIDw9IDgsIE1vemlsbGEgMS4wLCBhbmQgTmV0c2NhcGUgNi4yIGlnbm9yZSBzaGFkb3dlZCBub24tZW51bWVyYWJsZVxuICAgICAgICAgIC8vIHByb3BlcnRpZXMuXG4gICAgICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IGdldENsYXNzLmNhbGwob2JqZWN0KSA9PSBmdW5jdGlvbkNsYXNzLCBwcm9wZXJ0eSwgbGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGhhc1Byb3BlcnR5ID0gIWlzRnVuY3Rpb24gJiYgdHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciAhPSBcImZ1bmN0aW9uXCIgJiYgb2JqZWN0VHlwZXNbdHlwZW9mIG9iamVjdC5oYXNPd25Qcm9wZXJ0eV0gJiYgb2JqZWN0Lmhhc093blByb3BlcnR5IHx8IGlzUHJvcGVydHk7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAvLyBHZWNrbyA8PSAxLjAgZW51bWVyYXRlcyB0aGUgYHByb3RvdHlwZWAgcHJvcGVydHkgb2YgZnVuY3Rpb25zIHVuZGVyXG4gICAgICAgICAgICAgIC8vIGNlcnRhaW4gY29uZGl0aW9uczsgSUUgZG9lcyBub3QuXG4gICAgICAgICAgICAgIGlmICghKGlzRnVuY3Rpb24gJiYgcHJvcGVydHkgPT0gXCJwcm90b3R5cGVcIikgJiYgaGFzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTWFudWFsbHkgaW52b2tlIHRoZSBjYWxsYmFjayBmb3IgZWFjaCBub24tZW51bWVyYWJsZSBwcm9wZXJ0eS5cbiAgICAgICAgICAgIGZvciAobGVuZ3RoID0gbWVtYmVycy5sZW5ndGg7IHByb3BlcnR5ID0gbWVtYmVyc1stLWxlbmd0aF07IGhhc1Byb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkgJiYgY2FsbGJhY2socHJvcGVydHkpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHNpemUgPT0gMikge1xuICAgICAgICAgIC8vIFNhZmFyaSA8PSAyLjAuNCBlbnVtZXJhdGVzIHNoYWRvd2VkIHByb3BlcnRpZXMgdHdpY2UuXG4gICAgICAgICAgZm9yRWFjaCA9IGZ1bmN0aW9uIChvYmplY3QsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBzZXQgb2YgaXRlcmF0ZWQgcHJvcGVydGllcy5cbiAgICAgICAgICAgIHZhciBtZW1iZXJzID0ge30sIGlzRnVuY3Rpb24gPSBnZXRDbGFzcy5jYWxsKG9iamVjdCkgPT0gZnVuY3Rpb25DbGFzcywgcHJvcGVydHk7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAvLyBTdG9yZSBlYWNoIHByb3BlcnR5IG5hbWUgdG8gcHJldmVudCBkb3VibGUgZW51bWVyYXRpb24uIFRoZVxuICAgICAgICAgICAgICAvLyBgcHJvdG90eXBlYCBwcm9wZXJ0eSBvZiBmdW5jdGlvbnMgaXMgbm90IGVudW1lcmF0ZWQgZHVlIHRvIGNyb3NzLVxuICAgICAgICAgICAgICAvLyBlbnZpcm9ubWVudCBpbmNvbnNpc3RlbmNpZXMuXG4gICAgICAgICAgICAgIGlmICghKGlzRnVuY3Rpb24gJiYgcHJvcGVydHkgPT0gXCJwcm90b3R5cGVcIikgJiYgIWlzUHJvcGVydHkuY2FsbChtZW1iZXJzLCBwcm9wZXJ0eSkgJiYgKG1lbWJlcnNbcHJvcGVydHldID0gMSkgJiYgaXNQcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2socHJvcGVydHkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBObyBidWdzIGRldGVjdGVkOyB1c2UgdGhlIHN0YW5kYXJkIGBmb3IuLi5pbmAgYWxnb3JpdGhtLlxuICAgICAgICAgIGZvckVhY2ggPSBmdW5jdGlvbiAob2JqZWN0LCBjYWxsYmFjaykge1xuICAgICAgICAgICAgdmFyIGlzRnVuY3Rpb24gPSBnZXRDbGFzcy5jYWxsKG9iamVjdCkgPT0gZnVuY3Rpb25DbGFzcywgcHJvcGVydHksIGlzQ29uc3RydWN0b3I7XG4gICAgICAgICAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICBpZiAoIShpc0Z1bmN0aW9uICYmIHByb3BlcnR5ID09IFwicHJvdG90eXBlXCIpICYmIGlzUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KSAmJiAhKGlzQ29uc3RydWN0b3IgPSBwcm9wZXJ0eSA9PT0gXCJjb25zdHJ1Y3RvclwiKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTWFudWFsbHkgaW52b2tlIHRoZSBjYWxsYmFjayBmb3IgdGhlIGBjb25zdHJ1Y3RvcmAgcHJvcGVydHkgZHVlIHRvXG4gICAgICAgICAgICAvLyBjcm9zcy1lbnZpcm9ubWVudCBpbmNvbnNpc3RlbmNpZXMuXG4gICAgICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvciB8fCBpc1Byb3BlcnR5LmNhbGwob2JqZWN0LCAocHJvcGVydHkgPSBcImNvbnN0cnVjdG9yXCIpKSkge1xuICAgICAgICAgICAgICBjYWxsYmFjayhwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9yRWFjaChvYmplY3QsIGNhbGxiYWNrKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFB1YmxpYzogU2VyaWFsaXplcyBhIEphdmFTY3JpcHQgYHZhbHVlYCBhcyBhIEpTT04gc3RyaW5nLiBUaGUgb3B0aW9uYWxcbiAgICAgIC8vIGBmaWx0ZXJgIGFyZ3VtZW50IG1heSBzcGVjaWZ5IGVpdGhlciBhIGZ1bmN0aW9uIHRoYXQgYWx0ZXJzIGhvdyBvYmplY3QgYW5kXG4gICAgICAvLyBhcnJheSBtZW1iZXJzIGFyZSBzZXJpYWxpemVkLCBvciBhbiBhcnJheSBvZiBzdHJpbmdzIGFuZCBudW1iZXJzIHRoYXRcbiAgICAgIC8vIGluZGljYXRlcyB3aGljaCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBzZXJpYWxpemVkLiBUaGUgb3B0aW9uYWwgYHdpZHRoYFxuICAgICAgLy8gYXJndW1lbnQgbWF5IGJlIGVpdGhlciBhIHN0cmluZyBvciBudW1iZXIgdGhhdCBzcGVjaWZpZXMgdGhlIGluZGVudGF0aW9uXG4gICAgICAvLyBsZXZlbCBvZiB0aGUgb3V0cHV0LlxuICAgICAgaWYgKCFoYXMoXCJqc29uLXN0cmluZ2lmeVwiKSkge1xuICAgICAgICAvLyBJbnRlcm5hbDogQSBtYXAgb2YgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCB0aGVpciBlc2NhcGVkIGVxdWl2YWxlbnRzLlxuICAgICAgICB2YXIgRXNjYXBlcyA9IHtcbiAgICAgICAgICA5MjogXCJcXFxcXFxcXFwiLFxuICAgICAgICAgIDM0OiAnXFxcXFwiJyxcbiAgICAgICAgICA4OiBcIlxcXFxiXCIsXG4gICAgICAgICAgMTI6IFwiXFxcXGZcIixcbiAgICAgICAgICAxMDogXCJcXFxcblwiLFxuICAgICAgICAgIDEzOiBcIlxcXFxyXCIsXG4gICAgICAgICAgOTogXCJcXFxcdFwiXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IENvbnZlcnRzIGB2YWx1ZWAgaW50byBhIHplcm8tcGFkZGVkIHN0cmluZyBzdWNoIHRoYXQgaXRzXG4gICAgICAgIC8vIGxlbmd0aCBpcyBhdCBsZWFzdCBlcXVhbCB0byBgd2lkdGhgLiBUaGUgYHdpZHRoYCBtdXN0IGJlIDw9IDYuXG4gICAgICAgIHZhciBsZWFkaW5nWmVyb2VzID0gXCIwMDAwMDBcIjtcbiAgICAgICAgdmFyIHRvUGFkZGVkU3RyaW5nID0gZnVuY3Rpb24gKHdpZHRoLCB2YWx1ZSkge1xuICAgICAgICAgIC8vIFRoZSBgfHwgMGAgZXhwcmVzc2lvbiBpcyBuZWNlc3NhcnkgdG8gd29yayBhcm91bmQgYSBidWcgaW5cbiAgICAgICAgICAvLyBPcGVyYSA8PSA3LjU0dTIgd2hlcmUgYDAgPT0gLTBgLCBidXQgYFN0cmluZygtMCkgIT09IFwiMFwiYC5cbiAgICAgICAgICByZXR1cm4gKGxlYWRpbmdaZXJvZXMgKyAodmFsdWUgfHwgMCkpLnNsaWNlKC13aWR0aCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IERvdWJsZS1xdW90ZXMgYSBzdHJpbmcgYHZhbHVlYCwgcmVwbGFjaW5nIGFsbCBBU0NJSSBjb250cm9sXG4gICAgICAgIC8vIGNoYXJhY3RlcnMgKGNoYXJhY3RlcnMgd2l0aCBjb2RlIHVuaXQgdmFsdWVzIGJldHdlZW4gMCBhbmQgMzEpIHdpdGhcbiAgICAgICAgLy8gdGhlaXIgZXNjYXBlZCBlcXVpdmFsZW50cy4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGVcbiAgICAgICAgLy8gYFF1b3RlKHZhbHVlKWAgb3BlcmF0aW9uIGRlZmluZWQgaW4gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMy5cbiAgICAgICAgdmFyIHVuaWNvZGVQcmVmaXggPSBcIlxcXFx1MDBcIjtcbiAgICAgICAgdmFyIHF1b3RlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9ICdcIicsIGluZGV4ID0gMCwgbGVuZ3RoID0gdmFsdWUubGVuZ3RoLCB1c2VDaGFySW5kZXggPSAhY2hhckluZGV4QnVnZ3kgfHwgbGVuZ3RoID4gMTA7XG4gICAgICAgICAgdmFyIHN5bWJvbHMgPSB1c2VDaGFySW5kZXggJiYgKGNoYXJJbmRleEJ1Z2d5ID8gdmFsdWUuc3BsaXQoXCJcIikgOiB2YWx1ZSk7XG4gICAgICAgICAgZm9yICg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICB2YXIgY2hhckNvZGUgPSB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgaXMgYSBjb250cm9sIGNoYXJhY3RlciwgYXBwZW5kIGl0cyBVbmljb2RlIG9yXG4gICAgICAgICAgICAvLyBzaG9ydGhhbmQgZXNjYXBlIHNlcXVlbmNlOyBvdGhlcndpc2UsIGFwcGVuZCB0aGUgY2hhcmFjdGVyIGFzLWlzLlxuICAgICAgICAgICAgc3dpdGNoIChjaGFyQ29kZSkge1xuICAgICAgICAgICAgICBjYXNlIDg6IGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMjogY2FzZSAxMzogY2FzZSAzNDogY2FzZSA5MjpcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gRXNjYXBlc1tjaGFyQ29kZV07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB1bmljb2RlUHJlZml4ICsgdG9QYWRkZWRTdHJpbmcoMiwgY2hhckNvZGUudG9TdHJpbmcoMTYpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gdXNlQ2hhckluZGV4ID8gc3ltYm9sc1tpbmRleF0gOiB2YWx1ZS5jaGFyQXQoaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ1wiJztcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmVjdXJzaXZlbHkgc2VyaWFsaXplcyBhbiBvYmplY3QuIEltcGxlbWVudHMgdGhlXG4gICAgICAgIC8vIGBTdHIoa2V5LCBob2xkZXIpYCwgYEpPKHZhbHVlKWAsIGFuZCBgSkEodmFsdWUpYCBvcGVyYXRpb25zLlxuICAgICAgICB2YXIgc2VyaWFsaXplID0gZnVuY3Rpb24gKHByb3BlcnR5LCBvYmplY3QsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCB3aGl0ZXNwYWNlLCBpbmRlbnRhdGlvbiwgc3RhY2spIHtcbiAgICAgICAgICB2YXIgdmFsdWUsIGNsYXNzTmFtZSwgeWVhciwgbW9udGgsIGRhdGUsIHRpbWUsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMsIHJlc3VsdHMsIGVsZW1lbnQsIGluZGV4LCBsZW5ndGgsIHByZWZpeCwgcmVzdWx0O1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBOZWNlc3NhcnkgZm9yIGhvc3Qgb2JqZWN0IHN1cHBvcnQuXG4gICAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV07XG4gICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7fVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgY2xhc3NOYW1lID0gZ2V0Q2xhc3MuY2FsbCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IGRhdGVDbGFzcyAmJiAhaXNQcm9wZXJ0eS5jYWxsKHZhbHVlLCBcInRvSlNPTlwiKSkge1xuICAgICAgICAgICAgICBpZiAodmFsdWUgPiAtMSAvIDAgJiYgdmFsdWUgPCAxIC8gMCkge1xuICAgICAgICAgICAgICAgIC8vIERhdGVzIGFyZSBzZXJpYWxpemVkIGFjY29yZGluZyB0byB0aGUgYERhdGUjdG9KU09OYCBtZXRob2RcbiAgICAgICAgICAgICAgICAvLyBzcGVjaWZpZWQgaW4gRVMgNS4xIHNlY3Rpb24gMTUuOS41LjQ0LiBTZWUgc2VjdGlvbiAxNS45LjEuMTVcbiAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIElTTyA4NjAxIGRhdGUgdGltZSBzdHJpbmcgZm9ybWF0LlxuICAgICAgICAgICAgICAgIGlmIChnZXREYXkpIHtcbiAgICAgICAgICAgICAgICAgIC8vIE1hbnVhbGx5IGNvbXB1dGUgdGhlIHllYXIsIG1vbnRoLCBkYXRlLCBob3VycywgbWludXRlcyxcbiAgICAgICAgICAgICAgICAgIC8vIHNlY29uZHMsIGFuZCBtaWxsaXNlY29uZHMgaWYgdGhlIGBnZXRVVEMqYCBtZXRob2RzIGFyZVxuICAgICAgICAgICAgICAgICAgLy8gYnVnZ3kuIEFkYXB0ZWQgZnJvbSBAWWFmZmxlJ3MgYGRhdGUtc2hpbWAgcHJvamVjdC5cbiAgICAgICAgICAgICAgICAgIGRhdGUgPSBmbG9vcih2YWx1ZSAvIDg2NGU1KTtcbiAgICAgICAgICAgICAgICAgIGZvciAoeWVhciA9IGZsb29yKGRhdGUgLyAzNjUuMjQyNSkgKyAxOTcwIC0gMTsgZ2V0RGF5KHllYXIgKyAxLCAwKSA8PSBkYXRlOyB5ZWFyKyspO1xuICAgICAgICAgICAgICAgICAgZm9yIChtb250aCA9IGZsb29yKChkYXRlIC0gZ2V0RGF5KHllYXIsIDApKSAvIDMwLjQyKTsgZ2V0RGF5KHllYXIsIG1vbnRoICsgMSkgPD0gZGF0ZTsgbW9udGgrKyk7XG4gICAgICAgICAgICAgICAgICBkYXRlID0gMSArIGRhdGUgLSBnZXREYXkoeWVhciwgbW9udGgpO1xuICAgICAgICAgICAgICAgICAgLy8gVGhlIGB0aW1lYCB2YWx1ZSBzcGVjaWZpZXMgdGhlIHRpbWUgd2l0aGluIHRoZSBkYXkgKHNlZSBFU1xuICAgICAgICAgICAgICAgICAgLy8gNS4xIHNlY3Rpb24gMTUuOS4xLjIpLiBUaGUgZm9ybXVsYSBgKEEgJSBCICsgQikgJSBCYCBpcyB1c2VkXG4gICAgICAgICAgICAgICAgICAvLyB0byBjb21wdXRlIGBBIG1vZHVsbyBCYCwgYXMgdGhlIGAlYCBvcGVyYXRvciBkb2VzIG5vdFxuICAgICAgICAgICAgICAgICAgLy8gY29ycmVzcG9uZCB0byB0aGUgYG1vZHVsb2Agb3BlcmF0aW9uIGZvciBuZWdhdGl2ZSBudW1iZXJzLlxuICAgICAgICAgICAgICAgICAgdGltZSA9ICh2YWx1ZSAlIDg2NGU1ICsgODY0ZTUpICUgODY0ZTU7XG4gICAgICAgICAgICAgICAgICAvLyBUaGUgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBtaWxsaXNlY29uZHMgYXJlIG9idGFpbmVkIGJ5XG4gICAgICAgICAgICAgICAgICAvLyBkZWNvbXBvc2luZyB0aGUgdGltZSB3aXRoaW4gdGhlIGRheS4gU2VlIHNlY3Rpb24gMTUuOS4xLjEwLlxuICAgICAgICAgICAgICAgICAgaG91cnMgPSBmbG9vcih0aW1lIC8gMzZlNSkgJSAyNDtcbiAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBmbG9vcih0aW1lIC8gNmU0KSAlIDYwO1xuICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IGZsb29yKHRpbWUgLyAxZTMpICUgNjA7XG4gICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aW1lICUgMWUzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB5ZWFyID0gdmFsdWUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgICAgICAgICAgICAgIG1vbnRoID0gdmFsdWUuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICAgICAgICAgIGRhdGUgPSB2YWx1ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgICAgICAgICAgICBob3VycyA9IHZhbHVlLmdldFVUQ0hvdXJzKCk7XG4gICAgICAgICAgICAgICAgICBtaW51dGVzID0gdmFsdWUuZ2V0VVRDTWludXRlcygpO1xuICAgICAgICAgICAgICAgICAgc2Vjb25kcyA9IHZhbHVlLmdldFVUQ1NlY29uZHMoKTtcbiAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IHZhbHVlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTZXJpYWxpemUgZXh0ZW5kZWQgeWVhcnMgY29ycmVjdGx5LlxuICAgICAgICAgICAgICAgIHZhbHVlID0gKHllYXIgPD0gMCB8fCB5ZWFyID49IDFlNCA/ICh5ZWFyIDwgMCA/IFwiLVwiIDogXCIrXCIpICsgdG9QYWRkZWRTdHJpbmcoNiwgeWVhciA8IDAgPyAteWVhciA6IHllYXIpIDogdG9QYWRkZWRTdHJpbmcoNCwgeWVhcikpICtcbiAgICAgICAgICAgICAgICAgIFwiLVwiICsgdG9QYWRkZWRTdHJpbmcoMiwgbW9udGggKyAxKSArIFwiLVwiICsgdG9QYWRkZWRTdHJpbmcoMiwgZGF0ZSkgK1xuICAgICAgICAgICAgICAgICAgLy8gTW9udGhzLCBkYXRlcywgaG91cnMsIG1pbnV0ZXMsIGFuZCBzZWNvbmRzIHNob3VsZCBoYXZlIHR3b1xuICAgICAgICAgICAgICAgICAgLy8gZGlnaXRzOyBtaWxsaXNlY29uZHMgc2hvdWxkIGhhdmUgdGhyZWUuXG4gICAgICAgICAgICAgICAgICBcIlRcIiArIHRvUGFkZGVkU3RyaW5nKDIsIGhvdXJzKSArIFwiOlwiICsgdG9QYWRkZWRTdHJpbmcoMiwgbWludXRlcykgKyBcIjpcIiArIHRvUGFkZGVkU3RyaW5nKDIsIHNlY29uZHMpICtcbiAgICAgICAgICAgICAgICAgIC8vIE1pbGxpc2Vjb25kcyBhcmUgb3B0aW9uYWwgaW4gRVMgNS4wLCBidXQgcmVxdWlyZWQgaW4gNS4xLlxuICAgICAgICAgICAgICAgICAgXCIuXCIgKyB0b1BhZGRlZFN0cmluZygzLCBtaWxsaXNlY29uZHMpICsgXCJaXCI7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZS50b0pTT04gPT0gXCJmdW5jdGlvblwiICYmICgoY2xhc3NOYW1lICE9IG51bWJlckNsYXNzICYmIGNsYXNzTmFtZSAhPSBzdHJpbmdDbGFzcyAmJiBjbGFzc05hbWUgIT0gYXJyYXlDbGFzcykgfHwgaXNQcm9wZXJ0eS5jYWxsKHZhbHVlLCBcInRvSlNPTlwiKSkpIHtcbiAgICAgICAgICAgICAgLy8gUHJvdG90eXBlIDw9IDEuNi4xIGFkZHMgbm9uLXN0YW5kYXJkIGB0b0pTT05gIG1ldGhvZHMgdG8gdGhlXG4gICAgICAgICAgICAgIC8vIGBOdW1iZXJgLCBgU3RyaW5nYCwgYERhdGVgLCBhbmQgYEFycmF5YCBwcm90b3R5cGVzLiBKU09OIDNcbiAgICAgICAgICAgICAgLy8gaWdub3JlcyBhbGwgYHRvSlNPTmAgbWV0aG9kcyBvbiB0aGVzZSBvYmplY3RzIHVubGVzcyB0aGV5IGFyZVxuICAgICAgICAgICAgICAvLyBkZWZpbmVkIGRpcmVjdGx5IG9uIGFuIGluc3RhbmNlLlxuICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gSWYgYSByZXBsYWNlbWVudCBmdW5jdGlvbiB3YXMgcHJvdmlkZWQsIGNhbGwgaXQgdG8gb2J0YWluIHRoZSB2YWx1ZVxuICAgICAgICAgICAgLy8gZm9yIHNlcmlhbGl6YXRpb24uXG4gICAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrLmNhbGwob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2xhc3NOYW1lID0gZ2V0Q2xhc3MuY2FsbCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBib29sZWFuQ2xhc3MpIHtcbiAgICAgICAgICAgIC8vIEJvb2xlYW5zIGFyZSByZXByZXNlbnRlZCBsaXRlcmFsbHkuXG4gICAgICAgICAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IG51bWJlckNsYXNzKSB7XG4gICAgICAgICAgICAvLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5pdGUuIGBJbmZpbml0eWAgYW5kIGBOYU5gIGFyZSBzZXJpYWxpemVkIGFzXG4gICAgICAgICAgICAvLyBgXCJudWxsXCJgLlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID4gLTEgLyAwICYmIHZhbHVlIDwgMSAvIDAgPyBcIlwiICsgdmFsdWUgOiBcIm51bGxcIjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSA9PSBzdHJpbmdDbGFzcykge1xuICAgICAgICAgICAgLy8gU3RyaW5ncyBhcmUgZG91YmxlLXF1b3RlZCBhbmQgZXNjYXBlZC5cbiAgICAgICAgICAgIHJldHVybiBxdW90ZShcIlwiICsgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXJpYWxpemUgb2JqZWN0cyBhbmQgYXJyYXlzLlxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGN5Y2xpYyBzdHJ1Y3R1cmVzLiBUaGlzIGlzIGEgbGluZWFyIHNlYXJjaDsgcGVyZm9ybWFuY2VcbiAgICAgICAgICAgIC8vIGlzIGludmVyc2VseSBwcm9wb3J0aW9uYWwgdG8gdGhlIG51bWJlciBvZiB1bmlxdWUgbmVzdGVkIG9iamVjdHMuXG4gICAgICAgICAgICBmb3IgKGxlbmd0aCA9IHN0YWNrLmxlbmd0aDsgbGVuZ3RoLS07KSB7XG4gICAgICAgICAgICAgIGlmIChzdGFja1tsZW5ndGhdID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIEN5Y2xpYyBzdHJ1Y3R1cmVzIGNhbm5vdCBiZSBzZXJpYWxpemVkIGJ5IGBKU09OLnN0cmluZ2lmeWAuXG4gICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFkZCB0aGUgb2JqZWN0IHRvIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAgICAgICAgIHN0YWNrLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgY3VycmVudCBpbmRlbnRhdGlvbiBsZXZlbCBhbmQgaW5kZW50IG9uZSBhZGRpdGlvbmFsIGxldmVsLlxuICAgICAgICAgICAgcHJlZml4ID0gaW5kZW50YXRpb247XG4gICAgICAgICAgICBpbmRlbnRhdGlvbiArPSB3aGl0ZXNwYWNlO1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBhcnJheUNsYXNzKSB7XG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNlcmlhbGl6ZSBhcnJheSBlbGVtZW50cy5cbiAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gc2VyaWFsaXplKGluZGV4LCB2YWx1ZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIGluZGVudGF0aW9uLCBzdGFjayk7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVsZW1lbnQgPT09IHVuZGVmID8gXCJudWxsXCIgOiBlbGVtZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRzLmxlbmd0aCA/ICh3aGl0ZXNwYWNlID8gXCJbXFxuXCIgKyBpbmRlbnRhdGlvbiArIHJlc3VsdHMuam9pbihcIixcXG5cIiArIGluZGVudGF0aW9uKSArIFwiXFxuXCIgKyBwcmVmaXggKyBcIl1cIiA6IChcIltcIiArIHJlc3VsdHMuam9pbihcIixcIikgKyBcIl1cIikpIDogXCJbXVwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgc2VyaWFsaXplIG9iamVjdCBtZW1iZXJzLiBNZW1iZXJzIGFyZSBzZWxlY3RlZCBmcm9tXG4gICAgICAgICAgICAgIC8vIGVpdGhlciBhIHVzZXItc3BlY2lmaWVkIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMsIG9yIHRoZSBvYmplY3RcbiAgICAgICAgICAgICAgLy8gaXRzZWxmLlxuICAgICAgICAgICAgICBmb3JFYWNoKHByb3BlcnRpZXMgfHwgdmFsdWUsIGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gc2VyaWFsaXplKHByb3BlcnR5LCB2YWx1ZSwgY2FsbGJhY2ssIHByb3BlcnRpZXMsIHdoaXRlc3BhY2UsIGluZGVudGF0aW9uLCBzdGFjayk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgIT09IHVuZGVmKSB7XG4gICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMzogXCJJZiBgZ2FwYCB7d2hpdGVzcGFjZX1cbiAgICAgICAgICAgICAgICAgIC8vIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgYG1lbWJlcmAge3F1b3RlKHByb3BlcnR5KSArIFwiOlwifVxuICAgICAgICAgICAgICAgICAgLy8gYmUgdGhlIGNvbmNhdGVuYXRpb24gb2YgYG1lbWJlcmAgYW5kIHRoZSBgc3BhY2VgIGNoYXJhY3Rlci5cIlxuICAgICAgICAgICAgICAgICAgLy8gVGhlIFwiYHNwYWNlYCBjaGFyYWN0ZXJcIiByZWZlcnMgdG8gdGhlIGxpdGVyYWwgc3BhY2VcbiAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3Rlciwgbm90IHRoZSBgc3BhY2VgIHt3aWR0aH0gYXJndW1lbnQgcHJvdmlkZWQgdG9cbiAgICAgICAgICAgICAgICAgIC8vIGBKU09OLnN0cmluZ2lmeWAuXG4gICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocXVvdGUocHJvcGVydHkpICsgXCI6XCIgKyAod2hpdGVzcGFjZSA/IFwiIFwiIDogXCJcIikgKyBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRzLmxlbmd0aCA/ICh3aGl0ZXNwYWNlID8gXCJ7XFxuXCIgKyBpbmRlbnRhdGlvbiArIHJlc3VsdHMuam9pbihcIixcXG5cIiArIGluZGVudGF0aW9uKSArIFwiXFxuXCIgKyBwcmVmaXggKyBcIn1cIiA6IChcIntcIiArIHJlc3VsdHMuam9pbihcIixcIikgKyBcIn1cIikpIDogXCJ7fVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGUgdHJhdmVyc2VkIG9iamVjdCBzdGFjay5cbiAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUHVibGljOiBgSlNPTi5zdHJpbmdpZnlgLiBTZWUgRVMgNS4xIHNlY3Rpb24gMTUuMTIuMy5cbiAgICAgICAgZXhwb3J0cy5zdHJpbmdpZnkgPSBmdW5jdGlvbiAoc291cmNlLCBmaWx0ZXIsIHdpZHRoKSB7XG4gICAgICAgICAgdmFyIHdoaXRlc3BhY2UsIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCBjbGFzc05hbWU7XG4gICAgICAgICAgaWYgKG9iamVjdFR5cGVzW3R5cGVvZiBmaWx0ZXJdICYmIGZpbHRlcikge1xuICAgICAgICAgICAgaWYgKChjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKGZpbHRlcikpID09IGZ1bmN0aW9uQ2xhc3MpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmaWx0ZXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNsYXNzTmFtZSA9PSBhcnJheUNsYXNzKSB7XG4gICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVzIGFycmF5IGludG8gYSBtYWtlc2hpZnQgc2V0LlxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0gZmlsdGVyLmxlbmd0aCwgdmFsdWU7IGluZGV4IDwgbGVuZ3RoOyB2YWx1ZSA9IGZpbHRlcltpbmRleCsrXSwgKChjbGFzc05hbWUgPSBnZXRDbGFzcy5jYWxsKHZhbHVlKSksIGNsYXNzTmFtZSA9PSBzdHJpbmdDbGFzcyB8fCBjbGFzc05hbWUgPT0gbnVtYmVyQ2xhc3MpICYmIChwcm9wZXJ0aWVzW3ZhbHVlXSA9IDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHdpZHRoKSB7XG4gICAgICAgICAgICBpZiAoKGNsYXNzTmFtZSA9IGdldENsYXNzLmNhbGwod2lkdGgpKSA9PSBudW1iZXJDbGFzcykge1xuICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBgd2lkdGhgIHRvIGFuIGludGVnZXIgYW5kIGNyZWF0ZSBhIHN0cmluZyBjb250YWluaW5nXG4gICAgICAgICAgICAgIC8vIGB3aWR0aGAgbnVtYmVyIG9mIHNwYWNlIGNoYXJhY3RlcnMuXG4gICAgICAgICAgICAgIGlmICgod2lkdGggLT0gd2lkdGggJSAxKSA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKHdoaXRlc3BhY2UgPSBcIlwiLCB3aWR0aCA+IDEwICYmICh3aWR0aCA9IDEwKTsgd2hpdGVzcGFjZS5sZW5ndGggPCB3aWR0aDsgd2hpdGVzcGFjZSArPSBcIiBcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lID09IHN0cmluZ0NsYXNzKSB7XG4gICAgICAgICAgICAgIHdoaXRlc3BhY2UgPSB3aWR0aC5sZW5ndGggPD0gMTAgPyB3aWR0aCA6IHdpZHRoLnNsaWNlKDAsIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gT3BlcmEgPD0gNy41NHUyIGRpc2NhcmRzIHRoZSB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGVtcHR5IHN0cmluZyBrZXlzXG4gICAgICAgICAgLy8gKGBcIlwiYCkgb25seSBpZiB0aGV5IGFyZSB1c2VkIGRpcmVjdGx5IHdpdGhpbiBhbiBvYmplY3QgbWVtYmVyIGxpc3RcbiAgICAgICAgICAvLyAoZS5nLiwgYCEoXCJcIiBpbiB7IFwiXCI6IDF9KWApLlxuICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoXCJcIiwgKHZhbHVlID0ge30sIHZhbHVlW1wiXCJdID0gc291cmNlLCB2YWx1ZSksIGNhbGxiYWNrLCBwcm9wZXJ0aWVzLCB3aGl0ZXNwYWNlLCBcIlwiLCBbXSk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIFB1YmxpYzogUGFyc2VzIGEgSlNPTiBzb3VyY2Ugc3RyaW5nLlxuICAgICAgaWYgKCFoYXMoXCJqc29uLXBhcnNlXCIpKSB7XG4gICAgICAgIHZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXG4gICAgICAgIC8vIEludGVybmFsOiBBIG1hcCBvZiBlc2NhcGVkIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgdGhlaXIgdW5lc2NhcGVkXG4gICAgICAgIC8vIGVxdWl2YWxlbnRzLlxuICAgICAgICB2YXIgVW5lc2NhcGVzID0ge1xuICAgICAgICAgIDkyOiBcIlxcXFxcIixcbiAgICAgICAgICAzNDogJ1wiJyxcbiAgICAgICAgICA0NzogXCIvXCIsXG4gICAgICAgICAgOTg6IFwiXFxiXCIsXG4gICAgICAgICAgMTE2OiBcIlxcdFwiLFxuICAgICAgICAgIDExMDogXCJcXG5cIixcbiAgICAgICAgICAxMDI6IFwiXFxmXCIsXG4gICAgICAgICAgMTE0OiBcIlxcclwiXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFN0b3JlcyB0aGUgcGFyc2VyIHN0YXRlLlxuICAgICAgICB2YXIgSW5kZXgsIFNvdXJjZTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmVzZXRzIHRoZSBwYXJzZXIgc3RhdGUgYW5kIHRocm93cyBhIGBTeW50YXhFcnJvcmAuXG4gICAgICAgIHZhciBhYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBJbmRleCA9IFNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgdGhyb3cgU3ludGF4RXJyb3IoKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmV0dXJucyB0aGUgbmV4dCB0b2tlbiwgb3IgYFwiJFwiYCBpZiB0aGUgcGFyc2VyIGhhcyByZWFjaGVkXG4gICAgICAgIC8vIHRoZSBlbmQgb2YgdGhlIHNvdXJjZSBzdHJpbmcuIEEgdG9rZW4gbWF5IGJlIGEgc3RyaW5nLCBudW1iZXIsIGBudWxsYFxuICAgICAgICAvLyBsaXRlcmFsLCBvciBCb29sZWFuIGxpdGVyYWwuXG4gICAgICAgIHZhciBsZXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIHNvdXJjZSA9IFNvdXJjZSwgbGVuZ3RoID0gc291cmNlLmxlbmd0aCwgdmFsdWUsIGJlZ2luLCBwb3NpdGlvbiwgaXNTaWduZWQsIGNoYXJDb2RlO1xuICAgICAgICAgIHdoaWxlIChJbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7XG4gICAgICAgICAgICAgIGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHdoaXRlc3BhY2UgdG9rZW5zLCBpbmNsdWRpbmcgdGFicywgY2FycmlhZ2UgcmV0dXJucywgbGluZVxuICAgICAgICAgICAgICAgIC8vIGZlZWRzLCBhbmQgc3BhY2UgY2hhcmFjdGVycy5cbiAgICAgICAgICAgICAgICBJbmRleCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDEyMzogY2FzZSAxMjU6IGNhc2UgOTE6IGNhc2UgOTM6IGNhc2UgNTg6IGNhc2UgNDQ6XG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgYSBwdW5jdHVhdG9yIHRva2VuIChge2AsIGB9YCwgYFtgLCBgXWAsIGA6YCwgb3IgYCxgKSBhdFxuICAgICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuICAgICAgICAgICAgICAgIHZhbHVlID0gY2hhckluZGV4QnVnZ3kgPyBzb3VyY2UuY2hhckF0KEluZGV4KSA6IHNvdXJjZVtJbmRleF07XG4gICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICAgICAgLy8gYFwiYCBkZWxpbWl0cyBhIEpTT04gc3RyaW5nOyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNoYXJhY3RlciBhbmRcbiAgICAgICAgICAgICAgICAvLyBiZWdpbiBwYXJzaW5nIHRoZSBzdHJpbmcuIFN0cmluZyB0b2tlbnMgYXJlIHByZWZpeGVkIHdpdGggdGhlXG4gICAgICAgICAgICAgICAgLy8gc2VudGluZWwgYEBgIGNoYXJhY3RlciB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20gcHVuY3R1YXRvcnMgYW5kXG4gICAgICAgICAgICAgICAgLy8gZW5kLW9mLXN0cmluZyB0b2tlbnMuXG4gICAgICAgICAgICAgICAgZm9yICh2YWx1ZSA9IFwiQFwiLCBJbmRleCsrOyBJbmRleCA8IGxlbmd0aDspIHtcbiAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVW5lc2NhcGVkIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycyAodGhvc2Ugd2l0aCBhIGNvZGUgdW5pdFxuICAgICAgICAgICAgICAgICAgICAvLyBsZXNzIHRoYW4gdGhlIHNwYWNlIGNoYXJhY3RlcikgYXJlIG5vdCBwZXJtaXR0ZWQuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYXJDb2RlID09IDkyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgcmV2ZXJzZSBzb2xpZHVzIChgXFxgKSBtYXJrcyB0aGUgYmVnaW5uaW5nIG9mIGFuIGVzY2FwZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbCBjaGFyYWN0ZXIgKGluY2x1ZGluZyBgXCJgLCBgXFxgLCBhbmQgYC9gKSBvciBVbmljb2RlXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaGFyQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTI6IGNhc2UgMzQ6IGNhc2UgNDc6IGNhc2UgOTg6IGNhc2UgMTE2OiBjYXNlIDExMDogY2FzZSAxMDI6IGNhc2UgMTE0OlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2aXZlIGVzY2FwZWQgY29udHJvbCBjaGFyYWN0ZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gVW5lc2NhcGVzW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDExNzpcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGBcXHVgIG1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYSBVbmljb2RlIGVzY2FwZSBzZXF1ZW5jZS5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhbmQgdmFsaWRhdGUgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VyLWRpZ2l0IGNvZGUgcG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiA9ICsrSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHBvc2l0aW9uID0gSW5kZXggKyA0OyBJbmRleCA8IHBvc2l0aW9uOyBJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHZhbGlkIHNlcXVlbmNlIGNvbXByaXNlcyBmb3VyIGhleGRpZ2l0cyAoY2FzZS1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5zZW5zaXRpdmUpIHRoYXQgZm9ybSBhIHNpbmdsZSBoZXhhZGVjaW1hbCB2YWx1ZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcgfHwgY2hhckNvZGUgPj0gOTcgJiYgY2hhckNvZGUgPD0gMTAyIHx8IGNoYXJDb2RlID49IDY1ICYmIGNoYXJDb2RlIDw9IDcwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludmFsaWQgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV2aXZlIHRoZSBlc2NhcGVkIGNoYXJhY3Rlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGZyb21DaGFyQ29kZShcIjB4XCIgKyBzb3VyY2Uuc2xpY2UoYmVnaW4sIEluZGV4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UuXG4gICAgICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPT0gMzQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBBbiB1bmVzY2FwZWQgZG91YmxlLXF1b3RlIGNoYXJhY3RlciBtYXJrcyB0aGUgZW5kIG9mIHRoZVxuICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cmluZy5cbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgYmVnaW4gPSBJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgLy8gT3B0aW1pemUgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSBhIHN0cmluZyBpcyB2YWxpZC5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJDb2RlID49IDMyICYmIGNoYXJDb2RlICE9IDkyICYmIGNoYXJDb2RlICE9IDM0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIHN0cmluZyBhcy1pcy5cbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gc291cmNlLnNsaWNlKGJlZ2luLCBJbmRleCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChJbmRleCkgPT0gMzQpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgY2hhcmFjdGVyIGFuZCByZXR1cm4gdGhlIHJldml2ZWQgc3RyaW5nLlxuICAgICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVW50ZXJtaW5hdGVkIHN0cmluZy5cbiAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIC8vIFBhcnNlIG51bWJlcnMgYW5kIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIGJlZ2luID0gSW5kZXg7XG4gICAgICAgICAgICAgICAgLy8gQWR2YW5jZSBwYXN0IHRoZSBuZWdhdGl2ZSBzaWduLCBpZiBvbmUgaXMgc3BlY2lmaWVkLlxuICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSA0NSkge1xuICAgICAgICAgICAgICAgICAgaXNTaWduZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdCgrK0luZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gUGFyc2UgYW4gaW50ZWdlciBvciBmbG9hdGluZy1wb2ludCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpIHtcbiAgICAgICAgICAgICAgICAgIC8vIExlYWRpbmcgemVyb2VzIGFyZSBpbnRlcnByZXRlZCBhcyBvY3RhbCBsaXRlcmFscy5cbiAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSA9PSA0OCAmJiAoKGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXggKyAxKSksIGNoYXJDb2RlID49IDQ4ICYmIGNoYXJDb2RlIDw9IDU3KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsIG9jdGFsIGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpc1NpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgdGhlIGludGVnZXIgY29tcG9uZW50LlxuICAgICAgICAgICAgICAgICAgZm9yICg7IEluZGV4IDwgbGVuZ3RoICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChJbmRleCkpLCBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nyk7IEluZGV4KyspO1xuICAgICAgICAgICAgICAgICAgLy8gRmxvYXRzIGNhbm5vdCBjb250YWluIGEgbGVhZGluZyBkZWNpbWFsIHBvaW50OyBob3dldmVyLCB0aGlzXG4gICAgICAgICAgICAgICAgICAvLyBjYXNlIGlzIGFscmVhZHkgYWNjb3VudGVkIGZvciBieSB0aGUgcGFyc2VyLlxuICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KEluZGV4KSA9PSA0Nikge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9ICsrSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlIHRoZSBkZWNpbWFsIGNvbXBvbmVudC5cbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IHBvc2l0aW9uIDwgbGVuZ3RoICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChwb3NpdGlvbikpLCBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nyk7IHBvc2l0aW9uKyspO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsIHRyYWlsaW5nIGRlY2ltYWwuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBJbmRleCA9IHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLy8gUGFyc2UgZXhwb25lbnRzLiBUaGUgYGVgIGRlbm90aW5nIHRoZSBleHBvbmVudCBpc1xuICAgICAgICAgICAgICAgICAgLy8gY2FzZS1pbnNlbnNpdGl2ZS5cbiAgICAgICAgICAgICAgICAgIGNoYXJDb2RlID0gc291cmNlLmNoYXJDb2RlQXQoSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDEwMSB8fCBjaGFyQ29kZSA9PSA2OSkge1xuICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IHNvdXJjZS5jaGFyQ29kZUF0KCsrSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIHBhc3QgdGhlIHNpZ24gZm9sbG93aW5nIHRoZSBleHBvbmVudCwgaWYgb25lIGlzXG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlID09IDQzIHx8IGNoYXJDb2RlID09IDQ1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBQYXJzZSB0aGUgZXhwb25lbnRpYWwgY29tcG9uZW50LlxuICAgICAgICAgICAgICAgICAgICBmb3IgKHBvc2l0aW9uID0gSW5kZXg7IHBvc2l0aW9uIDwgbGVuZ3RoICYmICgoY2hhckNvZGUgPSBzb3VyY2UuY2hhckNvZGVBdChwb3NpdGlvbikpLCBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nyk7IHBvc2l0aW9uKyspO1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsIGVtcHR5IGV4cG9uZW50LlxuICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgSW5kZXggPSBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8vIENvZXJjZSB0aGUgcGFyc2VkIHZhbHVlIHRvIGEgSmF2YVNjcmlwdCBudW1iZXIuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gK3NvdXJjZS5zbGljZShiZWdpbiwgSW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBBIG5lZ2F0aXZlIHNpZ24gbWF5IG9ubHkgcHJlY2VkZSBudW1iZXJzLlxuICAgICAgICAgICAgICAgIGlmIChpc1NpZ25lZCkge1xuICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYHRydWVgLCBgZmFsc2VgLCBhbmQgYG51bGxgIGxpdGVyYWxzLlxuICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uuc2xpY2UoSW5kZXgsIEluZGV4ICsgNCkgPT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgIEluZGV4ICs9IDQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZS5zbGljZShJbmRleCwgSW5kZXggKyA1KSA9PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgICAgICAgIEluZGV4ICs9IDU7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2Uuc2xpY2UoSW5kZXgsIEluZGV4ICsgNCkgPT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgICAgIEluZGV4ICs9IDQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVW5yZWNvZ25pemVkIHRva2VuLlxuICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJldHVybiB0aGUgc2VudGluZWwgYCRgIGNoYXJhY3RlciBpZiB0aGUgcGFyc2VyIGhhcyByZWFjaGVkIHRoZSBlbmRcbiAgICAgICAgICAvLyBvZiB0aGUgc291cmNlIHN0cmluZy5cbiAgICAgICAgICByZXR1cm4gXCIkXCI7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW50ZXJuYWw6IFBhcnNlcyBhIEpTT04gYHZhbHVlYCB0b2tlbi5cbiAgICAgICAgdmFyIGdldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHZhciByZXN1bHRzLCBoYXNNZW1iZXJzO1xuICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIiRcIikge1xuICAgICAgICAgICAgLy8gVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQuXG4gICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGlmICgoY2hhckluZGV4QnVnZ3kgPyB2YWx1ZS5jaGFyQXQoMCkgOiB2YWx1ZVswXSkgPT0gXCJAXCIpIHtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBzZW50aW5lbCBgQGAgY2hhcmFjdGVyLlxuICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuc2xpY2UoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBQYXJzZSBvYmplY3QgYW5kIGFycmF5IGxpdGVyYWxzLlxuICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiW1wiKSB7XG4gICAgICAgICAgICAgIC8vIFBhcnNlcyBhIEpTT04gYXJyYXksIHJldHVybmluZyBhIG5ldyBKYXZhU2NyaXB0IGFycmF5LlxuICAgICAgICAgICAgICByZXN1bHRzID0gW107XG4gICAgICAgICAgICAgIGZvciAoOzsgaGFzTWVtYmVycyB8fCAoaGFzTWVtYmVycyA9IHRydWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAvLyBBIGNsb3Npbmcgc3F1YXJlIGJyYWNrZXQgbWFya3MgdGhlIGVuZCBvZiB0aGUgYXJyYXkgbGl0ZXJhbC5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJdXCIpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYXJyYXkgbGl0ZXJhbCBjb250YWlucyBlbGVtZW50cywgdGhlIGN1cnJlbnQgdG9rZW5cbiAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUgYSBjb21tYSBzZXBhcmF0aW5nIHRoZSBwcmV2aW91cyBlbGVtZW50IGZyb20gdGhlXG4gICAgICAgICAgICAgICAgLy8gbmV4dC5cbiAgICAgICAgICAgICAgICBpZiAoaGFzTWVtYmVycykge1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiLFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIl1cIikge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdHJhaWxpbmcgYCxgIGluIGFycmF5IGxpdGVyYWwuXG4gICAgICAgICAgICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQSBgLGAgbXVzdCBzZXBhcmF0ZSBlYWNoIGFycmF5IGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEVsaXNpb25zIGFuZCBsZWFkaW5nIGNvbW1hcyBhcmUgbm90IHBlcm1pdHRlZC5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIpIHtcbiAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChnZXQodmFsdWUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gXCJ7XCIpIHtcbiAgICAgICAgICAgICAgLy8gUGFyc2VzIGEgSlNPTiBvYmplY3QsIHJldHVybmluZyBhIG5ldyBKYXZhU2NyaXB0IG9iamVjdC5cbiAgICAgICAgICAgICAgcmVzdWx0cyA9IHt9O1xuICAgICAgICAgICAgICBmb3IgKDs7IGhhc01lbWJlcnMgfHwgKGhhc01lbWJlcnMgPSB0cnVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgLy8gQSBjbG9zaW5nIGN1cmx5IGJyYWNlIG1hcmtzIHRoZSBlbmQgb2YgdGhlIG9iamVjdCBsaXRlcmFsLlxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIn1cIikge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgbGl0ZXJhbCBjb250YWlucyBtZW1iZXJzLCB0aGUgY3VycmVudCB0b2tlblxuICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBhIGNvbW1hIHNlcGFyYXRvci5cbiAgICAgICAgICAgICAgICBpZiAoaGFzTWVtYmVycykge1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwiLFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbGV4KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBcIn1cIikge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFVuZXhwZWN0ZWQgdHJhaWxpbmcgYCxgIGluIG9iamVjdCBsaXRlcmFsLlxuICAgICAgICAgICAgICAgICAgICAgIGFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEEgYCxgIG11c3Qgc2VwYXJhdGUgZWFjaCBvYmplY3QgbWVtYmVyLlxuICAgICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBMZWFkaW5nIGNvbW1hcyBhcmUgbm90IHBlcm1pdHRlZCwgb2JqZWN0IHByb3BlcnR5IG5hbWVzIG11c3QgYmVcbiAgICAgICAgICAgICAgICAvLyBkb3VibGUtcXVvdGVkIHN0cmluZ3MsIGFuZCBhIGA6YCBtdXN0IHNlcGFyYXRlIGVhY2ggcHJvcGVydHlcbiAgICAgICAgICAgICAgICAvLyBuYW1lIGFuZCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCIsXCIgfHwgdHlwZW9mIHZhbHVlICE9IFwic3RyaW5nXCIgfHwgKGNoYXJJbmRleEJ1Z2d5ID8gdmFsdWUuY2hhckF0KDApIDogdmFsdWVbMF0pICE9IFwiQFwiIHx8IGxleCgpICE9IFwiOlwiKSB7XG4gICAgICAgICAgICAgICAgICBhYm9ydCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzW3ZhbHVlLnNsaWNlKDEpXSA9IGdldChsZXgoKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBVbmV4cGVjdGVkIHRva2VuIGVuY291bnRlcmVkLlxuICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEludGVybmFsOiBVcGRhdGVzIGEgdHJhdmVyc2VkIG9iamVjdCBtZW1iZXIuXG4gICAgICAgIHZhciB1cGRhdGUgPSBmdW5jdGlvbiAoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgZWxlbWVudCA9IHdhbGsoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spO1xuICAgICAgICAgIGlmIChlbGVtZW50ID09PSB1bmRlZikge1xuICAgICAgICAgICAgZGVsZXRlIHNvdXJjZVtwcm9wZXJ0eV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNvdXJjZVtwcm9wZXJ0eV0gPSBlbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbnRlcm5hbDogUmVjdXJzaXZlbHkgdHJhdmVyc2VzIGEgcGFyc2VkIEpTT04gb2JqZWN0LCBpbnZva2luZyB0aGVcbiAgICAgICAgLy8gYGNhbGxiYWNrYCBmdW5jdGlvbiBmb3IgZWFjaCB2YWx1ZS4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGVcbiAgICAgICAgLy8gYFdhbGsoaG9sZGVyLCBuYW1lKWAgb3BlcmF0aW9uIGRlZmluZWQgaW4gRVMgNS4xIHNlY3Rpb24gMTUuMTIuMi5cbiAgICAgICAgdmFyIHdhbGsgPSBmdW5jdGlvbiAoc291cmNlLCBwcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBzb3VyY2VbcHJvcGVydHldLCBsZW5ndGg7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAvLyBgZm9yRWFjaGAgY2FuJ3QgYmUgdXNlZCB0byB0cmF2ZXJzZSBhbiBhcnJheSBpbiBPcGVyYSA8PSA4LjU0XG4gICAgICAgICAgICAvLyBiZWNhdXNlIGl0cyBgT2JqZWN0I2hhc093blByb3BlcnR5YCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGBmYWxzZWBcbiAgICAgICAgICAgIC8vIGZvciBhcnJheSBpbmRpY2VzIChlLmcuLCBgIVsxLCAyLCAzXS5oYXNPd25Qcm9wZXJ0eShcIjBcIilgKS5cbiAgICAgICAgICAgIGlmIChnZXRDbGFzcy5jYWxsKHZhbHVlKSA9PSBhcnJheUNsYXNzKSB7XG4gICAgICAgICAgICAgIGZvciAobGVuZ3RoID0gdmFsdWUubGVuZ3RoOyBsZW5ndGgtLTspIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUodmFsdWUsIGxlbmd0aCwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmb3JFYWNoKHZhbHVlLCBmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUodmFsdWUsIHByb3BlcnR5LCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChzb3VyY2UsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gUHVibGljOiBgSlNPTi5wYXJzZWAuIFNlZSBFUyA1LjEgc2VjdGlvbiAxNS4xMi4yLlxuICAgICAgICBleHBvcnRzLnBhcnNlID0gZnVuY3Rpb24gKHNvdXJjZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICB2YXIgcmVzdWx0LCB2YWx1ZTtcbiAgICAgICAgICBJbmRleCA9IDA7XG4gICAgICAgICAgU291cmNlID0gXCJcIiArIHNvdXJjZTtcbiAgICAgICAgICByZXN1bHQgPSBnZXQobGV4KCkpO1xuICAgICAgICAgIC8vIElmIGEgSlNPTiBzdHJpbmcgY29udGFpbnMgbXVsdGlwbGUgdG9rZW5zLCBpdCBpcyBpbnZhbGlkLlxuICAgICAgICAgIGlmIChsZXgoKSAhPSBcIiRcIikge1xuICAgICAgICAgICAgYWJvcnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmVzZXQgdGhlIHBhcnNlciBzdGF0ZS5cbiAgICAgICAgICBJbmRleCA9IFNvdXJjZSA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrICYmIGdldENsYXNzLmNhbGwoY2FsbGJhY2spID09IGZ1bmN0aW9uQ2xhc3MgPyB3YWxrKCh2YWx1ZSA9IHt9LCB2YWx1ZVtcIlwiXSA9IHJlc3VsdCwgdmFsdWUpLCBcIlwiLCBjYWxsYmFjaykgOiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0c1tcInJ1bkluQ29udGV4dFwiXSA9IHJ1bkluQ29udGV4dDtcbiAgICByZXR1cm4gZXhwb3J0cztcbiAgfVxuXG4gIGlmIChmcmVlRXhwb3J0cyAmJiAhaXNMb2FkZXIpIHtcbiAgICAvLyBFeHBvcnQgZm9yIENvbW1vbkpTIGVudmlyb25tZW50cy5cbiAgICBydW5JbkNvbnRleHQocm9vdCwgZnJlZUV4cG9ydHMpO1xuICB9IGVsc2Uge1xuICAgIC8vIEV4cG9ydCBmb3Igd2ViIGJyb3dzZXJzIGFuZCBKYXZhU2NyaXB0IGVuZ2luZXMuXG4gICAgdmFyIG5hdGl2ZUpTT04gPSByb290LkpTT04sXG4gICAgICAgIHByZXZpb3VzSlNPTiA9IHJvb3RbXCJKU09OM1wiXSxcbiAgICAgICAgaXNSZXN0b3JlZCA9IGZhbHNlO1xuXG4gICAgdmFyIEpTT04zID0gcnVuSW5Db250ZXh0KHJvb3QsIChyb290W1wiSlNPTjNcIl0gPSB7XG4gICAgICAvLyBQdWJsaWM6IFJlc3RvcmVzIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgZ2xvYmFsIGBKU09OYCBvYmplY3QgYW5kXG4gICAgICAvLyByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBgSlNPTjNgIG9iamVjdC5cbiAgICAgIFwibm9Db25mbGljdFwiOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghaXNSZXN0b3JlZCkge1xuICAgICAgICAgIGlzUmVzdG9yZWQgPSB0cnVlO1xuICAgICAgICAgIHJvb3QuSlNPTiA9IG5hdGl2ZUpTT047XG4gICAgICAgICAgcm9vdFtcIkpTT04zXCJdID0gcHJldmlvdXNKU09OO1xuICAgICAgICAgIG5hdGl2ZUpTT04gPSBwcmV2aW91c0pTT04gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OMztcbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgICByb290LkpTT04gPSB7XG4gICAgICBcInBhcnNlXCI6IEpTT04zLnBhcnNlLFxuICAgICAgXCJzdHJpbmdpZnlcIjogSlNPTjMuc3RyaW5naWZ5XG4gICAgfTtcbiAgfVxuXG4gIC8vIEV4cG9ydCBmb3IgYXN5bmNocm9ub3VzIG1vZHVsZSBsb2FkZXJzLlxuICBpZiAoaXNMb2FkZXIpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIEpTT04zO1xuICAgIH0pO1xuICB9XG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggaXMgYSBjb21iaW5hdGlvbiBvZiBhbiBhcnJheSBhbmQgYSBzZXQuIEFkZGluZyBhIG5ld1xuICogbWVtYmVyIGlzIE8oMSksIHRlc3RpbmcgZm9yIG1lbWJlcnNoaXAgaXMgTygxKSwgYW5kIGZpbmRpbmcgdGhlIGluZGV4IG9mIGFuXG4gKiBlbGVtZW50IGlzIE8oMSkuIFJlbW92aW5nIGVsZW1lbnRzIGZyb20gdGhlIHNldCBpcyBub3Qgc3VwcG9ydGVkLiBPbmx5XG4gKiBzdHJpbmdzIGFyZSBzdXBwb3J0ZWQgZm9yIG1lbWJlcnNoaXAuXG4gKi9cbmZ1bmN0aW9uIEFycmF5U2V0KCkge1xuICB0aGlzLl9hcnJheSA9IFtdO1xuICB0aGlzLl9zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xufVxuXG4vKipcbiAqIFN0YXRpYyBtZXRob2QgZm9yIGNyZWF0aW5nIEFycmF5U2V0IGluc3RhbmNlcyBmcm9tIGFuIGV4aXN0aW5nIGFycmF5LlxuICovXG5BcnJheVNldC5mcm9tQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF9mcm9tQXJyYXkoYUFycmF5LCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzZXQgPSBuZXcgQXJyYXlTZXQoKTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFBcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHNldC5hZGQoYUFycmF5W2ldLCBhQWxsb3dEdXBsaWNhdGVzKTtcbiAgfVxuICByZXR1cm4gc2V0O1xufTtcblxuLyoqXG4gKiBSZXR1cm4gaG93IG1hbnkgdW5pcXVlIGl0ZW1zIGFyZSBpbiB0aGlzIEFycmF5U2V0LiBJZiBkdXBsaWNhdGVzIGhhdmUgYmVlblxuICogYWRkZWQsIHRoYW4gdGhvc2UgZG8gbm90IGNvdW50IHRvd2FyZHMgdGhlIHNpemUuXG4gKlxuICogQHJldHVybnMgTnVtYmVyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gQXJyYXlTZXRfc2l6ZSgpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3NldCkubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGlzIHNldC5cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgdmFyIGlzRHVwbGljYXRlID0gaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgdmFyIGlkeCA9IHRoaXMuX2FycmF5Lmxlbmd0aDtcbiAgaWYgKCFpc0R1cGxpY2F0ZSB8fCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgfVxuICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgdGhpcy5fc2V0W3NTdHJdID0gaWR4O1xuICB9XG59O1xuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBzdHJpbmcgYSBtZW1iZXIgb2YgdGhpcyBzZXQ/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBBcnJheVNldF9oYXMoYVN0cikge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHJldHVybiBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xufTtcblxuLyoqXG4gKiBXaGF0IGlzIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gc3RyaW5nIGluIHRoZSBhcnJheT9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBBcnJheVNldF9pbmRleE9mKGFTdHIpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICBpZiAoaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKSkge1xuICAgIHJldHVybiB0aGlzLl9zZXRbc1N0cl07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU3RyICsgJ1wiIGlzIG5vdCBpbiB0aGUgc2V0LicpO1xufTtcblxuLyoqXG4gKiBXaGF0IGlzIHRoZSBlbGVtZW50IGF0IHRoZSBnaXZlbiBpbmRleD9cbiAqXG4gKiBAcGFyYW0gTnVtYmVyIGFJZHhcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gQXJyYXlTZXRfYXQoYUlkeCkge1xuICBpZiAoYUlkeCA+PSAwICYmIGFJZHggPCB0aGlzLl9hcnJheS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJyYXlbYUlkeF07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBlbGVtZW50IGluZGV4ZWQgYnkgJyArIGFJZHgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhcnJheSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNldCAod2hpY2ggaGFzIHRoZSBwcm9wZXIgaW5kaWNlc1xuICogaW5kaWNhdGVkIGJ5IGluZGV4T2YpLiBOb3RlIHRoYXQgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIGludGVybmFsIGFycmF5IHVzZWRcbiAqIGZvciBzdG9yaW5nIHRoZSBtZW1iZXJzIHNvIHRoYXQgbm8gb25lIGNhbiBtZXNzIHdpdGggaW50ZXJuYWwgc3RhdGUuXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfdG9BcnJheSgpIHtcbiAgcmV0dXJuIHRoaXMuX2FycmF5LnNsaWNlKCk7XG59O1xuXG5leHBvcnRzLkFycmF5U2V0ID0gQXJyYXlTZXQ7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICpcbiAqIEJhc2VkIG9uIHRoZSBCYXNlIDY0IFZMUSBpbXBsZW1lbnRhdGlvbiBpbiBDbG9zdXJlIENvbXBpbGVyOlxuICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jbG9zdXJlLWNvbXBpbGVyL3NvdXJjZS9icm93c2UvdHJ1bmsvc3JjL2NvbS9nb29nbGUvZGVidWdnaW5nL3NvdXJjZW1hcC9CYXNlNjRWTFEuamF2YVxuICpcbiAqIENvcHlyaWdodCAyMDExIFRoZSBDbG9zdXJlIENvbXBpbGVyIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmVcbiAqIG1ldDpcbiAqXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZVxuICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmdcbiAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZFxuICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICogICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0c1xuICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkXG4gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKlxuICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SU1xuICogXCJBUyBJU1wiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVFxuICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SXG4gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVFxuICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsXG4gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWVxuICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFXG4gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCcuL2Jhc2U2NCcpO1xuXG4vLyBBIHNpbmdsZSBiYXNlIDY0IGRpZ2l0IGNhbiBjb250YWluIDYgYml0cyBvZiBkYXRhLiBGb3IgdGhlIGJhc2UgNjQgdmFyaWFibGVcbi8vIGxlbmd0aCBxdWFudGl0aWVzIHdlIHVzZSBpbiB0aGUgc291cmNlIG1hcCBzcGVjLCB0aGUgZmlyc3QgYml0IGlzIHRoZSBzaWduLFxuLy8gdGhlIG5leHQgZm91ciBiaXRzIGFyZSB0aGUgYWN0dWFsIHZhbHVlLCBhbmQgdGhlIDZ0aCBiaXQgaXMgdGhlXG4vLyBjb250aW51YXRpb24gYml0LiBUaGUgY29udGludWF0aW9uIGJpdCB0ZWxscyB1cyB3aGV0aGVyIHRoZXJlIGFyZSBtb3JlXG4vLyBkaWdpdHMgaW4gdGhpcyB2YWx1ZSBmb2xsb3dpbmcgdGhpcyBkaWdpdC5cbi8vXG4vLyAgIENvbnRpbnVhdGlvblxuLy8gICB8ICAgIFNpZ25cbi8vICAgfCAgICB8XG4vLyAgIFYgICAgVlxuLy8gICAxMDEwMTFcblxudmFyIFZMUV9CQVNFX1NISUZUID0gNTtcblxuLy8gYmluYXJ5OiAxMDAwMDBcbnZhciBWTFFfQkFTRSA9IDEgPDwgVkxRX0JBU0VfU0hJRlQ7XG5cbi8vIGJpbmFyeTogMDExMTExXG52YXIgVkxRX0JBU0VfTUFTSyA9IFZMUV9CQVNFIC0gMTtcblxuLy8gYmluYXJ5OiAxMDAwMDBcbnZhciBWTFFfQ09OVElOVUFUSU9OX0JJVCA9IFZMUV9CQVNFO1xuXG4vKipcbiAqIENvbnZlcnRzIGZyb20gYSB0d28tY29tcGxlbWVudCB2YWx1ZSB0byBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gKiAgIDEgYmVjb21lcyAyICgxMCBiaW5hcnkpLCAtMSBiZWNvbWVzIDMgKDExIGJpbmFyeSlcbiAqICAgMiBiZWNvbWVzIDQgKDEwMCBiaW5hcnkpLCAtMiBiZWNvbWVzIDUgKDEwMSBiaW5hcnkpXG4gKi9cbmZ1bmN0aW9uIHRvVkxRU2lnbmVkKGFWYWx1ZSkge1xuICByZXR1cm4gYVZhbHVlIDwgMFxuICAgID8gKCgtYVZhbHVlKSA8PCAxKSArIDFcbiAgICA6IChhVmFsdWUgPDwgMSkgKyAwO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRvIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgZnJvbSBhIHZhbHVlIHdoZXJlIHRoZSBzaWduIGJpdCBpc1xuICogcGxhY2VkIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQuICBGb3IgZXhhbXBsZSwgYXMgZGVjaW1hbHM6XG4gKiAgIDIgKDEwIGJpbmFyeSkgYmVjb21lcyAxLCAzICgxMSBiaW5hcnkpIGJlY29tZXMgLTFcbiAqICAgNCAoMTAwIGJpbmFyeSkgYmVjb21lcyAyLCA1ICgxMDEgYmluYXJ5KSBiZWNvbWVzIC0yXG4gKi9cbmZ1bmN0aW9uIGZyb21WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHZhciBpc05lZ2F0aXZlID0gKGFWYWx1ZSAmIDEpID09PSAxO1xuICB2YXIgc2hpZnRlZCA9IGFWYWx1ZSA+PiAxO1xuICByZXR1cm4gaXNOZWdhdGl2ZVxuICAgID8gLXNoaWZ0ZWRcbiAgICA6IHNoaWZ0ZWQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmFzZSA2NCBWTFEgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZW5jb2RlKGFWYWx1ZSkge1xuICB2YXIgZW5jb2RlZCA9IFwiXCI7XG4gIHZhciBkaWdpdDtcblxuICB2YXIgdmxxID0gdG9WTFFTaWduZWQoYVZhbHVlKTtcblxuICBkbyB7XG4gICAgZGlnaXQgPSB2bHEgJiBWTFFfQkFTRV9NQVNLO1xuICAgIHZscSA+Pj49IFZMUV9CQVNFX1NISUZUO1xuICAgIGlmICh2bHEgPiAwKSB7XG4gICAgICAvLyBUaGVyZSBhcmUgc3RpbGwgbW9yZSBkaWdpdHMgaW4gdGhpcyB2YWx1ZSwgc28gd2UgbXVzdCBtYWtlIHN1cmUgdGhlXG4gICAgICAvLyBjb250aW51YXRpb24gYml0IGlzIG1hcmtlZC5cbiAgICAgIGRpZ2l0IHw9IFZMUV9DT05USU5VQVRJT05fQklUO1xuICAgIH1cbiAgICBlbmNvZGVkICs9IGJhc2U2NC5lbmNvZGUoZGlnaXQpO1xuICB9IHdoaWxlICh2bHEgPiAwKTtcblxuICByZXR1cm4gZW5jb2RlZDtcbn07XG5cbi8qKlxuICogRGVjb2RlcyB0aGUgbmV4dCBiYXNlIDY0IFZMUSB2YWx1ZSBmcm9tIHRoZSBnaXZlbiBzdHJpbmcgYW5kIHJldHVybnMgdGhlXG4gKiB2YWx1ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyB2aWEgdGhlIG91dCBwYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gYmFzZTY0VkxRX2RlY29kZShhU3RyLCBhSW5kZXgsIGFPdXRQYXJhbSkge1xuICB2YXIgc3RyTGVuID0gYVN0ci5sZW5ndGg7XG4gIHZhciByZXN1bHQgPSAwO1xuICB2YXIgc2hpZnQgPSAwO1xuICB2YXIgY29udGludWF0aW9uLCBkaWdpdDtcblxuICBkbyB7XG4gICAgaWYgKGFJbmRleCA+PSBzdHJMZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG1vcmUgZGlnaXRzIGluIGJhc2UgNjQgVkxRIHZhbHVlLlwiKTtcbiAgICB9XG5cbiAgICBkaWdpdCA9IGJhc2U2NC5kZWNvZGUoYVN0ci5jaGFyQ29kZUF0KGFJbmRleCsrKSk7XG4gICAgaWYgKGRpZ2l0ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBiYXNlNjQgZGlnaXQ6IFwiICsgYVN0ci5jaGFyQXQoYUluZGV4IC0gMSkpO1xuICAgIH1cblxuICAgIGNvbnRpbnVhdGlvbiA9ICEhKGRpZ2l0ICYgVkxRX0NPTlRJTlVBVElPTl9CSVQpO1xuICAgIGRpZ2l0ICY9IFZMUV9CQVNFX01BU0s7XG4gICAgcmVzdWx0ID0gcmVzdWx0ICsgKGRpZ2l0IDw8IHNoaWZ0KTtcbiAgICBzaGlmdCArPSBWTFFfQkFTRV9TSElGVDtcbiAgfSB3aGlsZSAoY29udGludWF0aW9uKTtcblxuICBhT3V0UGFyYW0udmFsdWUgPSBmcm9tVkxRU2lnbmVkKHJlc3VsdCk7XG4gIGFPdXRQYXJhbS5yZXN0ID0gYUluZGV4O1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIGludFRvQ2hhck1hcCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJy5zcGxpdCgnJyk7XG5cbi8qKlxuICogRW5jb2RlIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIG9mIDAgdG8gNjMgdG8gYSBzaW5nbGUgYmFzZSA2NCBkaWdpdC5cbiAqL1xuZXhwb3J0cy5lbmNvZGUgPSBmdW5jdGlvbiAobnVtYmVyKSB7XG4gIGlmICgwIDw9IG51bWJlciAmJiBudW1iZXIgPCBpbnRUb0NoYXJNYXAubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGludFRvQ2hhck1hcFtudW1iZXJdO1xuICB9XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNdXN0IGJlIGJldHdlZW4gMCBhbmQgNjM6IFwiICsgbnVtYmVyKTtcbn07XG5cbi8qKlxuICogRGVjb2RlIGEgc2luZ2xlIGJhc2UgNjQgY2hhcmFjdGVyIGNvZGUgZGlnaXQgdG8gYW4gaW50ZWdlci4gUmV0dXJucyAtMSBvblxuICogZmFpbHVyZS5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiAoY2hhckNvZGUpIHtcbiAgdmFyIGJpZ0EgPSA2NTsgICAgIC8vICdBJ1xuICB2YXIgYmlnWiA9IDkwOyAgICAgLy8gJ1onXG5cbiAgdmFyIGxpdHRsZUEgPSA5NzsgIC8vICdhJ1xuICB2YXIgbGl0dGxlWiA9IDEyMjsgLy8gJ3onXG5cbiAgdmFyIHplcm8gPSA0ODsgICAgIC8vICcwJ1xuICB2YXIgbmluZSA9IDU3OyAgICAgLy8gJzknXG5cbiAgdmFyIHBsdXMgPSA0MzsgICAgIC8vICcrJ1xuICB2YXIgc2xhc2ggPSA0NzsgICAgLy8gJy8nXG5cbiAgdmFyIGxpdHRsZU9mZnNldCA9IDI2O1xuICB2YXIgbnVtYmVyT2Zmc2V0ID0gNTI7XG5cbiAgLy8gMCAtIDI1OiBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWlxuICBpZiAoYmlnQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBiaWdaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGJpZ0EpO1xuICB9XG5cbiAgLy8gMjYgLSA1MTogYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcbiAgaWYgKGxpdHRsZUEgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gbGl0dGxlWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBsaXR0bGVBICsgbGl0dGxlT2Zmc2V0KTtcbiAgfVxuXG4gIC8vIDUyIC0gNjE6IDAxMjM0NTY3ODlcbiAgaWYgKHplcm8gPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gbmluZSkge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSB6ZXJvICsgbnVtYmVyT2Zmc2V0KTtcbiAgfVxuXG4gIC8vIDYyOiArXG4gIGlmIChjaGFyQ29kZSA9PSBwbHVzKSB7XG4gICAgcmV0dXJuIDYyO1xuICB9XG5cbiAgLy8gNjM6IC9cbiAgaWYgKGNoYXJDb2RlID09IHNsYXNoKSB7XG4gICAgcmV0dXJuIDYzO1xuICB9XG5cbiAgLy8gSW52YWxpZCBiYXNlNjQgZGlnaXQuXG4gIHJldHVybiAtMTtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbmV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogUmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2guXG4gKlxuICogQHBhcmFtIGFMb3cgSW5kaWNlcyBoZXJlIGFuZCBsb3dlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFIaWdoIEluZGljZXMgaGVyZSBhbmQgaGlnaGVyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBub24tZW1wdHkgYXJyYXkgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgRnVuY3Rpb24gd2hpY2ggdGFrZXMgdHdvIGVsZW1lbnRzIGFuZCByZXR1cm5zIC0xLCAwLCBvciAxLlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiByZWN1cnNpdmVTZWFyY2goYUxvdywgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gIC8vXG4gIC8vICAgMS4gV2UgZmluZCB0aGUgZXhhY3QgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gIC8vXG4gIC8vICAgMi4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBidXQgd2UgY2FuIHJldHVybiB0aGUgaW5kZXggb2ZcbiAgLy8gICAgICB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQuXG4gIC8vXG4gIC8vICAgMy4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBhbmQgdGhlcmUgaXMgbm8gbmV4dC1jbG9zZXN0XG4gIC8vICAgICAgZWxlbWVudCB0aGFuIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IsIHNvIHdlIHJldHVybiAtMS5cbiAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gIHZhciBjbXAgPSBhQ29tcGFyZShhTmVlZGxlLCBhSGF5c3RhY2tbbWlkXSwgdHJ1ZSk7XG4gIGlmIChjbXAgPT09IDApIHtcbiAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgcmV0dXJuIG1pZDtcbiAgfVxuICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBncmVhdGVyIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKGFIaWdoIC0gbWlkID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKG1pZCwgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gYUhpZ2ggPCBhSGF5c3RhY2subGVuZ3RoID8gYUhpZ2ggOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBsZXNzIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKG1pZCAtIGFMb3cgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgbG93ZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFMb3cgPCAwID8gLTEgOiBhTG93O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCB3aGljaCB3aWxsIGFsd2F5cyB0cnkgYW5kIHJldHVyblxuICogdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGVsZW1lbnQgaWYgdGhlcmUgaXMgbm8gZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2VcbiAqIG1hcHBpbmdzIGJldHdlZW4gb3JpZ2luYWwgYW5kIGdlbmVyYXRlZCBsaW5lL2NvbCBwYWlycyBhcmUgc2luZ2xlIHBvaW50cyxcbiAqIGFuZCB0aGVyZSBpcyBhbiBpbXBsaWNpdCByZWdpb24gYmV0d2VlbiBlYWNoIG9mIHRoZW0sIHNvIGEgbWlzcyBqdXN0IG1lYW5zXG4gKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQgb2YgYSByZWdpb24uXG4gKlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgeW91IGFyZSBsb29raW5nIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgbmVlZGxlIGFuZCBhbiBlbGVtZW50IGluIHRoZVxuICogICAgIGFycmF5IGFuZCByZXR1cm5zIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuZWVkbGUgaXMgbGVzc1xuICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqL1xuZXhwb3J0cy5zZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgaWYgKGFIYXlzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaW5kZXggPSByZWN1cnNpdmVTZWFyY2goLTEsIGFIYXlzdGFjay5sZW5ndGgsIGFOZWVkbGUsIGFIYXlzdGFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21wYXJlLCBhQmlhcyB8fCBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIFdlIGhhdmUgZm91bmQgZWl0aGVyIHRoZSBleGFjdCBlbGVtZW50LCBvciB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQgdGhhblxuICAvLyB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLiBIb3dldmVyLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBzdWNoXG4gIC8vIGVsZW1lbnQuIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGVzZS5cbiAgd2hpbGUgKGluZGV4IC0gMSA+PSAwKSB7XG4gICAgaWYgKGFDb21wYXJlKGFIYXlzdGFja1tpbmRleF0sIGFIYXlzdGFja1tpbmRleCAtIDFdLCB0cnVlKSAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC0taW5kZXg7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG4vLyBJdCB0dXJucyBvdXQgdGhhdCBzb21lIChtb3N0PykgSmF2YVNjcmlwdCBlbmdpbmVzIGRvbid0IHNlbGYtaG9zdFxuLy8gYEFycmF5LnByb3RvdHlwZS5zb3J0YC4gVGhpcyBtYWtlcyBzZW5zZSBiZWNhdXNlIEMrKyB3aWxsIGxpa2VseSByZW1haW5cbi8vIGZhc3RlciB0aGFuIEpTIHdoZW4gZG9pbmcgcmF3IENQVS1pbnRlbnNpdmUgc29ydGluZy4gSG93ZXZlciwgd2hlbiB1c2luZyBhXG4vLyBjdXN0b20gY29tcGFyYXRvciBmdW5jdGlvbiwgY2FsbGluZyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZSBWTSdzIEMrKyBhbmRcbi8vIEpJVCdkIEpTIGlzIHJhdGhlciBzbG93ICphbmQqIGxvc2VzIEpJVCB0eXBlIGluZm9ybWF0aW9uLCByZXN1bHRpbmcgaW5cbi8vIHdvcnNlIGdlbmVyYXRlZCBjb2RlIGZvciB0aGUgY29tcGFyYXRvciBmdW5jdGlvbiB0aGFuIHdvdWxkIGJlIG9wdGltYWwuIEluXG4vLyBmYWN0LCB3aGVuIHNvcnRpbmcgd2l0aCBhIGNvbXBhcmF0b3IsIHRoZXNlIGNvc3RzIG91dHdlaWdoIHRoZSBiZW5lZml0cyBvZlxuLy8gc29ydGluZyBpbiBDKysuIEJ5IHVzaW5nIG91ciBvd24gSlMtaW1wbGVtZW50ZWQgUXVpY2sgU29ydCAoYmVsb3cpLCB3ZSBnZXRcbi8vIGEgfjM1MDBtcyBtZWFuIHNwZWVkLXVwIGluIGBiZW5jaC9iZW5jaC5odG1sYC5cblxuLyoqXG4gKiBTd2FwIHRoZSBlbGVtZW50cyBpbmRleGVkIGJ5IGB4YCBhbmQgYHlgIGluIHRoZSBhcnJheSBgYXJ5YC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBUaGUgYXJyYXkuXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogICAgICAgIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgaXRlbS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB5XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBzZWNvbmQgaXRlbS5cbiAqL1xuZnVuY3Rpb24gc3dhcChhcnksIHgsIHkpIHtcbiAgdmFyIHRlbXAgPSBhcnlbeF07XG4gIGFyeVt4XSA9IGFyeVt5XTtcbiAgYXJ5W3ldID0gdGVtcDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgd2l0aGluIHRoZSByYW5nZSBgbG93IC4uIGhpZ2hgIGluY2x1c2l2ZS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbG93XG4gKiAgICAgICAgVGhlIGxvd2VyIGJvdW5kIG9uIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7TnVtYmVyfSBoaWdoXG4gKiAgICAgICAgVGhlIHVwcGVyIGJvdW5kIG9uIHRoZSByYW5nZS5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tSW50SW5SYW5nZShsb3csIGhpZ2gpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQobG93ICsgKE1hdGgucmFuZG9tKCkgKiAoaGlnaCAtIGxvdykpKTtcbn1cblxuLyoqXG4gKiBUaGUgUXVpY2sgU29ydCBhbGdvcml0aG0uXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gKiAgICAgICAgQW4gYXJyYXkgdG8gc29ydC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXBhcmF0b3JcbiAqICAgICAgICBGdW5jdGlvbiB0byB1c2UgdG8gY29tcGFyZSB0d28gaXRlbXMuXG4gKiBAcGFyYW0ge051bWJlcn0gcFxuICogICAgICAgIFN0YXJ0IGluZGV4IG9mIHRoZSBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9IHJcbiAqICAgICAgICBFbmQgaW5kZXggb2YgdGhlIGFycmF5XG4gKi9cbmZ1bmN0aW9uIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcCwgcikge1xuICAvLyBJZiBvdXIgbG93ZXIgYm91bmQgaXMgbGVzcyB0aGFuIG91ciB1cHBlciBib3VuZCwgd2UgKDEpIHBhcnRpdGlvbiB0aGVcbiAgLy8gYXJyYXkgaW50byB0d28gcGllY2VzIGFuZCAoMikgcmVjdXJzZSBvbiBlYWNoIGhhbGYuIElmIGl0IGlzIG5vdCwgdGhpcyBpc1xuICAvLyB0aGUgZW1wdHkgYXJyYXkgYW5kIG91ciBiYXNlIGNhc2UuXG5cbiAgaWYgKHAgPCByKSB7XG4gICAgLy8gKDEpIFBhcnRpdGlvbmluZy5cbiAgICAvL1xuICAgIC8vIFRoZSBwYXJ0aXRpb25pbmcgY2hvb3NlcyBhIHBpdm90IGJldHdlZW4gYHBgIGFuZCBgcmAgYW5kIG1vdmVzIGFsbFxuICAgIC8vIGVsZW1lbnRzIHRoYXQgYXJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcGl2b3QgdG8gdGhlIGJlZm9yZSBpdCwgYW5kXG4gICAgLy8gYWxsIHRoZSBlbGVtZW50cyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gaXQgYWZ0ZXIgaXQuIFRoZSBlZmZlY3QgaXMgdGhhdFxuICAgIC8vIG9uY2UgcGFydGl0aW9uIGlzIGRvbmUsIHRoZSBwaXZvdCBpcyBpbiB0aGUgZXhhY3QgcGxhY2UgaXQgd2lsbCBiZSB3aGVuXG4gICAgLy8gdGhlIGFycmF5IGlzIHB1dCBpbiBzb3J0ZWQgb3JkZXIsIGFuZCBpdCB3aWxsIG5vdCBuZWVkIHRvIGJlIG1vdmVkXG4gICAgLy8gYWdhaW4uIFRoaXMgcnVucyBpbiBPKG4pIHRpbWUuXG5cbiAgICAvLyBBbHdheXMgY2hvb3NlIGEgcmFuZG9tIHBpdm90IHNvIHRoYXQgYW4gaW5wdXQgYXJyYXkgd2hpY2ggaXMgcmV2ZXJzZVxuICAgIC8vIHNvcnRlZCBkb2VzIG5vdCBjYXVzZSBPKG5eMikgcnVubmluZyB0aW1lLlxuICAgIHZhciBwaXZvdEluZGV4ID0gcmFuZG9tSW50SW5SYW5nZShwLCByKTtcbiAgICB2YXIgaSA9IHAgLSAxO1xuXG4gICAgc3dhcChhcnksIHBpdm90SW5kZXgsIHIpO1xuICAgIHZhciBwaXZvdCA9IGFyeVtyXTtcblxuICAgIC8vIEltbWVkaWF0ZWx5IGFmdGVyIGBqYCBpcyBpbmNyZW1lbnRlZCBpbiB0aGlzIGxvb3AsIHRoZSBmb2xsb3dpbmcgaG9sZFxuICAgIC8vIHRydWU6XG4gICAgLy9cbiAgICAvLyAgICogRXZlcnkgZWxlbWVudCBpbiBgYXJ5W3AgLi4gaV1gIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgcGl2b3QuXG4gICAgLy9cbiAgICAvLyAgICogRXZlcnkgZWxlbWVudCBpbiBgYXJ5W2krMSAuLiBqLTFdYCBpcyBncmVhdGVyIHRoYW4gdGhlIHBpdm90LlxuICAgIGZvciAodmFyIGogPSBwOyBqIDwgcjsgaisrKSB7XG4gICAgICBpZiAoY29tcGFyYXRvcihhcnlbal0sIHBpdm90KSA8PSAwKSB7XG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgc3dhcChhcnksIGksIGopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3YXAoYXJ5LCBpICsgMSwgaik7XG4gICAgdmFyIHEgPSBpICsgMTtcblxuICAgIC8vICgyKSBSZWN1cnNlIG9uIGVhY2ggaGFsZi5cblxuICAgIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcCwgcSAtIDEpO1xuICAgIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgcSArIDEsIHIpO1xuICB9XG59XG5cbi8qKlxuICogU29ydCB0aGUgZ2l2ZW4gYXJyYXkgaW4tcGxhY2Ugd2l0aCB0aGUgZ2l2ZW4gY29tcGFyYXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqL1xuZXhwb3J0cy5xdWlja1NvcnQgPSBmdW5jdGlvbiAoYXJ5LCBjb21wYXJhdG9yKSB7XG4gIGRvUXVpY2tTb3J0KGFyeSwgY29tcGFyYXRvciwgMCwgYXJ5Lmxlbmd0aCAtIDEpO1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBiaW5hcnlTZWFyY2ggPSByZXF1aXJlKCcuL2JpbmFyeS1zZWFyY2gnKTtcbnZhciBBcnJheVNldCA9IHJlcXVpcmUoJy4vYXJyYXktc2V0JykuQXJyYXlTZXQ7XG52YXIgYmFzZTY0VkxRID0gcmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7XG52YXIgcXVpY2tTb3J0ID0gcmVxdWlyZSgnLi9xdWljay1zb3J0JykucXVpY2tTb3J0O1xuXG5mdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgfVxuXG4gIHJldHVybiBzb3VyY2VNYXAuc2VjdGlvbnMgIT0gbnVsbFxuICAgID8gbmV3IEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXApXG4gICAgOiBuZXcgQmFzaWNTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXApO1xufVxuXG5Tb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID0gZnVuY3Rpb24oYVNvdXJjZU1hcCkge1xuICByZXR1cm4gQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwKGFTb3VyY2VNYXApO1xufVxuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLy8gYF9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZCBgX19vcmlnaW5hbE1hcHBpbmdzYCBhcmUgYXJyYXlzIHRoYXQgaG9sZCB0aGVcbi8vIHBhcnNlZCBtYXBwaW5nIGNvb3JkaW5hdGVzIGZyb20gdGhlIHNvdXJjZSBtYXAncyBcIm1hcHBpbmdzXCIgYXR0cmlidXRlLiBUaGV5XG4vLyBhcmUgbGF6aWx5IGluc3RhbnRpYXRlZCwgYWNjZXNzZWQgdmlhIHRoZSBgX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbi8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgZ2V0dGVycyByZXNwZWN0aXZlbHksIGFuZCB3ZSBvbmx5IHBhcnNlIHRoZSBtYXBwaW5nc1xuLy8gYW5kIGNyZWF0ZSB0aGVzZSBhcnJheXMgb25jZSBxdWVyaWVkIGZvciBhIHNvdXJjZSBsb2NhdGlvbi4gV2UganVtcCB0aHJvdWdoXG4vLyB0aGVzZSBob29wcyBiZWNhdXNlIHRoZXJlIGNhbiBiZSBtYW55IHRob3VzYW5kcyBvZiBtYXBwaW5ncywgYW5kIHBhcnNpbmdcbi8vIHRoZW0gaXMgZXhwZW5zaXZlLCBzbyB3ZSBvbmx5IHdhbnQgdG8gZG8gaXQgaWYgd2UgbXVzdC5cbi8vXG4vLyBFYWNoIG9iamVjdCBpbiB0aGUgYXJyYXlzIGlzIG9mIHRoZSBmb3JtOlxuLy9cbi8vICAgICB7XG4vLyAgICAgICBnZW5lcmF0ZWRMaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBzb3VyY2U6IFRoZSBwYXRoIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSB0aGF0IGdlbmVyYXRlZCB0aGlzXG4vLyAgICAgICAgICAgICAgIGNodW5rIG9mIGNvZGUsXG4vLyAgICAgICBvcmlnaW5hbExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRoYXRcbi8vICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsQ29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRoYXRcbi8vICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgbmFtZTogVGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIHN5bWJvbCB3aGljaCBnZW5lcmF0ZWQgdGhpcyBjaHVuayBvZlxuLy8gICAgICAgICAgICAgY29kZS5cbi8vICAgICB9XG4vL1xuLy8gQWxsIHByb3BlcnRpZXMgZXhjZXB0IGZvciBgZ2VuZXJhdGVkTGluZWAgYW5kIGBnZW5lcmF0ZWRDb2x1bW5gIGNhbiBiZVxuLy8gYG51bGxgLlxuLy9cbi8vIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMuXG4vL1xuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMuXG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX2dlbmVyYXRlZE1hcHBpbmdzID0gbnVsbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfZ2VuZXJhdGVkTWFwcGluZ3MnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gIH1cbn0pO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19vcmlnaW5hbE1hcHBpbmdzID0gbnVsbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfb3JpZ2luYWxNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncykge1xuICAgICAgdGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncywgdGhpcy5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fX29yaWdpbmFsTWFwcGluZ3M7XG4gIH1cbn0pO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGluZGV4KSB7XG4gICAgdmFyIGMgPSBhU3RyLmNoYXJBdChpbmRleCk7XG4gICAgcmV0dXJuIGMgPT09IFwiO1wiIHx8IGMgPT09IFwiLFwiO1xuICB9O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgX3BhcnNlTWFwcGluZ3NcIik7XG4gIH07XG5cblNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUiA9IDE7XG5Tb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUiA9IDI7XG5cblNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgZWFjaCBtYXBwaW5nIGJldHdlZW4gYW4gb3JpZ2luYWwgc291cmNlL2xpbmUvY29sdW1uIGFuZCBhXG4gKiBnZW5lcmF0ZWQgbGluZS9jb2x1bW4gaW4gdGhpcyBzb3VyY2UgbWFwLlxuICpcbiAqIEBwYXJhbSBGdW5jdGlvbiBhQ2FsbGJhY2tcbiAqICAgICAgICBUaGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2l0aCBlYWNoIG1hcHBpbmcuXG4gKiBAcGFyYW0gT2JqZWN0IGFDb250ZXh0XG4gKiAgICAgICAgT3B0aW9uYWwuIElmIHNwZWNpZmllZCwgdGhpcyBvYmplY3Qgd2lsbCBiZSB0aGUgdmFsdWUgb2YgYHRoaXNgIGV2ZXJ5XG4gKiAgICAgICAgdGltZSB0aGF0IGBhQ2FsbGJhY2tgIGlzIGNhbGxlZC5cbiAqIEBwYXJhbSBhT3JkZXJcbiAqICAgICAgICBFaXRoZXIgYFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUmAgb3JcbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVJgLiBTcGVjaWZpZXMgd2hldGhlciB5b3Ugd2FudCB0b1xuICogICAgICAgIGl0ZXJhdGUgb3ZlciB0aGUgbWFwcGluZ3Mgc29ydGVkIGJ5IHRoZSBnZW5lcmF0ZWQgZmlsZSdzIGxpbmUvY29sdW1uXG4gKiAgICAgICAgb3JkZXIgb3IgdGhlIG9yaWdpbmFsJ3Mgc291cmNlL2xpbmUvY29sdW1uIG9yZGVyLCByZXNwZWN0aXZlbHkuIERlZmF1bHRzIHRvXG4gKiAgICAgICAgYFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUmAuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5lYWNoTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2VhY2hNYXBwaW5nKGFDYWxsYmFjaywgYUNvbnRleHQsIGFPcmRlcikge1xuICAgIHZhciBjb250ZXh0ID0gYUNvbnRleHQgfHwgbnVsbDtcbiAgICB2YXIgb3JkZXIgPSBhT3JkZXIgfHwgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSO1xuXG4gICAgdmFyIG1hcHBpbmdzO1xuICAgIHN3aXRjaCAob3JkZXIpIHtcbiAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUjpcbiAgICAgIG1hcHBpbmdzID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gb3JkZXIgb2YgaXRlcmF0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlUm9vdCA9IHRoaXMuc291cmNlUm9vdDtcbiAgICBtYXBwaW5ncy5tYXAoZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBtYXBwaW5nLnNvdXJjZSA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCAmJiBzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uLFxuICAgICAgICBvcmlnaW5hbExpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgbmFtZTogbWFwcGluZy5uYW1lID09PSBudWxsID8gbnVsbCA6IHRoaXMuX25hbWVzLmF0KG1hcHBpbmcubmFtZSlcbiAgICAgIH07XG4gICAgfSwgdGhpcykuZm9yRWFjaChhQ2FsbGJhY2ssIGNvbnRleHQpO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgYWxsIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHByb3ZpZGVkLiBJZiBubyBjb2x1bW4gaXMgcHJvdmlkZWQsIHJldHVybnMgYWxsIG1hcHBpbmdzXG4gKiBjb3JyZXNwb25kaW5nIHRvIGEgZWl0aGVyIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yIG9yIHRoZSBuZXh0XG4gKiBjbG9zZXN0IGxpbmUgdGhhdCBoYXMgYW55IG1hcHBpbmdzLiBPdGhlcndpc2UsIHJldHVybnMgYWxsIG1hcHBpbmdzXG4gKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBsaW5lIGFuZCBlaXRoZXIgdGhlIGNvbHVtbiB3ZSBhcmUgc2VhcmNoaW5nIGZvclxuICogb3IgdGhlIG5leHQgY2xvc2VzdCBjb2x1bW4gdGhhdCBoYXMgYW55IG9mZnNldHMuXG4gKlxuICogVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGNvbHVtbjogT3B0aW9uYWwuIHRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKlxuICogYW5kIGFuIGFycmF5IG9mIG9iamVjdHMgaXMgcmV0dXJuZWQsIGVhY2ggd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfYWxsR2VuZXJhdGVkUG9zaXRpb25zRm9yKGFBcmdzKSB7XG4gICAgdmFyIGxpbmUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKTtcblxuICAgIC8vIFdoZW4gdGhlcmUgaXMgbm8gZXhhY3QgbWF0Y2gsIEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kTWFwcGluZ1xuICAgIC8vIHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IG1hcHBpbmcgbGVzcyB0aGFuIHRoZSBuZWVkbGUuIEJ5XG4gICAgLy8gc2V0dGluZyBuZWVkbGUub3JpZ2luYWxDb2x1bW4gdG8gMCwgd2UgdGh1cyBmaW5kIHRoZSBsYXN0IG1hcHBpbmcgZm9yXG4gICAgLy8gdGhlIGdpdmVuIGxpbmUsIHByb3ZpZGVkIHN1Y2ggYSBtYXBwaW5nIGV4aXN0cy5cbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgc291cmNlOiB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpLFxuICAgICAgb3JpZ2luYWxMaW5lOiBsaW5lLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJywgMClcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBuZWVkbGUuc291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIG5lZWRsZS5zb3VyY2UpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3NvdXJjZXMuaGFzKG5lZWRsZS5zb3VyY2UpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIG5lZWRsZS5zb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2YobmVlZGxlLnNvdXJjZSk7XG5cbiAgICB2YXIgbWFwcGluZ3MgPSBbXTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKG5lZWRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKGFBcmdzLmNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZTtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIGZvdW5kLiBTaW5jZVxuICAgICAgICAvLyBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGZvdW5kLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gb3JpZ2luYWxMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAvLyBJdGVyYXRlIHVudGlsIGVpdGhlciB3ZSBydW4gb3V0IG9mIG1hcHBpbmdzLCBvciB3ZSBydW4gaW50b1xuICAgICAgICAvLyBhIG1hcHBpbmcgZm9yIGEgZGlmZmVyZW50IGxpbmUgdGhhbiB0aGUgb25lIHdlIHdlcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgLy8gU2luY2UgbWFwcGluZ3MgYXJlIHNvcnRlZCwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG1hcHBpbmdzIGZvclxuICAgICAgICAvLyB0aGUgbGluZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci5cbiAgICAgICAgd2hpbGUgKG1hcHBpbmcgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBsaW5lICYmXG4gICAgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID09IG9yaWdpbmFsQ29sdW1uKSB7XG4gICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1srK2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXBwaW5ncztcbiAgfTtcblxuZXhwb3J0cy5Tb3VyY2VNYXBDb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2ggd2UgY2FuXG4gKiBxdWVyeSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9yaWdpbmFsIGZpbGUgcG9zaXRpb25zIGJ5IGdpdmluZyBpdCBhIGZpbGVcbiAqIHBvc2l0aW9uIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyB0aGUgcmF3IHNvdXJjZSBtYXAgKGVpdGhlciBhcyBhIEpTT04gc3RyaW5nLCBvclxuICogYWxyZWFkeSBwYXJzZWQgdG8gYW4gb2JqZWN0KS4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzb3VyY2UgbWFwcyBoYXZlIHRoZVxuICogZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gc291cmNlczogQW4gYXJyYXkgb2YgVVJMcyB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG5hbWVzOiBBbiBhcnJheSBvZiBpZGVudGlmaWVycyB3aGljaCBjYW4gYmUgcmVmZXJyZW5jZWQgYnkgaW5kaXZpZHVhbCBtYXBwaW5ncy5cbiAqICAgLSBzb3VyY2VSb290OiBPcHRpb25hbC4gVGhlIFVSTCByb290IGZyb20gd2hpY2ggYWxsIHNvdXJjZXMgYXJlIHJlbGF0aXZlLlxuICogICAtIHNvdXJjZXNDb250ZW50OiBPcHRpb25hbC4gQW4gYXJyYXkgb2YgY29udGVudHMgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAqICAgLSBtYXBwaW5nczogQSBzdHJpbmcgb2YgYmFzZTY0IFZMUXMgd2hpY2ggY29udGFpbiB0aGUgYWN0dWFsIG1hcHBpbmdzLlxuICogICAtIGZpbGU6IE9wdGlvbmFsLiBUaGUgZ2VuZXJhdGVkIGZpbGUgdGhpcyBzb3VyY2UgbWFwIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAqXG4gKiBIZXJlIGlzIGFuIGV4YW1wbGUgc291cmNlIG1hcCwgdGFrZW4gZnJvbSB0aGUgc291cmNlIG1hcCBzcGVjWzBdOlxuICpcbiAqICAgICB7XG4gKiAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgIGZpbGU6IFwib3V0LmpzXCIsXG4gKiAgICAgICBzb3VyY2VSb290IDogXCJcIixcbiAqICAgICAgIHNvdXJjZXM6IFtcImZvby5qc1wiLCBcImJhci5qc1wiXSxcbiAqICAgICAgIG5hbWVzOiBbXCJzcmNcIiwgXCJtYXBzXCIsIFwiYXJlXCIsIFwiZnVuXCJdLFxuICogICAgICAgbWFwcGluZ3M6IFwiQUEsQUI7O0FCQ0RFO1wiXG4gKiAgICAgfVxuICpcbiAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0P3BsaT0xI1xuICovXG5mdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgdmFyIHZlcnNpb24gPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICd2ZXJzaW9uJyk7XG4gIHZhciBzb3VyY2VzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlcycpO1xuICAvLyBTYXNzIDMuMyBsZWF2ZXMgb3V0IHRoZSAnbmFtZXMnIGFycmF5LCBzbyB3ZSBkZXZpYXRlIGZyb20gdGhlIHNwZWMgKHdoaWNoXG4gIC8vIHJlcXVpcmVzIHRoZSBhcnJheSkgdG8gcGxheSBuaWNlIGhlcmUuXG4gIHZhciBuYW1lcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ25hbWVzJywgW10pO1xuICB2YXIgc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZVJvb3QnLCBudWxsKTtcbiAgdmFyIHNvdXJjZXNDb250ZW50ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlc0NvbnRlbnQnLCBudWxsKTtcbiAgdmFyIG1hcHBpbmdzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbWFwcGluZ3MnKTtcbiAgdmFyIGZpbGUgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdmaWxlJywgbnVsbCk7XG5cbiAgLy8gT25jZSBhZ2FpbiwgU2FzcyBkZXZpYXRlcyBmcm9tIHRoZSBzcGVjIGFuZCBzdXBwbGllcyB0aGUgdmVyc2lvbiBhcyBhXG4gIC8vIHN0cmluZyByYXRoZXIgdGhhbiBhIG51bWJlciwgc28gd2UgdXNlIGxvb3NlIGVxdWFsaXR5IGNoZWNraW5nIGhlcmUuXG4gIGlmICh2ZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgfVxuXG4gIHNvdXJjZXMgPSBzb3VyY2VzXG4gICAgLm1hcChTdHJpbmcpXG4gICAgLy8gU29tZSBzb3VyY2UgbWFwcyBwcm9kdWNlIHJlbGF0aXZlIHNvdXJjZSBwYXRocyBsaWtlIFwiLi9mb28uanNcIiBpbnN0ZWFkIG9mXG4gICAgLy8gXCJmb28uanNcIi4gIE5vcm1hbGl6ZSB0aGVzZSBmaXJzdCBzbyB0aGF0IGZ1dHVyZSBjb21wYXJpc29ucyB3aWxsIHN1Y2NlZWQuXG4gICAgLy8gU2VlIGJ1Z3ppbC5sYS8xMDkwNzY4LlxuICAgIC5tYXAodXRpbC5ub3JtYWxpemUpXG4gICAgLy8gQWx3YXlzIGVuc3VyZSB0aGF0IGFic29sdXRlIHNvdXJjZXMgYXJlIGludGVybmFsbHkgc3RvcmVkIHJlbGF0aXZlIHRvXG4gICAgLy8gdGhlIHNvdXJjZSByb290LCBpZiB0aGUgc291cmNlIHJvb3QgaXMgYWJzb2x1dGUuIE5vdCBkb2luZyB0aGlzIHdvdWxkXG4gICAgLy8gYmUgcGFydGljdWxhcmx5IHByb2JsZW1hdGljIHdoZW4gdGhlIHNvdXJjZSByb290IGlzIGEgcHJlZml4IG9mIHRoZVxuICAgIC8vIHNvdXJjZSAodmFsaWQsIGJ1dCB3aHk/PykuIFNlZSBnaXRodWIgaXNzdWUgIzE5OSBhbmQgYnVnemlsLmxhLzExODg5ODIuXG4gICAgLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gc291cmNlUm9vdCAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlUm9vdCkgJiYgdXRpbC5pc0Fic29sdXRlKHNvdXJjZSlcbiAgICAgICAgPyB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZSlcbiAgICAgICAgOiBzb3VyY2U7XG4gICAgfSk7XG5cbiAgLy8gUGFzcyBgdHJ1ZWAgYmVsb3cgdG8gYWxsb3cgZHVwbGljYXRlIG5hbWVzIGFuZCBzb3VyY2VzLiBXaGlsZSBzb3VyY2UgbWFwc1xuICAvLyBhcmUgaW50ZW5kZWQgdG8gYmUgY29tcHJlc3NlZCBhbmQgZGVkdXBsaWNhdGVkLCB0aGUgVHlwZVNjcmlwdCBjb21waWxlclxuICAvLyBzb21ldGltZXMgZ2VuZXJhdGVzIHNvdXJjZSBtYXBzIHdpdGggZHVwbGljYXRlcyBpbiB0aGVtLiBTZWUgR2l0aHViIGlzc3VlXG4gIC8vICM3MiBhbmQgYnVnemlsLmxhLzg4OTQ5Mi5cbiAgdGhpcy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkobmFtZXMubWFwKFN0cmluZyksIHRydWUpO1xuICB0aGlzLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KHNvdXJjZXMsIHRydWUpO1xuXG4gIHRoaXMuc291cmNlUm9vdCA9IHNvdXJjZVJvb3Q7XG4gIHRoaXMuc291cmNlc0NvbnRlbnQgPSBzb3VyY2VzQ29udGVudDtcbiAgdGhpcy5fbWFwcGluZ3MgPSBtYXBwaW5ncztcbiAgdGhpcy5maWxlID0gZmlsZTtcbn1cblxuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdW1lciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIENyZWF0ZSBhIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgZnJvbSBhIFNvdXJjZU1hcEdlbmVyYXRvci5cbiAqXG4gKiBAcGFyYW0gU291cmNlTWFwR2VuZXJhdG9yIGFTb3VyY2VNYXBcbiAqICAgICAgICBUaGUgc291cmNlIG1hcCB0aGF0IHdpbGwgYmUgY29uc3VtZWQuXG4gKiBAcmV0dXJucyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2Zyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCkge1xuICAgIHZhciBzbWMgPSBPYmplY3QuY3JlYXRlKEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcblxuICAgIHZhciBuYW1lcyA9IHNtYy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fbmFtZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICB2YXIgc291cmNlcyA9IHNtYy5fc291cmNlcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9zb3VyY2VzLnRvQXJyYXkoKSwgdHJ1ZSk7XG4gICAgc21jLnNvdXJjZVJvb3QgPSBhU291cmNlTWFwLl9zb3VyY2VSb290O1xuICAgIHNtYy5zb3VyY2VzQ29udGVudCA9IGFTb3VyY2VNYXAuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQoc21jLl9zb3VyY2VzLnRvQXJyYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYy5zb3VyY2VSb290KTtcbiAgICBzbWMuZmlsZSA9IGFTb3VyY2VNYXAuX2ZpbGU7XG5cbiAgICAvLyBCZWNhdXNlIHdlIGFyZSBtb2RpZnlpbmcgdGhlIGVudHJpZXMgKGJ5IGNvbnZlcnRpbmcgc3RyaW5nIHNvdXJjZXMgYW5kXG4gICAgLy8gbmFtZXMgdG8gaW5kaWNlcyBpbnRvIHRoZSBzb3VyY2VzIGFuZCBuYW1lcyBBcnJheVNldHMpLCB3ZSBoYXZlIHRvIG1ha2VcbiAgICAvLyBhIGNvcHkgb2YgdGhlIGVudHJ5IG9yIGVsc2UgYmFkIHRoaW5ncyBoYXBwZW4uIFNoYXJlZCBtdXRhYmxlIHN0YXRlXG4gICAgLy8gc3RyaWtlcyBhZ2FpbiEgU2VlIGdpdGh1YiBpc3N1ZSAjMTkxLlxuXG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gYVNvdXJjZU1hcC5fbWFwcGluZ3MudG9BcnJheSgpLnNsaWNlKCk7XG4gICAgdmFyIGRlc3RHZW5lcmF0ZWRNYXBwaW5ncyA9IHNtYy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIGRlc3RPcmlnaW5hbE1hcHBpbmdzID0gc21jLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc3JjTWFwcGluZyA9IGdlbmVyYXRlZE1hcHBpbmdzW2ldO1xuICAgICAgdmFyIGRlc3RNYXBwaW5nID0gbmV3IE1hcHBpbmc7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gc3JjTWFwcGluZy5nZW5lcmF0ZWRMaW5lO1xuICAgICAgZGVzdE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uID0gc3JjTWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG5cbiAgICAgIGlmIChzcmNNYXBwaW5nLnNvdXJjZSkge1xuICAgICAgICBkZXN0TWFwcGluZy5zb3VyY2UgPSBzb3VyY2VzLmluZGV4T2Yoc3JjTWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbExpbmUgPSBzcmNNYXBwaW5nLm9yaWdpbmFsTGluZTtcbiAgICAgICAgZGVzdE1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBzcmNNYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIGlmIChzcmNNYXBwaW5nLm5hbWUpIHtcbiAgICAgICAgICBkZXN0TWFwcGluZy5uYW1lID0gbmFtZXMuaW5kZXhPZihzcmNNYXBwaW5nLm5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVzdE9yaWdpbmFsTWFwcGluZ3MucHVzaChkZXN0TWFwcGluZyk7XG4gICAgICB9XG5cbiAgICAgIGRlc3RHZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICB9XG5cbiAgICBxdWlja1NvcnQoc21jLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG5cbiAgICByZXR1cm4gc21jO1xuICB9O1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vKipcbiAqIFRoZSBsaXN0IG9mIG9yaWdpbmFsIHNvdXJjZXMuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ3NvdXJjZXMnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCA/IHV0aWwuam9pbih0aGlzLnNvdXJjZVJvb3QsIHMpIDogcztcbiAgICB9LCB0aGlzKTtcbiAgfVxufSk7XG5cbi8qKlxuICogUHJvdmlkZSB0aGUgSklUIHdpdGggYSBuaWNlIHNoYXBlIC8gaGlkZGVuIGNsYXNzLlxuICovXG5mdW5jdGlvbiBNYXBwaW5nKCkge1xuICB0aGlzLmdlbmVyYXRlZExpbmUgPSAwO1xuICB0aGlzLmdlbmVyYXRlZENvbHVtbiA9IDA7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5vcmlnaW5hbExpbmUgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsQ29sdW1uID0gbnVsbDtcbiAgdGhpcy5uYW1lID0gbnVsbDtcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHZhciBnZW5lcmF0ZWRMaW5lID0gMTtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsTGluZSA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgdmFyIHByZXZpb3VzTmFtZSA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFTdHIubGVuZ3RoO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNhY2hlZFNlZ21lbnRzID0ge307XG4gICAgdmFyIHRlbXAgPSB7fTtcbiAgICB2YXIgb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBnZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBtYXBwaW5nLCBzdHIsIHNlZ21lbnQsIGVuZCwgdmFsdWU7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChhU3RyLmNoYXJBdChpbmRleCkgPT09ICc7Jykge1xuICAgICAgICBnZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJywnKSB7XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbWFwcGluZyA9IG5ldyBNYXBwaW5nKCk7XG4gICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9IGdlbmVyYXRlZExpbmU7XG5cbiAgICAgICAgLy8gQmVjYXVzZSBlYWNoIG9mZnNldCBpcyBlbmNvZGVkIHJlbGF0aXZlIHRvIHRoZSBwcmV2aW91cyBvbmUsXG4gICAgICAgIC8vIG1hbnkgc2VnbWVudHMgb2Z0ZW4gaGF2ZSB0aGUgc2FtZSBlbmNvZGluZy4gV2UgY2FuIGV4cGxvaXQgdGhpc1xuICAgICAgICAvLyBmYWN0IGJ5IGNhY2hpbmcgdGhlIHBhcnNlZCB2YXJpYWJsZSBsZW5ndGggZmllbGRzIG9mIGVhY2ggc2VnbWVudCxcbiAgICAgICAgLy8gYWxsb3dpbmcgdXMgdG8gYXZvaWQgYSBzZWNvbmQgcGFyc2UgaWYgd2UgZW5jb3VudGVyIHRoZSBzYW1lXG4gICAgICAgIC8vIHNlZ21lbnQgYWdhaW4uXG4gICAgICAgIGZvciAoZW5kID0gaW5kZXg7IGVuZCA8IGxlbmd0aDsgZW5kKyspIHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhcklzTWFwcGluZ1NlcGFyYXRvcihhU3RyLCBlbmQpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RyID0gYVN0ci5zbGljZShpbmRleCwgZW5kKTtcblxuICAgICAgICBzZWdtZW50ID0gY2FjaGVkU2VnbWVudHNbc3RyXTtcbiAgICAgICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgICBpbmRleCArPSBzdHIubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlZ21lbnQgPSBbXTtcbiAgICAgICAgICB3aGlsZSAoaW5kZXggPCBlbmQpIHtcbiAgICAgICAgICAgIGJhc2U2NFZMUS5kZWNvZGUoYVN0ciwgaW5kZXgsIHRlbXApO1xuICAgICAgICAgICAgdmFsdWUgPSB0ZW1wLnZhbHVlO1xuICAgICAgICAgICAgaW5kZXggPSB0ZW1wLnJlc3Q7XG4gICAgICAgICAgICBzZWdtZW50LnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCBhIHNvdXJjZSwgYnV0IG5vIGxpbmUgYW5kIGNvbHVtbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCBhIHNvdXJjZSBhbmQgbGluZSwgYnV0IG5vIGNvbHVtbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhY2hlZFNlZ21lbnRzW3N0cl0gPSBzZWdtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2VuZXJhdGVkIGNvbHVtbi5cbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiArIHNlZ21lbnRbMF07XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG5cbiAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gMSkge1xuICAgICAgICAgIC8vIE9yaWdpbmFsIHNvdXJjZS5cbiAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHByZXZpb3VzU291cmNlICsgc2VnbWVudFsxXTtcbiAgICAgICAgICBwcmV2aW91c1NvdXJjZSArPSBzZWdtZW50WzFdO1xuXG4gICAgICAgICAgLy8gT3JpZ2luYWwgbGluZS5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IHByZXZpb3VzT3JpZ2luYWxMaW5lICsgc2VnbWVudFsyXTtcbiAgICAgICAgICBwcmV2aW91c09yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICAgIC8vIExpbmVzIGFyZSBzdG9yZWQgMC1iYXNlZFxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lICs9IDE7XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBjb2x1bW4uXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gKyBzZWdtZW50WzNdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID4gNCkge1xuICAgICAgICAgICAgLy8gT3JpZ2luYWwgbmFtZS5cbiAgICAgICAgICAgIG1hcHBpbmcubmFtZSA9IHByZXZpb3VzTmFtZSArIHNlZ21lbnRbNF07XG4gICAgICAgICAgICBwcmV2aW91c05hbWUgKz0gc2VnbWVudFs0XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBnZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICBpZiAodHlwZW9mIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG9yaWdpbmFsTWFwcGluZ3MucHVzaChtYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydChnZW5lcmF0ZWRNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCk7XG4gICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gZ2VuZXJhdGVkTWFwcGluZ3M7XG5cbiAgICBxdWlja1NvcnQob3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBvcmlnaW5hbE1hcHBpbmdzO1xuICB9O1xuXG4vKipcbiAqIEZpbmQgdGhlIG1hcHBpbmcgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGh5cG90aGV0aWNhbCBcIm5lZWRsZVwiIG1hcHBpbmcgdGhhdFxuICogd2UgYXJlIHNlYXJjaGluZyBmb3IgaW4gdGhlIGdpdmVuIFwiaGF5c3RhY2tcIiBvZiBtYXBwaW5ncy5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZmluZE1hcHBpbmcoYU5lZWRsZSwgYU1hcHBpbmdzLCBhTGluZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb2x1bW5OYW1lLCBhQ29tcGFyYXRvciwgYUJpYXMpIHtcbiAgICAvLyBUbyByZXR1cm4gdGhlIHBvc2l0aW9uIHdlIGFyZSBzZWFyY2hpbmcgZm9yLCB3ZSBtdXN0IGZpcnN0IGZpbmQgdGhlXG4gICAgLy8gbWFwcGluZyBmb3IgdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCB0aGVuIHJldHVybiB0aGUgb3Bwb3NpdGUgcG9zaXRpb24gaXRcbiAgICAvLyBwb2ludHMgdG8uIEJlY2F1c2UgdGhlIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHdlIGNhbiB1c2UgYmluYXJ5IHNlYXJjaCB0b1xuICAgIC8vIGZpbmQgdGhlIGJlc3QgbWFwcGluZy5cblxuICAgIGlmIChhTmVlZGxlW2FMaW5lTmFtZV0gPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTGluZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxLCBnb3QgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICArIGFOZWVkbGVbYUxpbmVOYW1lXSk7XG4gICAgfVxuICAgIGlmIChhTmVlZGxlW2FDb2x1bW5OYW1lXSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbHVtbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwLCBnb3QgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICArIGFOZWVkbGVbYUNvbHVtbk5hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmluYXJ5U2VhcmNoLnNlYXJjaChhTmVlZGxlLCBhTWFwcGluZ3MsIGFDb21wYXJhdG9yLCBhQmlhcyk7XG4gIH07XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgbGFzdCBjb2x1bW4gZm9yIGVhY2ggZ2VuZXJhdGVkIG1hcHBpbmcuIFRoZSBsYXN0IGNvbHVtbiBpc1xuICogaW5jbHVzaXZlLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb21wdXRlQ29sdW1uU3BhbnMgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9jb21wdXRlQ29sdW1uU3BhbnMoKSB7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aDsgKytpbmRleCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIC8vIE1hcHBpbmdzIGRvIG5vdCBjb250YWluIGEgZmllbGQgZm9yIHRoZSBsYXN0IGdlbmVyYXRlZCBjb2x1bW50LiBXZVxuICAgICAgLy8gY2FuIGNvbWUgdXAgd2l0aCBhbiBvcHRpbWlzdGljIGVzdGltYXRlLCBob3dldmVyLCBieSBhc3N1bWluZyB0aGF0XG4gICAgICAvLyBtYXBwaW5ncyBhcmUgY29udGlndW91cyAoaS5lLiBnaXZlbiB0d28gY29uc2VjdXRpdmUgbWFwcGluZ3MsIHRoZVxuICAgICAgLy8gZmlyc3QgbWFwcGluZyBlbmRzIHdoZXJlIHRoZSBzZWNvbmQgb25lIHN0YXJ0cykuXG4gICAgICBpZiAoaW5kZXggKyAxIDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoKSB7XG4gICAgICAgIHZhciBuZXh0TWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4ICsgMV07XG5cbiAgICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9PT0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIG1hcHBpbmcubGFzdEdlbmVyYXRlZENvbHVtbiA9IG5leHRNYXBwaW5nLmdlbmVyYXRlZENvbHVtbiAtIDE7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGxhc3QgbWFwcGluZyBmb3IgZWFjaCBsaW5lIHNwYW5zIHRoZSBlbnRpcmUgbGluZS5cbiAgICAgIG1hcHBpbmcubGFzdEdlbmVyYXRlZENvbHVtbiA9IEluZmluaXR5O1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICBuZWVkbGUsXG4gICAgICB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncyxcbiAgICAgIFwiZ2VuZXJhdGVkTGluZVwiLFxuICAgICAgXCJnZW5lcmF0ZWRDb2x1bW5cIixcbiAgICAgIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQsXG4gICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZWVkbGUuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcobWFwcGluZywgJ3NvdXJjZScsIG51bGwpO1xuICAgICAgICBpZiAoc291cmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5hdChzb3VyY2UpO1xuICAgICAgICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbmFtZScsIG51bGwpO1xuICAgICAgICBpZiAobmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5hdChuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbExpbmUnLCBudWxsKSxcbiAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdvcmlnaW5hbENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc291cmNlOiBudWxsLFxuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIG5hbWU6IG51bGxcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgdGhlIHNvdXJjZSBjb250ZW50IGZvciBldmVyeSBzb3VyY2UgaW4gdGhlIHNvdXJjZVxuICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnQubGVuZ3RoID49IHRoaXMuX3NvdXJjZXMuc2l6ZSgpICYmXG4gICAgICAhdGhpcy5zb3VyY2VzQ29udGVudC5zb21lKGZ1bmN0aW9uIChzYykgeyByZXR1cm4gc2MgPT0gbnVsbDsgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBpZiAoIXRoaXMuc291cmNlc0NvbnRlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgYVNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBhU291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc291cmNlcy5oYXMoYVNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihhU291cmNlKV07XG4gICAgfVxuXG4gICAgdmFyIHVybDtcbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGxcbiAgICAgICAgJiYgKHVybCA9IHV0aWwudXJsUGFyc2UodGhpcy5zb3VyY2VSb290KSkpIHtcbiAgICAgIC8vIFhYWDogZmlsZTovLyBVUklzIGFuZCBhYnNvbHV0ZSBwYXRocyBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZm9yXG4gICAgICAvLyBtYW55IHVzZXJzLiBXZSBjYW4gaGVscCB0aGVtIG91dCB3aGVuIHRoZXkgZXhwZWN0IGZpbGU6Ly8gVVJJcyB0b1xuICAgICAgLy8gYmVoYXZlIGxpa2UgaXQgd291bGQgaWYgdGhleSB3ZXJlIHJ1bm5pbmcgYSBsb2NhbCBIVFRQIHNlcnZlci4gU2VlXG4gICAgICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD04ODU1OTcuXG4gICAgICB2YXIgZmlsZVVyaUFic1BhdGggPSBhU291cmNlLnJlcGxhY2UoL15maWxlOlxcL1xcLy8sIFwiXCIpO1xuICAgICAgaWYgKHVybC5zY2hlbWUgPT0gXCJmaWxlXCJcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhmaWxlVXJpQWJzUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGZpbGVVcmlBYnNQYXRoKV1cbiAgICAgIH1cblxuICAgICAgaWYgKCghdXJsLnBhdGggfHwgdXJsLnBhdGggPT0gXCIvXCIpXG4gICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoXCIvXCIgKyBhU291cmNlKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoXCIvXCIgKyBhU291cmNlKV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHJlY3Vyc2l2ZWx5IGZyb21cbiAgICAvLyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IuIEluIHRoYXQgY2FzZSwgd2VcbiAgICAvLyBkb24ndCB3YW50IHRvIHRocm93IGlmIHdlIGNhbid0IGZpbmQgdGhlIHNvdXJjZSAtIHdlIGp1c3Qgd2FudCB0b1xuICAgIC8vIHJldHVybiBudWxsLCBzbyB3ZSBwcm92aWRlIGEgZmxhZyB0byBleGl0IGdyYWNlZnVsbHkuXG4gICAgaWYgKG51bGxPbk1pc3NpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aFxuICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBiaWFzOiBFaXRoZXIgJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdTb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgc291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBsYXN0Q29sdW1uOiBudWxsXG4gICAgICB9O1xuICAgIH1cbiAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICBcIm9yaWdpbmFsTGluZVwiLFxuICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKG1hcHBpbmcuc291cmNlID09PSBuZWVkbGUuc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGwsXG4gICAgICBsYXN0Q29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuZXhwb3J0cy5CYXNpY1NvdXJjZU1hcENvbnN1bWVyID0gQmFzaWNTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBBbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBhcnNlZCBzb3VyY2UgbWFwIHdoaWNoXG4gKiB3ZSBjYW4gcXVlcnkgZm9yIGluZm9ybWF0aW9uLiBJdCBkaWZmZXJzIGZyb20gQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpblxuICogdGhhdCBpdCB0YWtlcyBcImluZGV4ZWRcIiBzb3VyY2UgbWFwcyAoaS5lLiBvbmVzIHdpdGggYSBcInNlY3Rpb25zXCIgZmllbGQpIGFzXG4gKiBpbnB1dC5cbiAqXG4gKiBUaGUgb25seSBwYXJhbWV0ZXIgaXMgYSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yIGFscmVhZHlcbiAqIHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMgZm9yIGluZGV4ZWQgc291cmNlIG1hcHMsIHRoZXlcbiAqIGhhdmUgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICpcbiAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICogICAtIGZpbGU6IE9wdGlvbmFsLiBUaGUgZ2VuZXJhdGVkIGZpbGUgdGhpcyBzb3VyY2UgbWFwIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAqICAgLSBzZWN0aW9uczogQSBsaXN0IG9mIHNlY3Rpb24gZGVmaW5pdGlvbnMuXG4gKlxuICogRWFjaCB2YWx1ZSB1bmRlciB0aGUgXCJzZWN0aW9uc1wiIGZpZWxkIGhhcyB0d28gZmllbGRzOlxuICogICAtIG9mZnNldDogVGhlIG9mZnNldCBpbnRvIHRoZSBvcmlnaW5hbCBzcGVjaWZpZWQgYXQgd2hpY2ggdGhpcyBzZWN0aW9uXG4gKiAgICAgICBiZWdpbnMgdG8gYXBwbHksIGRlZmluZWQgYXMgYW4gb2JqZWN0IHdpdGggYSBcImxpbmVcIiBhbmQgXCJjb2x1bW5cIlxuICogICAgICAgZmllbGQuXG4gKiAgIC0gbWFwOiBBIHNvdXJjZSBtYXAgZGVmaW5pdGlvbi4gVGhpcyBzb3VyY2UgbWFwIGNvdWxkIGFsc28gYmUgaW5kZXhlZCxcbiAqICAgICAgIGJ1dCBkb2Vzbid0IGhhdmUgdG8gYmUuXG4gKlxuICogSW5zdGVhZCBvZiB0aGUgXCJtYXBcIiBmaWVsZCwgaXQncyBhbHNvIHBvc3NpYmxlIHRvIGhhdmUgYSBcInVybFwiIGZpZWxkXG4gKiBzcGVjaWZ5aW5nIGEgVVJMIHRvIHJldHJpZXZlIGEgc291cmNlIG1hcCBmcm9tLCBidXQgdGhhdCdzIGN1cnJlbnRseVxuICogdW5zdXBwb3J0ZWQuXG4gKlxuICogSGVyZSdzIGFuIGV4YW1wbGUgc291cmNlIG1hcCwgdGFrZW4gZnJvbSB0aGUgc291cmNlIG1hcCBzcGVjWzBdLCBidXRcbiAqIG1vZGlmaWVkIHRvIG9taXQgYSBzZWN0aW9uIHdoaWNoIHVzZXMgdGhlIFwidXJsXCIgZmllbGQuXG4gKlxuICogIHtcbiAqICAgIHZlcnNpb24gOiAzLFxuICogICAgZmlsZTogXCJhcHAuanNcIixcbiAqICAgIHNlY3Rpb25zOiBbe1xuICogICAgICBvZmZzZXQ6IHtsaW5lOjEwMCwgY29sdW1uOjEwfSxcbiAqICAgICAgbWFwOiB7XG4gKiAgICAgICAgdmVyc2lvbiA6IDMsXG4gKiAgICAgICAgZmlsZTogXCJzZWN0aW9uLmpzXCIsXG4gKiAgICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgIG5hbWVzOiBbXCJzcmNcIiwgXCJtYXBzXCIsIFwiYXJlXCIsIFwiZnVuXCJdLFxuICogICAgICAgIG1hcHBpbmdzOiBcIkFBQUEsRTs7QUJDREU7XCJcbiAqICAgICAgfVxuICogICAgfV0sXG4gKiAgfVxuICpcbiAqIFswXTogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZG9jdW1lbnQvZC8xVTFSR0FlaFF3UnlwVVRvdkYxS1JscGlPRnplMGItXzJnYzZmQUgwS1kway9lZGl0I2hlYWRpbmc9aC41MzVlczN4ZXByZ3RcbiAqL1xuZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgdmFyIHZlcnNpb24gPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICd2ZXJzaW9uJyk7XG4gIHZhciBzZWN0aW9ucyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NlY3Rpb25zJyk7XG5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgdGhpcy5fc291cmNlcyA9IG5ldyBBcnJheVNldCgpO1xuICB0aGlzLl9uYW1lcyA9IG5ldyBBcnJheVNldCgpO1xuXG4gIHZhciBsYXN0T2Zmc2V0ID0ge1xuICAgIGxpbmU6IC0xLFxuICAgIGNvbHVtbjogMFxuICB9O1xuICB0aGlzLl9zZWN0aW9ucyA9IHNlY3Rpb25zLm1hcChmdW5jdGlvbiAocykge1xuICAgIGlmIChzLnVybCkge1xuICAgICAgLy8gVGhlIHVybCBmaWVsZCB3aWxsIHJlcXVpcmUgc3VwcG9ydCBmb3IgYXN5bmNocm9uaWNpdHkuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9pc3N1ZXMvMTZcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VwcG9ydCBmb3IgdXJsIGZpZWxkIGluIHNlY3Rpb25zIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgICB9XG4gICAgdmFyIG9mZnNldCA9IHV0aWwuZ2V0QXJnKHMsICdvZmZzZXQnKTtcbiAgICB2YXIgb2Zmc2V0TGluZSA9IHV0aWwuZ2V0QXJnKG9mZnNldCwgJ2xpbmUnKTtcbiAgICB2YXIgb2Zmc2V0Q29sdW1uID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnY29sdW1uJyk7XG5cbiAgICBpZiAob2Zmc2V0TGluZSA8IGxhc3RPZmZzZXQubGluZSB8fFxuICAgICAgICAob2Zmc2V0TGluZSA9PT0gbGFzdE9mZnNldC5saW5lICYmIG9mZnNldENvbHVtbiA8IGxhc3RPZmZzZXQuY29sdW1uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWN0aW9uIG9mZnNldHMgbXVzdCBiZSBvcmRlcmVkIGFuZCBub24tb3ZlcmxhcHBpbmcuJyk7XG4gICAgfVxuICAgIGxhc3RPZmZzZXQgPSBvZmZzZXQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2VuZXJhdGVkT2Zmc2V0OiB7XG4gICAgICAgIC8vIFRoZSBvZmZzZXQgZmllbGRzIGFyZSAwLWJhc2VkLCBidXQgd2UgdXNlIDEtYmFzZWQgaW5kaWNlcyB3aGVuXG4gICAgICAgIC8vIGVuY29kaW5nL2RlY29kaW5nIGZyb20gVkxRLlxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBvZmZzZXRMaW5lICsgMSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBvZmZzZXRDb2x1bW4gKyAxXG4gICAgICB9LFxuICAgICAgY29uc3VtZXI6IG5ldyBTb3VyY2VNYXBDb25zdW1lcih1dGlsLmdldEFyZyhzLCAnbWFwJykpXG4gICAgfVxuICB9KTtcbn1cblxuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vKipcbiAqIFRoZSBsaXN0IG9mIG9yaWdpbmFsIHNvdXJjZXMuXG4gKi9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMuX3NlY3Rpb25zW2ldLmNvbnN1bWVyLnNvdXJjZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgc291cmNlcy5wdXNoKHRoaXMuX3NlY3Rpb25zW2ldLmNvbnN1bWVyLnNvdXJjZXNbal0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc291cmNlcztcbiAgfVxufSk7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkXG4gKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgb3IgbnVsbC5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9vcmlnaW5hbFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIGdlbmVyYXRlZExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgZ2VuZXJhdGVkQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIC8vIEZpbmQgdGhlIHNlY3Rpb24gY29udGFpbmluZyB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9uIHdlJ3JlIHRyeWluZyB0byBtYXBcbiAgICAvLyB0byBhbiBvcmlnaW5hbCBwb3NpdGlvbi5cbiAgICB2YXIgc2VjdGlvbkluZGV4ID0gYmluYXJ5U2VhcmNoLnNlYXJjaChuZWVkbGUsIHRoaXMuX3NlY3Rpb25zLFxuICAgICAgZnVuY3Rpb24obmVlZGxlLCBzZWN0aW9uKSB7XG4gICAgICAgIHZhciBjbXAgPSBuZWVkbGUuZ2VuZXJhdGVkTGluZSAtIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU7XG4gICAgICAgIGlmIChjbXApIHtcbiAgICAgICAgICByZXR1cm4gY21wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgfSk7XG4gICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xuXG4gICAgaWYgKCFzZWN0aW9uKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbmFtZTogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VjdGlvbi5jb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHtcbiAgICAgIGxpbmU6IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgIGNvbHVtbjogbmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBuZWVkbGUuZ2VuZXJhdGVkTGluZVxuICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICA6IDApLFxuICAgICAgYmlhczogYUFyZ3MuYmlhc1xuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgdGhlIHNvdXJjZSBjb250ZW50IGZvciBldmVyeSBzb3VyY2UgaW4gdGhlIHNvdXJjZVxuICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlY3Rpb25zLmV2ZXJ5KGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gcy5jb25zdW1lci5oYXNDb250ZW50c09mQWxsU291cmNlcygpO1xuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICogb3JpZ2luYWwgc291cmNlIGZpbGUuIFJldHVybnMgbnVsbCBpZiBubyBvcmlnaW5hbCBzb3VyY2UgY29udGVudCBpc1xuICogYXZhaWxhYmxlLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfc291cmNlQ29udGVudEZvcihhU291cmNlLCBudWxsT25NaXNzaW5nKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgdmFyIGNvbnRlbnQgPSBzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgdHJ1ZSk7XG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG51bGxPbk1pc3NpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aFxuICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG5cbiAgICAgIC8vIE9ubHkgY29uc2lkZXIgdGhpcyBzZWN0aW9uIGlmIHRoZSByZXF1ZXN0ZWQgc291cmNlIGlzIGluIHRoZSBsaXN0IG9mXG4gICAgICAvLyBzb3VyY2VzIG9mIHRoZSBjb25zdW1lci5cbiAgICAgIGlmIChzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZXMuaW5kZXhPZih1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpKSA9PT0gLTEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgZ2VuZXJhdGVkUG9zaXRpb24gPSBzZWN0aW9uLmNvbnN1bWVyLmdlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKTtcbiAgICAgIGlmIChnZW5lcmF0ZWRQb3NpdGlvbikge1xuICAgICAgICB2YXIgcmV0ID0ge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZFBvc2l0aW9uLmxpbmUgK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZFBvc2l0aW9uLmNvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gZ2VuZXJhdGVkUG9zaXRpb24ubGluZVxuICAgICAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgICAgIDogMClcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG4gICAgICB2YXIgc2VjdGlvbk1hcHBpbmdzID0gc2VjdGlvbi5jb25zdW1lci5fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlY3Rpb25NYXBwaW5ncy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgbWFwcGluZyA9IHNlY3Rpb25NYXBwaW5nc1tqXTtcblxuICAgICAgICB2YXIgc291cmNlID0gc2VjdGlvbi5jb25zdW1lci5fc291cmNlcy5hdChtYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGlmIChzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc2VjdGlvbi5jb25zdW1lci5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NvdXJjZXMuYWRkKHNvdXJjZSk7XG4gICAgICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgICAgIHZhciBuYW1lID0gc2VjdGlvbi5jb25zdW1lci5fbmFtZXMuYXQobWFwcGluZy5uYW1lKTtcbiAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgICBuYW1lID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcblxuICAgICAgICAvLyBUaGUgbWFwcGluZ3MgY29taW5nIGZyb20gdGhlIGNvbnN1bWVyIGZvciB0aGUgc2VjdGlvbiBoYXZlXG4gICAgICAgIC8vIGdlbmVyYXRlZCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzZWN0aW9uLCBzbyB3ZVxuICAgICAgICAvLyBuZWVkIHRvIG9mZnNldCB0aGVtIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY29uY2F0ZW5hdGVkXG4gICAgICAgIC8vIGdlbmVyYXRlZCBmaWxlLlxuICAgICAgICB2YXIgYWRqdXN0ZWRNYXBwaW5nID0ge1xuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG1hcHBpbmcuZ2VuZXJhdGVkTGluZVxuICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICA6IDApLFxuICAgICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgb3JpZ2luYWxDb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncy5wdXNoKGFkanVzdGVkTWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgYWRqdXN0ZWRNYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncy5wdXNoKGFkanVzdGVkTWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBxdWlja1NvcnQodGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICBxdWlja1NvcnQodGhpcy5fX29yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuICB9O1xuXG5leHBvcnRzLkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciA9IEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcjtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIHBhcmFtZXRlci9vcHRpb25zXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBhcmdzIFRoZSBvYmplY3Qgd2UgYXJlIGV4dHJhY3RpbmcgdmFsdWVzIGZyb21cbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgQW4gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nXG4gKiBmcm9tIHRoZSBvYmplY3QuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmcsIGFuXG4gKiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gZ2V0QXJnKGFBcmdzLCBhTmFtZSwgYURlZmF1bHRWYWx1ZSkge1xuICBpZiAoYU5hbWUgaW4gYUFyZ3MpIHtcbiAgICByZXR1cm4gYUFyZ3NbYU5hbWVdO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYURlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFOYW1lICsgJ1wiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuJyk7XG4gIH1cbn1cbmV4cG9ydHMuZ2V0QXJnID0gZ2V0QXJnO1xuXG52YXIgdXJsUmVnZXhwID0gL14oPzooW1xcdytcXC0uXSspOik/XFwvXFwvKD86KFxcdys6XFx3KylAKT8oW1xcdy5dKikoPzo6KFxcZCspKT8oXFxTKikkLztcbnZhciBkYXRhVXJsUmVnZXhwID0gL15kYXRhOi4rXFwsLiskLztcblxuZnVuY3Rpb24gdXJsUGFyc2UoYVVybCkge1xuICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjaGVtZTogbWF0Y2hbMV0sXG4gICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgaG9zdDogbWF0Y2hbM10sXG4gICAgcG9ydDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV1cbiAgfTtcbn1cbmV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuZnVuY3Rpb24gdXJsR2VuZXJhdGUoYVBhcnNlZFVybCkge1xuICB2YXIgdXJsID0gJyc7XG4gIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnNjaGVtZSArICc6JztcbiAgfVxuICB1cmwgKz0gJy8vJztcbiAgaWYgKGFQYXJzZWRVcmwuYXV0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmF1dGggKyAnQCc7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwuaG9zdCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucG9ydCkge1xuICAgIHVybCArPSBcIjpcIiArIGFQYXJzZWRVcmwucG9ydFxuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBhdGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5wYXRoO1xuICB9XG4gIHJldHVybiB1cmw7XG59XG5leHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gKlxuICogLSBSZXBsYWNlcyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggb25lIHNsYXNoLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICpcbiAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciB1cmwgdG8gbm9ybWFsaXplLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgdmFyIHBhdGggPSBhUGF0aDtcbiAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgaWYgKHVybCkge1xuICAgIGlmICghdXJsLnBhdGgpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG4gICAgcGF0aCA9IHVybC5wYXRoO1xuICB9XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoL1xcLysvKTtcbiAgZm9yICh2YXIgcGFydCwgdXAgPSAwLCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwID4gMCkge1xuICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJ0IGlzIGJsYW5rIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLiBUcnlpbmcgdG8gZ29cbiAgICAgICAgLy8gYWJvdmUgdGhlIHJvb3QgaXMgYSBuby1vcC4gVGhlcmVmb3JlIHdlIGNhbiByZW1vdmUgYWxsICcuLicgcGFydHNcbiAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgIHBhcnRzLnNwbGljZShpICsgMSwgdXApO1xuICAgICAgICB1cCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMik7XG4gICAgICAgIHVwLS07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKHBhdGggPT09ICcnKSB7XG4gICAgcGF0aCA9IGlzQWJzb2x1dGUgPyAnLycgOiAnLic7XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgdXJsLnBhdGggPSBwYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5cbi8qKlxuICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAqXG4gKiAtIElmIGFQYXRoIGlzIGEgVVJMIG9yIGEgZGF0YSBVUkksIGFQYXRoIGlzIHJldHVybmVkLCB1bmxlc3MgYVBhdGggaXMgYVxuICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gKiAgIGZpcnN0LlxuICogLSBPdGhlcndpc2UgYVBhdGggaXMgYSBwYXRoLiBJZiBhUm9vdCBpcyBhIFVSTCwgdGhlbiBpdHMgcGF0aCBwb3J0aW9uXG4gKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAqICAgaXMgcmV0dXJuZWQuXG4gKiAgIC0gSWYgYVBhdGggaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaXMgYVBhdGguXG4gKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gKiAtIEpvaW5pbmcgZm9yIGV4YW1wbGUgJ2h0dHA6Ly8nIGFuZCAnd3d3LmV4YW1wbGUuY29tJyBpcyBhbHNvIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuICBpZiAoYVBhdGggPT09IFwiXCIpIHtcbiAgICBhUGF0aCA9IFwiLlwiO1xuICB9XG4gIHZhciBhUGF0aFVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgdmFyIGFSb290VXJsID0gdXJsUGFyc2UoYVJvb3QpO1xuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdCA9IGFSb290VXJsLnBhdGggfHwgJy8nO1xuICB9XG5cbiAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgaWYgKGFQYXRoVXJsICYmICFhUGF0aFVybC5zY2hlbWUpIHtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFQYXRoVXJsKTtcbiAgfVxuXG4gIGlmIChhUGF0aFVybCB8fCBhUGF0aC5tYXRjaChkYXRhVXJsUmVnZXhwKSkge1xuICAgIHJldHVybiBhUGF0aDtcbiAgfVxuXG4gIC8vIGBqb2luKCdodHRwOi8vJywgJ3d3dy5leGFtcGxlLmNvbScpYFxuICBpZiAoYVJvb3RVcmwgJiYgIWFSb290VXJsLmhvc3QgJiYgIWFSb290VXJsLnBhdGgpIHtcbiAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuXG4gIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgID8gYVBhdGhcbiAgICA6IG5vcm1hbGl6ZShhUm9vdC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIGFQYXRoKTtcblxuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdFVybC5wYXRoID0gam9pbmVkO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cbiAgcmV0dXJuIGpvaW5lZDtcbn1cbmV4cG9ydHMuam9pbiA9IGpvaW47XG5cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uIChhUGF0aCkge1xuICByZXR1cm4gYVBhdGguY2hhckF0KDApID09PSAnLycgfHwgISFhUGF0aC5tYXRjaCh1cmxSZWdleHApO1xufTtcblxuLyoqXG4gKiBNYWtlIGEgcGF0aCByZWxhdGl2ZSB0byBhIFVSTCBvciBhbm90aGVyIHBhdGguXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBtYWRlIHJlbGF0aXZlIHRvIGFSb290LlxuICovXG5mdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuXG4gIGFSb290ID0gYVJvb3QucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gIC8vIGNoZWNraW5nIHdoZXRoZXIgdGhlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlIHBhdGggd29uJ3Qgd29yay4gSW5zdGVhZCwgd2VcbiAgLy8gbmVlZCB0byByZW1vdmUgY29tcG9uZW50cyBmcm9tIHRoZSByb290IG9uZSBieSBvbmUsIHVudGlsIGVpdGhlciB3ZSBmaW5kXG4gIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgdmFyIGxldmVsID0gMDtcbiAgd2hpbGUgKGFQYXRoLmluZGV4T2YoYVJvb3QgKyAnLycpICE9PSAwKSB7XG4gICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb25seSBwYXJ0IG9mIHRoZSByb290IHRoYXQgaXMgbGVmdCBpcyB0aGUgc2NoZW1lIChpLmUuIGh0dHA6Ly8sXG4gICAgLy8gZmlsZTovLy8sIGV0Yy4pLCBvbmUgb3IgbW9yZSBzbGFzaGVzICgvKSwgb3Igc2ltcGx5IG5vdGhpbmcgYXQgYWxsLCB3ZVxuICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgYVJvb3QgPSBhUm9vdC5zbGljZSgwLCBpbmRleCk7XG4gICAgaWYgKGFSb290Lm1hdGNoKC9eKFteXFwvXSs6XFwvKT9cXC8qJC8pKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgKytsZXZlbDtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhZGQgYSBcIi4uL1wiIGZvciBlYWNoIGNvbXBvbmVudCB3ZSByZW1vdmVkIGZyb20gdGhlIHJvb3QuXG4gIHJldHVybiBBcnJheShsZXZlbCArIDEpLmpvaW4oXCIuLi9cIikgKyBhUGF0aC5zdWJzdHIoYVJvb3QubGVuZ3RoICsgMSk7XG59XG5leHBvcnRzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG5cbnZhciBzdXBwb3J0c051bGxQcm90byA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gISgnX19wcm90b19fJyBpbiBvYmopO1xufSgpKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkgKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICogaGF2ZSB0byBwcmVmaXggYWxsIHRoZSBzdHJpbmdzIGluIG91ciBzZXQgd2l0aCBhbiBhcmJpdHJhcnkgY2hhcmFjdGVyLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8zMFxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5mdW5jdGlvbiB0b1NldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuICckJyArIGFTdHI7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMudG9TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogdG9TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGZyb21TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiBhU3RyLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLmZyb21TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogZnJvbVNldFN0cmluZztcblxuZnVuY3Rpb24gaXNQcm90b1N0cmluZyhzKSB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBzLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOSAvKiBcIl9fcHJvdG9fX1wiLmxlbmd0aCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMSkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAyKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDMpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNCkgIT09IDExNiAvKiAndCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA1KSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDYpICE9PSAxMTQgLyogJ3InICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNykgIT09IDExMiAvKiAncCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA4KSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDkpICE9PSA5NSAgLyogJ18nICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IGxlbmd0aCAtIDEwOyBpID49IDA7IGktLSkge1xuICAgIGlmIChzLmNoYXJDb2RlQXQoaSkgIT09IDM2IC8qICckJyAqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2hlcmUgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4sIGJ1dCBkaWZmZXJlbnQgZ2VuZXJhdGVkXG4gKiBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXBwaW5nIHdpdGggYVxuICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyA9IGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zO1xuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBkZWZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgaW5kaWNlcyB3aGVyZVxuICogdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiwgYnV0IGRpZmZlcmVudFxuICogc291cmNlL25hbWUvb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGFcbiAqIG1hcHBpbmcgd2l0aCBhIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkO1xuXG5mdW5jdGlvbiBzdHJjbXAoYVN0cjEsIGFTdHIyKSB7XG4gIGlmIChhU3RyMSA9PT0gYVN0cjIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZDtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrLWdlbmVyYXRvcicsIFsnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc3RhY2tmcmFtZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrR2VuZXJhdG9yID0gZmFjdG9yeShyb290LlN0YWNrRnJhbWUpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24oU3RhY2tGcmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGJhY2t0cmFjZTogZnVuY3Rpb24gU3RhY2tHZW5lcmF0b3IkJGJhY2t0cmFjZShvcHRzKSB7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICAgICAgICAgIHZhciBtYXhTdGFja1NpemUgPSAxMDtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3B0cy5tYXhTdGFja1NpemUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgbWF4U3RhY2tTaXplID0gb3B0cy5tYXhTdGFja1NpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjdXJyID0gYXJndW1lbnRzLmNhbGxlZTtcbiAgICAgICAgICAgIHdoaWxlIChjdXJyICYmIHN0YWNrLmxlbmd0aCA8IG1heFN0YWNrU2l6ZSAmJiBjdXJyWydhcmd1bWVudHMnXSkge1xuICAgICAgICAgICAgICAgIC8vIEFsbG93IFY4IG9wdGltaXphdGlvbnNcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShjdXJyWydhcmd1bWVudHMnXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gY3VyclsnYXJndW1lbnRzJ11baV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgvZnVuY3Rpb24oPzpcXHMrKFtcXHckXSspKStcXHMqXFwoLy50ZXN0KGN1cnIudG9TdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh7ZnVuY3Rpb25OYW1lOiBSZWdFeHAuJDEgfHwgdW5kZWZpbmVkLCBhcmdzOiBhcmdzfSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3IFN0YWNrRnJhbWUoe2FyZ3M6IGFyZ3N9KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIuY2FsbGVyO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0YWNrO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ3N0YWNrdHJhY2UtZ3BzJywgWydzb3VyY2UtbWFwJywgJ3N0YWNrZnJhbWUnXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAtY29uc3VtZXInKSwgcmVxdWlyZSgnc3RhY2tmcmFtZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2VHUFMgPSBmYWN0b3J5KHJvb3QuU291cmNlTWFwIHx8IHJvb3Quc291cmNlTWFwLCByb290LlN0YWNrRnJhbWUpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24oU291cmNlTWFwLCBTdGFja0ZyYW1lKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogTWFrZSBhIFgtRG9tYWluIHJlcXVlc3QgdG8gdXJsIGFuZCBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gd2l0aCByZXNwb25zZSB0ZXh0IGlmIGZ1bGZpbGxlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF94ZHIodXJsKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgIHJlcS5vcGVuKCdnZXQnLCB1cmwpO1xuICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gb25yZWFkeXN0YXRlY2hhbmdlKCkge1xuICAgICAgICAgICAgICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHJlcS5zdGF0dXMgPj0gMjAwICYmIHJlcS5zdGF0dXMgPCAzMDApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAodXJsLnN1YnN0cigwLCA3KSA9PT0gJ2ZpbGU6Ly8nICYmIHJlcS5yZXNwb25zZVRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignSFRUUCBzdGF0dXM6ICcgKyByZXEuc3RhdHVzICsgJyByZXRyaWV2aW5nICcgKyB1cmwpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXEuc2VuZCgpO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYSBCYXNlNjQtZW5jb2RlZCBzdHJpbmcgaW50byBpdHMgb3JpZ2luYWwgcmVwcmVzZW50YXRpb24uXG4gICAgICogVXNlZCBmb3IgaW5saW5lIHNvdXJjZW1hcHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gYjY0c3RyIEJhc2UtNjQgZW5jb2RlZCBzdHJpbmdcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBvcmlnaW5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgYmFzZTY0LWVuY29kZWQgc3RyaW5nLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9hdG9iKGI2NHN0cikge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmF0b2IpIHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cuYXRvYihiNjRzdHIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBzdXBwbHkgYSBwb2x5ZmlsbCBmb3Igd2luZG93LmF0b2IgaW4gdGhpcyBlbnZpcm9ubWVudCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX3BhcnNlSnNvbihzdHJpbmcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBKU09OICE9PSAndW5kZWZpbmVkJyAmJiBKU09OLnBhcnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdHJpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBzdXBwbHkgYSBwb2x5ZmlsbCBmb3IgSlNPTi5wYXJzZSBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZmluZEZ1bmN0aW9uTmFtZShzb3VyY2UsIGxpbmVOdW1iZXIvKiwgY29sdW1uTnVtYmVyKi8pIHtcbiAgICAgICAgdmFyIHN5bnRheGVzID0gW1xuICAgICAgICAgICAgLy8ge25hbWV9ID0gZnVuY3Rpb24gKHthcmdzfSkgVE9ETyBhcmdzIGNhcHR1cmVcbiAgICAgICAgICAgIC9bJ1wiXT8oWyRfQS1aYS16XVskX0EtWmEtejAtOV0qKVsnXCJdP1xccypbOj1dXFxzKmZ1bmN0aW9uXFxiLyxcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uIHtuYW1lfSh7YXJnc30pIG1bMV09bmFtZSBtWzJdPWFyZ3NcbiAgICAgICAgICAgIC9mdW5jdGlvblxccysoW14oJ1wiYF0qPylcXHMqXFwoKFteKV0qKVxcKS8sXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSBldmFsKClcbiAgICAgICAgICAgIC9bJ1wiXT8oWyRfQS1aYS16XVskX0EtWmEtejAtOV0qKVsnXCJdP1xccypbOj1dXFxzKig/OmV2YWx8bmV3IEZ1bmN0aW9uKVxcYi8sXG4gICAgICAgICAgICAvLyBmbl9uYW1lKCkge1xuICAgICAgICAgICAgL1xcYig/ISg/OmlmfGZvcnxzd2l0Y2h8d2hpbGV8d2l0aHxjYXRjaClcXGIpKD86KD86c3RhdGljKVxccyspPyhcXFMrKVxccypcXCguKj9cXClcXHMqXFx7LyxcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9ICgpID0+IHtcbiAgICAgICAgICAgIC9bJ1wiXT8oWyRfQS1aYS16XVskX0EtWmEtejAtOV0qKVsnXCJdP1xccypbOj1dXFxzKlxcKC4qP1xcKVxccyo9Pi9cbiAgICAgICAgXTtcbiAgICAgICAgdmFyIGxpbmVzID0gc291cmNlLnNwbGl0KCdcXG4nKTtcblxuICAgICAgICAvLyBXYWxrIGJhY2t3YXJkcyBpbiB0aGUgc291cmNlIGxpbmVzIHVudGlsIHdlIGZpbmQgdGhlIGxpbmUgd2hpY2ggbWF0Y2hlcyBvbmUgb2YgdGhlIHBhdHRlcm5zIGFib3ZlXG4gICAgICAgIHZhciBjb2RlID0gJyc7XG4gICAgICAgIHZhciBtYXhMaW5lcyA9IE1hdGgubWluKGxpbmVOdW1iZXIsIDIwKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhMaW5lczsgKytpKSB7XG4gICAgICAgICAgICAvLyBsaW5lTm8gaXMgMS1iYXNlZCwgc291cmNlW10gaXMgMC1iYXNlZFxuICAgICAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tsaW5lTnVtYmVyIC0gaSAtIDFdO1xuICAgICAgICAgICAgdmFyIGNvbW1lbnRQb3MgPSBsaW5lLmluZGV4T2YoJy8vJyk7XG4gICAgICAgICAgICBpZiAoY29tbWVudFBvcyA+PSAwKSB7XG4gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3Vic3RyKDAsIGNvbW1lbnRQb3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgICAgICAgIGNvZGUgPSBsaW5lICsgY29kZTtcbiAgICAgICAgICAgICAgICB2YXIgbGVuID0gc3ludGF4ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW47IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSBzeW50YXhlc1tpbmRleF0uZXhlYyhjb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG0gJiYgbVsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1bMV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZW5zdXJlU3VwcG9ydGVkRW52aXJvbm1lbnQoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnR5ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjb25zdW1lIHNvdXJjZSBtYXBzIGluIG9sZGVyIGJyb3dzZXJzJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZW5zdXJlU3RhY2tGcmFtZUlzTGVnaXQoc3RhY2tmcmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mIHN0YWNrZnJhbWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBTdGFja0ZyYW1lIGlzIG5vdCBhbiBvYmplY3QnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhY2tmcmFtZS5maWxlTmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGZpbGUgbmFtZSBpcyBub3QgYSBTdHJpbmcnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhY2tmcmFtZS5saW5lTnVtYmVyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5saW5lTnVtYmVyICUgMSAhPT0gMCB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5saW5lTnVtYmVyIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gbGluZSBudW1iZXIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciAlIDEgIT09IDAgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gY29sdW1uIG51bWJlciBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXInKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZmluZFNvdXJjZU1hcHBpbmdVUkwoc291cmNlKSB7XG4gICAgICAgIHZhciBzb3VyY2VNYXBwaW5nVXJsUmVnRXhwID0gL1xcL1xcL1sjQF0gP3NvdXJjZU1hcHBpbmdVUkw9KFteXFxzJ1wiXSspXFxzKiQvbWc7XG4gICAgICAgIHZhciBsYXN0U291cmNlTWFwcGluZ1VybDtcbiAgICAgICAgdmFyIG1hdGNoU291cmNlTWFwcGluZ1VybDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbmQtYXNzaWduXG4gICAgICAgIHdoaWxlIChtYXRjaFNvdXJjZU1hcHBpbmdVcmwgPSBzb3VyY2VNYXBwaW5nVXJsUmVnRXhwLmV4ZWMoc291cmNlKSkge1xuICAgICAgICAgICAgbGFzdFNvdXJjZU1hcHBpbmdVcmwgPSBtYXRjaFNvdXJjZU1hcHBpbmdVcmxbMV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3RTb3VyY2VNYXBwaW5nVXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdFNvdXJjZU1hcHBpbmdVcmw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NvdXJjZU1hcHBpbmdVUkwgbm90IGZvdW5kJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfZXh0cmFjdExvY2F0aW9uSW5mb0Zyb21Tb3VyY2VNYXBTb3VyY2Uoc3RhY2tmcmFtZSwgc291cmNlTWFwQ29uc3VtZXIsIHNvdXJjZUNhY2hlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBsb2MgPSBzb3VyY2VNYXBDb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHtcbiAgICAgICAgICAgICAgICBsaW5lOiBzdGFja2ZyYW1lLmxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgY29sdW1uOiBzdGFja2ZyYW1lLmNvbHVtbk51bWJlclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChsb2Muc291cmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FjaGUgbWFwcGVkIHNvdXJjZXNcbiAgICAgICAgICAgICAgICB2YXIgbWFwcGVkU291cmNlID0gc291cmNlTWFwQ29uc3VtZXIuc291cmNlQ29udGVudEZvcihsb2Muc291cmNlKTtcbiAgICAgICAgICAgICAgICBpZiAobWFwcGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUNhY2hlW2xvYy5zb3VyY2VdID0gbWFwcGVkU291cmNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgIC8vIGdpdmVuIHN0YWNrZnJhbWUgYW5kIHNvdXJjZSBsb2NhdGlvbiwgdXBkYXRlIHN0YWNrZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBsb2MubmFtZSB8fCBzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHN0YWNrZnJhbWUuYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2Muc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvYy5jb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IG9yaWdpbmFsIHNvdXJjZSBmb3IgZ2l2ZW4gc3RhY2tmcmFtZSBhbmQgc291cmNlIG1hcCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgKiAgICAgIG9wdHMuc291cmNlQ2FjaGUgPSB7dXJsOiBcIlNvdXJjZSBTdHJpbmdcIn0gPT4gcHJlbG9hZCBzb3VyY2UgY2FjaGVcbiAgICAgKiAgICAgIG9wdHMuc291cmNlTWFwQ29uc3VtZXJDYWNoZSA9IHsvcGF0aC9maWxlLmpzLm1hcDogU291cmNlTWFwQ29uc3VtZXJ9XG4gICAgICogICAgICBvcHRzLm9mZmxpbmUgPSBUcnVlIHRvIHByZXZlbnQgbmV0d29yayByZXF1ZXN0cy5cbiAgICAgKiAgICAgICAgICAgICAgQmVzdCBlZmZvcnQgd2l0aG91dCBzb3VyY2VzIG9yIHNvdXJjZSBtYXBzLlxuICAgICAqICAgICAgb3B0cy5hamF4ID0gUHJvbWlzZSByZXR1cm5pbmcgZnVuY3Rpb24gdG8gbWFrZSBYLURvbWFpbiByZXF1ZXN0c1xuICAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBTdGFja1RyYWNlR1BTKG9wdHMpIHtcbiAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFN0YWNrVHJhY2VHUFMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrVHJhY2VHUFMob3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICAgICAgdGhpcy5zb3VyY2VDYWNoZSA9IG9wdHMuc291cmNlQ2FjaGUgfHwge307XG4gICAgICAgIHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZSA9IG9wdHMuc291cmNlTWFwQ29uc3VtZXJDYWNoZSB8fCB7fTtcblxuICAgICAgICB0aGlzLmFqYXggPSBvcHRzLmFqYXggfHwgX3hkcjtcblxuICAgICAgICB0aGlzLl9hdG9iID0gb3B0cy5hdG9iIHx8IF9hdG9iO1xuXG4gICAgICAgIHRoaXMuX2dldCA9IGZ1bmN0aW9uIF9nZXQobG9jYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXNEYXRhVXJsID0gbG9jYXRpb24uc3Vic3RyKDAsIDUpID09PSAnZGF0YTonO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdHMub2ZmbGluZSAmJiAhaXNEYXRhVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0Nhbm5vdCBtYWtlIG5ldHdvcmsgcmVxdWVzdHMgaW4gb2ZmbGluZSBtb2RlJykpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0RhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRhdGEgVVJMcyBjYW4gaGF2ZSBwYXJhbWV0ZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIzOTdcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdXBwb3J0ZWRFbmNvZGluZ1JlZ2V4cCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgL15kYXRhOmFwcGxpY2F0aW9uXFwvanNvbjsoW1xcdz06XCItXSs7KSpiYXNlNjQsLztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGxvY2F0aW9uLm1hdGNoKHN1cHBvcnRlZEVuY29kaW5nUmVnZXhwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VNYXBTdGFydCA9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jb2RlZFNvdXJjZSA9IGxvY2F0aW9uLnN1YnN0cihzb3VyY2VNYXBTdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHRoaXMuX2F0b2IoZW5jb2RlZFNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0gPSBzb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdUaGUgZW5jb2Rpbmcgb2YgdGhlIGlubGluZSBzb3VyY2VtYXAgaXMgbm90IHN1cHBvcnRlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4aHJQcm9taXNlID0gdGhpcy5hamF4KGxvY2F0aW9uLCB7bWV0aG9kOiAnZ2V0J30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FjaGUgdGhlIFByb21pc2UgdG8gcHJldmVudCBkdXBsaWNhdGUgaW4tZmxpZ2h0IHJlcXVlc3RzXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSA9IHhoclByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJQcm9taXNlLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENyZWF0aW5nIFNvdXJjZU1hcENvbnN1bWVycyBpcyBleHBlbnNpdmUsIHNvIHRoaXMgd3JhcHMgdGhlIGNyZWF0aW9uIG9mIGFcbiAgICAgICAgICogU291cmNlTWFwQ29uc3VtZXIgaW4gYSBwZXItaW5zdGFuY2UgY2FjaGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzb3VyY2VNYXBwaW5nVVJMID0gVVJMIHRvIGZldGNoIHNvdXJjZSBtYXAgZnJvbVxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZGVmYXVsdFNvdXJjZVJvb3QgPSBEZWZhdWx0IHNvdXJjZSByb290IGZvciBzb3VyY2UgbWFwIGlmIHVuZGVmaW5lZFxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyBhIFNvdXJjZU1hcENvbnN1bWVyXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9nZXRTb3VyY2VNYXBDb25zdW1lciA9IGZ1bmN0aW9uIF9nZXRTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXBwaW5nVVJMLCBkZWZhdWx0U291cmNlUm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwQ29uc3VtZXJQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KHNvdXJjZU1hcHBpbmdVUkwpLnRoZW4oZnVuY3Rpb24oc291cmNlTWFwU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VNYXBTb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcFNvdXJjZSA9IF9wYXJzZUpzb24oc291cmNlTWFwU291cmNlLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VNYXBTb3VyY2Uuc291cmNlUm9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwU291cmNlLnNvdXJjZVJvb3QgPSBkZWZhdWx0U291cmNlUm9vdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBTb3VyY2VNYXAuU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwU291cmNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGVbc291cmNlTWFwcGluZ1VSTF0gPSBzb3VyY2VNYXBDb25zdW1lclByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc291cmNlTWFwQ29uc3VtZXJQcm9taXNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIFN0YWNrRnJhbWUsIGVuaGFuY2UgZnVuY3Rpb24gbmFtZSBhbmQgdXNlIHNvdXJjZSBtYXBzIGZvciBhXG4gICAgICAgICAqIGJldHRlciBTdGFja0ZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWUgb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggd2l0aCBzb3VyY2UtbWFwcGVkIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGlucG9pbnQgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRwaW5wb2ludChzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKS50aGVuKGZ1bmN0aW9uKG1hcHBlZFN0YWNrRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lKG1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlLCByZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmV4cGVjdGVkLW11bHRpbGluZVxuICAgICAgICAgICAgICAgICAgICAgICAgWydjYXRjaCddKHJlc29sdmVNYXBwZWRTdGFja0ZyYW1lKTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHJlamVjdCk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIFN0YWNrRnJhbWUsIGd1ZXNzIGZ1bmN0aW9uIG5hbWUgZnJvbSBsb2NhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmluZEZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMkJGZpbmRGdW5jdGlvbk5hbWUoc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXQoc3RhY2tmcmFtZS5maWxlTmFtZSkudGhlbihmdW5jdGlvbiBnZXRTb3VyY2VDYWxsYmFjayhzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBzdGFja2ZyYW1lLmxpbmVOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSBzdGFja2ZyYW1lLmNvbHVtbk51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGd1ZXNzZWRGdW5jdGlvbk5hbWUgPSBfZmluZEZ1bmN0aW9uTmFtZShzb3VyY2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcmVwbGFjZSBmdW5jdGlvbk5hbWUgaWYgd2UgZm91bmQgc29tZXRoaW5nXG4gICAgICAgICAgICAgICAgICAgIGlmIChndWVzc2VkRnVuY3Rpb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGd1ZXNzZWRGdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogc3RhY2tmcmFtZS5hcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBzdGFja2ZyYW1lLmZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBjb2x1bW5OdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCByZWplY3QpWydjYXRjaCddKHJlamVjdCk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIFN0YWNrRnJhbWUsIHNlZWsgc291cmNlLW1hcHBlZCBsb2NhdGlvbiBhbmQgcmV0dXJuIG5ldyBlbmhhbmNlZCBTdGFja0ZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWVcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBlbmhhbmNlZCBTdGFja0ZyYW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5nZXRNYXBwZWRMb2NhdGlvbiA9IGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMkJGdldE1hcHBlZExvY2F0aW9uKHN0YWNrZnJhbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBfZW5zdXJlU3VwcG9ydGVkRW52aXJvbm1lbnQoKTtcbiAgICAgICAgICAgICAgICBfZW5zdXJlU3RhY2tGcmFtZUlzTGVnaXQoc3RhY2tmcmFtZSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlO1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IHN0YWNrZnJhbWUuZmlsZU5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0KGZpbGVOYW1lKS50aGVuKGZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwcGluZ1VSTCA9IF9maW5kU291cmNlTWFwcGluZ1VSTChzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNEYXRhVXJsID0gc291cmNlTWFwcGluZ1VSTC5zdWJzdHIoMCwgNSkgPT09ICdkYXRhOic7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0U291cmNlUm9vdCA9IGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZS5sYXN0SW5kZXhPZignLycpICsgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZU1hcHBpbmdVUkxbMF0gIT09ICcvJyAmJiAhaXNEYXRhVXJsICYmICEoL15odHRwcz86XFwvXFwvfF5cXC9cXC8vaSkudGVzdChzb3VyY2VNYXBwaW5nVVJMKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwcGluZ1VSTCA9IGRlZmF1bHRTb3VyY2VSb290ICsgc291cmNlTWFwcGluZ1VSTDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXBwaW5nVVJMLCBkZWZhdWx0U291cmNlUm9vdClcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHNvdXJjZU1hcENvbnN1bWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9leHRyYWN0TG9jYXRpb25JbmZvRnJvbVNvdXJjZU1hcFNvdXJjZShzdGFja2ZyYW1lLCBzb3VyY2VNYXBDb25zdW1lciwgc291cmNlQ2FjaGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc29sdmUpWydjYXRjaCddKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG4gICAgfTtcbn0pKTtcbiIsIi8vIFBvbHlmaWxsIGZvciBvbGQgYnJvd3NlcnNcbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5XG5pZiAoIUFycmF5LmlzQXJyYXkpIHtcbiAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgICB9O1xufVxuXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgRVM2UHJvbWlzZS5wb2x5ZmlsbCgpO1xufVxuXG4vLyBFUzUgUG9seWZpbGxzXG4vLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRnVuY3Rpb24vYmluZFxuaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkge1xuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24ob1RoaXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCAtIHdoYXQgaXMgdHJ5aW5nIHRvIGJlIGJvdW5kIGlzIG5vdCBjYWxsYWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgdmFyIGZUb0JpbmQgPSB0aGlzO1xuICAgICAgICB2YXIgTm9PcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB9O1xuICAgICAgICB2YXIgZkJvdW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gZlRvQmluZC5hcHBseSh0aGlzIGluc3RhbmNlb2YgTm9PcCAmJiBvVGhpcyA/IHRoaXMgOiBvVGhpcyxcbiAgICAgICAgICAgICAgICBhQXJncy5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIE5vT3AucHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG4gICAgICAgIGZCb3VuZC5wcm90b3R5cGUgPSBuZXcgTm9PcCgpO1xuXG4gICAgICAgIHJldHVybiBmQm91bmQ7XG4gICAgfTtcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L21hcFxuaWYgKCFBcnJheS5wcm90b3R5cGUubWFwKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgIGlmICh0aGlzID09PSB2b2lkIDAgfHwgdGhpcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIE8gPSBPYmplY3QodGhpcyk7XG4gICAgICAgIHZhciBsZW4gPSBPLmxlbmd0aCA+Pj4gMDtcbiAgICAgICAgdmFyIFQ7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBUID0gdGhpc0FyZztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBBID0gbmV3IEFycmF5KGxlbik7XG4gICAgICAgIHZhciBrID0gMDtcblxuICAgICAgICB3aGlsZSAoayA8IGxlbikge1xuICAgICAgICAgICAgdmFyIGtWYWx1ZTtcbiAgICAgICAgICAgIHZhciBtYXBwZWRWYWx1ZTtcbiAgICAgICAgICAgIGlmIChrIGluIE8pIHtcbiAgICAgICAgICAgICAgICBrVmFsdWUgPSBPW2tdO1xuICAgICAgICAgICAgICAgIG1hcHBlZFZhbHVlID0gY2FsbGJhY2suY2FsbChULCBrVmFsdWUsIGssIE8pO1xuICAgICAgICAgICAgICAgIEFba10gPSBtYXBwZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBBO1xuICAgIH07XG59XG5cbi8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9maWx0ZXJcbmlmICghQXJyYXkucHJvdG90eXBlLmZpbHRlcikge1xuICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbihjYWxsYmFjay8qLCB0aGlzQXJnKi8pIHtcbiAgICAgICAgaWYgKHRoaXMgPT09IHZvaWQgMCB8fCB0aGlzID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0aGlzIGlzIG51bGwgb3Igbm90IGRlZmluZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpO1xuICAgICAgICB2YXIgbGVuID0gdC5sZW5ndGggPj4+IDA7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyID8gYXJndW1lbnRzWzFdIDogdm9pZCAwO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSBpbiB0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IHRbaV07XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbn1cblxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2ZvckVhY2hcbmlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgIHZhciBUO1xuICAgICAgICB2YXIgaztcbiAgICAgICAgaWYgKHRoaXMgPT09IG51bGwgfHwgdGhpcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcgdGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgTyA9IE9iamVjdCh0aGlzKTtcbiAgICAgICAgdmFyIGxlbiA9IE8ubGVuZ3RoID4+PiAwO1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBUID0gdGhpc0FyZztcbiAgICAgICAgfVxuICAgICAgICBrID0gMDtcbiAgICAgICAgd2hpbGUgKGsgPCBsZW4pIHtcbiAgICAgICAgICAgIHZhciBrVmFsdWU7XG4gICAgICAgICAgICBpZiAoayBpbiBPKSB7XG4gICAgICAgICAgICAgICAga1ZhbHVlID0gT1trXTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKFQsIGtWYWx1ZSwgaywgTyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrKys7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZScsIFsnZXJyb3Itc3RhY2stcGFyc2VyJywgJ3N0YWNrLWdlbmVyYXRvcicsICdzdGFja3RyYWNlLWdwcyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnZXJyb3Itc3RhY2stcGFyc2VyJyksIHJlcXVpcmUoJ3N0YWNrLWdlbmVyYXRvcicpLCByZXF1aXJlKCdzdGFja3RyYWNlLWdwcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2UgPSBmYWN0b3J5KHJvb3QuRXJyb3JTdGFja1BhcnNlciwgcm9vdC5TdGFja0dlbmVyYXRvciwgcm9vdC5TdGFja1RyYWNlR1BTKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIFN0YWNrVHJhY2UoRXJyb3JTdGFja1BhcnNlciwgU3RhY2tHZW5lcmF0b3IsIFN0YWNrVHJhY2VHUFMpIHtcbiAgICB2YXIgX29wdGlvbnMgPSB7XG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBzdGFja2ZyYW1lcyBmb3IgdGhpcyBsaWJyYXJ5IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2UkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignRXJyb3JTdGFja1BhcnNlciQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlR1BTJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrR2VuZXJhdG9yJCQnKSA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZUNhY2hlOiB7fVxuICAgIH07XG5cbiAgICB2YXIgX2dlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRHZW5lcmF0ZUVycm9yKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRXJyb3IgbXVzdCBiZSB0aHJvd24gdG8gZ2V0IHN0YWNrIGluIElFXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdlIDIgZ2l2ZW4gT2JqZWN0cy4gSWYgYSBjb25mbGljdCBvY2N1cnMgdGhlIHNlY29uZCBvYmplY3Qgd2lucy5cbiAgICAgKiBEb2VzIG5vdCBkbyBkZWVwIG1lcmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaXJzdCBiYXNlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWNvbmQgb3ZlcnJpZGVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gbWVyZ2VkIGZpcnN0IGFuZCBzZWNvbmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tZXJnZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcblxuICAgICAgICBbZmlyc3QsIHNlY29uZF0uZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IG9ialtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikge1xuICAgICAgICByZXR1cm4gZXJyLnN0YWNrIHx8IGVyclsnb3BlcmEjc291cmNlbG9jJ107XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcmVkKHN0YWNrZnJhbWVzLCBmaWx0ZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGFja2ZyYW1lcy5maWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIGJhY2t0cmFjZSBmcm9tIGludm9jYXRpb24gcG9pbnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRnZXQob3B0cykge1xuICAgICAgICAgICAgdmFyIGVyciA9IF9nZW5lcmF0ZUVycm9yKCk7XG4gICAgICAgICAgICByZXR1cm4gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IHRoaXMuZnJvbUVycm9yKGVyciwgb3B0cykgOiB0aGlzLmdlbmVyYXRlQXJ0aWZpY2lhbGx5KG9wdHMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKiBJTVBPUlRBTlQ6IERvZXMgbm90IGhhbmRsZSBzb3VyY2UgbWFwcyBvciBndWVzcyBmdW5jdGlvbiBuYW1lcyFcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBvZiBTdGFja0ZyYW1lXG4gICAgICAgICAqL1xuICAgICAgICBnZXRTeW5jOiBmdW5jdGlvbiBTdGFja1RyYWNlJCRnZXRTeW5jKG9wdHMpIHtcbiAgICAgICAgICAgIG9wdHMgPSBfbWVyZ2UoX29wdGlvbnMsIG9wdHMpO1xuICAgICAgICAgICAgdmFyIGVyciA9IF9nZW5lcmF0ZUVycm9yKCk7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpID8gRXJyb3JTdGFja1BhcnNlci5wYXJzZShlcnIpIDogU3RhY2tHZW5lcmF0b3IuYmFja3RyYWNlKG9wdHMpO1xuICAgICAgICAgICAgcmV0dXJuIF9maWx0ZXJlZChzdGFjaywgb3B0cy5maWx0ZXIpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhbiBlcnJvciBvYmplY3QsIHBhcnNlIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBvYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZvciBBcnJheVtTdGFja0ZyYW1lfVxuICAgICAgICAgKi9cbiAgICAgICAgZnJvbUVycm9yOiBmdW5jdGlvbiBTdGFja1RyYWNlJCRmcm9tRXJyb3IoZXJyb3IsIG9wdHMpIHtcbiAgICAgICAgICAgIG9wdHMgPSBfbWVyZ2UoX29wdGlvbnMsIG9wdHMpO1xuICAgICAgICAgICAgdmFyIGdwcyA9IG5ldyBTdGFja1RyYWNlR1BTKG9wdHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhY2tmcmFtZXMgPSBfZmlsdGVyZWQoRXJyb3JTdGFja1BhcnNlci5wYXJzZShlcnJvciksIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKFByb21pc2UuYWxsKHN0YWNrZnJhbWVzLm1hcChmdW5jdGlvbihzZikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU9yaWdpbmFsKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc2YpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBncHMucGlucG9pbnQoc2YpLnRoZW4ocmVzb2x2ZSwgcmVzb2x2ZU9yaWdpbmFsKVsnY2F0Y2gnXShyZXNvbHZlT3JpZ2luYWwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSkpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVXNlIFN0YWNrR2VuZXJhdG9yIHRvIGdlbmVyYXRlIGEgYmFja3RyYWNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gb2YgQXJyYXlbU3RhY2tGcmFtZV1cbiAgICAgICAgICovXG4gICAgICAgIGdlbmVyYXRlQXJ0aWZpY2lhbGx5OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRnZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBzdGFja0ZyYW1lcyA9IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0cy5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBzdGFja0ZyYW1lcyA9IHN0YWNrRnJhbWVzLmZpbHRlcihvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN0YWNrRnJhbWVzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBmdW5jdGlvbiwgd3JhcCBpdCBzdWNoIHRoYXQgaW52b2NhdGlvbnMgdHJpZ2dlciBhIGNhbGxiYWNrIHRoYXRcbiAgICAgICAgICogaXMgY2FsbGVkIHdpdGggYSBzdGFjayB0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdG8gYmUgaW5zdHJ1bWVudGVkXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhIHN0YWNrIHRyYWNlIG9uIGludm9jYXRpb25cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyYmFjayBvcHRpb25hbCBmdW5jdGlvbiB0byBjYWxsIHdpdGggZXJyb3IgaWYgdW5hYmxlIHRvIGdldCBzdGFjayB0cmFjZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgb3B0aW9uYWwgY29udGV4dCBvYmplY3QgKGUuZy4gd2luZG93KVxuICAgICAgICAgKi9cbiAgICAgICAgaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkaW5zdHJ1bWVudChmbiwgY2FsbGJhY2ssIGVycmJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnN0cnVtZW50IG5vbi1mdW5jdGlvbiBvYmplY3QnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAvLyBBbHJlYWR5IGluc3RydW1lbnRlZCwgcmV0dXJuIGdpdmVuIEZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgaW5zdHJ1bWVudGVkID0gZnVuY3Rpb24gU3RhY2tUcmFjZSQkaW5zdHJ1bWVudGVkKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0KCkudGhlbihjYWxsYmFjaywgZXJyYmFjaylbJ2NhdGNoJ10oZXJyYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnIHx8IHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZnJvbUVycm9yKGUpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgaW5zdHJ1bWVudGVkLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm4gPSBmbjtcblxuICAgICAgICAgICAgcmV0dXJuIGluc3RydW1lbnRlZDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBmdW5jdGlvbiB0aGF0IGhhcyBiZWVuIGluc3RydW1lbnRlZCxcbiAgICAgICAgICogcmV2ZXJ0IHRoZSBmdW5jdGlvbiB0byBpdCdzIG9yaWdpbmFsIChub24taW5zdHJ1bWVudGVkKSBzdGF0ZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdG8gZGUtaW5zdHJ1bWVudFxuICAgICAgICAgKi9cbiAgICAgICAgZGVpbnN0cnVtZW50OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRkZWluc3RydW1lbnQoZm4pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZS1pbnN0cnVtZW50IG5vbi1mdW5jdGlvbiBvYmplY3QnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4uX19zdGFja3RyYWNlT3JpZ2luYWxGbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gbm90IGluc3RydW1lbnRlZCwgcmV0dXJuIG9yaWdpbmFsXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhbiBlcnJvciBtZXNzYWdlIGFuZCBBcnJheSBvZiBTdGFja0ZyYW1lcywgc2VyaWFsaXplIGFuZCBQT1NUIHRvIGdpdmVuIFVSTC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gc3RhY2tmcmFtZXNcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXJyb3JNc2dcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3RPcHRpb25zXG4gICAgICAgICAqL1xuICAgICAgICByZXBvcnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJHJlcG9ydChzdGFja2ZyYW1lcywgdXJsLCBlcnJvck1zZywgcmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIG9ucmVhZHlzdGF0ZWNoYW5nZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA+PSAyMDAgJiYgcmVxLnN0YXR1cyA8IDQwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVxLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1BPU1QgdG8gJyArIHVybCArICcgZmFpbGVkIHdpdGggc3RhdHVzOiAnICsgcmVxLnN0YXR1cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXEub3BlbigncG9zdCcsIHVybCk7XG5cbiAgICAgICAgICAgICAgICAvLyBTZXQgcmVxdWVzdCBoZWFkZXJzXG4gICAgICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zICYmIHR5cGVvZiByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVycyA9IHJlcXVlc3RPcHRpb25zLmhlYWRlcnM7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGhlYWRlciBpbiBoZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhlYWRlcnMsIGhlYWRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIsIGhlYWRlcnNbaGVhZGVyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVwb3J0UGF5bG9hZCA9IHtzdGFjazogc3RhY2tmcmFtZXN9O1xuICAgICAgICAgICAgICAgIGlmIChlcnJvck1zZyAhPT0gdW5kZWZpbmVkICYmIGVycm9yTXNnICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydFBheWxvYWQubWVzc2FnZSA9IGVycm9yTXNnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlcS5zZW5kKEpTT04uc3RyaW5naWZ5KHJlcG9ydFBheWxvYWQpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcbiJdfQ== diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index c0b1b11..f8afa1e 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"("),r=n.match(/ (\((.+):(\d+):(\d+)\)$)/);n=r?n.replace(r[0],""):n;var o=n.split(/\s+/).slice(1),i=this.extractLocation(r?r[1]:o.pop()),a=o.join(" ")||void 0,s=["eval",""].indexOf(i[0])>-1?void 0:i[0];return new e({functionName:a,fileName:s,lineNumber:i[1],columnNumber:i[2],source:t})},this)},parseFFOrSafari:function(t){var n=t.stack.split("\n").filter(function(e){return!e.match(r)},this);return n.map(function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),t.indexOf("@")===-1&&t.indexOf(":")===-1)return new e({functionName:t});var n=/((.*".+"[^@]*)?[^@]*)(?:@)/,r=t.match(n),o=r&&r[1]?r[1]:void 0,i=this.extractLocation(t.replace(n,""));return new e({functionName:o,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:t})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(n=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:t})},this)}}})},{stackframe:2}],2:[function(t,n,r){!function(t,o){"use strict";"function"==typeof e&&e.amd?e("stackframe",[],o):"object"==typeof r?n.exports=o():t.StackFrame=o()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e){return e.charAt(0).toUpperCase()+e.substring(1)}function n(e){return function(){return this[e]}}function r(e){if(e instanceof Object)for(var n=0;n1)))/4)-T((e-1901+t)/100)+T((e-1601+t)/400)};if((g=v.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=y?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?d=2==i?function(e,t){var n,r={},o=y.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=y.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var n,o,i=y.call(e)==b,s=!i&&"function"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&"prototype"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),d(e,t)},!n("json-stringify")){var j={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},k="000000",x=function(e,t){return(k+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);n-1/0&&s<1/0){if(M){for(p=T(s/864e5),c=T(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=T((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,v=T(h/36e5)%24,_=T(h/6e4)%60,w=T(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),v=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(c<=0||c>=1e4?(c<0?"-":"+")+x(6,c<0?-c:c):x(4,c))+"-"+x(2,l+1)+"-"+x(2,p)+"T"+x(2,v)+":"+x(2,_)+":"+x(2,w)+"."+x(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=y.call(s),u==E)return""+s;if(u==A)return s>-1/0&&s<1/0?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==S){for(j=0,k=s.length;j0)for(r="",n>10&&(n=10);r.length=48&&o<=57||o>=97&&o<=102||o>=65&&o<=70||B();e+=G("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&o<=57){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&o<=57)&&B(),r=!1;U=48&&o<=57);U++);if(46==i.charCodeAt(U)){for(n=++U;n=48&&o<=57);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),43!=o&&45!=o||U++,n=U;n=48&&o<=57);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),","!=e&&"string"==typeof e&&"@"==(N?e.charAt(0):e[0])&&":"==J()||B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(y.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,$=""+e,n=q(J()),"$"!=J()&&B(),U=$=null,t&&y.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return t.runInContext=o,t}var i="function"==typeof e&&e.amd,a={"function":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&"object"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],5:[function(e,t,n){function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function a(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function s(){m&&g&&(m=!1,g.length?d=g.concat(d):v=-1,d.length&&u())}function u(){if(!m){var e=i(s);m=!0;for(var t=d.length;t;){for(g=d,d=[];++v1)for(var n=1;n=0&&e>1;return t?-n:n}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],10:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;p1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),C.push(n),"number"==typeof n.originalLine&&b.push(n)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,t){ -if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=o(t),r=o(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(y))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,i(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function d(e,t){return e===t?0:e>t?1:-1}function m(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=d(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:d(e.name,t.name)))))}n.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},n.relative=u;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},{}],13:[function(e,t,n){arguments[4][2][0].apply(n,arguments)},{dup:2}],14:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof r?n.exports=i(t("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300||"file://"===e.substr(0,7)&&r.responseText?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],r=e.split("\n"),o="",i=Math.min(t,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=n.length,l=0;l>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;a>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;i>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;r=200&&a.status<400?o(a.responseText):i(new Error("POST to "+t+" failed with status: "+a.status)))},a.open("post",t),a.setRequestHeader("Content-Type","application/json"),r&&"object"==typeof r.headers){var s=r.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==n&&null!==n&&(c.message=n),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":14,"stacktrace-gps":16}]},{},[3,4,17,18])(18)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"("),r=n.match(/ (\((.+):(\d+):(\d+)\)$)/);n=r?n.replace(r[0],""):n;var o=n.split(/\s+/).slice(1),i=this.extractLocation(r?r[1]:o.pop()),a=o.join(" ")||void 0,s=["eval",""].indexOf(i[0])>-1?void 0:i[0];return new e({functionName:a,fileName:s,lineNumber:i[1],columnNumber:i[2],source:t})},this)},parseFFOrSafari:function(t){var n=t.stack.split("\n").filter(function(e){return!e.match(r)},this);return n.map(function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),t.indexOf("@")===-1&&t.indexOf(":")===-1)return new e({functionName:t});var n=/((.*".+"[^@]*)?[^@]*)(?:@)/,r=t.match(n),o=r&&r[1]?r[1]:void 0,i=this.extractLocation(t.replace(n,""));return new e({functionName:o,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:t})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^)]*\)/g,"")||void 0;i.match(/\(([^)]*)\)/)&&(n=i.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:t})},this)}}})},{stackframe:2}],2:[function(t,n,r){!function(t,o){"use strict";"function"==typeof e&&e.amd?e("stackframe",[],o):"object"==typeof r?n.exports=o():t.StackFrame=o()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e){return e.charAt(0).toUpperCase()+e.substring(1)}function n(e){return function(){return this[e]}}function r(e){if(e)for(var n=0;n1)))/4)-T((e-1901+t)/100)+T((e-1601+t)/400)};if((g=v.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=y?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?d=2==i?function(e,t){var n,r={},o=y.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=y.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var n,o,i=y.call(e)==b,s=!i&&"function"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&"prototype"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),d(e,t)},!n("json-stringify")){var j={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},k="000000",x=function(e,t){return(k+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);n-1/0&&s<1/0){if(M){for(p=T(s/864e5),c=T(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=T((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,v=T(h/36e5)%24,_=T(h/6e4)%60,w=T(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),v=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(c<=0||c>=1e4?(c<0?"-":"+")+x(6,c<0?-c:c):x(4,c))+"-"+x(2,l+1)+"-"+x(2,p)+"T"+x(2,v)+":"+x(2,_)+":"+x(2,w)+"."+x(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=y.call(s),u==E)return""+s;if(u==A)return s>-1/0&&s<1/0?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==S){for(j=0,k=s.length;j0)for(r="",n>10&&(n=10);r.length=48&&o<=57||o>=97&&o<=102||o>=65&&o<=70||B();e+=G("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&o<=57){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&o<=57)&&B(),r=!1;U=48&&o<=57);U++);if(46==i.charCodeAt(U)){for(n=++U;n=48&&o<=57);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),43!=o&&45!=o||U++,n=U;n=48&&o<=57);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),","!=e&&"string"==typeof e&&"@"==(N?e.charAt(0):e[0])&&":"==J()||B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(y.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,$=""+e,n=q(J()),"$"!=J()&&B(),U=$=null,t&&y.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return t.runInContext=o,t}var i="function"==typeof e&&e.amd,a={"function":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&"object"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],5:[function(e,t,n){function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function a(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function s(){m&&g&&(m=!1,g.length?d=g.concat(d):v=-1,d.length&&u())}function u(){if(!m){var e=i(s);m=!0;for(var t=d.length;t;){for(g=d,d=[];++v1)for(var n=1;n=0&&e>1;return t?-n:n}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],10:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;p1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),C.push(n),"number"==typeof n.originalLine&&b.push(n)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)), +this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=o(t),r=o(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(y))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,i(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function d(e,t){return e===t?0:e>t?1:-1}function m(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=d(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:d(e.name,t.name)))))}n.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},n.relative=u;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},{}],13:[function(e,t,n){arguments[4][2][0].apply(n,arguments)},{dup:2}],14:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof r?n.exports=i(t("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300||"file://"===e.substr(0,7)&&r.responseText?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],r=e.split("\n"),o="",i=Math.min(t,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=n.length,l=0;l>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;a>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;i>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;r=200&&a.status<400?o(a.responseText):i(new Error("POST to "+t+" failed with status: "+a.status)))},a.open("post",t),a.setRequestHeader("Content-Type","application/json"),r&&"object"==typeof r.headers){var s=r.headers;for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==n&&null!==n&&(c.message=n),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":14,"stacktrace-gps":16}]},{},[3,4,17,18])(18)}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace.js b/dist/stacktrace.js index 4a91a5e..972651c 100644 --- a/dist/stacktrace.js +++ b/dist/stacktrace.js @@ -14,9 +14,9 @@ }(this, function ErrorStackParser(StackFrame) { 'use strict'; - var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\S+\:\d+/; - var CHROME_IE_STACK_REGEXP = /^\s*at .*(\S+\:\d+|\(native\))/m; - var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\[native code\])?$/; + var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\S+:\d+/; + var CHROME_IE_STACK_REGEXP = /^\s*at .*(\S+:\d+|\(native\))/m; + var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\[native code])?$/; return { /** @@ -44,8 +44,8 @@ return [urlLike]; } - var regExp = /(.+?)(?:\:(\d+))?(?:\:(\d+))?$/; - var parts = regExp.exec(urlLike.replace(/[\(\)]/g, '')); + var regExp = /(.+?)(?::(\d+))?(?::(\d+))?$/; + var parts = regExp.exec(urlLike.replace(/[()]/g, '')); return [parts[1], parts[2] || undefined, parts[3] || undefined]; }, @@ -57,7 +57,7 @@ return filtered.map(function(line) { if (line.indexOf('(eval ') > -1) { // Throw away eval information until we implement stacktrace.js/stackframe#8 - line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^\()]*)|(\)\,.*$)/g, ''); + line = line.replace(/eval code/g, 'eval').replace(/(\(eval at [^()]*)|(\),.*$)/g, ''); } var sanitizedLine = line.replace(/^\s+/, '').replace(/\(eval code/g, '('); @@ -92,7 +92,7 @@ return filtered.map(function(line) { // Throw away eval information until we implement stacktrace.js/stackframe#8 if (line.indexOf(' > eval') > -1) { - line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g, ':$1'); + line = line.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g, ':$1'); } if (line.indexOf('@') === -1 && line.indexOf(':') === -1) { @@ -180,11 +180,11 @@ var locationParts = this.extractLocation(tokens.pop()); var functionCall = (tokens.shift() || ''); var functionName = functionCall - .replace(//, '$2') - .replace(/\([^\)]*\)/g, '') || undefined; + .replace(//, '$2') + .replace(/\([^)]*\)/g, '') || undefined; var argsRaw; - if (functionCall.match(/\(([^\)]*)\)/)) { - argsRaw = functionCall.replace(/^[^\(]+\(([^\)]*)\)$/, '$1'); + if (functionCall.match(/\(([^)]*)\)/)) { + argsRaw = functionCall.replace(/^[^(]+\(([^)]*)\)$/, '$1'); } var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ? undefined : argsRaw.split(','); @@ -239,11 +239,10 @@ var props = booleanProps.concat(numericProps, stringProps, arrayProps); function StackFrame(obj) { - if (obj instanceof Object) { - for (var i = 0; i < props.length; i++) { - if (obj.hasOwnProperty(props[i]) && obj[props[i]] !== undefined) { - this['set' + _capitalize(props[i])](obj[props[i]]); - } + if (!obj) return; + for (var i = 0; i < props.length; i++) { + if (obj[props[i]] !== undefined) { + this['set' + _capitalize(props[i])](obj[props[i]]); } } } @@ -2579,7 +2578,8 @@ arguments[4][2][0].apply(exports,arguments) var sourceMappingUrlRegExp = /\/\/[#@] ?sourceMappingURL=([^\s'"]+)\s*$/mg; var lastSourceMappingUrl; var matchSourceMappingUrl; - while (matchSourceMappingUrl = sourceMappingUrlRegExp.exec(source)) { // jshint ignore:line + // eslint-disable-next-line no-cond-assign + while (matchSourceMappingUrl = sourceMappingUrlRegExp.exec(source)) { lastSourceMappingUrl = matchSourceMappingUrl[1]; } if (lastSourceMappingUrl) { @@ -2682,7 +2682,7 @@ arguments[4][2][0].apply(exports,arguments) * @returns {Promise} that resolves a SourceMapConsumer */ this._getSourceMapConsumer = function _getSourceMapConsumer(sourceMappingURL, defaultSourceRoot) { - return new Promise(function(resolve, reject) { + return new Promise(function(resolve) { if (this.sourceMapConsumerCache[sourceMappingURL]) { resolve(this.sourceMapConsumerCache[sourceMappingURL]); } else { @@ -2720,6 +2720,7 @@ arguments[4][2][0].apply(exports,arguments) this.findFunctionName(mappedStackFrame) .then(resolve, resolveMappedStackFrame) + // eslint-disable-next-line no-unexpected-multiline ['catch'](resolveMappedStackFrame); }.bind(this), reject); }.bind(this)); @@ -2780,8 +2781,8 @@ arguments[4][2][0].apply(exports,arguments) .then(function(sourceMapConsumer) { return _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) .then(resolve)['catch'](function() { - resolve(stackframe); - }); + resolve(stackframe); + }); }); }.bind(this), reject)['catch'](reject); }.bind(this)); @@ -2837,7 +2838,7 @@ arguments[4][2][0].apply(exports,arguments) [first, second].forEach(function(obj) { for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { + if (Object.prototype.hasOwnProperty.call(obj, prop)) { target[prop] = obj[prop]; } } @@ -3001,7 +3002,7 @@ arguments[4][2][0].apply(exports,arguments) if (requestOptions && typeof requestOptions.headers === 'object') { var headers = requestOptions.headers; for (var header in headers) { - if (headers.hasOwnProperty(header)) { + if (Object.prototype.hasOwnProperty.call(headers, header)) { req.setRequestHeader(header, headers[header]); } } @@ -3020,4 +3021,4 @@ arguments[4][2][0].apply(exports,arguments) },{"error-stack-parser":1,"stack-generator":11,"stacktrace-gps":13}]},{},[14])(14) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9lcnJvci1zdGFjay1wYXJzZXIvbm9kZV9tb2R1bGVzL3N0YWNrZnJhbWUvc3RhY2tmcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9hcnJheS1zZXQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LXZscS5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iYXNlNjQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9xdWljay1zb3J0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAtY29uc3VtZXIuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9zdGFjay1nZW5lcmF0b3Ivc3RhY2stZ2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL3N0YWNrdHJhY2UtZ3BzLmpzIiwic3RhY2t0cmFjZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFqQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUNqYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM3Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIC8vIFVuaXZlcnNhbCBNb2R1bGUgRGVmaW5pdGlvbiAoVU1EKSB0byBzdXBwb3J0IEFNRCwgQ29tbW9uSlMvTm9kZS5qcywgUmhpbm8sIGFuZCBicm93c2Vycy5cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoJ2Vycm9yLXN0YWNrLXBhcnNlcicsIFsnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc3RhY2tmcmFtZScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LkVycm9yU3RhY2tQYXJzZXIgPSBmYWN0b3J5KHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyKFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgRklSRUZPWF9TQUZBUklfU1RBQ0tfUkVHRVhQID0gLyhefEApXFxTK1xcOlxcZCsvO1xuICAgIHZhciBDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQID0gL15cXHMqYXQgLiooXFxTK1xcOlxcZCt8XFwobmF0aXZlXFwpKS9tO1xuICAgIHZhciBTQUZBUklfTkFUSVZFX0NPREVfUkVHRVhQID0gL14oZXZhbEApPyhcXFtuYXRpdmUgY29kZVxcXSk/JC87XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gRXJyb3Igb2JqZWN0LCBleHRyYWN0IHRoZSBtb3N0IGluZm9ybWF0aW9uIGZyb20gaXQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIG9iamVjdFxuICAgICAgICAgKiBAcmV0dXJuIHtBcnJheX0gb2YgU3RhY2tGcmFtZXNcbiAgICAgICAgICovXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZShlcnJvcikge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlcnJvci5zdGFja3RyYWNlICE9PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZXJyb3JbJ29wZXJhI3NvdXJjZWxvYyddICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmEoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGFjayAmJiBlcnJvci5zdGFjay5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlVjhPcklFKGVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUZGT3JTYWZhcmkoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXJzZSBnaXZlbiBFcnJvciBvYmplY3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvLyBTZXBhcmF0ZSBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycyBmcm9tIGEgc3RyaW5nIG9mIHRoZSBmb3JtOiAoVVJJOkxpbmU6Q29sdW1uKVxuICAgICAgICBleHRyYWN0TG9jYXRpb246IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJGV4dHJhY3RMb2NhdGlvbih1cmxMaWtlKSB7XG4gICAgICAgICAgICAvLyBGYWlsLWZhc3QgYnV0IHJldHVybiBsb2NhdGlvbnMgbGlrZSBcIihuYXRpdmUpXCJcbiAgICAgICAgICAgIGlmICh1cmxMaWtlLmluZGV4T2YoJzonKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3VybExpa2VdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcmVnRXhwID0gLyguKz8pKD86XFw6KFxcZCspKT8oPzpcXDooXFxkKykpPyQvO1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gcmVnRXhwLmV4ZWModXJsTGlrZS5yZXBsYWNlKC9bXFwoXFwpXS9nLCAnJykpO1xuICAgICAgICAgICAgcmV0dXJuIFtwYXJ0c1sxXSwgcGFydHNbMl0gfHwgdW5kZWZpbmVkLCBwYXJ0c1szXSB8fCB1bmRlZmluZWRdO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlVjhPcklFOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZVY4T3JJRShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCcoZXZhbCAnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgZXZhbCBpbmZvcm1hdGlvbiB1bnRpbCB3ZSBpbXBsZW1lbnQgc3RhY2t0cmFjZS5qcy9zdGFja2ZyYW1lIzhcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvZXZhbCBjb2RlL2csICdldmFsJykucmVwbGFjZSgvKFxcKGV2YWwgYXQgW15cXCgpXSopfChcXClcXCwuKiQpL2csICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHNhbml0aXplZExpbmUgPSBsaW5lLnJlcGxhY2UoL15cXHMrLywgJycpLnJlcGxhY2UoL1xcKGV2YWwgY29kZS9nLCAnKCcpO1xuXG4gICAgICAgICAgICAgICAgLy8gY2FwdHVyZSBhbmQgcHJlc2V2ZSB0aGUgcGFyZW50aGVzaXplZCBsb2NhdGlvbiBcIigvZm9vL215IGJhci5qczoxMjo4NylcIiBpblxuICAgICAgICAgICAgICAgIC8vIGNhc2UgaXQgaGFzIHNwYWNlcyBpbiBpdCwgYXMgdGhlIHN0cmluZyBpcyBzcGxpdCBvbiBcXHMrIGxhdGVyIG9uXG4gICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gc2FuaXRpemVkTGluZS5tYXRjaCgvIChcXCgoLispOihcXGQrKTooXFxkKylcXCkkKS8pO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBwYXJlbnRoZXNpemVkIGxvY2F0aW9uIGZyb20gdGhlIGxpbmUsIGlmIGl0IHdhcyBtYXRjaGVkXG4gICAgICAgICAgICAgICAgc2FuaXRpemVkTGluZSA9IGxvY2F0aW9uID8gc2FuaXRpemVkTGluZS5yZXBsYWNlKGxvY2F0aW9uWzBdLCAnJykgOiBzYW5pdGl6ZWRMaW5lO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IHNhbml0aXplZExpbmUuc3BsaXQoL1xccysvKS5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICAvLyBpZiBhIGxvY2F0aW9uIHdhcyBtYXRjaGVkLCBwYXNzIGl0IHRvIGV4dHJhY3RMb2NhdGlvbigpIG90aGVyd2lzZSBwb3AgdGhlIGxhc3QgdG9rZW5cbiAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKGxvY2F0aW9uID8gbG9jYXRpb25bMV0gOiB0b2tlbnMucG9wKCkpO1xuICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0b2tlbnMuam9pbignICcpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBbJ2V2YWwnLCAnPGFub255bW91cz4nXS5pbmRleE9mKGxvY2F0aW9uUGFydHNbMF0pID4gLTEgPyB1bmRlZmluZWQgOiBsb2NhdGlvblBhcnRzWzBdO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2NhdGlvblBhcnRzWzJdLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlRkZPclNhZmFyaTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VGRk9yU2FmYXJpKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIWxpbmUubWF0Y2goU0FGQVJJX05BVElWRV9DT0RFX1JFR0VYUCk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhyb3cgYXdheSBldmFsIGluZm9ybWF0aW9uIHVudGlsIHdlIGltcGxlbWVudCBzdGFja3RyYWNlLmpzL3N0YWNrZnJhbWUjOFxuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJyA+IGV2YWwnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoLyBsaW5lIChcXGQrKSg/OiA+IGV2YWwgbGluZSBcXGQrKSogPiBldmFsXFw6XFxkK1xcOlxcZCsvZywgJzokMScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChsaW5lLmluZGV4T2YoJ0AnKSA9PT0gLTEgJiYgbGluZS5pbmRleE9mKCc6JykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNhZmFyaSBldmFsIGZyYW1lcyBvbmx5IGhhdmUgZnVuY3Rpb24gbmFtZXMgYW5kIG5vdGhpbmcgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBsaW5lXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWVSZWdleCA9IC8oKC4qXCIuK1wiW15AXSopP1teQF0qKSg/OkApLztcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBsaW5lLm1hdGNoKGZ1bmN0aW9uTmFtZVJlZ2V4KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1hdGNoZXMgJiYgbWF0Y2hlc1sxXSA/IG1hdGNoZXNbMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24obGluZS5yZXBsYWNlKGZ1bmN0aW9uTmFtZVJlZ2V4LCAnJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbG9jYXRpb25QYXJ0c1sxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jYXRpb25QYXJ0c1syXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhKGUpIHtcbiAgICAgICAgICAgIGlmICghZS5zdGFja3RyYWNlIHx8IChlLm1lc3NhZ2UuaW5kZXhPZignXFxuJykgPiAtMSAmJlxuICAgICAgICAgICAgICAgIGUubWVzc2FnZS5zcGxpdCgnXFxuJykubGVuZ3RoID4gZS5zdGFja3RyYWNlLnNwbGl0KCdcXG4nKS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTkoZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFlLnN0YWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTEwKGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZU9wZXJhMTEoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTk6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmE5KGUpIHtcbiAgICAgICAgICAgIHZhciBsaW5lUkUgPSAvTGluZSAoXFxkKykuKnNjcmlwdCAoPzppbiApPyhcXFMrKS9pO1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gZS5tZXNzYWdlLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDIsIGxlbiA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZVJFLmV4ZWMobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZXNbaV1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcblxuICAgICAgICBwYXJzZU9wZXJhMTA6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlT3BlcmExMChlKSB7XG4gICAgICAgICAgICB2YXIgbGluZVJFID0gL0xpbmUgKFxcZCspLipzY3JpcHQgKD86aW4gKT8oXFxTKykoPzo6IEluIGZ1bmN0aW9uIChcXFMrKSk/JC9pO1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gZS5zdGFja3RyYWNlLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGxpbmVzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZVJFLmV4ZWMobGluZXNbaV0pO1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IG1hdGNoWzNdIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlOiBsaW5lc1tpXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gT3BlcmEgMTAuNjUrIEVycm9yLnN0YWNrIHZlcnkgc2ltaWxhciB0byBGRi9TYWZhcmlcbiAgICAgICAgcGFyc2VPcGVyYTExOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhMTEoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIWxpbmUubWF0Y2goRklSRUZPWF9TQUZBUklfU1RBQ0tfUkVHRVhQKSAmJiAhbGluZS5tYXRjaCgvXkVycm9yIGNyZWF0ZWQgYXQvKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gbGluZS5zcGxpdCgnQCcpO1xuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24odG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25DYWxsID0gKHRva2Vucy5zaGlmdCgpIHx8ICcnKTtcbiAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25DYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPGFub255bW91cyBmdW5jdGlvbig6IChcXHcrKSk/Pi8sICckMicpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwoW15cXCldKlxcKS9nLCAnJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzUmF3O1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkNhbGwubWF0Y2goL1xcKChbXlxcKV0qKVxcKS8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NSYXcgPSBmdW5jdGlvbkNhbGwucmVwbGFjZSgvXlteXFwoXStcXCgoW15cXCldKilcXCkkLywgJyQxJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gKGFyZ3NSYXcgPT09IHVuZGVmaW5lZCB8fCBhcmdzUmF3ID09PSAnW2FyZ3VtZW50cyBub3QgYXZhaWxhYmxlXScpID9cbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDogYXJnc1Jhdy5zcGxpdCgnLCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2tmcmFtZScsIFtdLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrRnJhbWUgPSBmYWN0b3J5KCk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbigpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgZnVuY3Rpb24gX2lzTnVtYmVyKG4pIHtcbiAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfY2FwaXRhbGl6ZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2dldHRlcihwKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3BdO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBib29sZWFuUHJvcHMgPSBbJ2lzQ29uc3RydWN0b3InLCAnaXNFdmFsJywgJ2lzTmF0aXZlJywgJ2lzVG9wbGV2ZWwnXTtcbiAgICB2YXIgbnVtZXJpY1Byb3BzID0gWydjb2x1bW5OdW1iZXInLCAnbGluZU51bWJlciddO1xuICAgIHZhciBzdHJpbmdQcm9wcyA9IFsnZmlsZU5hbWUnLCAnZnVuY3Rpb25OYW1lJywgJ3NvdXJjZSddO1xuICAgIHZhciBhcnJheVByb3BzID0gWydhcmdzJ107XG5cbiAgICB2YXIgcHJvcHMgPSBib29sZWFuUHJvcHMuY29uY2F0KG51bWVyaWNQcm9wcywgc3RyaW5nUHJvcHMsIGFycmF5UHJvcHMpO1xuXG4gICAgZnVuY3Rpb24gU3RhY2tGcmFtZShvYmopIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcHNbaV0pICYmIG9ialtwcm9wc1tpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzWydzZXQnICsgX2NhcGl0YWxpemUocHJvcHNbaV0pXShvYmpbcHJvcHNbaV1dKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBTdGFja0ZyYW1lLnByb3RvdHlwZSA9IHtcbiAgICAgICAgZ2V0QXJnczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmdzO1xuICAgICAgICB9LFxuICAgICAgICBzZXRBcmdzOiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJncyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFyZ3MgPSB2O1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldEV2YWxPcmlnaW46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZhbE9yaWdpbjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0RXZhbE9yaWdpbjogZnVuY3Rpb24odikge1xuICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBTdGFja0ZyYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmFsT3JpZ2luID0gdjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodiBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZhbE9yaWdpbiA9IG5ldyBTdGFja0ZyYW1lKHYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFdmFsIE9yaWdpbiBtdXN0IGJlIGFuIE9iamVjdCBvciBTdGFja0ZyYW1lJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gdGhpcy5nZXRGaWxlTmFtZSgpIHx8ICcnO1xuICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSB0aGlzLmdldExpbmVOdW1iZXIoKSB8fCAnJztcbiAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSB0aGlzLmdldENvbHVtbk51bWJlcigpIHx8ICcnO1xuICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRoaXMuZ2V0RnVuY3Rpb25OYW1lKCkgfHwgJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRJc0V2YWwoKSkge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tldmFsXSAoJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICc6JyArIGNvbHVtbk51bWJlciArICcpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbZXZhbF06JyArIGxpbmVOdW1iZXIgKyAnOicgKyBjb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZnVuY3Rpb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uTmFtZSArICcgKCcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnOicgKyBjb2x1bW5OdW1iZXIgKyAnKSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJzonICsgY29sdW1uTnVtYmVyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIFN0YWNrRnJhbWUuZnJvbVN0cmluZyA9IGZ1bmN0aW9uIFN0YWNrRnJhbWUkJGZyb21TdHJpbmcoc3RyKSB7XG4gICAgICAgIHZhciBhcmdzU3RhcnRJbmRleCA9IHN0ci5pbmRleE9mKCcoJyk7XG4gICAgICAgIHZhciBhcmdzRW5kSW5kZXggPSBzdHIubGFzdEluZGV4T2YoJyknKTtcblxuICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gc3RyLnN1YnN0cmluZygwLCBhcmdzU3RhcnRJbmRleCk7XG4gICAgICAgIHZhciBhcmdzID0gc3RyLnN1YnN0cmluZyhhcmdzU3RhcnRJbmRleCArIDEsIGFyZ3NFbmRJbmRleCkuc3BsaXQoJywnKTtcbiAgICAgICAgdmFyIGxvY2F0aW9uU3RyaW5nID0gc3RyLnN1YnN0cmluZyhhcmdzRW5kSW5kZXggKyAxKTtcblxuICAgICAgICBpZiAobG9jYXRpb25TdHJpbmcuaW5kZXhPZignQCcpID09PSAwKSB7XG4gICAgICAgICAgICB2YXIgcGFydHMgPSAvQCguKz8pKD86OihcXGQrKSk/KD86OihcXGQrKSk/JC8uZXhlYyhsb2NhdGlvblN0cmluZywgJycpO1xuICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gcGFydHNbMV07XG4gICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHBhcnRzWzJdO1xuICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHBhcnRzWzNdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgYXJnczogYXJncyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICBmaWxlTmFtZTogZmlsZU5hbWUsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyIHx8IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib29sZWFuUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IF9nZXR0ZXIoYm9vbGVhblByb3BzW2ldKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShib29sZWFuUHJvcHNbaV0pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBCb29sZWFuKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoYm9vbGVhblByb3BzW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bWVyaWNQcm9wcy5sZW5ndGg7IGorKykge1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnZ2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gX2dldHRlcihudW1lcmljUHJvcHNbal0pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKG51bWVyaWNQcm9wc1tqXSldID0gKGZ1bmN0aW9uKHApIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfaXNOdW1iZXIodikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihwICsgJyBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBOdW1iZXIodik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShudW1lcmljUHJvcHNbal0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3RyaW5nUHJvcHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShzdHJpbmdQcm9wc1trXSldID0gX2dldHRlcihzdHJpbmdQcm9wc1trXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUoc3RyaW5nUHJvcHNba10pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIHRoaXNbcF0gPSBTdHJpbmcodik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KShzdHJpbmdQcm9wc1trXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0YWNrRnJhbWU7XG59KSk7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgYW4gYXJyYXkgYW5kIGEgc2V0LiBBZGRpbmcgYSBuZXdcbiAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICogZWxlbWVudCBpcyBPKDEpLiBSZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBzZXQgaXMgbm90IHN1cHBvcnRlZC4gT25seVxuICogc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciBtZW1iZXJzaGlwLlxuICovXG5mdW5jdGlvbiBBcnJheVNldCgpIHtcbiAgdGhpcy5fYXJyYXkgPSBbXTtcbiAgdGhpcy5fc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgbWV0aG9kIGZvciBjcmVhdGluZyBBcnJheVNldCBpbnN0YW5jZXMgZnJvbSBhbiBleGlzdGluZyBhcnJheS5cbiAqL1xuQXJyYXlTZXQuZnJvbUFycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfZnJvbUFycmF5KGFBcnJheSwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc2V0ID0gbmV3IEFycmF5U2V0KCk7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzZXQuYWRkKGFBcnJheVtpXSwgYUFsbG93RHVwbGljYXRlcyk7XG4gIH1cbiAgcmV0dXJuIHNldDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhvdyBtYW55IHVuaXF1ZSBpdGVtcyBhcmUgaW4gdGhpcyBBcnJheVNldC4gSWYgZHVwbGljYXRlcyBoYXZlIGJlZW5cbiAqIGFkZGVkLCB0aGFuIHRob3NlIGRvIG5vdCBjb3VudCB0b3dhcmRzIHRoZSBzaXplLlxuICpcbiAqIEByZXR1cm5zIE51bWJlclxuICovXG5BcnJheVNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uIEFycmF5U2V0X3NpemUoKSB7XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9zZXQpLmxlbmd0aDtcbn07XG5cbi8qKlxuICogQWRkIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhpcyBzZXQuXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBBcnJheVNldF9hZGQoYVN0ciwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHZhciBpc0R1cGxpY2F0ZSA9IGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG4gIHZhciBpZHggPSB0aGlzLl9hcnJheS5sZW5ndGg7XG4gIGlmICghaXNEdXBsaWNhdGUgfHwgYUFsbG93RHVwbGljYXRlcykge1xuICAgIHRoaXMuX2FycmF5LnB1c2goYVN0cik7XG4gIH1cbiAgaWYgKCFpc0R1cGxpY2F0ZSkge1xuICAgIHRoaXMuX3NldFtzU3RyXSA9IGlkeDtcbiAgfVxufTtcblxuLyoqXG4gKiBJcyB0aGUgZ2l2ZW4gc3RyaW5nIGEgbWVtYmVyIG9mIHRoaXMgc2V0P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gQXJyYXlTZXRfaGFzKGFTdHIpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICByZXR1cm4gaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbn07XG5cbi8qKlxuICogV2hhdCBpcyB0aGUgaW5kZXggb2YgdGhlIGdpdmVuIHN0cmluZyBpbiB0aGUgYXJyYXk/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gQXJyYXlTZXRfaW5kZXhPZihhU3RyKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgaWYgKGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cikpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0W3NTdHJdO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignXCInICsgYVN0ciArICdcIiBpcyBub3QgaW4gdGhlIHNldC4nKTtcbn07XG5cbi8qKlxuICogV2hhdCBpcyB0aGUgZWxlbWVudCBhdCB0aGUgZ2l2ZW4gaW5kZXg/XG4gKlxuICogQHBhcmFtIE51bWJlciBhSWR4XG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uIEFycmF5U2V0X2F0KGFJZHgpIHtcbiAgaWYgKGFJZHggPj0gMCAmJiBhSWR4IDwgdGhpcy5fYXJyYXkubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FycmF5W2FJZHhdO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignTm8gZWxlbWVudCBpbmRleGVkIGJ5ICcgKyBhSWR4KTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYXJyYXkgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzZXQgKHdoaWNoIGhhcyB0aGUgcHJvcGVyIGluZGljZXNcbiAqIGluZGljYXRlZCBieSBpbmRleE9mKS4gTm90ZSB0aGF0IHRoaXMgaXMgYSBjb3B5IG9mIHRoZSBpbnRlcm5hbCBhcnJheSB1c2VkXG4gKiBmb3Igc3RvcmluZyB0aGUgbWVtYmVycyBzbyB0aGF0IG5vIG9uZSBjYW4gbWVzcyB3aXRoIGludGVybmFsIHN0YXRlLlxuICovXG5BcnJheVNldC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X3RvQXJyYXkoKSB7XG4gIHJldHVybiB0aGlzLl9hcnJheS5zbGljZSgpO1xufTtcblxuZXhwb3J0cy5BcnJheVNldCA9IEFycmF5U2V0O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqXG4gKiBCYXNlZCBvbiB0aGUgQmFzZSA2NCBWTFEgaW1wbGVtZW50YXRpb24gaW4gQ2xvc3VyZSBDb21waWxlcjpcbiAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2xvc3VyZS1jb21waWxlci9zb3VyY2UvYnJvd3NlL3RydW5rL3NyYy9jb20vZ29vZ2xlL2RlYnVnZ2luZy9zb3VyY2VtYXAvQmFzZTY0VkxRLmphdmFcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMSBUaGUgQ2xvc3VyZSBDb21waWxlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlXG4gKiBtZXQ6XG4gKlxuICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbiAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXG4gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcbiAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZFxuICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbiAqIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcbiAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLFxuICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxuICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcbiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnLi9iYXNlNjQnKTtcblxuLy8gQSBzaW5nbGUgYmFzZSA2NCBkaWdpdCBjYW4gY29udGFpbiA2IGJpdHMgb2YgZGF0YS4gRm9yIHRoZSBiYXNlIDY0IHZhcmlhYmxlXG4vLyBsZW5ndGggcXVhbnRpdGllcyB3ZSB1c2UgaW4gdGhlIHNvdXJjZSBtYXAgc3BlYywgdGhlIGZpcnN0IGJpdCBpcyB0aGUgc2lnbixcbi8vIHRoZSBuZXh0IGZvdXIgYml0cyBhcmUgdGhlIGFjdHVhbCB2YWx1ZSwgYW5kIHRoZSA2dGggYml0IGlzIHRoZVxuLy8gY29udGludWF0aW9uIGJpdC4gVGhlIGNvbnRpbnVhdGlvbiBiaXQgdGVsbHMgdXMgd2hldGhlciB0aGVyZSBhcmUgbW9yZVxuLy8gZGlnaXRzIGluIHRoaXMgdmFsdWUgZm9sbG93aW5nIHRoaXMgZGlnaXQuXG4vL1xuLy8gICBDb250aW51YXRpb25cbi8vICAgfCAgICBTaWduXG4vLyAgIHwgICAgfFxuLy8gICBWICAgIFZcbi8vICAgMTAxMDExXG5cbnZhciBWTFFfQkFTRV9TSElGVCA9IDU7XG5cbi8vIGJpbmFyeTogMTAwMDAwXG52YXIgVkxRX0JBU0UgPSAxIDw8IFZMUV9CQVNFX1NISUZUO1xuXG4vLyBiaW5hcnk6IDAxMTExMVxudmFyIFZMUV9CQVNFX01BU0sgPSBWTFFfQkFTRSAtIDE7XG5cbi8vIGJpbmFyeTogMTAwMDAwXG52YXIgVkxRX0NPTlRJTlVBVElPTl9CSVQgPSBWTFFfQkFTRTtcblxuLyoqXG4gKiBDb252ZXJ0cyBmcm9tIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgdG8gYSB2YWx1ZSB3aGVyZSB0aGUgc2lnbiBiaXQgaXNcbiAqIHBsYWNlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LiAgRm9yIGV4YW1wbGUsIGFzIGRlY2ltYWxzOlxuICogICAxIGJlY29tZXMgMiAoMTAgYmluYXJ5KSwgLTEgYmVjb21lcyAzICgxMSBiaW5hcnkpXG4gKiAgIDIgYmVjb21lcyA0ICgxMDAgYmluYXJ5KSwgLTIgYmVjb21lcyA1ICgxMDEgYmluYXJ5KVxuICovXG5mdW5jdGlvbiB0b1ZMUVNpZ25lZChhVmFsdWUpIHtcbiAgcmV0dXJuIGFWYWx1ZSA8IDBcbiAgICA/ICgoLWFWYWx1ZSkgPDwgMSkgKyAxXG4gICAgOiAoYVZhbHVlIDw8IDEpICsgMDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0byBhIHR3by1jb21wbGVtZW50IHZhbHVlIGZyb20gYSB2YWx1ZSB3aGVyZSB0aGUgc2lnbiBiaXQgaXNcbiAqIHBsYWNlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LiAgRm9yIGV4YW1wbGUsIGFzIGRlY2ltYWxzOlxuICogICAyICgxMCBiaW5hcnkpIGJlY29tZXMgMSwgMyAoMTEgYmluYXJ5KSBiZWNvbWVzIC0xXG4gKiAgIDQgKDEwMCBiaW5hcnkpIGJlY29tZXMgMiwgNSAoMTAxIGJpbmFyeSkgYmVjb21lcyAtMlxuICovXG5mdW5jdGlvbiBmcm9tVkxRU2lnbmVkKGFWYWx1ZSkge1xuICB2YXIgaXNOZWdhdGl2ZSA9IChhVmFsdWUgJiAxKSA9PT0gMTtcbiAgdmFyIHNoaWZ0ZWQgPSBhVmFsdWUgPj4gMTtcbiAgcmV0dXJuIGlzTmVnYXRpdmVcbiAgICA/IC1zaGlmdGVkXG4gICAgOiBzaGlmdGVkO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGJhc2UgNjQgVkxRIGVuY29kZWQgdmFsdWUuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gYmFzZTY0VkxRX2VuY29kZShhVmFsdWUpIHtcbiAgdmFyIGVuY29kZWQgPSBcIlwiO1xuICB2YXIgZGlnaXQ7XG5cbiAgdmFyIHZscSA9IHRvVkxRU2lnbmVkKGFWYWx1ZSk7XG5cbiAgZG8ge1xuICAgIGRpZ2l0ID0gdmxxICYgVkxRX0JBU0VfTUFTSztcbiAgICB2bHEgPj4+PSBWTFFfQkFTRV9TSElGVDtcbiAgICBpZiAodmxxID4gMCkge1xuICAgICAgLy8gVGhlcmUgYXJlIHN0aWxsIG1vcmUgZGlnaXRzIGluIHRoaXMgdmFsdWUsIHNvIHdlIG11c3QgbWFrZSBzdXJlIHRoZVxuICAgICAgLy8gY29udGludWF0aW9uIGJpdCBpcyBtYXJrZWQuXG4gICAgICBkaWdpdCB8PSBWTFFfQ09OVElOVUFUSU9OX0JJVDtcbiAgICB9XG4gICAgZW5jb2RlZCArPSBiYXNlNjQuZW5jb2RlKGRpZ2l0KTtcbiAgfSB3aGlsZSAodmxxID4gMCk7XG5cbiAgcmV0dXJuIGVuY29kZWQ7XG59O1xuXG4vKipcbiAqIERlY29kZXMgdGhlIG5leHQgYmFzZSA2NCBWTFEgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCByZXR1cm5zIHRoZVxuICogdmFsdWUgYW5kIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgdmlhIHRoZSBvdXQgcGFyYW1ldGVyLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9kZWNvZGUoYVN0ciwgYUluZGV4LCBhT3V0UGFyYW0pIHtcbiAgdmFyIHN0ckxlbiA9IGFTdHIubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gMDtcbiAgdmFyIHNoaWZ0ID0gMDtcbiAgdmFyIGNvbnRpbnVhdGlvbiwgZGlnaXQ7XG5cbiAgZG8ge1xuICAgIGlmIChhSW5kZXggPj0gc3RyTGVuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBtb3JlIGRpZ2l0cyBpbiBiYXNlIDY0IFZMUSB2YWx1ZS5cIik7XG4gICAgfVxuXG4gICAgZGlnaXQgPSBiYXNlNjQuZGVjb2RlKGFTdHIuY2hhckNvZGVBdChhSW5kZXgrKykpO1xuICAgIGlmIChkaWdpdCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmFzZTY0IGRpZ2l0OiBcIiArIGFTdHIuY2hhckF0KGFJbmRleCAtIDEpKTtcbiAgICB9XG5cbiAgICBjb250aW51YXRpb24gPSAhIShkaWdpdCAmIFZMUV9DT05USU5VQVRJT05fQklUKTtcbiAgICBkaWdpdCAmPSBWTFFfQkFTRV9NQVNLO1xuICAgIHJlc3VsdCA9IHJlc3VsdCArIChkaWdpdCA8PCBzaGlmdCk7XG4gICAgc2hpZnQgKz0gVkxRX0JBU0VfU0hJRlQ7XG4gIH0gd2hpbGUgKGNvbnRpbnVhdGlvbik7XG5cbiAgYU91dFBhcmFtLnZhbHVlID0gZnJvbVZMUVNpZ25lZChyZXN1bHQpO1xuICBhT3V0UGFyYW0ucmVzdCA9IGFJbmRleDtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBpbnRUb0NoYXJNYXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xuXG4vKipcbiAqIEVuY29kZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAwIHRvIDYzIHRvIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKG51bWJlcikge1xuICBpZiAoMCA8PSBudW1iZXIgJiYgbnVtYmVyIDwgaW50VG9DaGFyTWFwLmxlbmd0aCkge1xuICAgIHJldHVybiBpbnRUb0NoYXJNYXBbbnVtYmVyXTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzOiBcIiArIG51bWJlcik7XG59O1xuXG4vKipcbiAqIERlY29kZSBhIHNpbmdsZSBiYXNlIDY0IGNoYXJhY3RlciBjb2RlIGRpZ2l0IHRvIGFuIGludGVnZXIuIFJldHVybnMgLTEgb25cbiAqIGZhaWx1cmUuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gKGNoYXJDb2RlKSB7XG4gIHZhciBiaWdBID0gNjU7ICAgICAvLyAnQSdcbiAgdmFyIGJpZ1ogPSA5MDsgICAgIC8vICdaJ1xuXG4gIHZhciBsaXR0bGVBID0gOTc7ICAvLyAnYSdcbiAgdmFyIGxpdHRsZVogPSAxMjI7IC8vICd6J1xuXG4gIHZhciB6ZXJvID0gNDg7ICAgICAvLyAnMCdcbiAgdmFyIG5pbmUgPSA1NzsgICAgIC8vICc5J1xuXG4gIHZhciBwbHVzID0gNDM7ICAgICAvLyAnKydcbiAgdmFyIHNsYXNoID0gNDc7ICAgIC8vICcvJ1xuXG4gIHZhciBsaXR0bGVPZmZzZXQgPSAyNjtcbiAgdmFyIG51bWJlck9mZnNldCA9IDUyO1xuXG4gIC8vIDAgLSAyNTogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcbiAgaWYgKGJpZ0EgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gYmlnWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBiaWdBKTtcbiAgfVxuXG4gIC8vIDI2IC0gNTE6IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XG4gIGlmIChsaXR0bGVBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGxpdHRsZVopIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gbGl0dGxlQSArIGxpdHRsZU9mZnNldCk7XG4gIH1cblxuICAvLyA1MiAtIDYxOiAwMTIzNDU2Nzg5XG4gIGlmICh6ZXJvIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IG5pbmUpIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gemVybyArIG51bWJlck9mZnNldCk7XG4gIH1cblxuICAvLyA2MjogK1xuICBpZiAoY2hhckNvZGUgPT0gcGx1cykge1xuICAgIHJldHVybiA2MjtcbiAgfVxuXG4gIC8vIDYzOiAvXG4gIGlmIChjaGFyQ29kZSA9PSBzbGFzaCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuXG4gIC8vIEludmFsaWQgYmFzZTY0IGRpZ2l0LlxuICByZXR1cm4gLTE7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG5leHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcbmV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZSBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoLlxuICpcbiAqIEBwYXJhbSBhTG93IEluZGljZXMgaGVyZSBhbmQgbG93ZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhSGlnaCBJbmRpY2VzIGhlcmUgYW5kIGhpZ2hlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgYmVpbmcgc2VhcmNoZWQgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgbm9uLWVtcHR5IGFycmF5IGJlaW5nIHNlYXJjaGVkLlxuICogQHBhcmFtIGFDb21wYXJlIEZ1bmN0aW9uIHdoaWNoIHRha2VzIHR3byBlbGVtZW50cyBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gcmVjdXJzaXZlU2VhcmNoKGFMb3csIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICAvLyBUaGlzIGZ1bmN0aW9uIHRlcm1pbmF0ZXMgd2hlbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAvL1xuICAvLyAgIDEuIFdlIGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQgd2UgYXJlIGxvb2tpbmcgZm9yLlxuICAvL1xuICAvLyAgIDIuIFdlIGRpZCBub3QgZmluZCB0aGUgZXhhY3QgZWxlbWVudCwgYnV0IHdlIGNhbiByZXR1cm4gdGhlIGluZGV4IG9mXG4gIC8vICAgICAgdGhlIG5leHQtY2xvc2VzdCBlbGVtZW50LlxuICAvL1xuICAvLyAgIDMuIFdlIGRpZCBub3QgZmluZCB0aGUgZXhhY3QgZWxlbWVudCwgYW5kIHRoZXJlIGlzIG5vIG5leHQtY2xvc2VzdFxuICAvLyAgICAgIGVsZW1lbnQgdGhhbiB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLCBzbyB3ZSByZXR1cm4gLTEuXG4gIHZhciBtaWQgPSBNYXRoLmZsb29yKChhSGlnaCAtIGFMb3cpIC8gMikgKyBhTG93O1xuICB2YXIgY21wID0gYUNvbXBhcmUoYU5lZWRsZSwgYUhheXN0YWNrW21pZF0sIHRydWUpO1xuICBpZiAoY21wID09PSAwKSB7XG4gICAgLy8gRm91bmQgdGhlIGVsZW1lbnQgd2UgYXJlIGxvb2tpbmcgZm9yLlxuICAgIHJldHVybiBtaWQ7XG4gIH1cbiAgZWxzZSBpZiAoY21wID4gMCkge1xuICAgIC8vIE91ciBuZWVkbGUgaXMgZ3JlYXRlciB0aGFuIGFIYXlzdGFja1ttaWRdLlxuICAgIGlmIChhSGlnaCAtIG1pZCA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSB1cHBlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChtaWQsIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGV4YWN0IG5lZWRsZSBlbGVtZW50IHdhcyBub3QgZm91bmQgaW4gdGhpcyBoYXlzdGFjay4gRGV0ZXJtaW5lIGlmXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIGFIaWdoIDwgYUhheXN0YWNrLmxlbmd0aCA/IGFIaWdoIDogLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIC8vIE91ciBuZWVkbGUgaXMgbGVzcyB0aGFuIGFIYXlzdGFja1ttaWRdLlxuICAgIGlmIChtaWQgLSBhTG93ID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIGxvd2VyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKGFMb3csIG1pZCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhTG93IDwgMCA/IC0xIDogYUxvdztcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2ggd2hpY2ggd2lsbCBhbHdheXMgdHJ5IGFuZCByZXR1cm5cbiAqIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBlbGVtZW50IGlmIHRoZXJlIGlzIG5vIGV4YWN0IGhpdC4gVGhpcyBpcyBiZWNhdXNlXG4gKiBtYXBwaW5ncyBiZXR3ZWVuIG9yaWdpbmFsIGFuZCBnZW5lcmF0ZWQgbGluZS9jb2wgcGFpcnMgYXJlIHNpbmdsZSBwb2ludHMsXG4gKiBhbmQgdGhlcmUgaXMgYW4gaW1wbGljaXQgcmVnaW9uIGJldHdlZW4gZWFjaCBvZiB0aGVtLCBzbyBhIG1pc3MganVzdCBtZWFuc1xuICogdGhhdCB5b3UgYXJlbid0IG9uIHRoZSB2ZXJ5IHN0YXJ0IG9mIGEgcmVnaW9uLlxuICpcbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IHlvdSBhcmUgbG9va2luZyBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBhcnJheSB0aGF0IGlzIGJlaW5nIHNlYXJjaGVkLlxuICogQHBhcmFtIGFDb21wYXJlIEEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgdGhlIG5lZWRsZSBhbmQgYW4gZWxlbWVudCBpbiB0aGVcbiAqICAgICBhcnJheSBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbmVlZGxlIGlzIGxlc3NcbiAqICAgICB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIHRoZSBlbGVtZW50LCByZXNwZWN0aXZlbHkuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKi9cbmV4cG9ydHMuc2VhcmNoID0gZnVuY3Rpb24gc2VhcmNoKGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIGlmIChhSGF5c3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgdmFyIGluZGV4ID0gcmVjdXJzaXZlU2VhcmNoKC0xLCBhSGF5c3RhY2subGVuZ3RoLCBhTmVlZGxlLCBhSGF5c3RhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ29tcGFyZSwgYUJpYXMgfHwgZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvLyBXZSBoYXZlIGZvdW5kIGVpdGhlciB0aGUgZXhhY3QgZWxlbWVudCwgb3IgdGhlIG5leHQtY2xvc2VzdCBlbGVtZW50IHRoYW5cbiAgLy8gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci4gSG93ZXZlciwgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgc3VjaFxuICAvLyBlbGVtZW50LiBNYWtlIHN1cmUgd2UgYWx3YXlzIHJldHVybiB0aGUgc21hbGxlc3Qgb2YgdGhlc2UuXG4gIHdoaWxlIChpbmRleCAtIDEgPj0gMCkge1xuICAgIGlmIChhQ29tcGFyZShhSGF5c3RhY2tbaW5kZXhdLCBhSGF5c3RhY2tbaW5kZXggLSAxXSwgdHJ1ZSkgIT09IDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAtLWluZGV4O1xuICB9XG5cbiAgcmV0dXJuIGluZGV4O1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLy8gSXQgdHVybnMgb3V0IHRoYXQgc29tZSAobW9zdD8pIEphdmFTY3JpcHQgZW5naW5lcyBkb24ndCBzZWxmLWhvc3Rcbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAuIFRoaXMgbWFrZXMgc2Vuc2UgYmVjYXVzZSBDKysgd2lsbCBsaWtlbHkgcmVtYWluXG4vLyBmYXN0ZXIgdGhhbiBKUyB3aGVuIGRvaW5nIHJhdyBDUFUtaW50ZW5zaXZlIHNvcnRpbmcuIEhvd2V2ZXIsIHdoZW4gdXNpbmcgYVxuLy8gY3VzdG9tIGNvbXBhcmF0b3IgZnVuY3Rpb24sIGNhbGxpbmcgYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aGUgVk0ncyBDKysgYW5kXG4vLyBKSVQnZCBKUyBpcyByYXRoZXIgc2xvdyAqYW5kKiBsb3NlcyBKSVQgdHlwZSBpbmZvcm1hdGlvbiwgcmVzdWx0aW5nIGluXG4vLyB3b3JzZSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIGNvbXBhcmF0b3IgZnVuY3Rpb24gdGhhbiB3b3VsZCBiZSBvcHRpbWFsLiBJblxuLy8gZmFjdCwgd2hlbiBzb3J0aW5nIHdpdGggYSBjb21wYXJhdG9yLCB0aGVzZSBjb3N0cyBvdXR3ZWlnaCB0aGUgYmVuZWZpdHMgb2Zcbi8vIHNvcnRpbmcgaW4gQysrLiBCeSB1c2luZyBvdXIgb3duIEpTLWltcGxlbWVudGVkIFF1aWNrIFNvcnQgKGJlbG93KSwgd2UgZ2V0XG4vLyBhIH4zNTAwbXMgbWVhbiBzcGVlZC11cCBpbiBgYmVuY2gvYmVuY2guaHRtbGAuXG5cbi8qKlxuICogU3dhcCB0aGUgZWxlbWVudHMgaW5kZXhlZCBieSBgeGAgYW5kIGB5YCBpbiB0aGUgYXJyYXkgYGFyeWAuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gKiAgICAgICAgVGhlIGFycmF5LlxuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGl0ZW0uXG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogICAgICAgIFRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIGl0ZW0uXG4gKi9cbmZ1bmN0aW9uIHN3YXAoYXJ5LCB4LCB5KSB7XG4gIHZhciB0ZW1wID0gYXJ5W3hdO1xuICBhcnlbeF0gPSBhcnlbeV07XG4gIGFyeVt5XSA9IHRlbXA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIHdpdGhpbiB0aGUgcmFuZ2UgYGxvdyAuLiBoaWdoYCBpbmNsdXNpdmUuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGxvd1xuICogICAgICAgIFRoZSBsb3dlciBib3VuZCBvbiB0aGUgcmFuZ2UuXG4gKiBAcGFyYW0ge051bWJlcn0gaGlnaFxuICogICAgICAgIFRoZSB1cHBlciBib3VuZCBvbiB0aGUgcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbUludEluUmFuZ2UobG93LCBoaWdoKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKGxvdyArIChNYXRoLnJhbmRvbSgpICogKGhpZ2ggLSBsb3cpKSk7XG59XG5cbi8qKlxuICogVGhlIFF1aWNrIFNvcnQgYWxnb3JpdGhtLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICogQHBhcmFtIHtOdW1iZXJ9IHBcbiAqICAgICAgICBTdGFydCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSByXG4gKiAgICAgICAgRW5kIGluZGV4IG9mIHRoZSBhcnJheVxuICovXG5mdW5jdGlvbiBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHAsIHIpIHtcbiAgLy8gSWYgb3VyIGxvd2VyIGJvdW5kIGlzIGxlc3MgdGhhbiBvdXIgdXBwZXIgYm91bmQsIHdlICgxKSBwYXJ0aXRpb24gdGhlXG4gIC8vIGFycmF5IGludG8gdHdvIHBpZWNlcyBhbmQgKDIpIHJlY3Vyc2Ugb24gZWFjaCBoYWxmLiBJZiBpdCBpcyBub3QsIHRoaXMgaXNcbiAgLy8gdGhlIGVtcHR5IGFycmF5IGFuZCBvdXIgYmFzZSBjYXNlLlxuXG4gIGlmIChwIDwgcikge1xuICAgIC8vICgxKSBQYXJ0aXRpb25pbmcuXG4gICAgLy9cbiAgICAvLyBUaGUgcGFydGl0aW9uaW5nIGNob29zZXMgYSBwaXZvdCBiZXR3ZWVuIGBwYCBhbmQgYHJgIGFuZCBtb3ZlcyBhbGxcbiAgICAvLyBlbGVtZW50cyB0aGF0IGFyZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBpdm90IHRvIHRoZSBiZWZvcmUgaXQsIGFuZFxuICAgIC8vIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBhcmUgZ3JlYXRlciB0aGFuIGl0IGFmdGVyIGl0LiBUaGUgZWZmZWN0IGlzIHRoYXRcbiAgICAvLyBvbmNlIHBhcnRpdGlvbiBpcyBkb25lLCB0aGUgcGl2b3QgaXMgaW4gdGhlIGV4YWN0IHBsYWNlIGl0IHdpbGwgYmUgd2hlblxuICAgIC8vIHRoZSBhcnJheSBpcyBwdXQgaW4gc29ydGVkIG9yZGVyLCBhbmQgaXQgd2lsbCBub3QgbmVlZCB0byBiZSBtb3ZlZFxuICAgIC8vIGFnYWluLiBUaGlzIHJ1bnMgaW4gTyhuKSB0aW1lLlxuXG4gICAgLy8gQWx3YXlzIGNob29zZSBhIHJhbmRvbSBwaXZvdCBzbyB0aGF0IGFuIGlucHV0IGFycmF5IHdoaWNoIGlzIHJldmVyc2VcbiAgICAvLyBzb3J0ZWQgZG9lcyBub3QgY2F1c2UgTyhuXjIpIHJ1bm5pbmcgdGltZS5cbiAgICB2YXIgcGl2b3RJbmRleCA9IHJhbmRvbUludEluUmFuZ2UocCwgcik7XG4gICAgdmFyIGkgPSBwIC0gMTtcblxuICAgIHN3YXAoYXJ5LCBwaXZvdEluZGV4LCByKTtcbiAgICB2YXIgcGl2b3QgPSBhcnlbcl07XG5cbiAgICAvLyBJbW1lZGlhdGVseSBhZnRlciBgamAgaXMgaW5jcmVtZW50ZWQgaW4gdGhpcyBsb29wLCB0aGUgZm9sbG93aW5nIGhvbGRcbiAgICAvLyB0cnVlOlxuICAgIC8vXG4gICAgLy8gICAqIEV2ZXJ5IGVsZW1lbnQgaW4gYGFyeVtwIC4uIGldYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBpdm90LlxuICAgIC8vXG4gICAgLy8gICAqIEV2ZXJ5IGVsZW1lbnQgaW4gYGFyeVtpKzEgLi4gai0xXWAgaXMgZ3JlYXRlciB0aGFuIHRoZSBwaXZvdC5cbiAgICBmb3IgKHZhciBqID0gcDsgaiA8IHI7IGorKykge1xuICAgICAgaWYgKGNvbXBhcmF0b3IoYXJ5W2pdLCBwaXZvdCkgPD0gMCkge1xuICAgICAgICBpICs9IDE7XG4gICAgICAgIHN3YXAoYXJ5LCBpLCBqKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2FwKGFyeSwgaSArIDEsIGopO1xuICAgIHZhciBxID0gaSArIDE7XG5cbiAgICAvLyAoMikgUmVjdXJzZSBvbiBlYWNoIGhhbGYuXG5cbiAgICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHAsIHEgLSAxKTtcbiAgICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHEgKyAxLCByKTtcbiAgfVxufVxuXG4vKipcbiAqIFNvcnQgdGhlIGdpdmVuIGFycmF5IGluLXBsYWNlIHdpdGggdGhlIGdpdmVuIGNvbXBhcmF0b3IgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gKiAgICAgICAgQW4gYXJyYXkgdG8gc29ydC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXBhcmF0b3JcbiAqICAgICAgICBGdW5jdGlvbiB0byB1c2UgdG8gY29tcGFyZSB0d28gaXRlbXMuXG4gKi9cbmV4cG9ydHMucXVpY2tTb3J0ID0gZnVuY3Rpb24gKGFyeSwgY29tcGFyYXRvcikge1xuICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIDAsIGFyeS5sZW5ndGggLSAxKTtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG52YXIgYmluYXJ5U2VhcmNoID0gcmVxdWlyZSgnLi9iaW5hcnktc2VhcmNoJyk7XG52YXIgQXJyYXlTZXQgPSByZXF1aXJlKCcuL2FycmF5LXNldCcpLkFycmF5U2V0O1xudmFyIGJhc2U2NFZMUSA9IHJlcXVpcmUoJy4vYmFzZTY0LXZscScpO1xudmFyIHF1aWNrU29ydCA9IHJlcXVpcmUoJy4vcXVpY2stc29ydCcpLnF1aWNrU29ydDtcblxuZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICByZXR1cm4gc291cmNlTWFwLnNlY3Rpb25zICE9IG51bGxcbiAgICA/IG5ldyBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwKVxuICAgIDogbmV3IEJhc2ljU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwKTtcbn1cblxuU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcCA9IGZ1bmN0aW9uKGFTb3VyY2VNYXApIHtcbiAgcmV0dXJuIEJhc2ljU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKTtcbn1cblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8vIGBfX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmQgYF9fb3JpZ2luYWxNYXBwaW5nc2AgYXJlIGFycmF5cyB0aGF0IGhvbGQgdGhlXG4vLyBwYXJzZWQgbWFwcGluZyBjb29yZGluYXRlcyBmcm9tIHRoZSBzb3VyY2UgbWFwJ3MgXCJtYXBwaW5nc1wiIGF0dHJpYnV0ZS4gVGhleVxuLy8gYXJlIGxhemlseSBpbnN0YW50aWF0ZWQsIGFjY2Vzc2VkIHZpYSB0aGUgYF9nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGdldHRlcnMgcmVzcGVjdGl2ZWx5LCBhbmQgd2Ugb25seSBwYXJzZSB0aGUgbWFwcGluZ3Ncbi8vIGFuZCBjcmVhdGUgdGhlc2UgYXJyYXlzIG9uY2UgcXVlcmllZCBmb3IgYSBzb3VyY2UgbG9jYXRpb24uIFdlIGp1bXAgdGhyb3VnaFxuLy8gdGhlc2UgaG9vcHMgYmVjYXVzZSB0aGVyZSBjYW4gYmUgbWFueSB0aG91c2FuZHMgb2YgbWFwcGluZ3MsIGFuZCBwYXJzaW5nXG4vLyB0aGVtIGlzIGV4cGVuc2l2ZSwgc28gd2Ugb25seSB3YW50IHRvIGRvIGl0IGlmIHdlIG11c3QuXG4vL1xuLy8gRWFjaCBvYmplY3QgaW4gdGhlIGFycmF5cyBpcyBvZiB0aGUgZm9ybTpcbi8vXG4vLyAgICAge1xuLy8gICAgICAgZ2VuZXJhdGVkTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIGdlbmVyYXRlZENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgc291cmNlOiBUaGUgcGF0aCB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUgdGhhdCBnZW5lcmF0ZWQgdGhpc1xuLy8gICAgICAgICAgICAgICBjaHVuayBvZiBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxMaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4vLyAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBvcmlnaW5hbENvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSB0aGF0XG4vLyAgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbCBzeW1ib2wgd2hpY2ggZ2VuZXJhdGVkIHRoaXMgY2h1bmsgb2Zcbi8vICAgICAgICAgICAgIGNvZGUuXG4vLyAgICAgfVxuLy9cbi8vIEFsbCBwcm9wZXJ0aWVzIGV4Y2VwdCBmb3IgYGdlbmVyYXRlZExpbmVgIGFuZCBgZ2VuZXJhdGVkQ29sdW1uYCBjYW4gYmVcbi8vIGBudWxsYC5cbi8vXG4vLyBgX2dlbmVyYXRlZE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zLlxuLy9cbi8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zLlxuXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IG51bGw7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnX2dlbmVyYXRlZE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncykge1xuICAgICAgdGhpcy5fcGFyc2VNYXBwaW5ncyh0aGlzLl9tYXBwaW5ncywgdGhpcy5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzO1xuICB9XG59KTtcblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG51bGw7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnX29yaWdpbmFsTWFwcGluZ3MnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzO1xuICB9XG59KTtcblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfY2hhcklzTWFwcGluZ1NlcGFyYXRvcihhU3RyLCBpbmRleCkge1xuICAgIHZhciBjID0gYVN0ci5jaGFyQXQoaW5kZXgpO1xuICAgIHJldHVybiBjID09PSBcIjtcIiB8fCBjID09PSBcIixcIjtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IF9wYXJzZU1hcHBpbmdzXCIpO1xuICB9O1xuXG5Tb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVIgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVIgPSAyO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5Tb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGVhY2ggbWFwcGluZyBiZXR3ZWVuIGFuIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiBhbmQgYVxuICogZ2VuZXJhdGVkIGxpbmUvY29sdW1uIGluIHRoaXMgc291cmNlIG1hcC5cbiAqXG4gKiBAcGFyYW0gRnVuY3Rpb24gYUNhbGxiYWNrXG4gKiAgICAgICAgVGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggZWFjaCBtYXBwaW5nLlxuICogQHBhcmFtIE9iamVjdCBhQ29udGV4dFxuICogICAgICAgIE9wdGlvbmFsLiBJZiBzcGVjaWZpZWQsIHRoaXMgb2JqZWN0IHdpbGwgYmUgdGhlIHZhbHVlIG9mIGB0aGlzYCBldmVyeVxuICogICAgICAgIHRpbWUgdGhhdCBgYUNhbGxiYWNrYCBpcyBjYWxsZWQuXG4gKiBAcGFyYW0gYU9yZGVyXG4gKiAgICAgICAgRWl0aGVyIGBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVJgIG9yXG4gKiAgICAgICAgYFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSYC4gU3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgdG9cbiAqICAgICAgICBpdGVyYXRlIG92ZXIgdGhlIG1hcHBpbmdzIHNvcnRlZCBieSB0aGUgZ2VuZXJhdGVkIGZpbGUncyBsaW5lL2NvbHVtblxuICogICAgICAgIG9yZGVyIG9yIHRoZSBvcmlnaW5hbCdzIHNvdXJjZS9saW5lL2NvbHVtbiBvcmRlciwgcmVzcGVjdGl2ZWx5LiBEZWZhdWx0cyB0b1xuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVJgLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZWFjaE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9lYWNoTWFwcGluZyhhQ2FsbGJhY2ssIGFDb250ZXh0LCBhT3JkZXIpIHtcbiAgICB2YXIgY29udGV4dCA9IGFDb250ZXh0IHx8IG51bGw7XG4gICAgdmFyIG9yZGVyID0gYU9yZGVyIHx8IFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUjtcblxuICAgIHZhciBtYXBwaW5ncztcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XG4gICAgY2FzZSBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUjpcbiAgICAgIG1hcHBpbmdzID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG9yZGVyIG9mIGl0ZXJhdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZVJvb3QgPSB0aGlzLnNvdXJjZVJvb3Q7XG4gICAgbWFwcGluZ3MubWFwKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICB2YXIgc291cmNlID0gbWFwcGluZy5zb3VyY2UgPT09IG51bGwgPyBudWxsIDogdGhpcy5fc291cmNlcy5hdChtYXBwaW5nLnNvdXJjZSk7XG4gICAgICBpZiAoc291cmNlICE9IG51bGwgJiYgc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbixcbiAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgb3JpZ2luYWxDb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sXG4gICAgICAgIG5hbWU6IG1hcHBpbmcubmFtZSA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpXG4gICAgICB9O1xuICAgIH0sIHRoaXMpLmZvckVhY2goYUNhbGxiYWNrLCBjb250ZXh0KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwcm92aWRlZC4gSWYgbm8gY29sdW1uIGlzIHByb3ZpZGVkLCByZXR1cm5zIGFsbCBtYXBwaW5nc1xuICogY29ycmVzcG9uZGluZyB0byBhIGVpdGhlciB0aGUgbGluZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciBvciB0aGUgbmV4dFxuICogY2xvc2VzdCBsaW5lIHRoYXQgaGFzIGFueSBtYXBwaW5ncy4gT3RoZXJ3aXNlLCByZXR1cm5zIGFsbCBtYXBwaW5nc1xuICogY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gbGluZSBhbmQgZWl0aGVyIHRoZSBjb2x1bW4gd2UgYXJlIHNlYXJjaGluZyBmb3JcbiAqIG9yIHRoZSBuZXh0IGNsb3Nlc3QgY29sdW1uIHRoYXQgaGFzIGFueSBvZmZzZXRzLlxuICpcbiAqIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IE9wdGlvbmFsLiB0aGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBhcnJheSBvZiBvYmplY3RzIGlzIHJldHVybmVkLCBlYWNoIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmFsbEdlbmVyYXRlZFBvc2l0aW9uc0ZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2FsbEdlbmVyYXRlZFBvc2l0aW9uc0ZvcihhQXJncykge1xuICAgIHZhciBsaW5lID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyk7XG5cbiAgICAvLyBXaGVuIHRoZXJlIGlzIG5vIGV4YWN0IG1hdGNoLCBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmdcbiAgICAvLyByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBtYXBwaW5nIGxlc3MgdGhhbiB0aGUgbmVlZGxlLiBCeVxuICAgIC8vIHNldHRpbmcgbmVlZGxlLm9yaWdpbmFsQ29sdW1uIHRvIDAsIHdlIHRodXMgZmluZCB0aGUgbGFzdCBtYXBwaW5nIGZvclxuICAgIC8vIHRoZSBnaXZlbiBsaW5lLCBwcm92aWRlZCBzdWNoIGEgbWFwcGluZyBleGlzdHMuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKSxcbiAgICAgIG9yaWdpbmFsTGluZTogbGluZSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicsIDApXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgbmVlZGxlLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBuZWVkbGUuc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhuZWVkbGUuc291cmNlKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBuZWVkbGUuc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKG5lZWRsZS5zb3VyY2UpO1xuXG4gICAgdmFyIG1hcHBpbmdzID0gW107XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhuZWVkbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsTGluZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JpZ2luYWxDb2x1bW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCk7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChhQXJncy5jb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgb3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG5cbiAgICAgICAgLy8gSXRlcmF0ZSB1bnRpbCBlaXRoZXIgd2UgcnVuIG91dCBvZiBtYXBwaW5ncywgb3Igd2UgcnVuIGludG9cbiAgICAgICAgLy8gYSBtYXBwaW5nIGZvciBhIGRpZmZlcmVudCBsaW5lIHRoYW4gdGhlIG9uZSB3ZSBmb3VuZC4gU2luY2VcbiAgICAgICAgLy8gbWFwcGluZ3MgYXJlIHNvcnRlZCwgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGZpbmQgYWxsIG1hcHBpbmdzIGZvclxuICAgICAgICAvLyB0aGUgbGluZSB3ZSBmb3VuZC5cbiAgICAgICAgd2hpbGUgKG1hcHBpbmcgJiYgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IG9yaWdpbmFsTGluZSkge1xuICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbKytpbmRleF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBvcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgLy8gSXRlcmF0ZSB1bnRpbCBlaXRoZXIgd2UgcnVuIG91dCBvZiBtYXBwaW5ncywgb3Igd2UgcnVuIGludG9cbiAgICAgICAgLy8gYSBtYXBwaW5nIGZvciBhIGRpZmZlcmVudCBsaW5lIHRoYW4gdGhlIG9uZSB3ZSB3ZXJlIHNlYXJjaGluZyBmb3IuXG4gICAgICAgIC8vIFNpbmNlIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmXG4gICAgICAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gbGluZSAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9PSBvcmlnaW5hbENvbHVtbikge1xuICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbKytpbmRleF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWFwcGluZ3M7XG4gIH07XG5cbmV4cG9ydHMuU291cmNlTWFwQ29uc3VtZXIgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBBIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBhcnNlZCBzb3VyY2UgbWFwIHdoaWNoIHdlIGNhblxuICogcXVlcnkgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBmaWxlIHBvc2l0aW9ucyBieSBnaXZpbmcgaXQgYSBmaWxlXG4gKiBwb3NpdGlvbiBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqXG4gKiBUaGUgb25seSBwYXJhbWV0ZXIgaXMgdGhlIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3JcbiAqIGFscmVhZHkgcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYywgc291cmNlIG1hcHMgaGF2ZSB0aGVcbiAqIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICpcbiAqICAgLSB2ZXJzaW9uOiBXaGljaCB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwIHNwZWMgdGhpcyBtYXAgaXMgZm9sbG93aW5nLlxuICogICAtIHNvdXJjZXM6IEFuIGFycmF5IG9mIFVSTHMgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAqICAgLSBuYW1lczogQW4gYXJyYXkgb2YgaWRlbnRpZmllcnMgd2hpY2ggY2FuIGJlIHJlZmVycmVuY2VkIGJ5IGluZGl2aWR1YWwgbWFwcGluZ3MuXG4gKiAgIC0gc291cmNlUm9vdDogT3B0aW9uYWwuIFRoZSBVUkwgcm9vdCBmcm9tIHdoaWNoIGFsbCBzb3VyY2VzIGFyZSByZWxhdGl2ZS5cbiAqICAgLSBzb3VyY2VzQ29udGVudDogT3B0aW9uYWwuIEFuIGFycmF5IG9mIGNvbnRlbnRzIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbWFwcGluZ3M6IEEgc3RyaW5nIG9mIGJhc2U2NCBWTFFzIHdoaWNoIGNvbnRhaW4gdGhlIGFjdHVhbCBtYXBwaW5ncy5cbiAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gKlxuICogSGVyZSBpcyBhbiBleGFtcGxlIHNvdXJjZSBtYXAsIHRha2VuIGZyb20gdGhlIHNvdXJjZSBtYXAgc3BlY1swXTpcbiAqXG4gKiAgICAge1xuICogICAgICAgdmVyc2lvbiA6IDMsXG4gKiAgICAgICBmaWxlOiBcIm91dC5qc1wiLFxuICogICAgICAgc291cmNlUm9vdCA6IFwiXCIsXG4gKiAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAqICAgICAgIG1hcHBpbmdzOiBcIkFBLEFCOztBQkNERTtcIlxuICogICAgIH1cbiAqXG4gKiBbMF06IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVUxUkdBZWhRd1J5cFVUb3ZGMUtSbHBpT0Z6ZTBiLV8yZ2M2ZkFIMEtZMGsvZWRpdD9wbGk9MSNcbiAqL1xuZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgfVxuXG4gIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICB2YXIgc291cmNlcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXMnKTtcbiAgLy8gU2FzcyAzLjMgbGVhdmVzIG91dCB0aGUgJ25hbWVzJyBhcnJheSwgc28gd2UgZGV2aWF0ZSBmcm9tIHRoZSBzcGVjICh3aGljaFxuICAvLyByZXF1aXJlcyB0aGUgYXJyYXkpIHRvIHBsYXkgbmljZSBoZXJlLlxuICB2YXIgbmFtZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICduYW1lcycsIFtdKTtcbiAgdmFyIHNvdXJjZVJvb3QgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VSb290JywgbnVsbCk7XG4gIHZhciBzb3VyY2VzQ29udGVudCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZXNDb250ZW50JywgbnVsbCk7XG4gIHZhciBtYXBwaW5ncyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ21hcHBpbmdzJyk7XG4gIHZhciBmaWxlID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnZmlsZScsIG51bGwpO1xuXG4gIC8vIE9uY2UgYWdhaW4sIFNhc3MgZGV2aWF0ZXMgZnJvbSB0aGUgc3BlYyBhbmQgc3VwcGxpZXMgdGhlIHZlcnNpb24gYXMgYVxuICAvLyBzdHJpbmcgcmF0aGVyIHRoYW4gYSBudW1iZXIsIHNvIHdlIHVzZSBsb29zZSBlcXVhbGl0eSBjaGVja2luZyBoZXJlLlxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICBzb3VyY2VzID0gc291cmNlc1xuICAgIC5tYXAoU3RyaW5nKVxuICAgIC8vIFNvbWUgc291cmNlIG1hcHMgcHJvZHVjZSByZWxhdGl2ZSBzb3VyY2UgcGF0aHMgbGlrZSBcIi4vZm9vLmpzXCIgaW5zdGVhZCBvZlxuICAgIC8vIFwiZm9vLmpzXCIuICBOb3JtYWxpemUgdGhlc2UgZmlyc3Qgc28gdGhhdCBmdXR1cmUgY29tcGFyaXNvbnMgd2lsbCBzdWNjZWVkLlxuICAgIC8vIFNlZSBidWd6aWwubGEvMTA5MDc2OC5cbiAgICAubWFwKHV0aWwubm9ybWFsaXplKVxuICAgIC8vIEFsd2F5cyBlbnN1cmUgdGhhdCBhYnNvbHV0ZSBzb3VyY2VzIGFyZSBpbnRlcm5hbGx5IHN0b3JlZCByZWxhdGl2ZSB0b1xuICAgIC8vIHRoZSBzb3VyY2Ugcm9vdCwgaWYgdGhlIHNvdXJjZSByb290IGlzIGFic29sdXRlLiBOb3QgZG9pbmcgdGhpcyB3b3VsZFxuICAgIC8vIGJlIHBhcnRpY3VsYXJseSBwcm9ibGVtYXRpYyB3aGVuIHRoZSBzb3VyY2Ugcm9vdCBpcyBhIHByZWZpeCBvZiB0aGVcbiAgICAvLyBzb3VyY2UgKHZhbGlkLCBidXQgd2h5Pz8pLiBTZWUgZ2l0aHViIGlzc3VlICMxOTkgYW5kIGJ1Z3ppbC5sYS8xMTg4OTgyLlxuICAgIC5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIHNvdXJjZVJvb3QgJiYgdXRpbC5pc0Fic29sdXRlKHNvdXJjZVJvb3QpICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2UpXG4gICAgICAgID8gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2UpXG4gICAgICAgIDogc291cmNlO1xuICAgIH0pO1xuXG4gIC8vIFBhc3MgYHRydWVgIGJlbG93IHRvIGFsbG93IGR1cGxpY2F0ZSBuYW1lcyBhbmQgc291cmNlcy4gV2hpbGUgc291cmNlIG1hcHNcbiAgLy8gYXJlIGludGVuZGVkIHRvIGJlIGNvbXByZXNzZWQgYW5kIGRlZHVwbGljYXRlZCwgdGhlIFR5cGVTY3JpcHQgY29tcGlsZXJcbiAgLy8gc29tZXRpbWVzIGdlbmVyYXRlcyBzb3VyY2UgbWFwcyB3aXRoIGR1cGxpY2F0ZXMgaW4gdGhlbS4gU2VlIEdpdGh1YiBpc3N1ZVxuICAvLyAjNzIgYW5kIGJ1Z3ppbC5sYS84ODk0OTIuXG4gIHRoaXMuX25hbWVzID0gQXJyYXlTZXQuZnJvbUFycmF5KG5hbWVzLm1hcChTdHJpbmcpLCB0cnVlKTtcbiAgdGhpcy5fc291cmNlcyA9IEFycmF5U2V0LmZyb21BcnJheShzb3VyY2VzLCB0cnVlKTtcblxuICB0aGlzLnNvdXJjZVJvb3QgPSBzb3VyY2VSb290O1xuICB0aGlzLnNvdXJjZXNDb250ZW50ID0gc291cmNlc0NvbnRlbnQ7XG4gIHRoaXMuX21hcHBpbmdzID0gbWFwcGluZ3M7XG4gIHRoaXMuZmlsZSA9IGZpbGU7XG59XG5cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29uc3VtZXIgPSBTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBDcmVhdGUgYSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGZyb20gYSBTb3VyY2VNYXBHZW5lcmF0b3IuXG4gKlxuICogQHBhcmFtIFNvdXJjZU1hcEdlbmVyYXRvciBhU291cmNlTWFwXG4gKiAgICAgICAgVGhlIHNvdXJjZSBtYXAgdGhhdCB3aWxsIGJlIGNvbnN1bWVkLlxuICogQHJldHVybnMgQmFzaWNTb3VyY2VNYXBDb25zdW1lclxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9mcm9tU291cmNlTWFwKGFTb3VyY2VNYXApIHtcbiAgICB2YXIgc21jID0gT2JqZWN0LmNyZWF0ZShCYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5cbiAgICB2YXIgbmFtZXMgPSBzbWMuX25hbWVzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX25hbWVzLnRvQXJyYXkoKSwgdHJ1ZSk7XG4gICAgdmFyIHNvdXJjZXMgPSBzbWMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fc291cmNlcy50b0FycmF5KCksIHRydWUpO1xuICAgIHNtYy5zb3VyY2VSb290ID0gYVNvdXJjZU1hcC5fc291cmNlUm9vdDtcbiAgICBzbWMuc291cmNlc0NvbnRlbnQgPSBhU291cmNlTWFwLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KHNtYy5fc291cmNlcy50b0FycmF5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWMuc291cmNlUm9vdCk7XG4gICAgc21jLmZpbGUgPSBhU291cmNlTWFwLl9maWxlO1xuXG4gICAgLy8gQmVjYXVzZSB3ZSBhcmUgbW9kaWZ5aW5nIHRoZSBlbnRyaWVzIChieSBjb252ZXJ0aW5nIHN0cmluZyBzb3VyY2VzIGFuZFxuICAgIC8vIG5hbWVzIHRvIGluZGljZXMgaW50byB0aGUgc291cmNlcyBhbmQgbmFtZXMgQXJyYXlTZXRzKSwgd2UgaGF2ZSB0byBtYWtlXG4gICAgLy8gYSBjb3B5IG9mIHRoZSBlbnRyeSBvciBlbHNlIGJhZCB0aGluZ3MgaGFwcGVuLiBTaGFyZWQgbXV0YWJsZSBzdGF0ZVxuICAgIC8vIHN0cmlrZXMgYWdhaW4hIFNlZSBnaXRodWIgaXNzdWUgIzE5MS5cblxuICAgIHZhciBnZW5lcmF0ZWRNYXBwaW5ncyA9IGFTb3VyY2VNYXAuX21hcHBpbmdzLnRvQXJyYXkoKS5zbGljZSgpO1xuICAgIHZhciBkZXN0R2VuZXJhdGVkTWFwcGluZ3MgPSBzbWMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBkZXN0T3JpZ2luYWxNYXBwaW5ncyA9IHNtYy5fX29yaWdpbmFsTWFwcGluZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNyY01hcHBpbmcgPSBnZW5lcmF0ZWRNYXBwaW5nc1tpXTtcbiAgICAgIHZhciBkZXN0TWFwcGluZyA9IG5ldyBNYXBwaW5nO1xuICAgICAgZGVzdE1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9IHNyY01hcHBpbmcuZ2VuZXJhdGVkTGluZTtcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHNyY01hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICBpZiAoc3JjTWFwcGluZy5zb3VyY2UpIHtcbiAgICAgICAgZGVzdE1hcHBpbmcuc291cmNlID0gc291cmNlcy5pbmRleE9mKHNyY01hcHBpbmcuc291cmNlKTtcbiAgICAgICAgZGVzdE1hcHBpbmcub3JpZ2luYWxMaW5lID0gc3JjTWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gc3JjTWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICBpZiAoc3JjTWFwcGluZy5uYW1lKSB7XG4gICAgICAgICAgZGVzdE1hcHBpbmcubmFtZSA9IG5hbWVzLmluZGV4T2Yoc3JjTWFwcGluZy5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlc3RPcmlnaW5hbE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgICAgfVxuXG4gICAgICBkZXN0R2VuZXJhdGVkTWFwcGluZ3MucHVzaChkZXN0TWFwcGluZyk7XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KHNtYy5fX29yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuXG4gICAgcmV0dXJuIHNtYztcbiAgfTtcblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBvcmlnaW5hbCBzb3VyY2VzLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc291cmNlcy50b0FycmF5KCkubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VSb290ICE9IG51bGwgPyB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzKSA6IHM7XG4gICAgfSwgdGhpcyk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFByb3ZpZGUgdGhlIEpJVCB3aXRoIGEgbmljZSBzaGFwZSAvIGhpZGRlbiBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gTWFwcGluZygpIHtcbiAgdGhpcy5nZW5lcmF0ZWRMaW5lID0gMDtcbiAgdGhpcy5nZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgdGhpcy5vcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gIHRoaXMubmFtZSA9IG51bGw7XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB2YXIgZ2VuZXJhdGVkTGluZSA9IDE7XG4gICAgdmFyIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbExpbmUgPSAwO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNTb3VyY2UgPSAwO1xuICAgIHZhciBwcmV2aW91c05hbWUgPSAwO1xuICAgIHZhciBsZW5ndGggPSBhU3RyLmxlbmd0aDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjYWNoZWRTZWdtZW50cyA9IHt9O1xuICAgIHZhciB0ZW1wID0ge307XG4gICAgdmFyIG9yaWdpbmFsTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgbWFwcGluZywgc3RyLCBzZWdtZW50LCBlbmQsIHZhbHVlO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnOycpIHtcbiAgICAgICAgZ2VuZXJhdGVkTGluZSsrO1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChhU3RyLmNoYXJBdChpbmRleCkgPT09ICcsJykge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG1hcHBpbmcgPSBuZXcgTWFwcGluZygpO1xuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBnZW5lcmF0ZWRMaW5lO1xuXG4gICAgICAgIC8vIEJlY2F1c2UgZWFjaCBvZmZzZXQgaXMgZW5jb2RlZCByZWxhdGl2ZSB0byB0aGUgcHJldmlvdXMgb25lLFxuICAgICAgICAvLyBtYW55IHNlZ21lbnRzIG9mdGVuIGhhdmUgdGhlIHNhbWUgZW5jb2RpbmcuIFdlIGNhbiBleHBsb2l0IHRoaXNcbiAgICAgICAgLy8gZmFjdCBieSBjYWNoaW5nIHRoZSBwYXJzZWQgdmFyaWFibGUgbGVuZ3RoIGZpZWxkcyBvZiBlYWNoIHNlZ21lbnQsXG4gICAgICAgIC8vIGFsbG93aW5nIHVzIHRvIGF2b2lkIGEgc2Vjb25kIHBhcnNlIGlmIHdlIGVuY291bnRlciB0aGUgc2FtZVxuICAgICAgICAvLyBzZWdtZW50IGFnYWluLlxuICAgICAgICBmb3IgKGVuZCA9IGluZGV4OyBlbmQgPCBsZW5ndGg7IGVuZCsrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgZW5kKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0ciA9IGFTdHIuc2xpY2UoaW5kZXgsIGVuZCk7XG5cbiAgICAgICAgc2VnbWVudCA9IGNhY2hlZFNlZ21lbnRzW3N0cl07XG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgaW5kZXggKz0gc3RyLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWdtZW50ID0gW107XG4gICAgICAgICAgd2hpbGUgKGluZGV4IDwgZW5kKSB7XG4gICAgICAgICAgICBiYXNlNjRWTFEuZGVjb2RlKGFTdHIsIGluZGV4LCB0ZW1wKTtcbiAgICAgICAgICAgIHZhbHVlID0gdGVtcC52YWx1ZTtcbiAgICAgICAgICAgIGluZGV4ID0gdGVtcC5yZXN0O1xuICAgICAgICAgICAgc2VnbWVudC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UsIGJ1dCBubyBsaW5lIGFuZCBjb2x1bW4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UgYW5kIGxpbmUsIGJ1dCBubyBjb2x1bW4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYWNoZWRTZWdtZW50c1tzdHJdID0gc2VnbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdlbmVyYXRlZCBjb2x1bW4uXG4gICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uID0gcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gKyBzZWdtZW50WzBdO1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAvLyBPcmlnaW5hbCBzb3VyY2UuXG4gICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSBwcmV2aW91c1NvdXJjZSArIHNlZ21lbnRbMV07XG4gICAgICAgICAgcHJldmlvdXNTb3VyY2UgKz0gc2VnbWVudFsxXTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGxpbmUuXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPSBwcmV2aW91c09yaWdpbmFsTGluZSArIHNlZ21lbnRbMl07XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZTtcbiAgICAgICAgICAvLyBMaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWRcbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSArPSAxO1xuXG4gICAgICAgICAgLy8gT3JpZ2luYWwgY29sdW1uLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBwcmV2aW91c09yaWdpbmFsQ29sdW1uICsgc2VnbWVudFszXTtcbiAgICAgICAgICBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA+IDQpIHtcbiAgICAgICAgICAgIC8vIE9yaWdpbmFsIG5hbWUuXG4gICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBwcmV2aW91c05hbWUgKyBzZWdtZW50WzRdO1xuICAgICAgICAgICAgcHJldmlvdXNOYW1lICs9IHNlZ21lbnRbNF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZ2VuZXJhdGVkTWFwcGluZ3MucHVzaChtYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvcmlnaW5hbE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBxdWlja1NvcnQoZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IGdlbmVyYXRlZE1hcHBpbmdzO1xuXG4gICAgcXVpY2tTb3J0KG9yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gb3JpZ2luYWxNYXBwaW5ncztcbiAgfTtcblxuLyoqXG4gKiBGaW5kIHRoZSBtYXBwaW5nIHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBoeXBvdGhldGljYWwgXCJuZWVkbGVcIiBtYXBwaW5nIHRoYXRcbiAqIHdlIGFyZSBzZWFyY2hpbmcgZm9yIGluIHRoZSBnaXZlbiBcImhheXN0YWNrXCIgb2YgbWFwcGluZ3MuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2ZpbmRNYXBwaW5nKGFOZWVkbGUsIGFNYXBwaW5ncywgYUxpbmVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ29sdW1uTmFtZSwgYUNvbXBhcmF0b3IsIGFCaWFzKSB7XG4gICAgLy8gVG8gcmV0dXJuIHRoZSBwb3NpdGlvbiB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgd2UgbXVzdCBmaXJzdCBmaW5kIHRoZVxuICAgIC8vIG1hcHBpbmcgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgdGhlbiByZXR1cm4gdGhlIG9wcG9zaXRlIHBvc2l0aW9uIGl0XG4gICAgLy8gcG9pbnRzIHRvLiBCZWNhdXNlIHRoZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB3ZSBjYW4gdXNlIGJpbmFyeSBzZWFyY2ggdG9cbiAgICAvLyBmaW5kIHRoZSBiZXN0IG1hcHBpbmcuXG5cbiAgICBpZiAoYU5lZWRsZVthTGluZU5hbWVdIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbmUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMSwgZ290ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhTmVlZGxlW2FMaW5lTmFtZV0pO1xuICAgIH1cbiAgICBpZiAoYU5lZWRsZVthQ29sdW1uTmFtZV0gPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb2x1bW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCwgZ290ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhTmVlZGxlW2FDb2x1bW5OYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJpbmFyeVNlYXJjaC5zZWFyY2goYU5lZWRsZSwgYU1hcHBpbmdzLCBhQ29tcGFyYXRvciwgYUJpYXMpO1xuICB9O1xuXG4vKipcbiAqIENvbXB1dGUgdGhlIGxhc3QgY29sdW1uIGZvciBlYWNoIGdlbmVyYXRlZCBtYXBwaW5nLiBUaGUgbGFzdCBjb2x1bW4gaXNcbiAqIGluY2x1c2l2ZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29tcHV0ZUNvbHVtblNwYW5zID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfY29tcHV0ZUNvbHVtblNwYW5zKCkge1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICAvLyBNYXBwaW5ncyBkbyBub3QgY29udGFpbiBhIGZpZWxkIGZvciB0aGUgbGFzdCBnZW5lcmF0ZWQgY29sdW1udC4gV2VcbiAgICAgIC8vIGNhbiBjb21lIHVwIHdpdGggYW4gb3B0aW1pc3RpYyBlc3RpbWF0ZSwgaG93ZXZlciwgYnkgYXNzdW1pbmcgdGhhdFxuICAgICAgLy8gbWFwcGluZ3MgYXJlIGNvbnRpZ3VvdXMgKGkuZS4gZ2l2ZW4gdHdvIGNvbnNlY3V0aXZlIG1hcHBpbmdzLCB0aGVcbiAgICAgIC8vIGZpcnN0IG1hcHBpbmcgZW5kcyB3aGVyZSB0aGUgc2Vjb25kIG9uZSBzdGFydHMpLlxuICAgICAgaWYgKGluZGV4ICsgMSA8IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aCkge1xuICAgICAgICB2YXIgbmV4dE1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleCArIDFdO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5leHRNYXBwaW5nLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5nLmxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBsYXN0IG1hcHBpbmcgZm9yIGVhY2ggbGluZSBzcGFucyB0aGUgZW50aXJlIGxpbmUuXG4gICAgICBtYXBwaW5nLmxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBJbmZpbml0eTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkXG4gKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBiaWFzOiBFaXRoZXIgJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdTb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ1NvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqXG4gKiBhbmQgYW4gb2JqZWN0IGlzIHJldHVybmVkIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSwgb3IgbnVsbC5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9vcmlnaW5hbFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIGdlbmVyYXRlZExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgZ2VuZXJhdGVkQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MsXG4gICAgICBcImdlbmVyYXRlZExpbmVcIixcbiAgICAgIFwiZ2VuZXJhdGVkQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9PT0gbmVlZGxlLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdzb3VyY2UnLCBudWxsKTtcbiAgICAgICAgaWYgKHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuYXQoc291cmNlKTtcbiAgICAgICAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbih0aGlzLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBuYW1lID0gdXRpbC5nZXRBcmcobWFwcGluZywgJ25hbWUnLCBudWxsKTtcbiAgICAgICAgaWYgKG5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgICBuYW1lID0gdGhpcy5fbmFtZXMuYXQobmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnb3JpZ2luYWxMaW5lJywgbnVsbCksXG4gICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnb3JpZ2luYWxDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGwsXG4gICAgICBuYW1lOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHRoZSBzb3VyY2UgY29udGVudCBmb3IgZXZlcnkgc291cmNlIGluIHRoZSBzb3VyY2VcbiAqIG1hcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXJfaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKSB7XG4gICAgaWYgKCF0aGlzLnNvdXJjZXNDb250ZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50Lmxlbmd0aCA+PSB0aGlzLl9zb3VyY2VzLnNpemUoKSAmJlxuICAgICAgIXRoaXMuc291cmNlc0NvbnRlbnQuc29tZShmdW5jdGlvbiAoc2MpIHsgcmV0dXJuIHNjID09IG51bGw7IH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICogb3JpZ2luYWwgc291cmNlIGZpbGUuIFJldHVybnMgbnVsbCBpZiBubyBvcmlnaW5hbCBzb3VyY2UgY29udGVudCBpc1xuICogYXZhaWxhYmxlLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfc291cmNlQ29udGVudEZvcihhU291cmNlLCBudWxsT25NaXNzaW5nKSB7XG4gICAgaWYgKCF0aGlzLnNvdXJjZXNDb250ZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIGFTb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgYVNvdXJjZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NvdXJjZXMuaGFzKGFTb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoYVNvdXJjZSldO1xuICAgIH1cblxuICAgIHZhciB1cmw7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsXG4gICAgICAgICYmICh1cmwgPSB1dGlsLnVybFBhcnNlKHRoaXMuc291cmNlUm9vdCkpKSB7XG4gICAgICAvLyBYWFg6IGZpbGU6Ly8gVVJJcyBhbmQgYWJzb2x1dGUgcGF0aHMgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIGZvclxuICAgICAgLy8gbWFueSB1c2Vycy4gV2UgY2FuIGhlbHAgdGhlbSBvdXQgd2hlbiB0aGV5IGV4cGVjdCBmaWxlOi8vIFVSSXMgdG9cbiAgICAgIC8vIGJlaGF2ZSBsaWtlIGl0IHdvdWxkIGlmIHRoZXkgd2VyZSBydW5uaW5nIGEgbG9jYWwgSFRUUCBzZXJ2ZXIuIFNlZVxuICAgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg1NTk3LlxuICAgICAgdmFyIGZpbGVVcmlBYnNQYXRoID0gYVNvdXJjZS5yZXBsYWNlKC9eZmlsZTpcXC9cXC8vLCBcIlwiKTtcbiAgICAgIGlmICh1cmwuc2NoZW1lID09IFwiZmlsZVwiXG4gICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoZmlsZVVyaUFic1BhdGgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihmaWxlVXJpQWJzUGF0aCldXG4gICAgICB9XG5cbiAgICAgIGlmICgoIXVybC5wYXRoIHx8IHVybC5wYXRoID09IFwiL1wiKVxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKFwiL1wiICsgYVNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKFwiL1wiICsgYVNvdXJjZSldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCByZWN1cnNpdmVseSBmcm9tXG4gICAgLy8gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yLiBJbiB0aGF0IGNhc2UsIHdlXG4gICAgLy8gZG9uJ3Qgd2FudCB0byB0aHJvdyBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBzb3VyY2UgLSB3ZSBqdXN0IHdhbnQgdG9cbiAgICAvLyByZXR1cm4gbnVsbCwgc28gd2UgcHJvdmlkZSBhIGZsYWcgdG8gZXhpdCBncmFjZWZ1bGx5LlxuICAgIGlmIChudWxsT25NaXNzaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKTtcbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgICAgfTtcbiAgICB9XG4gICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBvcmlnaW5hbExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICBuZWVkbGUsXG4gICAgICB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzLFxuICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgIFwib3JpZ2luYWxDb2x1bW5cIixcbiAgICAgIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMsXG4gICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gbmVlZGxlLnNvdXJjZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgY29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbGFzdENvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2xhc3RHZW5lcmF0ZWRDb2x1bW4nLCBudWxsKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgIH07XG4gIH07XG5cbmV4cG9ydHMuQmFzaWNTb3VyY2VNYXBDb25zdW1lciA9IEJhc2ljU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQW4gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaFxuICogd2UgY2FuIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbi4gSXQgZGlmZmVycyBmcm9tIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgaW5cbiAqIHRoYXQgaXQgdGFrZXMgXCJpbmRleGVkXCIgc291cmNlIG1hcHMgKGkuZS4gb25lcyB3aXRoIGEgXCJzZWN0aW9uc1wiIGZpZWxkKSBhc1xuICogaW5wdXQuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIGEgcmF3IHNvdXJjZSBtYXAgKGVpdGhlciBhcyBhIEpTT04gc3RyaW5nLCBvciBhbHJlYWR5XG4gKiBwYXJzZWQgdG8gYW4gb2JqZWN0KS4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjIGZvciBpbmRleGVkIHNvdXJjZSBtYXBzLCB0aGV5XG4gKiBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gKiAgIC0gc2VjdGlvbnM6IEEgbGlzdCBvZiBzZWN0aW9uIGRlZmluaXRpb25zLlxuICpcbiAqIEVhY2ggdmFsdWUgdW5kZXIgdGhlIFwic2VjdGlvbnNcIiBmaWVsZCBoYXMgdHdvIGZpZWxkczpcbiAqICAgLSBvZmZzZXQ6IFRoZSBvZmZzZXQgaW50byB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkIGF0IHdoaWNoIHRoaXMgc2VjdGlvblxuICogICAgICAgYmVnaW5zIHRvIGFwcGx5LCBkZWZpbmVkIGFzIGFuIG9iamVjdCB3aXRoIGEgXCJsaW5lXCIgYW5kIFwiY29sdW1uXCJcbiAqICAgICAgIGZpZWxkLlxuICogICAtIG1hcDogQSBzb3VyY2UgbWFwIGRlZmluaXRpb24uIFRoaXMgc291cmNlIG1hcCBjb3VsZCBhbHNvIGJlIGluZGV4ZWQsXG4gKiAgICAgICBidXQgZG9lc24ndCBoYXZlIHRvIGJlLlxuICpcbiAqIEluc3RlYWQgb2YgdGhlIFwibWFwXCIgZmllbGQsIGl0J3MgYWxzbyBwb3NzaWJsZSB0byBoYXZlIGEgXCJ1cmxcIiBmaWVsZFxuICogc3BlY2lmeWluZyBhIFVSTCB0byByZXRyaWV2ZSBhIHNvdXJjZSBtYXAgZnJvbSwgYnV0IHRoYXQncyBjdXJyZW50bHlcbiAqIHVuc3VwcG9ydGVkLlxuICpcbiAqIEhlcmUncyBhbiBleGFtcGxlIHNvdXJjZSBtYXAsIHRha2VuIGZyb20gdGhlIHNvdXJjZSBtYXAgc3BlY1swXSwgYnV0XG4gKiBtb2RpZmllZCB0byBvbWl0IGEgc2VjdGlvbiB3aGljaCB1c2VzIHRoZSBcInVybFwiIGZpZWxkLlxuICpcbiAqICB7XG4gKiAgICB2ZXJzaW9uIDogMyxcbiAqICAgIGZpbGU6IFwiYXBwLmpzXCIsXG4gKiAgICBzZWN0aW9uczogW3tcbiAqICAgICAgb2Zmc2V0OiB7bGluZToxMDAsIGNvbHVtbjoxMH0sXG4gKiAgICAgIG1hcDoge1xuICogICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgIGZpbGU6IFwic2VjdGlvbi5qc1wiLFxuICogICAgICAgIHNvdXJjZXM6IFtcImZvby5qc1wiLCBcImJhci5qc1wiXSxcbiAqICAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAqICAgICAgICBtYXBwaW5nczogXCJBQUFBLEU7O0FCQ0RFO1wiXG4gKiAgICAgIH1cbiAqICAgIH1dLFxuICogIH1cbiAqXG4gKiBbMF06IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVUxUkdBZWhRd1J5cFVUb3ZGMUtSbHBpT0Z6ZTBiLV8yZ2M2ZkFIMEtZMGsvZWRpdCNoZWFkaW5nPWguNTM1ZXMzeGVwcmd0XG4gKi9cbmZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgc291cmNlTWFwID0gSlNPTi5wYXJzZShhU291cmNlTWFwLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgfVxuXG4gIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICB2YXIgc2VjdGlvbnMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzZWN0aW9ucycpO1xuXG4gIGlmICh2ZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgfVxuXG4gIHRoaXMuX3NvdXJjZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcblxuICB2YXIgbGFzdE9mZnNldCA9IHtcbiAgICBsaW5lOiAtMSxcbiAgICBjb2x1bW46IDBcbiAgfTtcbiAgdGhpcy5fc2VjdGlvbnMgPSBzZWN0aW9ucy5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICBpZiAocy51cmwpIHtcbiAgICAgIC8vIFRoZSB1cmwgZmllbGQgd2lsbCByZXF1aXJlIHN1cHBvcnQgZm9yIGFzeW5jaHJvbmljaXR5LlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzE2XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cHBvcnQgZm9yIHVybCBmaWVsZCBpbiBzZWN0aW9ucyBub3QgaW1wbGVtZW50ZWQuJyk7XG4gICAgfVxuICAgIHZhciBvZmZzZXQgPSB1dGlsLmdldEFyZyhzLCAnb2Zmc2V0Jyk7XG4gICAgdmFyIG9mZnNldExpbmUgPSB1dGlsLmdldEFyZyhvZmZzZXQsICdsaW5lJyk7XG4gICAgdmFyIG9mZnNldENvbHVtbiA9IHV0aWwuZ2V0QXJnKG9mZnNldCwgJ2NvbHVtbicpO1xuXG4gICAgaWYgKG9mZnNldExpbmUgPCBsYXN0T2Zmc2V0LmxpbmUgfHxcbiAgICAgICAgKG9mZnNldExpbmUgPT09IGxhc3RPZmZzZXQubGluZSAmJiBvZmZzZXRDb2x1bW4gPCBsYXN0T2Zmc2V0LmNvbHVtbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2VjdGlvbiBvZmZzZXRzIG11c3QgYmUgb3JkZXJlZCBhbmQgbm9uLW92ZXJsYXBwaW5nLicpO1xuICAgIH1cbiAgICBsYXN0T2Zmc2V0ID0gb2Zmc2V0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdlbmVyYXRlZE9mZnNldDoge1xuICAgICAgICAvLyBUaGUgb2Zmc2V0IGZpZWxkcyBhcmUgMC1iYXNlZCwgYnV0IHdlIHVzZSAxLWJhc2VkIGluZGljZXMgd2hlblxuICAgICAgICAvLyBlbmNvZGluZy9kZWNvZGluZyBmcm9tIFZMUS5cbiAgICAgICAgZ2VuZXJhdGVkTGluZTogb2Zmc2V0TGluZSArIDEsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogb2Zmc2V0Q29sdW1uICsgMVxuICAgICAgfSxcbiAgICAgIGNvbnN1bWVyOiBuZXcgU291cmNlTWFwQ29uc3VtZXIodXRpbC5nZXRBcmcocywgJ21hcCcpKVxuICAgIH1cbiAgfSk7XG59XG5cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBvcmlnaW5hbCBzb3VyY2VzLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ3NvdXJjZXMnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl9zZWN0aW9uc1tpXS5jb25zdW1lci5zb3VyY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHNvdXJjZXMucHVzaCh0aGlzLl9zZWN0aW9uc1tpXS5jb25zdW1lci5zb3VyY2VzW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZXM7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLm9yaWdpbmFsUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICAvLyBGaW5kIHRoZSBzZWN0aW9uIGNvbnRhaW5pbmcgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbiB3ZSdyZSB0cnlpbmcgdG8gbWFwXG4gICAgLy8gdG8gYW4gb3JpZ2luYWwgcG9zaXRpb24uXG4gICAgdmFyIHNlY3Rpb25JbmRleCA9IGJpbmFyeVNlYXJjaC5zZWFyY2gobmVlZGxlLCB0aGlzLl9zZWN0aW9ucyxcbiAgICAgIGZ1bmN0aW9uKG5lZWRsZSwgc2VjdGlvbikge1xuICAgICAgICB2YXIgY21wID0gbmVlZGxlLmdlbmVyYXRlZExpbmUgLSBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lO1xuICAgICAgICBpZiAoY21wKSB7XG4gICAgICAgICAgcmV0dXJuIGNtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAobmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgICAgICAgICAgc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgIH0pO1xuICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbc2VjdGlvbkluZGV4XTtcblxuICAgIGlmICghc2VjdGlvbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBudWxsLFxuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIG5hbWU6IG51bGxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlY3Rpb24uY29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICBsaW5lOiBuZWVkbGUuZ2VuZXJhdGVkTGluZSAtXG4gICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICBjb2x1bW46IG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbmVlZGxlLmdlbmVyYXRlZExpbmVcbiAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgOiAwKSxcbiAgICAgIGJpYXM6IGFBcmdzLmJpYXNcbiAgICB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBoYXZlIHRoZSBzb3VyY2UgY29udGVudCBmb3IgZXZlcnkgc291cmNlIGluIHRoZSBzb3VyY2VcbiAqIG1hcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWN0aW9ucy5ldmVyeShmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHMuY29uc3VtZXIuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKTtcbiAgICB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5zb3VyY2VDb250ZW50Rm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG5cbiAgICAgIHZhciBjb250ZW50ID0gc2VjdGlvbi5jb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIHRydWUpO1xuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChudWxsT25NaXNzaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTb3VyY2UgKyAnXCIgaXMgbm90IGluIHRoZSBTb3VyY2VNYXAuJyk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBvcmlnaW5hbCBzb3VyY2UsXG4gKiBsaW5lLCBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0IHdpdGhcbiAqIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZ2VuZXJhdGVkUG9zaXRpb25Gb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICAvLyBPbmx5IGNvbnNpZGVyIHRoaXMgc2VjdGlvbiBpZiB0aGUgcmVxdWVzdGVkIHNvdXJjZSBpcyBpbiB0aGUgbGlzdCBvZlxuICAgICAgLy8gc291cmNlcyBvZiB0aGUgY29uc3VtZXIuXG4gICAgICBpZiAoc2VjdGlvbi5jb25zdW1lci5zb3VyY2VzLmluZGV4T2YodXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKSkgPT09IC0xKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIGdlbmVyYXRlZFBvc2l0aW9uID0gc2VjdGlvbi5jb25zdW1lci5nZW5lcmF0ZWRQb3NpdGlvbkZvcihhQXJncyk7XG4gICAgICBpZiAoZ2VuZXJhdGVkUG9zaXRpb24pIHtcbiAgICAgICAgdmFyIHJldCA9IHtcbiAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWRQb3NpdGlvbi5jb2x1bW4gK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IGdlbmVyYXRlZFBvc2l0aW9uLmxpbmVcbiAgICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgICA6IDApXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuICAgICAgdmFyIHNlY3Rpb25NYXBwaW5ncyA9IHNlY3Rpb24uY29uc3VtZXIuX2dlbmVyYXRlZE1hcHBpbmdzO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWN0aW9uTWFwcGluZ3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIG1hcHBpbmcgPSBzZWN0aW9uTWFwcGluZ3Nbal07XG5cbiAgICAgICAgdmFyIHNvdXJjZSA9IHNlY3Rpb24uY29uc3VtZXIuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBpZiAoc2VjdGlvbi5jb25zdW1lci5zb3VyY2VSb290ICE9PSBudWxsKSB7XG4gICAgICAgICAgc291cmNlID0gdXRpbC5qb2luKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zb3VyY2VzLmFkZChzb3VyY2UpO1xuICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmluZGV4T2Yoc291cmNlKTtcblxuICAgICAgICB2YXIgbmFtZSA9IHNlY3Rpb24uY29uc3VtZXIuX25hbWVzLmF0KG1hcHBpbmcubmFtZSk7XG4gICAgICAgIHRoaXMuX25hbWVzLmFkZChuYW1lKTtcbiAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG5cbiAgICAgICAgLy8gVGhlIG1hcHBpbmdzIGNvbWluZyBmcm9tIHRoZSBjb25zdW1lciBmb3IgdGhlIHNlY3Rpb24gaGF2ZVxuICAgICAgICAvLyBnZW5lcmF0ZWQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgc2VjdGlvbiwgc28gd2VcbiAgICAgICAgLy8gbmVlZCB0byBvZmZzZXQgdGhlbSB0byBiZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbmNhdGVuYXRlZFxuICAgICAgICAvLyBnZW5lcmF0ZWQgZmlsZS5cbiAgICAgICAgdmFyIGFkanVzdGVkTWFwcGluZyA9IHtcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUgK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBtYXBwaW5nLmdlbmVyYXRlZExpbmVcbiAgICAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgICAgOiAwKSxcbiAgICAgICAgICBvcmlnaW5hbExpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MucHVzaChhZGp1c3RlZE1hcHBpbmcpO1xuICAgICAgICBpZiAodHlwZW9mIGFkanVzdGVkTWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MucHVzaChhZGp1c3RlZE1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCk7XG4gICAgcXVpY2tTb3J0KHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgfTtcblxuZXhwb3J0cy5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIgPSBJbmRleGVkU291cmNlTWFwQ29uc3VtZXI7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8qKlxuICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2V0dGluZyB2YWx1ZXMgZnJvbSBwYXJhbWV0ZXIvb3B0aW9uc1xuICogb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gYXJncyBUaGUgb2JqZWN0IHdlIGFyZSBleHRyYWN0aW5nIHZhbHVlcyBmcm9tXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgd2UgYXJlIGdldHRpbmcuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIEFuIG9wdGlvbmFsIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgcHJvcGVydHkgaXMgbWlzc2luZ1xuICogZnJvbSB0aGUgb2JqZWN0LiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBhblxuICogZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gKi9cbmZ1bmN0aW9uIGdldEFyZyhhQXJncywgYU5hbWUsIGFEZWZhdWx0VmFsdWUpIHtcbiAgaWYgKGFOYW1lIGluIGFBcmdzKSB7XG4gICAgcmV0dXJuIGFBcmdzW2FOYW1lXTtcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIGFEZWZhdWx0VmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhTmFtZSArICdcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LicpO1xuICB9XG59XG5leHBvcnRzLmdldEFyZyA9IGdldEFyZztcblxudmFyIHVybFJlZ2V4cCA9IC9eKD86KFtcXHcrXFwtLl0rKTopP1xcL1xcLyg/OihcXHcrOlxcdyspQCk/KFtcXHcuXSopKD86OihcXGQrKSk/KFxcUyopJC87XG52YXIgZGF0YVVybFJlZ2V4cCA9IC9eZGF0YTouK1xcLC4rJC87XG5cbmZ1bmN0aW9uIHVybFBhcnNlKGFVcmwpIHtcbiAgdmFyIG1hdGNoID0gYVVybC5tYXRjaCh1cmxSZWdleHApO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY2hlbWU6IG1hdGNoWzFdLFxuICAgIGF1dGg6IG1hdGNoWzJdLFxuICAgIGhvc3Q6IG1hdGNoWzNdLFxuICAgIHBvcnQ6IG1hdGNoWzRdLFxuICAgIHBhdGg6IG1hdGNoWzVdXG4gIH07XG59XG5leHBvcnRzLnVybFBhcnNlID0gdXJsUGFyc2U7XG5cbmZ1bmN0aW9uIHVybEdlbmVyYXRlKGFQYXJzZWRVcmwpIHtcbiAgdmFyIHVybCA9ICcnO1xuICBpZiAoYVBhcnNlZFVybC5zY2hlbWUpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5zY2hlbWUgKyAnOic7XG4gIH1cbiAgdXJsICs9ICcvLyc7XG4gIGlmIChhUGFyc2VkVXJsLmF1dGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5hdXRoICsgJ0AnO1xuICB9XG4gIGlmIChhUGFyc2VkVXJsLmhvc3QpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5ob3N0O1xuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBvcnQpIHtcbiAgICB1cmwgKz0gXCI6XCIgKyBhUGFyc2VkVXJsLnBvcnRcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wYXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwucGF0aDtcbiAgfVxuICByZXR1cm4gdXJsO1xufVxuZXhwb3J0cy51cmxHZW5lcmF0ZSA9IHVybEdlbmVyYXRlO1xuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBwYXRoLCBvciB0aGUgcGF0aCBwb3J0aW9uIG9mIGEgVVJMOlxuICpcbiAqIC0gUmVwbGFjZXMgY29uc2VjdXRpdmUgc2xhc2hlcyB3aXRoIG9uZSBzbGFzaC5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnLicgcGFydHMuXG4gKiAtIFJlbW92ZXMgdW5uZWNlc3NhcnkgJzxkaXI+Ly4uJyBwYXJ0cy5cbiAqXG4gKiBCYXNlZCBvbiBjb2RlIGluIHRoZSBOb2RlLmpzICdwYXRoJyBjb3JlIG1vZHVsZS5cbiAqXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgdXJsIHRvIG5vcm1hbGl6ZS5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplKGFQYXRoKSB7XG4gIHZhciBwYXRoID0gYVBhdGg7XG4gIHZhciB1cmwgPSB1cmxQYXJzZShhUGF0aCk7XG4gIGlmICh1cmwpIHtcbiAgICBpZiAoIXVybC5wYXRoKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuICAgIHBhdGggPSB1cmwucGF0aDtcbiAgfVxuICB2YXIgaXNBYnNvbHV0ZSA9IGV4cG9ydHMuaXNBYnNvbHV0ZShwYXRoKTtcblxuICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KC9cXC8rLyk7XG4gIGZvciAodmFyIHBhcnQsIHVwID0gMCwgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgcGFydCA9IHBhcnRzW2ldO1xuICAgIGlmIChwYXJ0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCA+IDApIHtcbiAgICAgIGlmIChwYXJ0ID09PSAnJykge1xuICAgICAgICAvLyBUaGUgZmlyc3QgcGFydCBpcyBibGFuayBpZiB0aGUgcGF0aCBpcyBhYnNvbHV0ZS4gVHJ5aW5nIHRvIGdvXG4gICAgICAgIC8vIGFib3ZlIHRoZSByb290IGlzIGEgbm8tb3AuIFRoZXJlZm9yZSB3ZSBjYW4gcmVtb3ZlIGFsbCAnLi4nIHBhcnRzXG4gICAgICAgIC8vIGRpcmVjdGx5IGFmdGVyIHRoZSByb290LlxuICAgICAgICBwYXJ0cy5zcGxpY2UoaSArIDEsIHVwKTtcbiAgICAgICAgdXAgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFydHMuc3BsaWNlKGksIDIpO1xuICAgICAgICB1cC0tO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwYXRoID0gcGFydHMuam9pbignLycpO1xuXG4gIGlmIChwYXRoID09PSAnJykge1xuICAgIHBhdGggPSBpc0Fic29sdXRlID8gJy8nIDogJy4nO1xuICB9XG5cbiAgaWYgKHVybCkge1xuICAgIHVybC5wYXRoID0gcGF0aDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUodXJsKTtcbiAgfVxuICByZXR1cm4gcGF0aDtcbn1cbmV4cG9ydHMubm9ybWFsaXplID0gbm9ybWFsaXplO1xuXG4vKipcbiAqIEpvaW5zIHR3byBwYXRocy9VUkxzLlxuICpcbiAqIEBwYXJhbSBhUm9vdCBUaGUgcm9vdCBwYXRoIG9yIFVSTC5cbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciBVUkwgdG8gYmUgam9pbmVkIHdpdGggdGhlIHJvb3QuXG4gKlxuICogLSBJZiBhUGF0aCBpcyBhIFVSTCBvciBhIGRhdGEgVVJJLCBhUGF0aCBpcyByZXR1cm5lZCwgdW5sZXNzIGFQYXRoIGlzIGFcbiAqICAgc2NoZW1lLXJlbGF0aXZlIFVSTDogVGhlbiB0aGUgc2NoZW1lIG9mIGFSb290LCBpZiBhbnksIGlzIHByZXBlbmRlZFxuICogICBmaXJzdC5cbiAqIC0gT3RoZXJ3aXNlIGFQYXRoIGlzIGEgcGF0aC4gSWYgYVJvb3QgaXMgYSBVUkwsIHRoZW4gaXRzIHBhdGggcG9ydGlvblxuICogICBpcyB1cGRhdGVkIHdpdGggdGhlIHJlc3VsdCBhbmQgYVJvb3QgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSB0aGUgcmVzdWx0XG4gKiAgIGlzIHJldHVybmVkLlxuICogICAtIElmIGFQYXRoIGlzIGFic29sdXRlLCB0aGUgcmVzdWx0IGlzIGFQYXRoLlxuICogICAtIE90aGVyd2lzZSB0aGUgdHdvIHBhdGhzIGFyZSBqb2luZWQgd2l0aCBhIHNsYXNoLlxuICogLSBKb2luaW5nIGZvciBleGFtcGxlICdodHRwOi8vJyBhbmQgJ3d3dy5leGFtcGxlLmNvbScgaXMgYWxzbyBzdXBwb3J0ZWQuXG4gKi9cbmZ1bmN0aW9uIGpvaW4oYVJvb3QsIGFQYXRoKSB7XG4gIGlmIChhUm9vdCA9PT0gXCJcIikge1xuICAgIGFSb290ID0gXCIuXCI7XG4gIH1cbiAgaWYgKGFQYXRoID09PSBcIlwiKSB7XG4gICAgYVBhdGggPSBcIi5cIjtcbiAgfVxuICB2YXIgYVBhdGhVcmwgPSB1cmxQYXJzZShhUGF0aCk7XG4gIHZhciBhUm9vdFVybCA9IHVybFBhcnNlKGFSb290KTtcbiAgaWYgKGFSb290VXJsKSB7XG4gICAgYVJvb3QgPSBhUm9vdFVybC5wYXRoIHx8ICcvJztcbiAgfVxuXG4gIC8vIGBqb2luKGZvbywgJy8vd3d3LmV4YW1wbGUub3JnJylgXG4gIGlmIChhUGF0aFVybCAmJiAhYVBhdGhVcmwuc2NoZW1lKSB7XG4gICAgaWYgKGFSb290VXJsKSB7XG4gICAgICBhUGF0aFVybC5zY2hlbWUgPSBhUm9vdFVybC5zY2hlbWU7XG4gICAgfVxuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUGF0aFVybCk7XG4gIH1cblxuICBpZiAoYVBhdGhVcmwgfHwgYVBhdGgubWF0Y2goZGF0YVVybFJlZ2V4cCkpIHtcbiAgICByZXR1cm4gYVBhdGg7XG4gIH1cblxuICAvLyBgam9pbignaHR0cDovLycsICd3d3cuZXhhbXBsZS5jb20nKWBcbiAgaWYgKGFSb290VXJsICYmICFhUm9vdFVybC5ob3N0ICYmICFhUm9vdFVybC5wYXRoKSB7XG4gICAgYVJvb3RVcmwuaG9zdCA9IGFQYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cblxuICB2YXIgam9pbmVkID0gYVBhdGguY2hhckF0KDApID09PSAnLydcbiAgICA/IGFQYXRoXG4gICAgOiBub3JtYWxpemUoYVJvb3QucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyBhUGF0aCk7XG5cbiAgaWYgKGFSb290VXJsKSB7XG4gICAgYVJvb3RVcmwucGF0aCA9IGpvaW5lZDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG4gIHJldHVybiBqb2luZWQ7XG59XG5leHBvcnRzLmpvaW4gPSBqb2luO1xuXG5leHBvcnRzLmlzQWJzb2x1dGUgPSBmdW5jdGlvbiAoYVBhdGgpIHtcbiAgcmV0dXJuIGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nIHx8ICEhYVBhdGgubWF0Y2godXJsUmVnZXhwKTtcbn07XG5cbi8qKlxuICogTWFrZSBhIHBhdGggcmVsYXRpdmUgdG8gYSBVUkwgb3IgYW5vdGhlciBwYXRoLlxuICpcbiAqIEBwYXJhbSBhUm9vdCBUaGUgcm9vdCBwYXRoIG9yIFVSTC5cbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciBVUkwgdG8gYmUgbWFkZSByZWxhdGl2ZSB0byBhUm9vdC5cbiAqL1xuZnVuY3Rpb24gcmVsYXRpdmUoYVJvb3QsIGFQYXRoKSB7XG4gIGlmIChhUm9vdCA9PT0gXCJcIikge1xuICAgIGFSb290ID0gXCIuXCI7XG4gIH1cblxuICBhUm9vdCA9IGFSb290LnJlcGxhY2UoL1xcLyQvLCAnJyk7XG5cbiAgLy8gSXQgaXMgcG9zc2libGUgZm9yIHRoZSBwYXRoIHRvIGJlIGFib3ZlIHRoZSByb290LiBJbiB0aGlzIGNhc2UsIHNpbXBseVxuICAvLyBjaGVja2luZyB3aGV0aGVyIHRoZSByb290IGlzIGEgcHJlZml4IG9mIHRoZSBwYXRoIHdvbid0IHdvcmsuIEluc3RlYWQsIHdlXG4gIC8vIG5lZWQgdG8gcmVtb3ZlIGNvbXBvbmVudHMgZnJvbSB0aGUgcm9vdCBvbmUgYnkgb25lLCB1bnRpbCBlaXRoZXIgd2UgZmluZFxuICAvLyBhIHByZWZpeCB0aGF0IGZpdHMsIG9yIHdlIHJ1biBvdXQgb2YgY29tcG9uZW50cyB0byByZW1vdmUuXG4gIHZhciBsZXZlbCA9IDA7XG4gIHdoaWxlIChhUGF0aC5pbmRleE9mKGFSb290ICsgJy8nKSAhPT0gMCkge1xuICAgIHZhciBpbmRleCA9IGFSb290Lmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG9ubHkgcGFydCBvZiB0aGUgcm9vdCB0aGF0IGlzIGxlZnQgaXMgdGhlIHNjaGVtZSAoaS5lLiBodHRwOi8vLFxuICAgIC8vIGZpbGU6Ly8vLCBldGMuKSwgb25lIG9yIG1vcmUgc2xhc2hlcyAoLyksIG9yIHNpbXBseSBub3RoaW5nIGF0IGFsbCwgd2VcbiAgICAvLyBoYXZlIGV4aGF1c3RlZCBhbGwgY29tcG9uZW50cywgc28gdGhlIHBhdGggaXMgbm90IHJlbGF0aXZlIHRvIHRoZSByb290LlxuICAgIGFSb290ID0gYVJvb3Quc2xpY2UoMCwgaW5kZXgpO1xuICAgIGlmIChhUm9vdC5tYXRjaCgvXihbXlxcL10rOlxcLyk/XFwvKiQvKSkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgICsrbGV2ZWw7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgd2UgYWRkIGEgXCIuLi9cIiBmb3IgZWFjaCBjb21wb25lbnQgd2UgcmVtb3ZlZCBmcm9tIHRoZSByb290LlxuICByZXR1cm4gQXJyYXkobGV2ZWwgKyAxKS5qb2luKFwiLi4vXCIpICsgYVBhdGguc3Vic3RyKGFSb290Lmxlbmd0aCArIDEpO1xufVxuZXhwb3J0cy5yZWxhdGl2ZSA9IHJlbGF0aXZlO1xuXG52YXIgc3VwcG9ydHNOdWxsUHJvdG8gPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuICEoJ19fcHJvdG9fXycgaW4gb2JqKTtcbn0oKSk7XG5cbmZ1bmN0aW9uIGlkZW50aXR5IChzKSB7XG4gIHJldHVybiBzO1xufVxuXG4vKipcbiAqIEJlY2F1c2UgYmVoYXZpb3IgZ29lcyB3YWNreSB3aGVuIHlvdSBzZXQgYF9fcHJvdG9fX2Agb24gb2JqZWN0cywgd2VcbiAqIGhhdmUgdG8gcHJlZml4IGFsbCB0aGUgc3RyaW5ncyBpbiBvdXIgc2V0IHdpdGggYW4gYXJiaXRyYXJ5IGNoYXJhY3Rlci5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9wdWxsLzMxIGFuZFxuICogaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9pc3N1ZXMvMzBcbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuZnVuY3Rpb24gdG9TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiAnJCcgKyBhU3RyO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLnRvU2V0U3RyaW5nID0gc3VwcG9ydHNOdWxsUHJvdG8gPyBpZGVudGl0eSA6IHRvU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBmcm9tU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gYVN0ci5zbGljZSgxKTtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy5mcm9tU2V0U3RyaW5nID0gc3VwcG9ydHNOdWxsUHJvdG8gPyBpZGVudGl0eSA6IGZyb21TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGlzUHJvdG9TdHJpbmcocykge1xuICBpZiAoIXMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgbGVuZ3RoID0gcy5sZW5ndGg7XG5cbiAgaWYgKGxlbmd0aCA8IDkgLyogXCJfX3Byb3RvX19cIi5sZW5ndGggKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocy5jaGFyQ29kZUF0KGxlbmd0aCAtIDEpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMikgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAzKSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDQpICE9PSAxMTYgLyogJ3QnICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNSkgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA2KSAhPT0gMTE0IC8qICdyJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDcpICE9PSAxMTIgLyogJ3AnICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOCkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA5KSAhPT0gOTUgIC8qICdfJyAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSBsZW5ndGggLSAxMDsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAocy5jaGFyQ29kZUF0KGkpICE9PSAzNiAvKiAnJCcgKi8pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdoZXJlIHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgb3JpZ2luYWwgc291cmNlL2xpbmUvY29sdW1uLCBidXQgZGlmZmVyZW50IGdlbmVyYXRlZFxuICogbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGEgbWFwcGluZyB3aXRoIGFcbiAqIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICB2YXIgY21wID0gbWFwcGluZ0Euc291cmNlIC0gbWFwcGluZ0Iuc291cmNlO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsTGluZSAtIG1hcHBpbmdCLm9yaWdpbmFsTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIHJldHVybiBtYXBwaW5nQS5uYW1lIC0gbWFwcGluZ0IubmFtZTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMgPSBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucztcblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggZGVmbGF0ZWQgc291cmNlIGFuZCBuYW1lIGluZGljZXMgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4sIGJ1dCBkaWZmZXJlbnRcbiAqIHNvdXJjZS9uYW1lL29yaWdpbmFsIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhXG4gKiBtYXBwaW5nIHdpdGggYSBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Euc291cmNlIC0gbWFwcGluZ0Iuc291cmNlO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsTGluZSAtIG1hcHBpbmdCLm9yaWdpbmFsTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIHJldHVybiBtYXBwaW5nQS5uYW1lIC0gbWFwcGluZ0IubmFtZTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZDtcblxuZnVuY3Rpb24gc3RyY21wKGFTdHIxLCBhU3RyMikge1xuICBpZiAoYVN0cjEgPT09IGFTdHIyKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoYVN0cjEgPiBhU3RyMikge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBpbmZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgc3RyaW5ncyB3aGVyZVxuICogdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBzdHJjbXAobWFwcGluZ0Euc291cmNlLCBtYXBwaW5nQi5zb3VyY2UpO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsTGluZSAtIG1hcHBpbmdCLm9yaWdpbmFsTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIHJldHVybiBzdHJjbXAobWFwcGluZ0EubmFtZSwgbWFwcGluZ0IubmFtZSk7XG59XG5leHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQ7XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFjay1nZW5lcmF0b3InLCBbJ3N0YWNrZnJhbWUnXSwgZmFjdG9yeSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ3N0YWNrZnJhbWUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja0dlbmVyYXRvciA9IGZhY3Rvcnkocm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uKFN0YWNrRnJhbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBiYWNrdHJhY2U6IGZ1bmN0aW9uIFN0YWNrR2VuZXJhdG9yJCRiYWNrdHJhY2Uob3B0cykge1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gW107XG4gICAgICAgICAgICB2YXIgbWF4U3RhY2tTaXplID0gMTA7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9wdHMubWF4U3RhY2tTaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIG1heFN0YWNrU2l6ZSA9IG9wdHMubWF4U3RhY2tTaXplO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY3VyciA9IGFyZ3VtZW50cy5jYWxsZWU7XG4gICAgICAgICAgICB3aGlsZSAoY3VyciAmJiBzdGFjay5sZW5ndGggPCBtYXhTdGFja1NpemUgJiYgY3VyclsnYXJndW1lbnRzJ10pIHtcbiAgICAgICAgICAgICAgICAvLyBBbGxvdyBWOCBvcHRpbWl6YXRpb25zXG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoY3VyclsnYXJndW1lbnRzJ10ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1tpXSA9IGN1cnJbJ2FyZ3VtZW50cyddW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoL2Z1bmN0aW9uKD86XFxzKyhbXFx3JF0rKSkrXFxzKlxcKC8udGVzdChjdXJyLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3IFN0YWNrRnJhbWUoe2Z1bmN0aW9uTmFtZTogUmVnRXhwLiQxIHx8IHVuZGVmaW5lZCwgYXJnczogYXJnc30pKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ldyBTdGFja0ZyYW1lKHthcmdzOiBhcmdzfSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLmNhbGxlcjtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdGFjaztcbiAgICAgICAgfVxuICAgIH07XG59KSk7XG4iLCIoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgICd1c2Ugc3RyaWN0JztcbiAgICAvLyBVbml2ZXJzYWwgTW9kdWxlIERlZmluaXRpb24gKFVNRCkgdG8gc3VwcG9ydCBBTUQsIENvbW1vbkpTL05vZGUuanMsIFJoaW5vLCBhbmQgYnJvd3NlcnMuXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgZGVmaW5lKCdzdGFja3RyYWNlLWdwcycsIFsnc291cmNlLW1hcCcsICdzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyJyksIHJlcXVpcmUoJ3N0YWNrZnJhbWUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5TdGFja1RyYWNlR1BTID0gZmFjdG9yeShyb290LlNvdXJjZU1hcCB8fCByb290LnNvdXJjZU1hcCwgcm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uKFNvdXJjZU1hcCwgU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKlxuICAgICAqIE1ha2UgYSBYLURvbWFpbiByZXF1ZXN0IHRvIHVybCBhbmQgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IHdpdGggcmVzcG9uc2UgdGV4dCBpZiBmdWxmaWxsZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfeGRyKHVybCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICByZXEub3BlbignZ2V0JywgdXJsKTtcbiAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIG9ucmVhZHlzdGF0ZWNoYW5nZSgpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChyZXEuc3RhdHVzID49IDIwMCAmJiByZXEuc3RhdHVzIDwgMzAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKHVybC5zdWJzdHIoMCwgNykgPT09ICdmaWxlOi8vJyAmJiByZXEucmVzcG9uc2VUZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0hUVFAgc3RhdHVzOiAnICsgcmVxLnN0YXR1cyArICcgcmV0cmlldmluZyAnICsgdXJsKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVxLnNlbmQoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgQmFzZTY0LWVuY29kZWQgc3RyaW5nIGludG8gaXRzIG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uLlxuICAgICAqIFVzZWQgZm9yIGlubGluZSBzb3VyY2VtYXBzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGI2NHN0ciBCYXNlLTY0IGVuY29kZWQgc3RyaW5nXG4gICAgICogQHJldHVybnMge1N0cmluZ30gb3JpZ2luYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhc2U2NC1lbmNvZGVkIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfYXRvYihiNjRzdHIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5hdG9iKSB7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93LmF0b2IoYjY0c3RyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3VwcGx5IGEgcG9seWZpbGwgZm9yIHdpbmRvdy5hdG9iIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9wYXJzZUpzb24oc3RyaW5nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgSlNPTiAhPT0gJ3VuZGVmaW5lZCcgJiYgSlNPTi5wYXJzZSkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3Qgc3VwcGx5IGEgcG9seWZpbGwgZm9yIEpTT04ucGFyc2UgaW4gdGhpcyBlbnZpcm9ubWVudCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRGdW5jdGlvbk5hbWUoc291cmNlLCBsaW5lTnVtYmVyLyosIGNvbHVtbk51bWJlciovKSB7XG4gICAgICAgIHZhciBzeW50YXhlcyA9IFtcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGZ1bmN0aW9uICh7YXJnc30pIFRPRE8gYXJncyBjYXB0dXJlXG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypmdW5jdGlvblxcYi8sXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiB7bmFtZX0oe2FyZ3N9KSBtWzFdPW5hbWUgbVsyXT1hcmdzXG4gICAgICAgICAgICAvZnVuY3Rpb25cXHMrKFteKCdcImBdKj8pXFxzKlxcKChbXildKilcXCkvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gZXZhbCgpXG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccyooPzpldmFsfG5ldyBGdW5jdGlvbilcXGIvLFxuICAgICAgICAgICAgLy8gZm5fbmFtZSgpIHtcbiAgICAgICAgICAgIC9cXGIoPyEoPzppZnxmb3J8c3dpdGNofHdoaWxlfHdpdGh8Y2F0Y2gpXFxiKSg/Oig/OnN0YXRpYylcXHMrKT8oXFxTKylcXHMqXFwoLio/XFwpXFxzKlxcey8sXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSAoKSA9PiB7XG4gICAgICAgICAgICAvWydcIl0/KFskX0EtWmEtel1bJF9BLVphLXowLTldKilbJ1wiXT9cXHMqWzo9XVxccypcXCguKj9cXClcXHMqPT4vXG4gICAgICAgIF07XG4gICAgICAgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgnXFxuJyk7XG5cbiAgICAgICAgLy8gV2FsayBiYWNrd2FyZHMgaW4gdGhlIHNvdXJjZSBsaW5lcyB1bnRpbCB3ZSBmaW5kIHRoZSBsaW5lIHdoaWNoIG1hdGNoZXMgb25lIG9mIHRoZSBwYXR0ZXJucyBhYm92ZVxuICAgICAgICB2YXIgY29kZSA9ICcnO1xuICAgICAgICB2YXIgbWF4TGluZXMgPSBNYXRoLm1pbihsaW5lTnVtYmVyLCAyMCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4TGluZXM7ICsraSkge1xuICAgICAgICAgICAgLy8gbGluZU5vIGlzIDEtYmFzZWQsIHNvdXJjZVtdIGlzIDAtYmFzZWRcbiAgICAgICAgICAgIHZhciBsaW5lID0gbGluZXNbbGluZU51bWJlciAtIGkgLSAxXTtcbiAgICAgICAgICAgIHZhciBjb21tZW50UG9zID0gbGluZS5pbmRleE9mKCcvLycpO1xuICAgICAgICAgICAgaWYgKGNvbW1lbnRQb3MgPj0gMCkge1xuICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cigwLCBjb21tZW50UG9zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBjb2RlID0gbGluZSArIGNvZGU7XG4gICAgICAgICAgICAgICAgdmFyIGxlbiA9IHN5bnRheGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtID0gc3ludGF4ZXNbaW5kZXhdLmV4ZWMoY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG1bMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtWzFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Vuc3VyZVN1cHBvcnRlZEVudmlyb25tZW50KCkge1xuICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY29uc3VtZSBzb3VyY2UgbWFwcyBpbiBvbGRlciBicm93c2VycycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGFja2ZyYW1lICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gU3RhY2tGcmFtZSBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUuZmlsZU5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBmaWxlIG5hbWUgaXMgbm90IGEgU3RyaW5nJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUubGluZU51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciAlIDEgIT09IDAgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUubGluZU51bWJlciA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGxpbmUgbnVtYmVyIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICE9PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIGNvbHVtbiBudW1iZXIgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSkge1xuICAgICAgICB2YXIgc291cmNlTWFwcGluZ1VybFJlZ0V4cCA9IC9cXC9cXC9bI0BdID9zb3VyY2VNYXBwaW5nVVJMPShbXlxccydcIl0rKVxccyokL21nO1xuICAgICAgICB2YXIgbGFzdFNvdXJjZU1hcHBpbmdVcmw7XG4gICAgICAgIHZhciBtYXRjaFNvdXJjZU1hcHBpbmdVcmw7XG4gICAgICAgIHdoaWxlIChtYXRjaFNvdXJjZU1hcHBpbmdVcmwgPSBzb3VyY2VNYXBwaW5nVXJsUmVnRXhwLmV4ZWMoc291cmNlKSkgeyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbiAgICAgICAgICAgIGxhc3RTb3VyY2VNYXBwaW5nVXJsID0gbWF0Y2hTb3VyY2VNYXBwaW5nVXJsWzFdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsYXN0U291cmNlTWFwcGluZ1VybCkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzb3VyY2VNYXBwaW5nVVJMIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwU291cmNlKHN0YWNrZnJhbWUsIHNvdXJjZU1hcENvbnN1bWVyLCBzb3VyY2VDYWNoZSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgbG9jID0gc291cmNlTWFwQ29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgICAgICAgICAgbGluZTogc3RhY2tmcmFtZS5saW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXJcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAobG9jLnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIC8vIGNhY2hlIG1hcHBlZCBzb3VyY2VzXG4gICAgICAgICAgICAgICAgdmFyIG1hcHBlZFNvdXJjZSA9IHNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IobG9jLnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKG1hcHBlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VDYWNoZVtsb2Muc291cmNlXSA9IG1hcHBlZFNvdXJjZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAvLyBnaXZlbiBzdGFja2ZyYW1lIGFuZCBzb3VyY2UgbG9jYXRpb24sIHVwZGF0ZSBzdGFja2ZyYW1lXG4gICAgICAgICAgICAgICAgICAgIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbG9jLm5hbWUgfHwgc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBzdGFja2ZyYW1lLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbG9jLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvYy5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiBsb2MuY29sdW1uXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ291bGQgbm90IGdldCBvcmlnaW5hbCBzb3VyY2UgZm9yIGdpdmVuIHN0YWNrZnJhbWUgYW5kIHNvdXJjZSBtYXAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICogICAgICBvcHRzLnNvdXJjZUNhY2hlID0ge3VybDogXCJTb3VyY2UgU3RyaW5nXCJ9ID0+IHByZWxvYWQgc291cmNlIGNhY2hlXG4gICAgICogICAgICBvcHRzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgPSB7L3BhdGgvZmlsZS5qcy5tYXA6IFNvdXJjZU1hcENvbnN1bWVyfVxuICAgICAqICAgICAgb3B0cy5vZmZsaW5lID0gVHJ1ZSB0byBwcmV2ZW50IG5ldHdvcmsgcmVxdWVzdHMuXG4gICAgICogICAgICAgICAgICAgIEJlc3QgZWZmb3J0IHdpdGhvdXQgc291cmNlcyBvciBzb3VyY2UgbWFwcy5cbiAgICAgKiAgICAgIG9wdHMuYWpheCA9IFByb21pc2UgcmV0dXJuaW5nIGZ1bmN0aW9uIHRvIG1ha2UgWC1Eb21haW4gcmVxdWVzdHNcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyhvcHRzKSB7XG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdGFja1RyYWNlR1BTKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja1RyYWNlR1BTKG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuc291cmNlQ2FjaGUgPSBvcHRzLnNvdXJjZUNhY2hlIHx8IHt9O1xuICAgICAgICB0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgPSBvcHRzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGUgfHwge307XG5cbiAgICAgICAgdGhpcy5hamF4ID0gb3B0cy5hamF4IHx8IF94ZHI7XG5cbiAgICAgICAgdGhpcy5fYXRvYiA9IG9wdHMuYXRvYiB8fCBfYXRvYjtcblxuICAgICAgICB0aGlzLl9nZXQgPSBmdW5jdGlvbiBfZ2V0KGxvY2F0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzRGF0YVVybCA9IGxvY2F0aW9uLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRzLm9mZmxpbmUgJiYgIWlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdDYW5ub3QgbWFrZSBuZXR3b3JrIHJlcXVlc3RzIGluIG9mZmxpbmUgbW9kZScpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNEYXRhVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIFVSTHMgY2FuIGhhdmUgcGFyYW1ldGVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMzk3XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VwcG9ydGVkRW5jb2RpbmdSZWdleHAgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9eZGF0YTphcHBsaWNhdGlvblxcL2pzb247KFtcXHc9OlwiLV0rOykqYmFzZTY0LC87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBsb2NhdGlvbi5tYXRjaChzdXBwb3J0ZWRFbmNvZGluZ1JlZ2V4cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwU3RhcnQgPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kZWRTb3VyY2UgPSBsb2NhdGlvbi5zdWJzdHIoc291cmNlTWFwU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLl9hdG9iKGVuY29kZWRTb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0gc291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVGhlIGVuY29kaW5nIG9mIHRoZSBpbmxpbmUgc291cmNlbWFwIGlzIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGhyUHJvbWlzZSA9IHRoaXMuYWpheChsb2NhdGlvbiwge21ldGhvZDogJ2dldCd9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhY2hlIHRoZSBQcm9taXNlIHRvIHByZXZlbnQgZHVwbGljYXRlIGluLWZsaWdodCByZXF1ZXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0gPSB4aHJQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyUHJvbWlzZS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGluZyBTb3VyY2VNYXBDb25zdW1lcnMgaXMgZXhwZW5zaXZlLCBzbyB0aGlzIHdyYXBzIHRoZSBjcmVhdGlvbiBvZiBhXG4gICAgICAgICAqIFNvdXJjZU1hcENvbnN1bWVyIGluIGEgcGVyLWluc3RhbmNlIGNhY2hlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gc291cmNlTWFwcGluZ1VSTCA9IFVSTCB0byBmZXRjaCBzb3VyY2UgbWFwIGZyb21cbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGRlZmF1bHRTb3VyY2VSb290ID0gRGVmYXVsdCBzb3VyY2Ugcm9vdCBmb3Igc291cmNlIG1hcCBpZiB1bmRlZmluZWRcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgYSBTb3VyY2VNYXBDb25zdW1lclxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fZ2V0U291cmNlTWFwQ29uc3VtZXIgPSBmdW5jdGlvbiBfZ2V0U291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwcGluZ1VSTCwgZGVmYXVsdFNvdXJjZVJvb3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlW3NvdXJjZU1hcHBpbmdVUkxdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwQ29uc3VtZXJQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0KHNvdXJjZU1hcHBpbmdVUkwpLnRoZW4oZnVuY3Rpb24oc291cmNlTWFwU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VNYXBTb3VyY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcFNvdXJjZSA9IF9wYXJzZUpzb24oc291cmNlTWFwU291cmNlLnJlcGxhY2UoL15cXClcXF1cXH0nLywgJycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VNYXBTb3VyY2Uuc291cmNlUm9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwU291cmNlLnNvdXJjZVJvb3QgPSBkZWZhdWx0U291cmNlUm9vdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBTb3VyY2VNYXAuU291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwU291cmNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGVbc291cmNlTWFwcGluZ1VSTF0gPSBzb3VyY2VNYXBDb25zdW1lclByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc291cmNlTWFwQ29uc3VtZXJQcm9taXNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhIFN0YWNrRnJhbWUsIGVuaGFuY2UgZnVuY3Rpb24gbmFtZSBhbmQgdXNlIHNvdXJjZSBtYXBzIGZvciBhXG4gICAgICAgICAqIGJldHRlciBTdGFja0ZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWUgb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggd2l0aCBzb3VyY2UtbWFwcGVkIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGlucG9pbnQgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRwaW5wb2ludChzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKS50aGVuKGZ1bmN0aW9uKG1hcHBlZFN0YWNrRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lKG1hcHBlZFN0YWNrRnJhbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlLCByZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIFsnY2F0Y2gnXShyZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSk7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCByZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBndWVzcyBmdW5jdGlvbiBuYW1lIGZyb20gbG9jYXRpb24gaW5mb3JtYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbmRGdW5jdGlvbk5hbWUgPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRmaW5kRnVuY3Rpb25OYW1lKHN0YWNrZnJhbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBfZW5zdXJlU3RhY2tGcmFtZUlzTGVnaXQoc3RhY2tmcmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0KHN0YWNrZnJhbWUuZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24gZ2V0U291cmNlQ2FsbGJhY2soc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gc3RhY2tmcmFtZS5saW5lTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uTnVtYmVyID0gc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBndWVzc2VkRnVuY3Rpb25OYW1lID0gX2ZpbmRGdW5jdGlvbk5hbWUoc291cmNlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHJlcGxhY2UgZnVuY3Rpb25OYW1lIGlmIHdlIGZvdW5kIHNvbWV0aGluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3Vlc3NlZEZ1bmN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBndWVzc2VkRnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHN0YWNrZnJhbWUuYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogc3RhY2tmcmFtZS5maWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBTdGFja0ZyYW1lLCBzZWVrIHNvdXJjZS1tYXBwZWQgbG9jYXRpb24gYW5kIHJldHVybiBuZXcgZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdGFja0ZyYW1lfSBzdGFja2ZyYW1lXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggZW5oYW5jZWQgU3RhY2tGcmFtZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZ2V0TWFwcGVkTG9jYXRpb24gPSBmdW5jdGlvbiBTdGFja1RyYWNlR1BTJCRnZXRNYXBwZWRMb2NhdGlvbihzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN1cHBvcnRlZEVudmlyb25tZW50KCk7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZTtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBzdGFja2ZyYW1lLmZpbGVOYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChmaWxlTmFtZSkudGhlbihmdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmdVUkwgPSBfZmluZFNvdXJjZU1hcHBpbmdVUkwoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzRGF0YVVybCA9IHNvdXJjZU1hcHBpbmdVUkwuc3Vic3RyKDAsIDUpID09PSAnZGF0YTonO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdFNvdXJjZVJvb3QgPSBmaWxlTmFtZS5zdWJzdHJpbmcoMCwgZmlsZU5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VNYXBwaW5nVVJMWzBdICE9PSAnLycgJiYgIWlzRGF0YVVybCAmJiAhKC9eaHR0cHM/OlxcL1xcL3xeXFwvXFwvL2kpLnRlc3Qoc291cmNlTWFwcGluZ1VSTCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcHBpbmdVUkwgPSBkZWZhdWx0U291cmNlUm9vdCArIHNvdXJjZU1hcHBpbmdVUkw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U291cmNlTWFwQ29uc3VtZXIoc291cmNlTWFwcGluZ1VSTCwgZGVmYXVsdFNvdXJjZVJvb3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihzb3VyY2VNYXBDb25zdW1lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZXh0cmFjdExvY2F0aW9uSW5mb0Zyb21Tb3VyY2VNYXBTb3VyY2Uoc3RhY2tmcmFtZSwgc291cmNlTWFwQ29uc3VtZXIsIHNvdXJjZUNhY2hlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKVsnY2F0Y2gnXShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZScsIFsnZXJyb3Itc3RhY2stcGFyc2VyJywgJ3N0YWNrLWdlbmVyYXRvcicsICdzdGFja3RyYWNlLWdwcyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnZXJyb3Itc3RhY2stcGFyc2VyJyksIHJlcXVpcmUoJ3N0YWNrLWdlbmVyYXRvcicpLCByZXF1aXJlKCdzdGFja3RyYWNlLWdwcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2UgPSBmYWN0b3J5KHJvb3QuRXJyb3JTdGFja1BhcnNlciwgcm9vdC5TdGFja0dlbmVyYXRvciwgcm9vdC5TdGFja1RyYWNlR1BTKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIFN0YWNrVHJhY2UoRXJyb3JTdGFja1BhcnNlciwgU3RhY2tHZW5lcmF0b3IsIFN0YWNrVHJhY2VHUFMpIHtcbiAgICB2YXIgX29wdGlvbnMgPSB7XG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBzdGFja2ZyYW1lcyBmb3IgdGhpcyBsaWJyYXJ5IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2UkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignRXJyb3JTdGFja1BhcnNlciQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlR1BTJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrR2VuZXJhdG9yJCQnKSA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZUNhY2hlOiB7fVxuICAgIH07XG5cbiAgICB2YXIgX2dlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRHZW5lcmF0ZUVycm9yKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRXJyb3IgbXVzdCBiZSB0aHJvd24gdG8gZ2V0IHN0YWNrIGluIElFXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdlIDIgZ2l2ZW4gT2JqZWN0cy4gSWYgYSBjb25mbGljdCBvY2N1cnMgdGhlIHNlY29uZCBvYmplY3Qgd2lucy5cbiAgICAgKiBEb2VzIG5vdCBkbyBkZWVwIG1lcmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaXJzdCBiYXNlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWNvbmQgb3ZlcnJpZGVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gbWVyZ2VkIGZpcnN0IGFuZCBzZWNvbmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tZXJnZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcblxuICAgICAgICBbZmlyc3QsIHNlY29uZF0uZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGVyci5zdGFjayB8fCBlcnJbJ29wZXJhI3NvdXJjZWxvYyddO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maWx0ZXJlZChzdGFja2ZyYW1lcywgZmlsdGVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXMuZmlsdGVyKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YWNrZnJhbWVzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7QXJyYXl9IG9mIFN0YWNrRnJhbWVcbiAgICAgICAgICovXG4gICAgICAgIGdldDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0KG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgcmV0dXJuIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikgPyB0aGlzLmZyb21FcnJvcihlcnIsIG9wdHMpIDogdGhpcy5nZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0IGEgYmFja3RyYWNlIGZyb20gaW52b2NhdGlvbiBwb2ludC5cbiAgICAgICAgICogSU1QT1JUQU5UOiBEb2VzIG5vdCBoYW5kbGUgc291cmNlIG1hcHMgb3IgZ3Vlc3MgZnVuY3Rpb24gbmFtZXMhXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0U3luYzogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2V0U3luYyhvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBlcnIgPSBfZ2VuZXJhdGVFcnJvcigpO1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyKSA6IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyZWQoc3RhY2ssIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3Igb2JqZWN0LCBwYXJzZSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSBmb3IgQXJyYXlbU3RhY2tGcmFtZX1cbiAgICAgICAgICovXG4gICAgICAgIGZyb21FcnJvcjogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZnJvbUVycm9yKGVycm9yLCBvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBncHMgPSBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN0YWNrZnJhbWVzID0gX2ZpbHRlcmVkKEVycm9yU3RhY2tQYXJzZXIucGFyc2UoZXJyb3IpLCBvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShQcm9taXNlLmFsbChzdGFja2ZyYW1lcy5tYXAoZnVuY3Rpb24oc2YpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc29sdmVPcmlnaW5hbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ3BzLnBpbnBvaW50KHNmKS50aGVuKHJlc29sdmUsIHJlc29sdmVPcmlnaW5hbClbJ2NhdGNoJ10ocmVzb2x2ZU9yaWdpbmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBTdGFja0dlbmVyYXRvciB0byBnZW5lcmF0ZSBhIGJhY2t0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IG9mIEFycmF5W1N0YWNrRnJhbWVdXG4gICAgICAgICAqL1xuICAgICAgICBnZW5lcmF0ZUFydGlmaWNpYWxseTogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZ2VuZXJhdGVBcnRpZmljaWFsbHkob3B0cykge1xuICAgICAgICAgICAgb3B0cyA9IF9tZXJnZShfb3B0aW9ucywgb3B0cyk7XG4gICAgICAgICAgICB2YXIgc3RhY2tGcmFtZXMgPSBTdGFja0dlbmVyYXRvci5iYWNrdHJhY2Uob3B0cyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgc3RhY2tGcmFtZXMgPSBzdGFja0ZyYW1lcy5maWx0ZXIob3B0cy5maWx0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdGFja0ZyYW1lcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24sIHdyYXAgaXQgc3VjaCB0aGF0IGludm9jYXRpb25zIHRyaWdnZXIgYSBjYWxsYmFjayB0aGF0XG4gICAgICAgICAqIGlzIGNhbGxlZCB3aXRoIGEgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGJlIGluc3RydW1lbnRlZFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdpdGggYSBzdGFjayB0cmFjZSBvbiBpbnZvY2F0aW9uXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVycmJhY2sgb3B0aW9uYWwgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIGVycm9yIGlmIHVuYWJsZSB0byBnZXQgc3RhY2sgdHJhY2UuXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIG9wdGlvbmFsIGNvbnRleHQgb2JqZWN0IChlLmcuIHdpbmRvdylcbiAgICAgICAgICovXG4gICAgICAgIGluc3RydW1lbnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnQoZm4sIGNhbGxiYWNrLCBlcnJiYWNrLCB0aGlzQXJnKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBpbnN0cnVtZW50ZWQsIHJldHVybiBnaXZlbiBGdW5jdGlvblxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGluc3RydW1lbnRlZCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJGluc3RydW1lbnRlZCgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldCgpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZyB8fCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb21FcnJvcihlKS50aGVuKGNhbGxiYWNrLCBlcnJiYWNrKVsnY2F0Y2gnXShlcnJiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGluc3RydW1lbnRlZC5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID0gZm47XG5cbiAgICAgICAgICAgIHJldHVybiBpbnN0cnVtZW50ZWQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgZnVuY3Rpb24gdGhhdCBoYXMgYmVlbiBpbnN0cnVtZW50ZWQsXG4gICAgICAgICAqIHJldmVydCB0aGUgZnVuY3Rpb24gdG8gaXQncyBvcmlnaW5hbCAobm9uLWluc3RydW1lbnRlZCkgc3RhdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHRvIGRlLWluc3RydW1lbnRcbiAgICAgICAgICovXG4gICAgICAgIGRlaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkZGVpbnN0cnVtZW50KGZuKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGUtaW5zdHJ1bWVudCBub24tZnVuY3Rpb24gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmbi5fX3N0YWNrdHJhY2VPcmlnaW5hbEZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIG5vdCBpbnN0cnVtZW50ZWQsIHJldHVybiBvcmlnaW5hbFxuICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYW4gZXJyb3IgbWVzc2FnZSBhbmQgQXJyYXkgb2YgU3RhY2tGcmFtZXMsIHNlcmlhbGl6ZSBhbmQgUE9TVCB0byBnaXZlbiBVUkwuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrZnJhbWVzXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVycm9yTXNnXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0T3B0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgcmVwb3J0OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRyZXBvcnQoc3RhY2tmcmFtZXMsIHVybCwgZXJyb3JNc2csIHJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEucmVhZHlTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPj0gMjAwICYmIHJlcS5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdQT1NUIHRvICcgKyB1cmwgKyAnIGZhaWxlZCB3aXRoIHN0YXR1czogJyArIHJlcS5zdGF0dXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVxLm9wZW4oJ3Bvc3QnLCB1cmwpO1xuXG4gICAgICAgICAgICAgICAgLy8gU2V0IHJlcXVlc3QgaGVhZGVyc1xuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucyAmJiB0eXBlb2YgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciwgaGVhZGVyc1toZWFkZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciByZXBvcnRQYXlsb2FkID0ge3N0YWNrOiBzdGFja2ZyYW1lc307XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQgJiYgZXJyb3JNc2cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0UGF5bG9hZC5tZXNzYWdlID0gZXJyb3JNc2c7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVxLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVwb3J0UGF5bG9hZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIl19 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZXJyb3Itc3RhY2stcGFyc2VyL2Vycm9yLXN0YWNrLXBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9lcnJvci1zdGFjay1wYXJzZXIvbm9kZV9tb2R1bGVzL3N0YWNrZnJhbWUvc3RhY2tmcmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9hcnJheS1zZXQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmFzZTY0LXZscS5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iYXNlNjQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9xdWljay1zb3J0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3NvdXJjZS1tYXAtY29uc3VtZXIuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9zdGFjay1nZW5lcmF0b3Ivc3RhY2stZ2VuZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL3N0YWNrdHJhY2UtZ3BzL3N0YWNrdHJhY2UtZ3BzLmpzIiwic3RhY2t0cmFjZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxakNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDamFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnZXJyb3Itc3RhY2stcGFyc2VyJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuRXJyb3JTdGFja1BhcnNlciA9IGZhY3Rvcnkocm9vdC5TdGFja0ZyYW1lKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIoU3RhY2tGcmFtZSkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBGSVJFRk9YX1NBRkFSSV9TVEFDS19SRUdFWFAgPSAvKF58QClcXFMrOlxcZCsvO1xuICAgIHZhciBDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQID0gL15cXHMqYXQgLiooXFxTKzpcXGQrfFxcKG5hdGl2ZVxcKSkvbTtcbiAgICB2YXIgU0FGQVJJX05BVElWRV9DT0RFX1JFR0VYUCA9IC9eKGV2YWxAKT8oXFxbbmF0aXZlIGNvZGVdKT8kLztcblxuICAgIHJldHVybiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhbiBFcnJvciBvYmplY3QsIGV4dHJhY3QgdGhlIG1vc3QgaW5mb3JtYXRpb24gZnJvbSBpdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3Igb2JqZWN0XG4gICAgICAgICAqIEByZXR1cm4ge0FycmF5fSBvZiBTdGFja0ZyYW1lc1xuICAgICAgICAgKi9cbiAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIEVycm9yU3RhY2tQYXJzZXIkJHBhcnNlKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVycm9yLnN0YWNrdHJhY2UgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBlcnJvclsnb3BlcmEjc291cmNlbG9jJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLnN0YWNrICYmIGVycm9yLnN0YWNrLm1hdGNoKENIUk9NRV9JRV9TVEFDS19SRUdFWFApKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VWOE9ySUUoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlRkZPclNhZmFyaShlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIGdpdmVuIEVycm9yIG9iamVjdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFNlcGFyYXRlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGZyb20gYSBzdHJpbmcgb2YgdGhlIGZvcm06IChVUkk6TGluZTpDb2x1bW4pXG4gICAgICAgIGV4dHJhY3RMb2NhdGlvbjogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkZXh0cmFjdExvY2F0aW9uKHVybExpa2UpIHtcbiAgICAgICAgICAgIC8vIEZhaWwtZmFzdCBidXQgcmV0dXJuIGxvY2F0aW9ucyBsaWtlIFwiKG5hdGl2ZSlcIlxuICAgICAgICAgICAgaWYgKHVybExpa2UuaW5kZXhPZignOicpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbdXJsTGlrZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciByZWdFeHAgPSAvKC4rPykoPzo6KFxcZCspKT8oPzo6KFxcZCspKT8kLztcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IHJlZ0V4cC5leGVjKHVybExpa2UucmVwbGFjZSgvWygpXS9nLCAnJykpO1xuICAgICAgICAgICAgcmV0dXJuIFtwYXJ0c1sxXSwgcGFydHNbMl0gfHwgdW5kZWZpbmVkLCBwYXJ0c1szXSB8fCB1bmRlZmluZWRdO1xuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlVjhPcklFOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZVY4T3JJRShlcnJvcikge1xuICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gZXJyb3Iuc3RhY2suc3BsaXQoJ1xcbicpLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbGluZS5tYXRjaChDSFJPTUVfSUVfU1RBQ0tfUkVHRVhQKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCcoZXZhbCAnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRocm93IGF3YXkgZXZhbCBpbmZvcm1hdGlvbiB1bnRpbCB3ZSBpbXBsZW1lbnQgc3RhY2t0cmFjZS5qcy9zdGFja2ZyYW1lIzhcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvZXZhbCBjb2RlL2csICdldmFsJykucmVwbGFjZSgvKFxcKGV2YWwgYXQgW14oKV0qKXwoXFwpLC4qJCkvZywgJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgc2FuaXRpemVkTGluZSA9IGxpbmUucmVwbGFjZSgvXlxccysvLCAnJykucmVwbGFjZSgvXFwoZXZhbCBjb2RlL2csICcoJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBjYXB0dXJlIGFuZCBwcmVzZXZlIHRoZSBwYXJlbnRoZXNpemVkIGxvY2F0aW9uIFwiKC9mb28vbXkgYmFyLmpzOjEyOjg3KVwiIGluXG4gICAgICAgICAgICAgICAgLy8gY2FzZSBpdCBoYXMgc3BhY2VzIGluIGl0LCBhcyB0aGUgc3RyaW5nIGlzIHNwbGl0IG9uIFxccysgbGF0ZXIgb25cbiAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24gPSBzYW5pdGl6ZWRMaW5lLm1hdGNoKC8gKFxcKCguKyk6KFxcZCspOihcXGQrKVxcKSQpLyk7XG5cbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIHBhcmVudGhlc2l6ZWQgbG9jYXRpb24gZnJvbSB0aGUgbGluZSwgaWYgaXQgd2FzIG1hdGNoZWRcbiAgICAgICAgICAgICAgICBzYW5pdGl6ZWRMaW5lID0gbG9jYXRpb24gPyBzYW5pdGl6ZWRMaW5lLnJlcGxhY2UobG9jYXRpb25bMF0sICcnKSA6IHNhbml0aXplZExpbmU7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gc2FuaXRpemVkTGluZS5zcGxpdCgvXFxzKy8pLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIC8vIGlmIGEgbG9jYXRpb24gd2FzIG1hdGNoZWQsIHBhc3MgaXQgdG8gZXh0cmFjdExvY2F0aW9uKCkgb3RoZXJ3aXNlIHBvcCB0aGUgbGFzdCB0b2tlblxuICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvblBhcnRzID0gdGhpcy5leHRyYWN0TG9jYXRpb24obG9jYXRpb24gPyBsb2NhdGlvblsxXSA6IHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHRva2Vucy5qb2luKCcgJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IFsnZXZhbCcsICc8YW5vbnltb3VzPiddLmluZGV4T2YobG9jYXRpb25QYXJ0c1swXSkgPiAtMSA/IHVuZGVmaW5lZCA6IGxvY2F0aW9uUGFydHNbMF07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VGRk9yU2FmYXJpOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZUZGT3JTYWZhcmkoZXJyb3IpIHtcbiAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKS5maWx0ZXIoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhbGluZS5tYXRjaChTQUZBUklfTkFUSVZFX0NPREVfUkVHRVhQKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICAvLyBUaHJvdyBhd2F5IGV2YWwgaW5mb3JtYXRpb24gdW50aWwgd2UgaW1wbGVtZW50IHN0YWNrdHJhY2UuanMvc3RhY2tmcmFtZSM4XG4gICAgICAgICAgICAgICAgaWYgKGxpbmUuaW5kZXhPZignID4gZXZhbCcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgvIGxpbmUgKFxcZCspKD86ID4gZXZhbCBsaW5lIFxcZCspKiA+IGV2YWw6XFxkKzpcXGQrL2csICc6JDEnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobGluZS5pbmRleE9mKCdAJykgPT09IC0xICYmIGxpbmUuaW5kZXhPZignOicpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTYWZhcmkgZXZhbCBmcmFtZXMgb25seSBoYXZlIGZ1bmN0aW9uIG5hbWVzIGFuZCBub3RoaW5nIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbGluZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lUmVnZXggPSAvKCguKlwiLitcIlteQF0qKT9bXkBdKikoPzpAKS87XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaGVzID0gbGluZS5tYXRjaChmdW5jdGlvbk5hbWVSZWdleCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBtYXRjaGVzICYmIG1hdGNoZXNbMV0gPyBtYXRjaGVzWzFdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKGxpbmUucmVwbGFjZShmdW5jdGlvbk5hbWVSZWdleCwgJycpKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbG9jYXRpb25QYXJ0c1swXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxvY2F0aW9uUGFydHNbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYShlKSB7XG4gICAgICAgICAgICBpZiAoIWUuc3RhY2t0cmFjZSB8fCAoZS5tZXNzYWdlLmluZGV4T2YoJ1xcbicpID4gLTEgJiZcbiAgICAgICAgICAgICAgICBlLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpLmxlbmd0aCA+IGUuc3RhY2t0cmFjZS5zcGxpdCgnXFxuJykubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmE5KGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghZS5zdGFjaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3BlcmExMChlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcGVyYTExKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHBhcnNlT3BlcmE5OiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhOShlKSB7XG4gICAgICAgICAgICB2YXIgbGluZVJFID0gL0xpbmUgKFxcZCspLipzY3JpcHQgKD86aW4gKT8oXFxTKykvaTtcbiAgICAgICAgICAgIHZhciBsaW5lcyA9IGUubWVzc2FnZS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAyLCBsZW4gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmVSRS5leGVjKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbWF0Y2hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGxpbmVzW2ldXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcGFyc2VPcGVyYTEwOiBmdW5jdGlvbiBFcnJvclN0YWNrUGFyc2VyJCRwYXJzZU9wZXJhMTAoZSkge1xuICAgICAgICAgICAgdmFyIGxpbmVSRSA9IC9MaW5lIChcXGQrKS4qc2NyaXB0ICg/OmluICk/KFxcUyspKD86OiBJbiBmdW5jdGlvbiAoXFxTKykpPyQvaTtcbiAgICAgICAgICAgIHZhciBsaW5lcyA9IGUuc3RhY2t0cmFjZS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMikge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmVSRS5leGVjKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBtYXRjaFszXSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZXNbaV1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LFxuXG4gICAgICAgIC8vIE9wZXJhIDEwLjY1KyBFcnJvci5zdGFjayB2ZXJ5IHNpbWlsYXIgdG8gRkYvU2FmYXJpXG4gICAgICAgIHBhcnNlT3BlcmExMTogZnVuY3Rpb24gRXJyb3JTdGFja1BhcnNlciQkcGFyc2VPcGVyYTExKGVycm9yKSB7XG4gICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBlcnJvci5zdGFjay5zcGxpdCgnXFxuJykuZmlsdGVyKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFsaW5lLm1hdGNoKEZJUkVGT1hfU0FGQVJJX1NUQUNLX1JFR0VYUCkgJiYgIWxpbmUubWF0Y2goL15FcnJvciBjcmVhdGVkIGF0Lyk7XG4gICAgICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IGxpbmUuc3BsaXQoJ0AnKTtcbiAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb25QYXJ0cyA9IHRoaXMuZXh0cmFjdExvY2F0aW9uKHRva2Vucy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uQ2FsbCA9ICh0b2tlbnMuc2hpZnQoKSB8fCAnJyk7XG4gICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uQ2FsbFxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPGFub255bW91cyBmdW5jdGlvbig6IChcXHcrKSk/Pi8sICckMicpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXChbXildKlxcKS9nLCAnJykgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciBhcmdzUmF3O1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkNhbGwubWF0Y2goL1xcKChbXildKilcXCkvKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmdzUmF3ID0gZnVuY3Rpb25DYWxsLnJlcGxhY2UoL15bXihdK1xcKChbXildKilcXCkkLywgJyQxJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gKGFyZ3NSYXcgPT09IHVuZGVmaW5lZCB8fCBhcmdzUmF3ID09PSAnW2FyZ3VtZW50cyBub3QgYXZhaWxhYmxlXScpID9cbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDogYXJnc1Jhdy5zcGxpdCgnLCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFja0ZyYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBsb2NhdGlvblBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2NhdGlvblBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGxvY2F0aW9uUGFydHNbMl0sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbGluZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2tmcmFtZScsIFtdLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrRnJhbWUgPSBmYWN0b3J5KCk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbigpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgZnVuY3Rpb24gX2lzTnVtYmVyKG4pIHtcbiAgICAgICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfY2FwaXRhbGl6ZShzdHIpIHtcbiAgICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2dldHRlcihwKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3BdO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBib29sZWFuUHJvcHMgPSBbJ2lzQ29uc3RydWN0b3InLCAnaXNFdmFsJywgJ2lzTmF0aXZlJywgJ2lzVG9wbGV2ZWwnXTtcbiAgICB2YXIgbnVtZXJpY1Byb3BzID0gWydjb2x1bW5OdW1iZXInLCAnbGluZU51bWJlciddO1xuICAgIHZhciBzdHJpbmdQcm9wcyA9IFsnZmlsZU5hbWUnLCAnZnVuY3Rpb25OYW1lJywgJ3NvdXJjZSddO1xuICAgIHZhciBhcnJheVByb3BzID0gWydhcmdzJ107XG5cbiAgICB2YXIgcHJvcHMgPSBib29sZWFuUHJvcHMuY29uY2F0KG51bWVyaWNQcm9wcywgc3RyaW5nUHJvcHMsIGFycmF5UHJvcHMpO1xuXG4gICAgZnVuY3Rpb24gU3RhY2tGcmFtZShvYmopIHtcbiAgICAgICAgaWYgKCFvYmopIHJldHVybjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKG9ialtwcm9wc1tpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXNbJ3NldCcgKyBfY2FwaXRhbGl6ZShwcm9wc1tpXSldKG9ialtwcm9wc1tpXV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgU3RhY2tGcmFtZS5wcm90b3R5cGUgPSB7XG4gICAgICAgIGdldEFyZ3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJncztcbiAgICAgICAgfSxcbiAgICAgICAgc2V0QXJnczogZnVuY3Rpb24odikge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSAhPT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3MgbXVzdCBiZSBhbiBBcnJheScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcmdzID0gdjtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRFdmFsT3JpZ2luOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2YWxPcmlnaW47XG4gICAgICAgIH0sXG4gICAgICAgIHNldEV2YWxPcmlnaW46IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgU3RhY2tGcmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZhbE9yaWdpbiA9IHY7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV2YWxPcmlnaW4gPSBuZXcgU3RhY2tGcmFtZSh2KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXZhbCBPcmlnaW4gbXVzdCBiZSBhbiBPYmplY3Qgb3IgU3RhY2tGcmFtZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IHRoaXMuZ2V0RmlsZU5hbWUoKSB8fCAnJztcbiAgICAgICAgICAgIHZhciBsaW5lTnVtYmVyID0gdGhpcy5nZXRMaW5lTnVtYmVyKCkgfHwgJyc7XG4gICAgICAgICAgICB2YXIgY29sdW1uTnVtYmVyID0gdGhpcy5nZXRDb2x1bW5OdW1iZXIoKSB8fCAnJztcbiAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSB0aGlzLmdldEZ1bmN0aW9uTmFtZSgpIHx8ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0SXNFdmFsKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbZXZhbF0gKCcgKyBmaWxlTmFtZSArICc6JyArIGxpbmVOdW1iZXIgKyAnOicgKyBjb2x1bW5OdW1iZXIgKyAnKSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAnW2V2YWxdOicgKyBsaW5lTnVtYmVyICsgJzonICsgY29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZ1bmN0aW9uTmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbk5hbWUgKyAnICgnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJzonICsgY29sdW1uTnVtYmVyICsgJyknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICc6JyArIGNvbHVtbk51bWJlcjtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBTdGFja0ZyYW1lLmZyb21TdHJpbmcgPSBmdW5jdGlvbiBTdGFja0ZyYW1lJCRmcm9tU3RyaW5nKHN0cikge1xuICAgICAgICB2YXIgYXJnc1N0YXJ0SW5kZXggPSBzdHIuaW5kZXhPZignKCcpO1xuICAgICAgICB2YXIgYXJnc0VuZEluZGV4ID0gc3RyLmxhc3RJbmRleE9mKCcpJyk7XG5cbiAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IHN0ci5zdWJzdHJpbmcoMCwgYXJnc1N0YXJ0SW5kZXgpO1xuICAgICAgICB2YXIgYXJncyA9IHN0ci5zdWJzdHJpbmcoYXJnc1N0YXJ0SW5kZXggKyAxLCBhcmdzRW5kSW5kZXgpLnNwbGl0KCcsJyk7XG4gICAgICAgIHZhciBsb2NhdGlvblN0cmluZyA9IHN0ci5zdWJzdHJpbmcoYXJnc0VuZEluZGV4ICsgMSk7XG5cbiAgICAgICAgaWYgKGxvY2F0aW9uU3RyaW5nLmluZGV4T2YoJ0AnKSA9PT0gMCkge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gL0AoLis/KSg/OjooXFxkKykpPyg/OjooXFxkKykpPyQvLmV4ZWMobG9jYXRpb25TdHJpbmcsICcnKTtcbiAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IHBhcnRzWzFdO1xuICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBwYXJ0c1syXTtcbiAgICAgICAgICAgIHZhciBjb2x1bW5OdW1iZXIgPSBwYXJ0c1szXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3MgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGVOYW1lLFxuICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlciB8fCB1bmRlZmluZWRcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9vbGVhblByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUoYm9vbGVhblByb3BzW2ldKV0gPSBfZ2V0dGVyKGJvb2xlYW5Qcm9wc1tpXSk7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydzZXQnICsgX2NhcGl0YWxpemUoYm9vbGVhblByb3BzW2ldKV0gPSAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gQm9vbGVhbih2KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKGJvb2xlYW5Qcm9wc1tpXSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1lcmljUHJvcHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ2dldCcgKyBfY2FwaXRhbGl6ZShudW1lcmljUHJvcHNbal0pXSA9IF9nZXR0ZXIobnVtZXJpY1Byb3BzW2pdKTtcbiAgICAgICAgU3RhY2tGcmFtZS5wcm90b3R5cGVbJ3NldCcgKyBfY2FwaXRhbGl6ZShudW1lcmljUHJvcHNbal0pXSA9IChmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24odikge1xuICAgICAgICAgICAgICAgIGlmICghX2lzTnVtYmVyKHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IocCArICcgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gTnVtYmVyKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkobnVtZXJpY1Byb3BzW2pdKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IHN0cmluZ1Byb3BzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIFN0YWNrRnJhbWUucHJvdG90eXBlWydnZXQnICsgX2NhcGl0YWxpemUoc3RyaW5nUHJvcHNba10pXSA9IF9nZXR0ZXIoc3RyaW5nUHJvcHNba10pO1xuICAgICAgICBTdGFja0ZyYW1lLnByb3RvdHlwZVsnc2V0JyArIF9jYXBpdGFsaXplKHN0cmluZ1Byb3BzW2tdKV0gPSAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICB0aGlzW3BdID0gU3RyaW5nKHYpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkoc3RyaW5nUHJvcHNba10pO1xuICAgIH1cblxuICAgIHJldHVybiBTdGFja0ZyYW1lO1xufSkpO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3XG4gKiBtZW1iZXIgaXMgTygxKSwgdGVzdGluZyBmb3IgbWVtYmVyc2hpcCBpcyBPKDEpLCBhbmQgZmluZGluZyB0aGUgaW5kZXggb2YgYW5cbiAqIGVsZW1lbnQgaXMgTygxKS4gUmVtb3ZpbmcgZWxlbWVudHMgZnJvbSB0aGUgc2V0IGlzIG5vdCBzdXBwb3J0ZWQuIE9ubHlcbiAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgbWVtYmVyc2hpcC5cbiAqL1xuZnVuY3Rpb24gQXJyYXlTZXQoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8qKlxuICogU3RhdGljIG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gKi9cbkFycmF5U2V0LmZyb21BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X2Zyb21BcnJheShhQXJyYXksIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYUFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgc2V0LmFkZChhQXJyYXlbaV0sIGFBbGxvd0R1cGxpY2F0ZXMpO1xuICB9XG4gIHJldHVybiBzZXQ7XG59O1xuXG4vKipcbiAqIFJldHVybiBob3cgbWFueSB1bmlxdWUgaXRlbXMgYXJlIGluIHRoaXMgQXJyYXlTZXQuIElmIGR1cGxpY2F0ZXMgaGF2ZSBiZWVuXG4gKiBhZGRlZCwgdGhhbiB0aG9zZSBkbyBub3QgY291bnQgdG93YXJkcyB0aGUgc2l6ZS5cbiAqXG4gKiBAcmV0dXJucyBOdW1iZXJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiBBcnJheVNldF9zaXplKCkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fc2V0KS5sZW5ndGg7XG59O1xuXG4vKipcbiAqIEFkZCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoaXMgc2V0LlxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gQXJyYXlTZXRfYWRkKGFTdHIsIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICB2YXIgaXNEdXBsaWNhdGUgPSBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB2YXIgaWR4ID0gdGhpcy5fYXJyYXkubGVuZ3RoO1xuICBpZiAoIWlzRHVwbGljYXRlIHx8IGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICB0aGlzLl9hcnJheS5wdXNoKGFTdHIpO1xuICB9XG4gIGlmICghaXNEdXBsaWNhdGUpIHtcbiAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gIH1cbn07XG5cbi8qKlxuICogSXMgdGhlIGdpdmVuIHN0cmluZyBhIG1lbWJlciBvZiB0aGlzIHNldD9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIEFycmF5U2V0X2hhcyhhU3RyKSB7XG4gIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgcmV0dXJuIGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIGlmIChoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgaW50VG9DaGFyTWFwID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLnNwbGl0KCcnKTtcblxuLyoqXG4gKiBFbmNvZGUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2Ugb2YgMCB0byA2MyB0byBhIHNpbmdsZSBiYXNlIDY0IGRpZ2l0LlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgaWYgKDAgPD0gbnVtYmVyICYmIG51bWJlciA8IGludFRvQ2hhck1hcC5sZW5ndGgpIHtcbiAgICByZXR1cm4gaW50VG9DaGFyTWFwW251bWJlcl07XG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk11c3QgYmUgYmV0d2VlbiAwIGFuZCA2MzogXCIgKyBudW1iZXIpO1xufTtcblxuLyoqXG4gKiBEZWNvZGUgYSBzaW5nbGUgYmFzZSA2NCBjaGFyYWN0ZXIgY29kZSBkaWdpdCB0byBhbiBpbnRlZ2VyLiBSZXR1cm5zIC0xIG9uXG4gKiBmYWlsdXJlLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIChjaGFyQ29kZSkge1xuICB2YXIgYmlnQSA9IDY1OyAgICAgLy8gJ0EnXG4gIHZhciBiaWdaID0gOTA7ICAgICAvLyAnWidcblxuICB2YXIgbGl0dGxlQSA9IDk3OyAgLy8gJ2EnXG4gIHZhciBsaXR0bGVaID0gMTIyOyAvLyAneidcblxuICB2YXIgemVybyA9IDQ4OyAgICAgLy8gJzAnXG4gIHZhciBuaW5lID0gNTc7ICAgICAvLyAnOSdcblxuICB2YXIgcGx1cyA9IDQzOyAgICAgLy8gJysnXG4gIHZhciBzbGFzaCA9IDQ3OyAgICAvLyAnLydcblxuICB2YXIgbGl0dGxlT2Zmc2V0ID0gMjY7XG4gIHZhciBudW1iZXJPZmZzZXQgPSA1MjtcblxuICAvLyAwIC0gMjU6IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXG4gIGlmIChiaWdBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGJpZ1opIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gYmlnQSk7XG4gIH1cblxuICAvLyAyNiAtIDUxOiBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxuICBpZiAobGl0dGxlQSA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBsaXR0bGVaKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIGxpdHRsZUEgKyBsaXR0bGVPZmZzZXQpO1xuICB9XG5cbiAgLy8gNTIgLSA2MTogMDEyMzQ1Njc4OVxuICBpZiAoemVybyA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSBuaW5lKSB7XG4gICAgcmV0dXJuIChjaGFyQ29kZSAtIHplcm8gKyBudW1iZXJPZmZzZXQpO1xuICB9XG5cbiAgLy8gNjI6ICtcbiAgaWYgKGNoYXJDb2RlID09IHBsdXMpIHtcbiAgICByZXR1cm4gNjI7XG4gIH1cblxuICAvLyA2MzogL1xuICBpZiAoY2hhckNvZGUgPT0gc2xhc2gpIHtcbiAgICByZXR1cm4gNjM7XG4gIH1cblxuICAvLyBJbnZhbGlkIGJhc2U2NCBkaWdpdC5cbiAgcmV0dXJuIC0xO1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5leHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EID0gMjtcblxuLyoqXG4gKiBSZWN1cnNpdmUgaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaC5cbiAqXG4gKiBAcGFyYW0gYUxvdyBJbmRpY2VzIGhlcmUgYW5kIGxvd2VyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYUhpZ2ggSW5kaWNlcyBoZXJlIGFuZCBoaWdoZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IGJlaW5nIHNlYXJjaGVkIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIG5vbi1lbXB0eSBhcnJheSBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBGdW5jdGlvbiB3aGljaCB0YWtlcyB0d28gZWxlbWVudHMgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiB0ZXJtaW5hdGVzIHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZTpcbiAgLy9cbiAgLy8gICAxLiBXZSBmaW5kIHRoZSBleGFjdCBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgLy9cbiAgLy8gICAyLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGJ1dCB3ZSBjYW4gcmV0dXJuIHRoZSBpbmRleCBvZlxuICAvLyAgICAgIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudC5cbiAgLy9cbiAgLy8gICAzLiBXZSBkaWQgbm90IGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQsIGFuZCB0aGVyZSBpcyBubyBuZXh0LWNsb3Nlc3RcbiAgLy8gICAgICBlbGVtZW50IHRoYW4gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgc28gd2UgcmV0dXJuIC0xLlxuICB2YXIgbWlkID0gTWF0aC5mbG9vcigoYUhpZ2ggLSBhTG93KSAvIDIpICsgYUxvdztcbiAgdmFyIGNtcCA9IGFDb21wYXJlKGFOZWVkbGUsIGFIYXlzdGFja1ttaWRdLCB0cnVlKTtcbiAgaWYgKGNtcCA9PT0gMCkge1xuICAgIC8vIEZvdW5kIHRoZSBlbGVtZW50IHdlIGFyZSBsb29raW5nIGZvci5cbiAgICByZXR1cm4gbWlkO1xuICB9XG4gIGVsc2UgaWYgKGNtcCA+IDApIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGdyZWF0ZXIgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAoYUhpZ2ggLSBtaWQgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgdXBwZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2gobWlkLCBhSGlnaCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIFRoZSBleGFjdCBuZWVkbGUgZWxlbWVudCB3YXMgbm90IGZvdW5kIGluIHRoaXMgaGF5c3RhY2suIERldGVybWluZSBpZlxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBhSGlnaCA8IGFIYXlzdGFjay5sZW5ndGggPyBhSGlnaCA6IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBPdXIgbmVlZGxlIGlzIGxlc3MgdGhhbiBhSGF5c3RhY2tbbWlkXS5cbiAgICBpZiAobWlkIC0gYUxvdyA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSBsb3dlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChhTG93LCBtaWQsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gbWlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYUxvdyA8IDAgPyAtMSA6IGFMb3c7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoIHdoaWNoIHdpbGwgYWx3YXlzIHRyeSBhbmQgcmV0dXJuXG4gKiB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgZWxlbWVudCBpZiB0aGVyZSBpcyBubyBleGFjdCBoaXQuIFRoaXMgaXMgYmVjYXVzZVxuICogbWFwcGluZ3MgYmV0d2VlbiBvcmlnaW5hbCBhbmQgZ2VuZXJhdGVkIGxpbmUvY29sIHBhaXJzIGFyZSBzaW5nbGUgcG9pbnRzLFxuICogYW5kIHRoZXJlIGlzIGFuIGltcGxpY2l0IHJlZ2lvbiBiZXR3ZWVuIGVhY2ggb2YgdGhlbSwgc28gYSBtaXNzIGp1c3QgbWVhbnNcbiAqIHRoYXQgeW91IGFyZW4ndCBvbiB0aGUgdmVyeSBzdGFydCBvZiBhIHJlZ2lvbi5cbiAqXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCB5b3UgYXJlIGxvb2tpbmcgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgYXJyYXkgdGhhdCBpcyBiZWluZyBzZWFyY2hlZC5cbiAqIEBwYXJhbSBhQ29tcGFyZSBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIHRoZSBuZWVkbGUgYW5kIGFuIGVsZW1lbnQgaW4gdGhlXG4gKiAgICAgYXJyYXkgYW5kIHJldHVybnMgLTEsIDAsIG9yIDEgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5lZWRsZSBpcyBsZXNzXG4gKiAgICAgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgZWxlbWVudCwgcmVzcGVjdGl2ZWx5LlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICovXG5leHBvcnRzLnNlYXJjaCA9IGZ1bmN0aW9uIHNlYXJjaChhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICBpZiAoYUhheXN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHZhciBpbmRleCA9IHJlY3Vyc2l2ZVNlYXJjaCgtMSwgYUhheXN0YWNrLmxlbmd0aCwgYU5lZWRsZSwgYUhheXN0YWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbXBhcmUsIGFCaWFzIHx8IGV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLy8gV2UgaGF2ZSBmb3VuZCBlaXRoZXIgdGhlIGV4YWN0IGVsZW1lbnQsIG9yIHRoZSBuZXh0LWNsb3Nlc3QgZWxlbWVudCB0aGFuXG4gIC8vIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IuIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIHN1Y2hcbiAgLy8gZWxlbWVudC4gTWFrZSBzdXJlIHdlIGFsd2F5cyByZXR1cm4gdGhlIHNtYWxsZXN0IG9mIHRoZXNlLlxuICB3aGlsZSAoaW5kZXggLSAxID49IDApIHtcbiAgICBpZiAoYUNvbXBhcmUoYUhheXN0YWNrW2luZGV4XSwgYUhheXN0YWNrW2luZGV4IC0gMV0sIHRydWUpICE9PSAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLS1pbmRleDtcbiAgfVxuXG4gIHJldHVybiBpbmRleDtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG4vKipcbiAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGdldHRpbmcgdmFsdWVzIGZyb20gcGFyYW1ldGVyL29wdGlvbnNcbiAqIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIGFyZ3MgVGhlIG9iamVjdCB3ZSBhcmUgZXh0cmFjdGluZyB2YWx1ZXMgZnJvbVxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdlIGFyZSBnZXR0aW5nLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBBbiBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmdcbiAqIGZyb20gdGhlIG9iamVjdC4gSWYgdGhpcyBpcyBub3Qgc3BlY2lmaWVkIGFuZCB0aGUgcHJvcGVydHkgaXMgbWlzc2luZywgYW5cbiAqIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICovXG5mdW5jdGlvbiBnZXRBcmcoYUFyZ3MsIGFOYW1lLCBhRGVmYXVsdFZhbHVlKSB7XG4gIGlmIChhTmFtZSBpbiBhQXJncykge1xuICAgIHJldHVybiBhQXJnc1thTmFtZV07XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBhRGVmYXVsdFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYU5hbWUgKyAnXCIgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4nKTtcbiAgfVxufVxuZXhwb3J0cy5nZXRBcmcgPSBnZXRBcmc7XG5cbnZhciB1cmxSZWdleHAgPSAvXig/OihbXFx3K1xcLS5dKyk6KT9cXC9cXC8oPzooXFx3KzpcXHcrKUApPyhbXFx3Ll0qKSg/OjooXFxkKykpPyhcXFMqKSQvO1xudmFyIGRhdGFVcmxSZWdleHAgPSAvXmRhdGE6LitcXCwuKyQvO1xuXG5mdW5jdGlvbiB1cmxQYXJzZShhVXJsKSB7XG4gIHZhciBtYXRjaCA9IGFVcmwubWF0Y2godXJsUmVnZXhwKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2NoZW1lOiBtYXRjaFsxXSxcbiAgICBhdXRoOiBtYXRjaFsyXSxcbiAgICBob3N0OiBtYXRjaFszXSxcbiAgICBwb3J0OiBtYXRjaFs0XSxcbiAgICBwYXRoOiBtYXRjaFs1XVxuICB9O1xufVxuZXhwb3J0cy51cmxQYXJzZSA9IHVybFBhcnNlO1xuXG5mdW5jdGlvbiB1cmxHZW5lcmF0ZShhUGFyc2VkVXJsKSB7XG4gIHZhciB1cmwgPSAnJztcbiAgaWYgKGFQYXJzZWRVcmwuc2NoZW1lKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuc2NoZW1lICsgJzonO1xuICB9XG4gIHVybCArPSAnLy8nO1xuICBpZiAoYVBhcnNlZFVybC5hdXRoKSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuYXV0aCArICdAJztcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5ob3N0KSB7XG4gICAgdXJsICs9IGFQYXJzZWRVcmwuaG9zdDtcbiAgfVxuICBpZiAoYVBhcnNlZFVybC5wb3J0KSB7XG4gICAgdXJsICs9IFwiOlwiICsgYVBhcnNlZFVybC5wb3J0XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucGF0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnBhdGg7XG4gIH1cbiAgcmV0dXJuIHVybDtcbn1cbmV4cG9ydHMudXJsR2VuZXJhdGUgPSB1cmxHZW5lcmF0ZTtcblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGF0aCwgb3IgdGhlIHBhdGggcG9ydGlvbiBvZiBhIFVSTDpcbiAqXG4gKiAtIFJlcGxhY2VzIGNvbnNlY3V0aXZlIHNsYXNoZXMgd2l0aCBvbmUgc2xhc2guXG4gKiAtIFJlbW92ZXMgdW5uZWNlc3NhcnkgJy4nIHBhcnRzLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICc8ZGlyPi8uLicgcGFydHMuXG4gKlxuICogQmFzZWQgb24gY29kZSBpbiB0aGUgTm9kZS5qcyAncGF0aCcgY29yZSBtb2R1bGUuXG4gKlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIHVybCB0byBub3JtYWxpemUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShhUGF0aCkge1xuICB2YXIgcGF0aCA9IGFQYXRoO1xuICB2YXIgdXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICBpZiAodXJsKSB7XG4gICAgaWYgKCF1cmwucGF0aCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cbiAgICBwYXRoID0gdXJsLnBhdGg7XG4gIH1cbiAgdmFyIGlzQWJzb2x1dGUgPSBleHBvcnRzLmlzQWJzb2x1dGUocGF0aCk7XG5cbiAgdmFyIHBhcnRzID0gcGF0aC5zcGxpdCgvXFwvKy8pO1xuICBmb3IgKHZhciBwYXJ0LCB1cCA9IDAsIGkgPSBwYXJ0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHBhcnQgPSBwYXJ0c1tpXTtcbiAgICBpZiAocGFydCA9PT0gJy4nKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXAgPiAwKSB7XG4gICAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgaXMgYmxhbmsgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuIFRyeWluZyB0byBnb1xuICAgICAgICAvLyBhYm92ZSB0aGUgcm9vdCBpcyBhIG5vLW9wLiBUaGVyZWZvcmUgd2UgY2FuIHJlbW92ZSBhbGwgJy4uJyBwYXJ0c1xuICAgICAgICAvLyBkaXJlY3RseSBhZnRlciB0aGUgcm9vdC5cbiAgICAgICAgcGFydHMuc3BsaWNlKGkgKyAxLCB1cCk7XG4gICAgICAgIHVwID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZShpLCAyKTtcbiAgICAgICAgdXAtLTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcblxuICBpZiAocGF0aCA9PT0gJycpIHtcbiAgICBwYXRoID0gaXNBYnNvbHV0ZSA/ICcvJyA6ICcuJztcbiAgfVxuXG4gIGlmICh1cmwpIHtcbiAgICB1cmwucGF0aCA9IHBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKHVybCk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcblxuLyoqXG4gKiBKb2lucyB0d28gcGF0aHMvVVJMcy5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIGpvaW5lZCB3aXRoIHRoZSByb290LlxuICpcbiAqIC0gSWYgYVBhdGggaXMgYSBVUkwgb3IgYSBkYXRhIFVSSSwgYVBhdGggaXMgcmV0dXJuZWQsIHVubGVzcyBhUGF0aCBpcyBhXG4gKiAgIHNjaGVtZS1yZWxhdGl2ZSBVUkw6IFRoZW4gdGhlIHNjaGVtZSBvZiBhUm9vdCwgaWYgYW55LCBpcyBwcmVwZW5kZWRcbiAqICAgZmlyc3QuXG4gKiAtIE90aGVyd2lzZSBhUGF0aCBpcyBhIHBhdGguIElmIGFSb290IGlzIGEgVVJMLCB0aGVuIGl0cyBwYXRoIHBvcnRpb25cbiAqICAgaXMgdXBkYXRlZCB3aXRoIHRoZSByZXN1bHQgYW5kIGFSb290IGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhlIHJlc3VsdFxuICogICBpcyByZXR1cm5lZC5cbiAqICAgLSBJZiBhUGF0aCBpcyBhYnNvbHV0ZSwgdGhlIHJlc3VsdCBpcyBhUGF0aC5cbiAqICAgLSBPdGhlcndpc2UgdGhlIHR3byBwYXRocyBhcmUgam9pbmVkIHdpdGggYSBzbGFzaC5cbiAqIC0gSm9pbmluZyBmb3IgZXhhbXBsZSAnaHR0cDovLycgYW5kICd3d3cuZXhhbXBsZS5jb20nIGlzIGFsc28gc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBqb2luKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG4gIGlmIChhUGF0aCA9PT0gXCJcIikge1xuICAgIGFQYXRoID0gXCIuXCI7XG4gIH1cbiAgdmFyIGFQYXRoVXJsID0gdXJsUGFyc2UoYVBhdGgpO1xuICB2YXIgYVJvb3RVcmwgPSB1cmxQYXJzZShhUm9vdCk7XG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290ID0gYVJvb3RVcmwucGF0aCB8fCAnLyc7XG4gIH1cblxuICAvLyBgam9pbihmb28sICcvL3d3dy5leGFtcGxlLm9yZycpYFxuICBpZiAoYVBhdGhVcmwgJiYgIWFQYXRoVXJsLnNjaGVtZSkge1xuICAgIGlmIChhUm9vdFVybCkge1xuICAgICAgYVBhdGhVcmwuc2NoZW1lID0gYVJvb3RVcmwuc2NoZW1lO1xuICAgIH1cbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVBhdGhVcmwpO1xuICB9XG5cbiAgaWYgKGFQYXRoVXJsIHx8IGFQYXRoLm1hdGNoKGRhdGFVcmxSZWdleHApKSB7XG4gICAgcmV0dXJuIGFQYXRoO1xuICB9XG5cbiAgLy8gYGpvaW4oJ2h0dHA6Ly8nLCAnd3d3LmV4YW1wbGUuY29tJylgXG4gIGlmIChhUm9vdFVybCAmJiAhYVJvb3RVcmwuaG9zdCAmJiAhYVJvb3RVcmwucGF0aCkge1xuICAgIGFSb290VXJsLmhvc3QgPSBhUGF0aDtcbiAgICByZXR1cm4gdXJsR2VuZXJhdGUoYVJvb3RVcmwpO1xuICB9XG5cbiAgdmFyIGpvaW5lZCA9IGFQYXRoLmNoYXJBdCgwKSA9PT0gJy8nXG4gICAgPyBhUGF0aFxuICAgIDogbm9ybWFsaXplKGFSb290LnJlcGxhY2UoL1xcLyskLywgJycpICsgJy8nICsgYVBhdGgpO1xuXG4gIGlmIChhUm9vdFVybCkge1xuICAgIGFSb290VXJsLnBhdGggPSBqb2luZWQ7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuICByZXR1cm4gam9pbmVkO1xufVxuZXhwb3J0cy5qb2luID0gam9pbjtcblxuZXhwb3J0cy5pc0Fic29sdXRlID0gZnVuY3Rpb24gKGFQYXRoKSB7XG4gIHJldHVybiBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJyB8fCAhIWFQYXRoLm1hdGNoKHVybFJlZ2V4cCk7XG59O1xuXG4vKipcbiAqIE1ha2UgYSBwYXRoIHJlbGF0aXZlIHRvIGEgVVJMIG9yIGFub3RoZXIgcGF0aC5cbiAqXG4gKiBAcGFyYW0gYVJvb3QgVGhlIHJvb3QgcGF0aCBvciBVUkwuXG4gKiBAcGFyYW0gYVBhdGggVGhlIHBhdGggb3IgVVJMIHRvIGJlIG1hZGUgcmVsYXRpdmUgdG8gYVJvb3QuXG4gKi9cbmZ1bmN0aW9uIHJlbGF0aXZlKGFSb290LCBhUGF0aCkge1xuICBpZiAoYVJvb3QgPT09IFwiXCIpIHtcbiAgICBhUm9vdCA9IFwiLlwiO1xuICB9XG5cbiAgYVJvb3QgPSBhUm9vdC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIGZvciB0aGUgcGF0aCB0byBiZSBhYm92ZSB0aGUgcm9vdC4gSW4gdGhpcyBjYXNlLCBzaW1wbHlcbiAgLy8gY2hlY2tpbmcgd2hldGhlciB0aGUgcm9vdCBpcyBhIHByZWZpeCBvZiB0aGUgcGF0aCB3b24ndCB3b3JrLiBJbnN0ZWFkLCB3ZVxuICAvLyBuZWVkIHRvIHJlbW92ZSBjb21wb25lbnRzIGZyb20gdGhlIHJvb3Qgb25lIGJ5IG9uZSwgdW50aWwgZWl0aGVyIHdlIGZpbmRcbiAgLy8gYSBwcmVmaXggdGhhdCBmaXRzLCBvciB3ZSBydW4gb3V0IG9mIGNvbXBvbmVudHMgdG8gcmVtb3ZlLlxuICB2YXIgbGV2ZWwgPSAwO1xuICB3aGlsZSAoYVBhdGguaW5kZXhPZihhUm9vdCArICcvJykgIT09IDApIHtcbiAgICB2YXIgaW5kZXggPSBhUm9vdC5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGFQYXRoO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBvbmx5IHBhcnQgb2YgdGhlIHJvb3QgdGhhdCBpcyBsZWZ0IGlzIHRoZSBzY2hlbWUgKGkuZS4gaHR0cDovLyxcbiAgICAvLyBmaWxlOi8vLywgZXRjLiksIG9uZSBvciBtb3JlIHNsYXNoZXMgKC8pLCBvciBzaW1wbHkgbm90aGluZyBhdCBhbGwsIHdlXG4gICAgLy8gaGF2ZSBleGhhdXN0ZWQgYWxsIGNvbXBvbmVudHMsIHNvIHRoZSBwYXRoIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcm9vdC5cbiAgICBhUm9vdCA9IGFSb290LnNsaWNlKDAsIGluZGV4KTtcbiAgICBpZiAoYVJvb3QubWF0Y2goL14oW15cXC9dKzpcXC8pP1xcLyokLykpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICArK2xldmVsO1xuICB9XG5cbiAgLy8gTWFrZSBzdXJlIHdlIGFkZCBhIFwiLi4vXCIgZm9yIGVhY2ggY29tcG9uZW50IHdlIHJlbW92ZWQgZnJvbSB0aGUgcm9vdC5cbiAgcmV0dXJuIEFycmF5KGxldmVsICsgMSkuam9pbihcIi4uL1wiKSArIGFQYXRoLnN1YnN0cihhUm9vdC5sZW5ndGggKyAxKTtcbn1cbmV4cG9ydHMucmVsYXRpdmUgPSByZWxhdGl2ZTtcblxudmFyIHN1cHBvcnRzTnVsbFByb3RvID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAhKCdfX3Byb3RvX18nIGluIG9iaik7XG59KCkpO1xuXG5mdW5jdGlvbiBpZGVudGl0eSAocykge1xuICByZXR1cm4gcztcbn1cblxuLyoqXG4gKiBCZWNhdXNlIGJlaGF2aW9yIGdvZXMgd2Fja3kgd2hlbiB5b3Ugc2V0IGBfX3Byb3RvX19gIG9uIG9iamVjdHMsIHdlXG4gKiBoYXZlIHRvIHByZWZpeCBhbGwgdGhlIHN0cmluZ3MgaW4gb3VyIHNldCB3aXRoIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXIuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvcHVsbC8zMSBhbmRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzMwXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbmZ1bmN0aW9uIHRvU2V0U3RyaW5nKGFTdHIpIHtcbiAgaWYgKGlzUHJvdG9TdHJpbmcoYVN0cikpIHtcbiAgICByZXR1cm4gJyQnICsgYVN0cjtcbiAgfVxuXG4gIHJldHVybiBhU3RyO1xufVxuZXhwb3J0cy50b1NldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiB0b1NldFN0cmluZztcblxuZnVuY3Rpb24gZnJvbVNldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuIGFTdHIuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMuZnJvbVNldFN0cmluZyA9IHN1cHBvcnRzTnVsbFByb3RvID8gaWRlbnRpdHkgOiBmcm9tU2V0U3RyaW5nO1xuXG5mdW5jdGlvbiBpc1Byb3RvU3RyaW5nKHMpIHtcbiAgaWYgKCFzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGxlbmd0aCA9IHMubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPCA5IC8qIFwiX19wcm90b19fXCIubGVuZ3RoICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHMuY2hhckNvZGVBdChsZW5ndGggLSAxKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDIpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMykgIT09IDExMSAvKiAnbycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA0KSAhPT0gMTE2IC8qICd0JyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDUpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNikgIT09IDExNCAvKiAncicgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA3KSAhPT0gMTEyIC8qICdwJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDgpICE9PSA5NSAgLyogJ18nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gOSkgIT09IDk1ICAvKiAnXycgKi8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gbGVuZ3RoIC0gMTA7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHMuY2hhckNvZGVBdChpKSAhPT0gMzYgLyogJyQnICovKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aGVyZSB0aGUgb3JpZ2luYWwgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqXG4gKiBPcHRpb25hbGx5IHBhc3MgaW4gYHRydWVgIGFzIGBvbmx5Q29tcGFyZUdlbmVyYXRlZGAgdG8gY29uc2lkZXIgdHdvXG4gKiBtYXBwaW5ncyB3aXRoIHRoZSBzYW1lIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiwgYnV0IGRpZmZlcmVudCBnZW5lcmF0ZWRcbiAqIGxpbmUgYW5kIGNvbHVtbiB0aGUgc2FtZS4gVXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhIG1hcHBpbmcgd2l0aCBhXG4gKiBzdHViYmVkIG91dCBtYXBwaW5nLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyhtYXBwaW5nQSwgbWFwcGluZ0IsIG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGRlZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBpbmRpY2VzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICogbWFwcGluZyB3aXRoIGEgc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLnNvdXJjZSAtIG1hcHBpbmdCLnNvdXJjZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gbWFwcGluZ0EubmFtZSAtIG1hcHBpbmdCLm5hbWU7XG59XG5leHBvcnRzLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkID0gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQ7XG5cbmZ1bmN0aW9uIHN0cmNtcChhU3RyMSwgYVN0cjIpIHtcbiAgaWYgKGFTdHIxID09PSBhU3RyMikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKGFTdHIxID4gYVN0cjIpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBDb21wYXJhdG9yIGJldHdlZW4gdHdvIG1hcHBpbmdzIHdpdGggaW5mbGF0ZWQgc291cmNlIGFuZCBuYW1lIHN0cmluZ3Mgd2hlcmVcbiAqIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb25zIGFyZSBjb21wYXJlZC5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lIC0gbWFwcGluZ0IuZ2VuZXJhdGVkTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gc3RyY21wKG1hcHBpbmdBLnNvdXJjZSwgbWFwcGluZ0Iuc291cmNlKTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbExpbmUgLSBtYXBwaW5nQi5vcmlnaW5hbExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxDb2x1bW4gLSBtYXBwaW5nQi5vcmlnaW5hbENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICByZXR1cm4gc3RyY21wKG1hcHBpbmdBLm5hbWUsIG1hcHBpbmdCLm5hbWUpO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2stZ2VuZXJhdG9yJywgWydzdGFja2ZyYW1lJ10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tHZW5lcmF0b3IgPSBmYWN0b3J5KHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTdGFja0ZyYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFja3RyYWNlOiBmdW5jdGlvbiBTdGFja0dlbmVyYXRvciQkYmFja3RyYWNlKG9wdHMpIHtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICAgICAgdmFyIG1heFN0YWNrU2l6ZSA9IDEwO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcHRzLm1heFN0YWNrU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBtYXhTdGFja1NpemUgPSBvcHRzLm1heFN0YWNrU2l6ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGN1cnIgPSBhcmd1bWVudHMuY2FsbGVlO1xuICAgICAgICAgICAgd2hpbGUgKGN1cnIgJiYgc3RhY2subGVuZ3RoIDwgbWF4U3RhY2tTaXplICYmIGN1cnJbJ2FyZ3VtZW50cyddKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxsb3cgVjggb3B0aW1pemF0aW9uc1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGN1cnJbJ2FyZ3VtZW50cyddLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBjdXJyWydhcmd1bWVudHMnXVtpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKC9mdW5jdGlvbig/OlxccysoW1xcdyRdKykpK1xccypcXCgvLnRlc3QoY3Vyci50b1N0cmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ldyBTdGFja0ZyYW1lKHtmdW5jdGlvbk5hbWU6IFJlZ0V4cC4kMSB8fCB1bmRlZmluZWQsIGFyZ3M6IGFyZ3N9KSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgU3RhY2tGcmFtZSh7YXJnczogYXJnc30pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci5jYWxsZXI7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICAgIH1cbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZS1ncHMnLCBbJ3NvdXJjZS1tYXAnLCAnc3RhY2tmcmFtZSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnc291cmNlLW1hcC9saWIvc291cmNlLW1hcC1jb25zdW1lcicpLCByZXF1aXJlKCdzdGFja2ZyYW1lJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3QuU3RhY2tUcmFjZUdQUyA9IGZhY3Rvcnkocm9vdC5Tb3VyY2VNYXAgfHwgcm9vdC5zb3VyY2VNYXAsIHJvb3QuU3RhY2tGcmFtZSk7XG4gICAgfVxufSh0aGlzLCBmdW5jdGlvbihTb3VyY2VNYXAsIFN0YWNrRnJhbWUpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvKipcbiAgICAgKiBNYWtlIGEgWC1Eb21haW4gcmVxdWVzdCB0byB1cmwgYW5kIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB3aXRoIHJlc3BvbnNlIHRleHQgaWYgZnVsZmlsbGVkXG4gICAgICovXG4gICAgZnVuY3Rpb24gX3hkcih1cmwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgcmVxLm9wZW4oJ2dldCcsIHVybCk7XG4gICAgICAgICAgICByZXEub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBvbnJlYWR5c3RhdGVjaGFuZ2UoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgocmVxLnN0YXR1cyA+PSAyMDAgJiYgcmVxLnN0YXR1cyA8IDMwMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICh1cmwuc3Vic3RyKDAsIDcpID09PSAnZmlsZTovLycgJiYgcmVxLnJlc3BvbnNlVGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVxLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdIVFRQIHN0YXR1czogJyArIHJlcS5zdGF0dXMgKyAnIHJldHJpZXZpbmcgJyArIHVybCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcS5zZW5kKCk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIEJhc2U2NC1lbmNvZGVkIHN0cmluZyBpbnRvIGl0cyBvcmlnaW5hbCByZXByZXNlbnRhdGlvbi5cbiAgICAgKiBVc2VkIGZvciBpbmxpbmUgc291cmNlbWFwcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBiNjRzdHIgQmFzZS02NCBlbmNvZGVkIHN0cmluZ1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG9yaWdpbmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcuXG4gICAgICovXG4gICAgZnVuY3Rpb24gX2F0b2IoYjY0c3RyKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuYXRvYikge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5hdG9iKGI2NHN0cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciB3aW5kb3cuYXRvYiBpbiB0aGlzIGVudmlyb25tZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBfcGFyc2VKc29uKHN0cmluZykge1xuICAgICAgICBpZiAodHlwZW9mIEpTT04gIT09ICd1bmRlZmluZWQnICYmIEpTT04ucGFyc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0cmluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHN1cHBseSBhIHBvbHlmaWxsIGZvciBKU09OLnBhcnNlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlci8qLCBjb2x1bW5OdW1iZXIqLykge1xuICAgICAgICB2YXIgc3ludGF4ZXMgPSBbXG4gICAgICAgICAgICAvLyB7bmFtZX0gPSBmdW5jdGlvbiAoe2FyZ3N9KSBUT0RPIGFyZ3MgY2FwdHVyZVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqZnVuY3Rpb25cXGIvLFxuICAgICAgICAgICAgLy8gZnVuY3Rpb24ge25hbWV9KHthcmdzfSkgbVsxXT1uYW1lIG1bMl09YXJnc1xuICAgICAgICAgICAgL2Z1bmN0aW9uXFxzKyhbXignXCJgXSo/KVxccypcXCgoW14pXSopXFwpLyxcbiAgICAgICAgICAgIC8vIHtuYW1lfSA9IGV2YWwoKVxuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqKD86ZXZhbHxuZXcgRnVuY3Rpb24pXFxiLyxcbiAgICAgICAgICAgIC8vIGZuX25hbWUoKSB7XG4gICAgICAgICAgICAvXFxiKD8hKD86aWZ8Zm9yfHN3aXRjaHx3aGlsZXx3aXRofGNhdGNoKVxcYikoPzooPzpzdGF0aWMpXFxzKyk/KFxcUyspXFxzKlxcKC4qP1xcKVxccypcXHsvLFxuICAgICAgICAgICAgLy8ge25hbWV9ID0gKCkgPT4ge1xuICAgICAgICAgICAgL1snXCJdPyhbJF9BLVphLXpdWyRfQS1aYS16MC05XSopWydcIl0/XFxzKls6PV1cXHMqXFwoLio/XFwpXFxzKj0+L1xuICAgICAgICBdO1xuICAgICAgICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoJ1xcbicpO1xuXG4gICAgICAgIC8vIFdhbGsgYmFja3dhcmRzIGluIHRoZSBzb3VyY2UgbGluZXMgdW50aWwgd2UgZmluZCB0aGUgbGluZSB3aGljaCBtYXRjaGVzIG9uZSBvZiB0aGUgcGF0dGVybnMgYWJvdmVcbiAgICAgICAgdmFyIGNvZGUgPSAnJztcbiAgICAgICAgdmFyIG1heExpbmVzID0gTWF0aC5taW4obGluZU51bWJlciwgMjApO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heExpbmVzOyArK2kpIHtcbiAgICAgICAgICAgIC8vIGxpbmVObyBpcyAxLWJhc2VkLCBzb3VyY2VbXSBpcyAwLWJhc2VkXG4gICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVzW2xpbmVOdW1iZXIgLSBpIC0gMV07XG4gICAgICAgICAgICB2YXIgY29tbWVudFBvcyA9IGxpbmUuaW5kZXhPZignLy8nKTtcbiAgICAgICAgICAgIGlmIChjb21tZW50UG9zID49IDApIHtcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHIoMCwgY29tbWVudFBvcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgY29kZSA9IGxpbmUgKyBjb2RlO1xuICAgICAgICAgICAgICAgIHZhciBsZW4gPSBzeW50YXhlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHN5bnRheGVzW2luZGV4XS5leGVjKGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5jcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNvbnN1bWUgc291cmNlIG1hcHMgaW4gb2xkZXIgYnJvd3NlcnMnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhY2tmcmFtZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0dpdmVuIFN0YWNrRnJhbWUgaXMgbm90IGFuIG9iamVjdCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmZpbGVOYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignR2l2ZW4gZmlsZSBuYW1lIGlzIG5vdCBhIFN0cmluZycpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgJSAxICE9PSAwIHx8XG4gICAgICAgICAgICBzdGFja2ZyYW1lLmxpbmVOdW1iZXIgPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBsaW5lIG51bWJlciBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFja2ZyYW1lLmNvbHVtbk51bWJlciAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyICUgMSAhPT0gMCB8fFxuICAgICAgICAgICAgc3RhY2tmcmFtZS5jb2x1bW5OdW1iZXIgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdHaXZlbiBjb2x1bW4gbnVtYmVyIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9maW5kU291cmNlTWFwcGluZ1VSTChzb3VyY2UpIHtcbiAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmdVcmxSZWdFeHAgPSAvXFwvXFwvWyNAXSA/c291cmNlTWFwcGluZ1VSTD0oW15cXHMnXCJdKylcXHMqJC9tZztcbiAgICAgICAgdmFyIGxhc3RTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICB2YXIgbWF0Y2hTb3VyY2VNYXBwaW5nVXJsO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cbiAgICAgICAgd2hpbGUgKG1hdGNoU291cmNlTWFwcGluZ1VybCA9IHNvdXJjZU1hcHBpbmdVcmxSZWdFeHAuZXhlYyhzb3VyY2UpKSB7XG4gICAgICAgICAgICBsYXN0U291cmNlTWFwcGluZ1VybCA9IG1hdGNoU291cmNlTWFwcGluZ1VybFsxXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGFzdFNvdXJjZU1hcHBpbmdVcmwpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0U291cmNlTWFwcGluZ1VybDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc291cmNlTWFwcGluZ1VSTCBub3QgZm91bmQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9leHRyYWN0TG9jYXRpb25JbmZvRnJvbVNvdXJjZU1hcFNvdXJjZShzdGFja2ZyYW1lLCBzb3VyY2VNYXBDb25zdW1lciwgc291cmNlQ2FjaGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIGxvYyA9IHNvdXJjZU1hcENvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgICAgICAgICAgIGxpbmU6IHN0YWNrZnJhbWUubGluZU51bWJlcixcbiAgICAgICAgICAgICAgICBjb2x1bW46IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGxvYy5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBjYWNoZSBtYXBwZWQgc291cmNlc1xuICAgICAgICAgICAgICAgIHZhciBtYXBwZWRTb3VyY2UgPSBzb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKGxvYy5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIGlmIChtYXBwZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlQ2FjaGVbbG9jLnNvdXJjZV0gPSBtYXBwZWRTb3VyY2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2l2ZW4gc3RhY2tmcmFtZSBhbmQgc291cmNlIGxvY2F0aW9uLCB1cGRhdGUgc3RhY2tmcmFtZVxuICAgICAgICAgICAgICAgICAgICBuZXcgU3RhY2tGcmFtZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IGxvYy5uYW1lIHx8IHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogc3RhY2tmcmFtZS5hcmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGxvYy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsb2MubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcjogbG9jLmNvbHVtblxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0NvdWxkIG5vdCBnZXQgb3JpZ2luYWwgc291cmNlIGZvciBnaXZlbiBzdGFja2ZyYW1lIGFuZCBzb3VyY2UgbWFwJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAqICAgICAgb3B0cy5zb3VyY2VDYWNoZSA9IHt1cmw6IFwiU291cmNlIFN0cmluZ1wifSA9PiBwcmVsb2FkIHNvdXJjZSBjYWNoZVxuICAgICAqICAgICAgb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gey9wYXRoL2ZpbGUuanMubWFwOiBTb3VyY2VNYXBDb25zdW1lcn1cbiAgICAgKiAgICAgIG9wdHMub2ZmbGluZSA9IFRydWUgdG8gcHJldmVudCBuZXR3b3JrIHJlcXVlc3RzLlxuICAgICAqICAgICAgICAgICAgICBCZXN0IGVmZm9ydCB3aXRob3V0IHNvdXJjZXMgb3Igc291cmNlIG1hcHMuXG4gICAgICogICAgICBvcHRzLmFqYXggPSBQcm9taXNlIHJldHVybmluZyBmdW5jdGlvbiB0byBtYWtlIFgtRG9tYWluIHJlcXVlc3RzXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMob3B0cykge1xuICAgICAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3RhY2tUcmFjZUdQUykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3RhY2tUcmFjZUdQUyhvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlID0gb3B0cy5zb3VyY2VDYWNoZSB8fCB7fTtcbiAgICAgICAgdGhpcy5zb3VyY2VNYXBDb25zdW1lckNhY2hlID0gb3B0cy5zb3VyY2VNYXBDb25zdW1lckNhY2hlIHx8IHt9O1xuXG4gICAgICAgIHRoaXMuYWpheCA9IG9wdHMuYWpheCB8fCBfeGRyO1xuXG4gICAgICAgIHRoaXMuX2F0b2IgPSBvcHRzLmF0b2IgfHwgX2F0b2I7XG5cbiAgICAgICAgdGhpcy5fZ2V0ID0gZnVuY3Rpb24gX2dldChsb2NhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBsb2NhdGlvbi5zdWJzdHIoMCwgNSkgPT09ICdkYXRhOic7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb3VyY2VDYWNoZVtsb2NhdGlvbl0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0cy5vZmZsaW5lICYmICFpc0RhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ2Fubm90IG1ha2UgbmV0d29yayByZXF1ZXN0cyBpbiBvZmZsaW5lIG1vZGUnKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGF0YSBVUkxzIGNhbiBoYXZlIHBhcmFtZXRlcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjM5N1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1cHBvcnRlZEVuY29kaW5nUmVnZXhwID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvXmRhdGE6YXBwbGljYXRpb25cXC9qc29uOyhbXFx3PTpcIi1dKzspKmJhc2U2NCwvO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbG9jYXRpb24ubWF0Y2goc3VwcG9ydGVkRW5jb2RpbmdSZWdleHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU1hcFN0YXJ0ID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGVkU291cmNlID0gbG9jYXRpb24uc3Vic3RyKHNvdXJjZU1hcFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gdGhpcy5fYXRvYihlbmNvZGVkU291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlW2xvY2F0aW9uXSA9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1RoZSBlbmNvZGluZyBvZiB0aGUgaW5saW5lIHNvdXJjZW1hcCBpcyBub3Qgc3VwcG9ydGVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhoclByb21pc2UgPSB0aGlzLmFqYXgobG9jYXRpb24sIHttZXRob2Q6ICdnZXQnfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWNoZSB0aGUgUHJvbWlzZSB0byBwcmV2ZW50IGR1cGxpY2F0ZSBpbi1mbGlnaHQgcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVbbG9jYXRpb25dID0geGhyUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclByb21pc2UudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRpbmcgU291cmNlTWFwQ29uc3VtZXJzIGlzIGV4cGVuc2l2ZSwgc28gdGhpcyB3cmFwcyB0aGUgY3JlYXRpb24gb2YgYVxuICAgICAgICAgKiBTb3VyY2VNYXBDb25zdW1lciBpbiBhIHBlci1pbnN0YW5jZSBjYWNoZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHNvdXJjZU1hcHBpbmdVUkwgPSBVUkwgdG8gZmV0Y2ggc291cmNlIG1hcCBmcm9tXG4gICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBkZWZhdWx0U291cmNlUm9vdCA9IERlZmF1bHQgc291cmNlIHJvb3QgZm9yIHNvdXJjZSBtYXAgaWYgdW5kZWZpbmVkXG4gICAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlfSB0aGF0IHJlc29sdmVzIGEgU291cmNlTWFwQ29uc3VtZXJcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyID0gZnVuY3Rpb24gX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGVbc291cmNlTWFwcGluZ1VSTF0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNvdXJjZU1hcENvbnN1bWVyQ2FjaGVbc291cmNlTWFwcGluZ1VSTF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VNYXBDb25zdW1lclByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXQoc291cmNlTWFwcGluZ1VSTCkudGhlbihmdW5jdGlvbihzb3VyY2VNYXBTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZU1hcFNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwU291cmNlID0gX3BhcnNlSnNvbihzb3VyY2VNYXBTb3VyY2UucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNvdXJjZU1hcFNvdXJjZS5zb3VyY2VSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBTb3VyY2Uuc291cmNlUm9vdCA9IGRlZmF1bHRTb3VyY2VSb290O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFNvdXJjZU1hcC5Tb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXBTb3VyY2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlTWFwQ29uc3VtZXJDYWNoZVtzb3VyY2VNYXBwaW5nVVJMXSA9IHNvdXJjZU1hcENvbnN1bWVyUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzb3VyY2VNYXBDb25zdW1lclByb21pc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgZW5oYW5jZSBmdW5jdGlvbiBuYW1lIGFuZCB1c2Ugc291cmNlIG1hcHMgZm9yIGFcbiAgICAgICAgICogYmV0dGVyIFN0YWNrRnJhbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZSBvYmplY3RcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB3aXRoIHNvdXJjZS1tYXBwZWQgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5waW5wb2ludCA9IGZ1bmN0aW9uIFN0YWNrVHJhY2VHUFMkJHBpbnBvaW50KHN0YWNrZnJhbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldE1hcHBlZExvY2F0aW9uKHN0YWNrZnJhbWUpLnRoZW4oZnVuY3Rpb24obWFwcGVkU3RhY2tGcmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlTWFwcGVkU3RhY2tGcmFtZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobWFwcGVkU3RhY2tGcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRGdW5jdGlvbk5hbWUobWFwcGVkU3RhY2tGcmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc29sdmUsIHJlc29sdmVNYXBwZWRTdGFja0ZyYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZXhwZWN0ZWQtbXVsdGlsaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICBbJ2NhdGNoJ10ocmVzb2x2ZU1hcHBlZFN0YWNrRnJhbWUpO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgZ3Vlc3MgZnVuY3Rpb24gbmFtZSBmcm9tIGxvY2F0aW9uIGluZm9ybWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0YWNrRnJhbWV9IHN0YWNrZnJhbWVcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBlbmhhbmNlZCBTdGFja0ZyYW1lLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maW5kRnVuY3Rpb25OYW1lID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZmluZEZ1bmN0aW9uTmFtZShzdGFja2ZyYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgX2Vuc3VyZVN0YWNrRnJhbWVJc0xlZ2l0KHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dldChzdGFja2ZyYW1lLmZpbGVOYW1lKS50aGVuKGZ1bmN0aW9uIGdldFNvdXJjZUNhbGxiYWNrKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IHN0YWNrZnJhbWUubGluZU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbk51bWJlciA9IHN0YWNrZnJhbWUuY29sdW1uTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ3Vlc3NlZEZ1bmN0aW9uTmFtZSA9IF9maW5kRnVuY3Rpb25OYW1lKHNvdXJjZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSByZXBsYWNlIGZ1bmN0aW9uTmFtZSBpZiB3ZSBmb3VuZCBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICAgICAgaWYgKGd1ZXNzZWRGdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFN0YWNrRnJhbWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogZ3Vlc3NlZEZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBzdGFja2ZyYW1lLmFyZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IHN0YWNrZnJhbWUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShzdGFja2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHJlamVjdClbJ2NhdGNoJ10ocmVqZWN0KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGEgU3RhY2tGcmFtZSwgc2VlayBzb3VyY2UtbWFwcGVkIGxvY2F0aW9uIGFuZCByZXR1cm4gbmV3IGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7U3RhY2tGcmFtZX0gc3RhY2tmcmFtZVxuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGVuaGFuY2VkIFN0YWNrRnJhbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdldE1hcHBlZExvY2F0aW9uID0gZnVuY3Rpb24gU3RhY2tUcmFjZUdQUyQkZ2V0TWFwcGVkTG9jYXRpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdXBwb3J0ZWRFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgICAgIF9lbnN1cmVTdGFja0ZyYW1lSXNMZWdpdChzdGFja2ZyYW1lKTtcblxuICAgICAgICAgICAgICAgIHZhciBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGU7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gc3RhY2tmcmFtZS5maWxlTmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXQoZmlsZU5hbWUpLnRoZW4oZnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VNYXBwaW5nVVJMID0gX2ZpbmRTb3VyY2VNYXBwaW5nVVJMKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0RhdGFVcmwgPSBzb3VyY2VNYXBwaW5nVVJMLnN1YnN0cigwLCA1KSA9PT0gJ2RhdGE6JztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRTb3VyY2VSb290ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlTWFwcGluZ1VSTFswXSAhPT0gJy8nICYmICFpc0RhdGFVcmwgJiYgISgvXmh0dHBzPzpcXC9cXC98XlxcL1xcLy9pKS50ZXN0KHNvdXJjZU1hcHBpbmdVUkwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBwaW5nVVJMID0gZGVmYXVsdFNvdXJjZVJvb3QgKyBzb3VyY2VNYXBwaW5nVVJMO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcHBpbmdVUkwsIGRlZmF1bHRTb3VyY2VSb290KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oc291cmNlTWFwQ29uc3VtZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2V4dHJhY3RMb2NhdGlvbkluZm9Gcm9tU291cmNlTWFwU291cmNlKHN0YWNrZnJhbWUsIHNvdXJjZU1hcENvbnN1bWVyLCBzb3VyY2VDYWNoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSlbJ2NhdGNoJ10oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHN0YWNrZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgcmVqZWN0KVsnY2F0Y2gnXShyZWplY3QpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfTtcbiAgICB9O1xufSkpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLy8gVW5pdmVyc2FsIE1vZHVsZSBEZWZpbml0aW9uIChVTUQpIHRvIHN1cHBvcnQgQU1ELCBDb21tb25KUy9Ob2RlLmpzLCBSaGlubywgYW5kIGJyb3dzZXJzLlxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZSgnc3RhY2t0cmFjZScsIFsnZXJyb3Itc3RhY2stcGFyc2VyJywgJ3N0YWNrLWdlbmVyYXRvcicsICdzdGFja3RyYWNlLWdwcyddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnZXJyb3Itc3RhY2stcGFyc2VyJyksIHJlcXVpcmUoJ3N0YWNrLWdlbmVyYXRvcicpLCByZXF1aXJlKCdzdGFja3RyYWNlLWdwcycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlN0YWNrVHJhY2UgPSBmYWN0b3J5KHJvb3QuRXJyb3JTdGFja1BhcnNlciwgcm9vdC5TdGFja0dlbmVyYXRvciwgcm9vdC5TdGFja1RyYWNlR1BTKTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIFN0YWNrVHJhY2UoRXJyb3JTdGFja1BhcnNlciwgU3RhY2tHZW5lcmF0b3IsIFN0YWNrVHJhY2VHUFMpIHtcbiAgICB2YXIgX29wdGlvbnMgPSB7XG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oc3RhY2tmcmFtZSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBzdGFja2ZyYW1lcyBmb3IgdGhpcyBsaWJyYXJ5IGJ5IGRlZmF1bHRcbiAgICAgICAgICAgIHJldHVybiAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrVHJhY2UkJCcpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIChzdGFja2ZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnJykuaW5kZXhPZignRXJyb3JTdGFja1BhcnNlciQkJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgKHN0YWNrZnJhbWUuZnVuY3Rpb25OYW1lIHx8ICcnKS5pbmRleE9mKCdTdGFja1RyYWNlR1BTJCQnKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAoc3RhY2tmcmFtZS5mdW5jdGlvbk5hbWUgfHwgJycpLmluZGV4T2YoJ1N0YWNrR2VuZXJhdG9yJCQnKSA9PT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZUNhY2hlOiB7fVxuICAgIH07XG5cbiAgICB2YXIgX2dlbmVyYXRlRXJyb3IgPSBmdW5jdGlvbiBTdGFja1RyYWNlJCRHZW5lcmF0ZUVycm9yKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRXJyb3IgbXVzdCBiZSB0aHJvd24gdG8gZ2V0IHN0YWNrIGluIElFXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1lcmdlIDIgZ2l2ZW4gT2JqZWN0cy4gSWYgYSBjb25mbGljdCBvY2N1cnMgdGhlIHNlY29uZCBvYmplY3Qgd2lucy5cbiAgICAgKiBEb2VzIG5vdCBkbyBkZWVwIG1lcmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaXJzdCBiYXNlIG9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWNvbmQgb3ZlcnJpZGVzXG4gICAgICogQHJldHVybnMge09iamVjdH0gbWVyZ2VkIGZpcnN0IGFuZCBzZWNvbmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIF9tZXJnZShmaXJzdCwgc2Vjb25kKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB7fTtcblxuICAgICAgICBbZmlyc3QsIHNlY29uZF0uZm9yRWFjaChmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IG9ialtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9pc1NoYXBlZExpa2VQYXJzYWJsZUVycm9yKGVycikge1xuICAgICAgICByZXR1cm4gZXJyLnN0YWNrIHx8IGVyclsnb3BlcmEjc291cmNlbG9jJ107XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gX2ZpbHRlcmVkKHN0YWNrZnJhbWVzLCBmaWx0ZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGFja2ZyYW1lcy5maWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhY2tmcmFtZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldCBhIGJhY2t0cmFjZSBmcm9tIGludm9jYXRpb24gcG9pbnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzXG4gICAgICAgICAqIEByZXR1cm5zIHtBcnJheX0gb2YgU3RhY2tGcmFtZVxuICAgICAgICAgKi9cbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRnZXQob3B0cykge1xuICAgICAgICAgICAgdmFyIGVyciA9IF9nZW5lcmF0ZUVycm9yKCk7XG4gICAgICAgICAgICByZXR1cm4gX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZXJyKSA/IHRoaXMuZnJvbUVycm9yKGVyciwgb3B0cykgOiB0aGlzLmdlbmVyYXRlQXJ0aWZpY2lhbGx5KG9wdHMpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHZXQgYSBiYWNrdHJhY2UgZnJvbSBpbnZvY2F0aW9uIHBvaW50LlxuICAgICAgICAgKiBJTVBPUlRBTlQ6IERvZXMgbm90IGhhbmRsZSBzb3VyY2UgbWFwcyBvciBndWVzcyBmdW5jdGlvbiBuYW1lcyFcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge0FycmF5fSBvZiBTdGFja0ZyYW1lXG4gICAgICAgICAqL1xuICAgICAgICBnZXRTeW5jOiBmdW5jdGlvbiBTdGFja1RyYWNlJCRnZXRTeW5jKG9wdHMpIHtcbiAgICAgICAgICAgIG9wdHMgPSBfbWVyZ2UoX29wdGlvbnMsIG9wdHMpO1xuICAgICAgICAgICAgdmFyIGVyciA9IF9nZW5lcmF0ZUVycm9yKCk7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSBfaXNTaGFwZWRMaWtlUGFyc2FibGVFcnJvcihlcnIpID8gRXJyb3JTdGFja1BhcnNlci5wYXJzZShlcnIpIDogU3RhY2tHZW5lcmF0b3IuYmFja3RyYWNlKG9wdHMpO1xuICAgICAgICAgICAgcmV0dXJuIF9maWx0ZXJlZChzdGFjaywgb3B0cy5maWx0ZXIpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhbiBlcnJvciBvYmplY3QsIHBhcnNlIGl0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBvYmplY3RcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAgICAgICAgICogQHJldHVybnMge1Byb21pc2V9IGZvciBBcnJheVtTdGFja0ZyYW1lfVxuICAgICAgICAgKi9cbiAgICAgICAgZnJvbUVycm9yOiBmdW5jdGlvbiBTdGFja1RyYWNlJCRmcm9tRXJyb3IoZXJyb3IsIG9wdHMpIHtcbiAgICAgICAgICAgIG9wdHMgPSBfbWVyZ2UoX29wdGlvbnMsIG9wdHMpO1xuICAgICAgICAgICAgdmFyIGdwcyA9IG5ldyBTdGFja1RyYWNlR1BTKG9wdHMpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhY2tmcmFtZXMgPSBfZmlsdGVyZWQoRXJyb3JTdGFja1BhcnNlci5wYXJzZShlcnJvciksIG9wdHMuZmlsdGVyKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKFByb21pc2UuYWxsKHN0YWNrZnJhbWVzLm1hcChmdW5jdGlvbihzZikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU9yaWdpbmFsKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc2YpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBncHMucGlucG9pbnQoc2YpLnRoZW4ocmVzb2x2ZSwgcmVzb2x2ZU9yaWdpbmFsKVsnY2F0Y2gnXShyZXNvbHZlT3JpZ2luYWwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSkpO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogVXNlIFN0YWNrR2VuZXJhdG9yIHRvIGdlbmVyYXRlIGEgYmFja3RyYWNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0c1xuICAgICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gb2YgQXJyYXlbU3RhY2tGcmFtZV1cbiAgICAgICAgICovXG4gICAgICAgIGdlbmVyYXRlQXJ0aWZpY2lhbGx5OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRnZW5lcmF0ZUFydGlmaWNpYWxseShvcHRzKSB7XG4gICAgICAgICAgICBvcHRzID0gX21lcmdlKF9vcHRpb25zLCBvcHRzKTtcbiAgICAgICAgICAgIHZhciBzdGFja0ZyYW1lcyA9IFN0YWNrR2VuZXJhdG9yLmJhY2t0cmFjZShvcHRzKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0cy5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBzdGFja0ZyYW1lcyA9IHN0YWNrRnJhbWVzLmZpbHRlcihvcHRzLmZpbHRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN0YWNrRnJhbWVzKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBmdW5jdGlvbiwgd3JhcCBpdCBzdWNoIHRoYXQgaW52b2NhdGlvbnMgdHJpZ2dlciBhIGNhbGxiYWNrIHRoYXRcbiAgICAgICAgICogaXMgY2FsbGVkIHdpdGggYSBzdGFjayB0cmFjZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdG8gYmUgaW5zdHJ1bWVudGVkXG4gICAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCBhIHN0YWNrIHRyYWNlIG9uIGludm9jYXRpb25cbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXJyYmFjayBvcHRpb25hbCBmdW5jdGlvbiB0byBjYWxsIHdpdGggZXJyb3IgaWYgdW5hYmxlIHRvIGdldCBzdGFjayB0cmFjZS5cbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgb3B0aW9uYWwgY29udGV4dCBvYmplY3QgKGUuZy4gd2luZG93KVxuICAgICAgICAgKi9cbiAgICAgICAgaW5zdHJ1bWVudDogZnVuY3Rpb24gU3RhY2tUcmFjZSQkaW5zdHJ1bWVudChmbiwgY2FsbGJhY2ssIGVycmJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnN0cnVtZW50IG5vbi1mdW5jdGlvbiBvYmplY3QnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAvLyBBbHJlYWR5IGluc3RydW1lbnRlZCwgcmV0dXJuIGdpdmVuIEZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgaW5zdHJ1bWVudGVkID0gZnVuY3Rpb24gU3RhY2tUcmFjZSQkaW5zdHJ1bWVudGVkKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0KCkudGhlbihjYWxsYmFjaywgZXJyYmFjaylbJ2NhdGNoJ10oZXJyYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnIHx8IHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzU2hhcGVkTGlrZVBhcnNhYmxlRXJyb3IoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZnJvbUVycm9yKGUpLnRoZW4oY2FsbGJhY2ssIGVycmJhY2spWydjYXRjaCddKGVycmJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgaW5zdHJ1bWVudGVkLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm4gPSBmbjtcblxuICAgICAgICAgICAgcmV0dXJuIGluc3RydW1lbnRlZDtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2l2ZW4gYSBmdW5jdGlvbiB0aGF0IGhhcyBiZWVuIGluc3RydW1lbnRlZCxcbiAgICAgICAgICogcmV2ZXJ0IHRoZSBmdW5jdGlvbiB0byBpdCdzIG9yaWdpbmFsIChub24taW5zdHJ1bWVudGVkKSBzdGF0ZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gdG8gZGUtaW5zdHJ1bWVudFxuICAgICAgICAgKi9cbiAgICAgICAgZGVpbnN0cnVtZW50OiBmdW5jdGlvbiBTdGFja1RyYWNlJCRkZWluc3RydW1lbnQoZm4pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZS1pbnN0cnVtZW50IG5vbi1mdW5jdGlvbiBvYmplY3QnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZuLl9fc3RhY2t0cmFjZU9yaWdpbmFsRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4uX19zdGFja3RyYWNlT3JpZ2luYWxGbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gbm90IGluc3RydW1lbnRlZCwgcmV0dXJuIG9yaWdpbmFsXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHaXZlbiBhbiBlcnJvciBtZXNzYWdlIGFuZCBBcnJheSBvZiBTdGFja0ZyYW1lcywgc2VyaWFsaXplIGFuZCBQT1NUIHRvIGdpdmVuIFVSTC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gc3RhY2tmcmFtZXNcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHVybFxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXJyb3JNc2dcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3RPcHRpb25zXG4gICAgICAgICAqL1xuICAgICAgICByZXBvcnQ6IGZ1bmN0aW9uIFN0YWNrVHJhY2UkJHJlcG9ydChzdGFja2ZyYW1lcywgdXJsLCBlcnJvck1zZywgcmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIG9ucmVhZHlzdGF0ZWNoYW5nZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA+PSAyMDAgJiYgcmVxLnN0YXR1cyA8IDQwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVxLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1BPU1QgdG8gJyArIHVybCArICcgZmFpbGVkIHdpdGggc3RhdHVzOiAnICsgcmVxLnN0YXR1cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXEub3BlbigncG9zdCcsIHVybCk7XG5cbiAgICAgICAgICAgICAgICAvLyBTZXQgcmVxdWVzdCBoZWFkZXJzXG4gICAgICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RPcHRpb25zICYmIHR5cGVvZiByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVycyA9IHJlcXVlc3RPcHRpb25zLmhlYWRlcnM7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGhlYWRlciBpbiBoZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGhlYWRlcnMsIGhlYWRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIsIGhlYWRlcnNbaGVhZGVyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVwb3J0UGF5bG9hZCA9IHtzdGFjazogc3RhY2tmcmFtZXN9O1xuICAgICAgICAgICAgICAgIGlmIChlcnJvck1zZyAhPT0gdW5kZWZpbmVkICYmIGVycm9yTXNnICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcG9ydFBheWxvYWQubWVzc2FnZSA9IGVycm9yTXNnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlcS5zZW5kKEpTT04uc3RyaW5naWZ5KHJlcG9ydFBheWxvYWQpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn0pKTtcbiJdfQ== diff --git a/dist/stacktrace.min.js b/dist/stacktrace.min.js index 8d496a0..2b30ec5 100644 --- a/dist/stacktrace.min.js +++ b/dist/stacktrace.min.js @@ -1,2 +1,2 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.StackTrace=e()}}(function(){var e;return function n(e,r,t){function o(a,s){if(!r[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=r[a]={exports:{}};e[a][0].call(l.exports,function(n){var r=e[a][1][n];return o(r?r:n)},l,l.exports,n,e,r,t)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var r=n.replace(/^\s+/,"").replace(/\(eval code/g,"("),t=r.match(/ (\((.+):(\d+):(\d+)\)$)/);r=t?r.replace(t[0],""):r;var o=r.split(/\s+/).slice(1),i=this.extractLocation(t?t[1]:o.pop()),a=o.join(" ")||void 0,s=["eval",""].indexOf(i[0])>-1?void 0:i[0];return new e({functionName:a,fileName:s,lineNumber:i[1],columnNumber:i[2],source:n})},this)},parseFFOrSafari:function(n){var r=n.stack.split("\n").filter(function(e){return!e.match(t)},this);return r.map(function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),n.indexOf("@")===-1&&n.indexOf(":")===-1)return new e({functionName:n});var r=/((.*".+"[^@]*)?[^@]*)(?:@)/,t=n.match(r),o=t&&t[1]?t[1]:void 0,i=this.extractLocation(n.replace(r,""));return new e({functionName:o,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:n})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,t=n.message.split("\n"),o=[],i=2,a=t.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:n})},this)}}})},{stackframe:2}],2:[function(n,r,t){!function(n,o){"use strict";"function"==typeof e&&e.amd?e("stackframe",[],o):"object"==typeof t?r.exports=o():n.StackFrame=o()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e){return e.charAt(0).toUpperCase()+e.substring(1)}function r(e){return function(){return this[e]}}function t(e){if(e instanceof Object)for(var r=0;r=0&&e>1;return n?-r:r}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(n|=c),r+=i.encode(n);while(o>0);return r},r.decode=function(e,n,r){var t,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(s&c),s&=u,f+=s<0?n-u>1?t(u,n,o,i,a,s):s==r.LEAST_UPPER_BOUND?n1?t(e,u,o,i,a,s):s==r.LEAST_UPPER_BOUND?u:e<0?-1:e}r.GREATEST_LOWER_BOUND=1,r.LEAST_UPPER_BOUND=2,r.search=function(e,n,o,i){if(0===n.length)return-1;var a=t(-1,n.length,e,n,o,i||r.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],7:[function(e,n,r){function t(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,r,a){if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},r.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=c.fromArray(e._names.toArray(),!0),t=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;p1&&(r.source=m+o[1],m+=o[1],r.originalLine=g+o[2],g=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),O.push(r),"number"==typeof r.originalLine&&b.push(r)}f(O,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=O,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=s.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},r.BasicSourceMapConsumer=o,a.prototype=Object.create(t.prototype),a.prototype.constructor=t,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),t?(t.path=n,i(t)):n}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=o(n),t=o(e);if(t&&(e=t.path||"/"),r&&!r.scheme)return t&&(r.scheme=t.scheme),i(r);if(r||n.match(_))return n;if(t&&!t.host&&!t.path)return t.host=n,i(t);var s="/"===n.charAt(0)?n:a(e.replace(/\/+$/,"")+"/"+n);return t?(t.path=s,i(t)):s}function u(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function g(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=m(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:m(e.name,n.name)))))}r.getArg=t;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;r.urlParse=o,r.urlGenerate=i,r.normalize=a,r.join=s,r.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},r.relative=u;var y=function(){var e=Object.create(null);return!("__proto__"in e)}();r.toSetString=y?c:l,r.fromSetString=y?c:f,r.compareByOriginalPositions=g,r.compareByGeneratedPositionsDeflated=h,r.compareByGeneratedPositionsInflated=d},{}],10:[function(e,n,r){arguments[4][2][0].apply(r,arguments)},{dup:2}],11:[function(n,r,t){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof t?r.exports=i(n("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var r=[],t=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(t=n.maxStackSize);for(var o=arguments.callee;o&&r.length=200&&t.status<300||"file://"===e.substr(0,7)&&t.responseText?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],t=e.split("\n"),o="",i=Math.min(n,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=r.length,l=0;l=200&&a.status<400?o(a.responseText):i(new Error("POST to "+n+" failed with status: "+a.status)))},a.open("post",n),a.setRequestHeader("Content-Type","application/json"),t&&"object"==typeof t.headers){var s=t.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==r&&null!==r&&(c.message=r),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":11,"stacktrace-gps":13}]},{},[14])(14)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.StackTrace=e()}}(function(){var e;return function n(e,r,t){function o(a,s){if(!r[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=r[a]={exports:{}};e[a][0].call(l.exports,function(n){var r=e[a][1][n];return o(r?r:n)},l,l.exports,n,e,r,t)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var r=n.replace(/^\s+/,"").replace(/\(eval code/g,"("),t=r.match(/ (\((.+):(\d+):(\d+)\)$)/);r=t?r.replace(t[0],""):r;var o=r.split(/\s+/).slice(1),i=this.extractLocation(t?t[1]:o.pop()),a=o.join(" ")||void 0,s=["eval",""].indexOf(i[0])>-1?void 0:i[0];return new e({functionName:a,fileName:s,lineNumber:i[1],columnNumber:i[2],source:n})},this)},parseFFOrSafari:function(n){var r=n.stack.split("\n").filter(function(e){return!e.match(t)},this);return r.map(function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),n.indexOf("@")===-1&&n.indexOf(":")===-1)return new e({functionName:n});var r=/((.*".+"[^@]*)?[^@]*)(?:@)/,t=n.match(r),o=t&&t[1]?t[1]:void 0,i=this.extractLocation(n.replace(r,""));return new e({functionName:o,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:n})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,t=n.message.split("\n"),o=[],i=2,a=t.length;i/,"$2").replace(/\([^)]*\)/g,"")||void 0;i.match(/\(([^)]*)\)/)&&(r=i.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:n})},this)}}})},{stackframe:2}],2:[function(n,r,t){!function(n,o){"use strict";"function"==typeof e&&e.amd?e("stackframe",[],o):"object"==typeof t?r.exports=o():n.StackFrame=o()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e){return e.charAt(0).toUpperCase()+e.substring(1)}function r(e){return function(){return this[e]}}function t(e){if(e)for(var r=0;r=0&&e>1;return n?-r:r}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(n|=c),r+=i.encode(n);while(o>0);return r},r.decode=function(e,n,r){var t,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(s&c),s&=u,f+=s<0?n-u>1?t(u,n,o,i,a,s):s==r.LEAST_UPPER_BOUND?n1?t(e,u,o,i,a,s):s==r.LEAST_UPPER_BOUND?u:e<0?-1:e}r.GREATEST_LOWER_BOUND=1,r.LEAST_UPPER_BOUND=2,r.search=function(e,n,o,i){if(0===n.length)return-1;var a=t(-1,n.length,e,n,o,i||r.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],7:[function(e,n,r){function t(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,r,a){if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},r.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=c.fromArray(e._names.toArray(),!0),t=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;p1&&(r.source=m+o[1],m+=o[1],r.originalLine=g+o[2],g=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),O.push(r),"number"==typeof r.originalLine&&b.push(r)}f(O,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=O,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=s.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},r.BasicSourceMapConsumer=o,a.prototype=Object.create(t.prototype),a.prototype.constructor=t,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),t?(t.path=n,i(t)):n}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=o(n),t=o(e);if(t&&(e=t.path||"/"),r&&!r.scheme)return t&&(r.scheme=t.scheme),i(r);if(r||n.match(_))return n;if(t&&!t.host&&!t.path)return t.host=n,i(t);var s="/"===n.charAt(0)?n:a(e.replace(/\/+$/,"")+"/"+n);return t?(t.path=s,i(t)):s}function u(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function g(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=m(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:m(e.name,n.name)))))}r.getArg=t;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;r.urlParse=o,r.urlGenerate=i,r.normalize=a,r.join=s,r.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},r.relative=u;var y=function(){var e=Object.create(null);return!("__proto__"in e)}();r.toSetString=y?c:l,r.fromSetString=y?c:f,r.compareByOriginalPositions=g,r.compareByGeneratedPositionsDeflated=h,r.compareByGeneratedPositionsInflated=d},{}],10:[function(e,n,r){arguments[4][2][0].apply(r,arguments)},{dup:2}],11:[function(n,r,t){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof t?r.exports=i(n("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var r=[],t=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(t=n.maxStackSize);for(var o=arguments.callee;o&&r.length=200&&t.status<300||"file://"===e.substr(0,7)&&t.responseText?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],t=e.split("\n"),o="",i=Math.min(n,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=r.length,l=0;l=200&&a.status<400?o(a.responseText):i(new Error("POST to "+n+" failed with status: "+a.status)))},a.open("post",n),a.setRequestHeader("Content-Type","application/json"),t&&"object"==typeof t.headers){var s=t.headers;for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==r&&null!==r&&(c.message=r),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":11,"stacktrace-gps":13}]},{},[14])(14)}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/gulpfile.js b/gulpfile.js index 9b17ac2..772da49 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,11 +1,7 @@ var browserify = require('browserify'); var concat = require('gulp-concat'); -var coveralls = require('gulp-coveralls'); var del = require('del'); var gulp = require('gulp'); -var jshint = require('gulp-jshint'); -var karma = require('karma'); -var path = require('path'); var rename = require('gulp-rename'); var runSequence = require('run-sequence'); var sourcemaps = require('gulp-sourcemaps'); @@ -20,37 +16,6 @@ var polyfills = [ ]; var sources = 'stacktrace.js'; -gulp.task('lint', function() { - return gulp.src(sources) - .pipe(jshint()) - .pipe(jshint.reporter('default')) - .pipe(jshint.reporter('fail')); -}); - -gulp.task('test', function(done) { - var server = new karma.Server({ - configFile: __dirname + '/karma.conf.js', - singleRun: true - }, done); - server.start(); -}); - -gulp.task('test-pr', ['dist'], function(done) { - new karma.Server({ - configFile: __dirname + '/karma.conf.js', - browsers: ['Firefox', 'Chrome_Travis'], - singleRun: true - }, done).start(); -}); - -gulp.task('test-ci', ['dist'], function(done) { - var server = new karma.Server({ - configFile: __dirname + '/karma.conf.ci.js', - singleRun: true - }, done); - server.start(); -}); - gulp.task('dist', function() { browserify({ entries: sources, @@ -82,18 +47,8 @@ gulp.task('dist', function() { .pipe(gulp.dest('dist')); }); -gulp.task('clean', del.bind(null, ['build', 'coverage', 'dist'])); - -gulp.task('pr', ['lint', 'test-pr'], function() { - gulp.src('./coverage/**/lcov.info') - .pipe(coveralls()); -}); - -gulp.task('ci', ['lint', 'test-ci'], function() { - gulp.src('./coverage/**/lcov.info') - .pipe(coveralls()); -}); +gulp.task('clean', del.bind(null, ['build', 'dist'])); gulp.task('default', ['clean'], function(cb) { - runSequence('lint', 'dist', 'test', cb); + runSequence('dist', 'test', cb); }); diff --git a/karma.conf.ci.js b/karma.conf.ci.js index 433a158..37bef20 100644 --- a/karma.conf.ci.js +++ b/karma.conf.ci.js @@ -5,45 +5,7 @@ module.exports = function(config) { process.exit(1); } - // Commented some of these out just so CI doesn't take forever. - // Check out https://saucelabs.com/platforms for all browser/platform combos var customLaunchers = { - slIOS9: { - appiumVersion: '1.6.3', - base: 'SauceLabs', - browserName: 'Safari', - deviceName: 'iPhone 6s Simulator', - deviceOrientation: 'portrait', - platformName: 'iOS', - platformVersion: '9.3' - }, - slIOS10: { - appiumVersion: '1.6.3', - base: 'SauceLabs', - browserName: 'Safari', - deviceName: 'iPhone 7 Simulator', - deviceOrientation: 'portrait', - platformName: 'iOS', - platformVersion: '10.2' - }, - slAndroid4: { - base: 'SauceLabs', - browserName: 'Android', - platform: 'Linux', - version: '4.4' - }, - slAndroid5: { - base: 'SauceLabs', - browserName: 'Android', - platform: 'Linux', - version: '5.1' - }, - slAndroid6: { - base: 'SauceLabs', - browserName: 'Android', - platform: 'Linux', - version: '6.0' - }, slChrome: { base: 'SauceLabs', browserName: 'chrome', @@ -59,35 +21,22 @@ module.exports = function(config) { browserName: 'firefox', version: 'latest' }, - slSafari8: { + slFirefoxBeta: { base: 'SauceLabs', - browserName: 'safari', - platform: 'OS X 10.10', - version: '8.0' - }, - slSafari9: { - base: 'SauceLabs', - browserName: 'safari', - platform: 'OS X 10.11', - version: '9.0' + browserName: 'firefox', + version: 'beta' }, - slSafari10: { + slSafari: { base: 'SauceLabs', browserName: 'safari', - platform: 'macOS 10.12', - version: '10.0' - }, - slEdge14: { - base: 'SauceLabs', - browserName: 'microsoftedge', - platform: 'Windows 10', - version: '14.14393' + platform: 'OS X 10.14', + version: 'latest' }, - slEdge13: { + slEdge: { base: 'SauceLabs', browserName: 'microsoftedge', platform: 'Windows 10', - version: '13.10586' + version: 'latest' }, slIE11: { base: 'SauceLabs', @@ -98,28 +47,23 @@ module.exports = function(config) { slIE10: { base: 'SauceLabs', browserName: 'internet explorer', - platform: 'Windows 8', + platform: 'Windows 7', version: '10' }, slIE9: { base: 'SauceLabs', browserName: 'internet explorer', platform: 'Windows 7', - version: '9.0' + version: '10', + 'x-ua-compatible': 'IE=EmulateIE9' + }, + slIE8: { + base: 'SauceLabs', + browserName: 'internet explorer', + platform: 'Windows 7', + version: '10', + 'x-ua-compatible': 'IE=EmulateIE8' } - // Too unreliable on Sauce :( - // slIE8: { - // base: 'SauceLabs', - // browserName: 'internet explorer', - // platform: 'Windows XP', - // version: '8.0' - // } - //slIE7: { - // base: 'SauceLabs', - // browserName: 'internet explorer', - // platform: 'Windows XP', - // version: '7' - //} }; config.set({ @@ -155,7 +99,7 @@ module.exports = function(config) { }, customLaunchers: customLaunchers, browsers: Object.keys(customLaunchers), - reporters: ['progress', 'saucelabs', 'coverage'], + reporters: ['progress', 'saucelabs', 'coverage', 'coveralls'], preprocessors: { 'stacktrace.js': 'coverage' }, diff --git a/karma.conf.js b/karma.conf.js index c5d1e9c..6f51fde 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -24,7 +24,7 @@ module.exports = function(config) { } }, //browsers: ['ChromeCanary', 'Firefox'], - browsers: ['PhantomJS2'], + browsers: ['PhantomJS'], singleRun: false }); }; diff --git a/package-lock.json b/package-lock.json index 6f232f2..2d74c7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,212 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/generator": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", + "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", + "dev": true, + "requires": { + "@babel/types": "^7.7.4", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", + "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", + "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "dev": true, + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", + "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "dev": true, + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", + "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", + "dev": true + }, + "@babel/template": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", + "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.4", + "@babel/types": "^7.7.4" + } + }, + "@babel/traverse": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", + "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.7.4", + "@babel/helper-function-name": "^7.7.4", + "@babel/helper-split-export-declaration": "^7.7.4", + "@babel/parser": "^7.7.4", + "@babel/types": "^7.7.4", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + } + } + }, "@gulp-sourcemaps/map-sources": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", @@ -30,12 +236,6 @@ "through": ">=2.2.7 <3" } }, - "JSV": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", - "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", - "dev": true - }, "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", @@ -43,13 +243,13 @@ "dev": true }, "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { - "mime-types": "~2.1.11", - "negotiator": "0.6.1" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" } }, "acorn": { @@ -58,10 +258,16 @@ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", "dev": true }, + "acorn-jsx": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", + "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "dev": true + }, "adm-zip": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", - "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=", + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz", + "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==", "dev": true }, "after": { @@ -71,48 +277,41 @@ "dev": true }, "agent-base": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", - "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", - "dev": true, - "requires": { - "extend": "~3.0.0", - "semver": "~5.0.1" - }, - "dependencies": { - "semver": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", - "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", - "dev": true - } - } - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "dev": true, "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" + "es6-promisify": "^5.0.0" } }, - "alter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/alter/-/alter-0.2.0.tgz", - "integrity": "sha1-x1iICGF1cgNKrmJICvJrHU0cs80=", + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { - "stable": "~0.1.3" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true + "dev": true, + "optional": true + }, + "ansi-escapes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", + "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } }, "ansi-gray": { "version": "0.1.1", @@ -142,147 +341,30 @@ "dev": true }, "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "archiver": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", - "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "dev": true, "requires": { - "archiver-utils": "^1.3.0", - "async": "^2.0.0", - "buffer-crc32": "^0.2.1", - "glob": "^7.0.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0", - "tar-stream": "^1.5.0", - "walkdir": "^0.0.11", - "zip-stream": "^1.1.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "dependencies": { - "async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", - "dev": true, - "requires": { - "lodash": "^4.14.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } } } }, - "archiver-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", "dev": true, "requires": { - "glob": "^7.0.0", - "graceful-fs": "^4.1.0", - "lazystream": "^1.0.0", - "lodash": "^4.8.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "buffer-equal": "^1.0.0" } }, "archy": { @@ -292,29 +374,14 @@ "dev": true }, "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "arr-flatten": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz", - "integrity": "sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=", - "dev": true - }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", @@ -357,12 +424,6 @@ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", "dev": true }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -378,23 +439,20 @@ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", "dev": true }, "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } }, "asn1.js": { "version": "4.9.1", @@ -417,9 +475,9 @@ } }, "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, "assign-symbols": { @@ -428,16 +486,10 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, - "ast-traverse": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", - "integrity": "sha1-ac8rg4bxnc2hux4F1o/jWdiJfeY=", - "dev": true - }, - "ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, "astw": { @@ -450,391 +502,50 @@ } }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz", - "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M=", - "dev": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "aws4": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", - "integrity": "sha1-Cin/t5wxyecS7rCH6OemS0pW11U=", - "dev": true - }, - "babel-core": { - "version": "5.8.38", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-5.8.38.tgz", - "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", - "dev": true, - "requires": { - "babel-plugin-constant-folding": "^1.0.1", - "babel-plugin-dead-code-elimination": "^1.0.2", - "babel-plugin-eval": "^1.0.1", - "babel-plugin-inline-environment-variables": "^1.0.1", - "babel-plugin-jscript": "^1.0.4", - "babel-plugin-member-expression-literals": "^1.0.1", - "babel-plugin-property-literals": "^1.0.1", - "babel-plugin-proto-to-assign": "^1.0.3", - "babel-plugin-react-constant-elements": "^1.0.3", - "babel-plugin-react-display-name": "^1.0.3", - "babel-plugin-remove-console": "^1.0.1", - "babel-plugin-remove-debugger": "^1.0.1", - "babel-plugin-runtime": "^1.0.7", - "babel-plugin-undeclared-variables-check": "^1.0.2", - "babel-plugin-undefined-to-void": "^1.1.6", - "babylon": "^5.8.38", - "bluebird": "^2.9.33", - "chalk": "^1.0.0", - "convert-source-map": "^1.1.0", - "core-js": "^1.0.0", - "debug": "^2.1.1", - "detect-indent": "^3.0.0", - "esutils": "^2.0.0", - "fs-readdir-recursive": "^0.1.0", - "globals": "^6.4.0", - "home-or-tmp": "^1.0.0", - "is-integer": "^1.0.4", - "js-tokens": "1.0.1", - "json5": "^0.4.0", - "lodash": "^3.10.0", - "minimatch": "^2.0.3", - "output-file-sync": "^1.1.0", - "path-exists": "^1.0.0", - "path-is-absolute": "^1.0.0", - "private": "^0.1.6", - "regenerator": "0.8.40", - "regexpu": "^1.3.0", - "repeating": "^1.1.2", - "resolve": "^1.1.6", - "shebang-regex": "^1.0.0", - "slash": "^1.0.0", - "source-map": "^0.5.0", - "source-map-support": "^0.2.10", - "to-fast-properties": "^1.0.0", - "trim-right": "^1.0.0", - "try-resolve": "^1.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "^1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "path-exists": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz", - "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "repeating": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "babel-jscs": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/babel-jscs/-/babel-jscs-2.0.5.tgz", - "integrity": "sha1-CjRwRrSBRay8pW6MjtX3NrxU+dA=", - "dev": true, - "requires": { - "babel-core": "~5.8.3", - "lodash.assign": "^3.2.0" - } - }, - "babel-plugin-constant-folding": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz", - "integrity": "sha1-g2HTZMmORJw2kr26Ue/whEKQqo4=", - "dev": true - }, - "babel-plugin-dead-code-elimination": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz", - "integrity": "sha1-X3xFEnTc18zNv7s+C4XdKBIfD2U=", - "dev": true - }, - "babel-plugin-eval": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz", - "integrity": "sha1-ovrtJc5r5preS/7CY/cBaRlZUNo=", - "dev": true - }, - "babel-plugin-inline-environment-variables": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz", - "integrity": "sha1-H1jOkSB61qgmqL9kX6/mj/X+P/4=", - "dev": true - }, - "babel-plugin-jscript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz", - "integrity": "sha1-jzQsOCduh6R9X6CovT1etsytj8w=", - "dev": true - }, - "babel-plugin-member-expression-literals": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz", - "integrity": "sha1-zF7bD6qNyScXDnTW0cAkQAIWJNM=", - "dev": true - }, - "babel-plugin-property-literals": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz", - "integrity": "sha1-AlIwGQAZKYCxwRjv6kjOk6q4MzY=", - "dev": true - }, - "babel-plugin-proto-to-assign": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz", - "integrity": "sha1-xJ56/QL1d7xNoF6i3wAiUM980SM=", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, "requires": { - "lodash": "^3.9.3" + "lodash": "^4.17.14" }, "dependencies": { "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true } } }, - "babel-plugin-react-constant-elements": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz", - "integrity": "sha1-lGc26DeEKcvDSdz/YvUcFDs041o=", - "dev": true - }, - "babel-plugin-react-display-name": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz", - "integrity": "sha1-dU/jiSboQkpOexWrbqYTne4FFPw=", - "dev": true - }, - "babel-plugin-remove-console": { + "async-limiter": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz", - "integrity": "sha1-2PJFVsOgUAXUKqqv0neH9T/wE6c=", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, - "babel-plugin-remove-debugger": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz", - "integrity": "sha1-/S6jzWGkKK0fO5yJiC/0KT6MFMc=", + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, - "babel-plugin-runtime": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz", - "integrity": "sha1-v3x9lm3Vbs1cF/ocslPJrLflSq8=", + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "babel-plugin-undeclared-variables-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz", - "integrity": "sha1-XPGqU52BP/ZOmWQSkK9iCWX2Xe4=", - "dev": true, - "requires": { - "leven": "^1.0.2" - } - }, - "babel-plugin-undefined-to-void": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz", - "integrity": "sha1-f1eO+LeN+uYAM4XYQXph7aBuL4E=", + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true }, - "babylon": { - "version": "5.8.38", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-5.8.38.tgz", - "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=", + "aws4": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", + "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==", "dev": true }, "backo2": { @@ -844,9 +555,9 @@ "dev": true }, "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "base": { @@ -941,11 +652,10 @@ "dev": true }, "bcrypt-pbkdf": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz", - "integrity": "sha1-PKdrhSQccXC/fZcD57mqdGMAQNQ=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, - "optional": true, "requires": { "tweetnacl": "^0.14.3" } @@ -966,46 +676,15 @@ } }, "binary-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.9.0.tgz", - "integrity": "sha1-ZlBsFs5vTWkopbPNajPKQelB43s=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", "dev": true }, - "bl": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", - "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", - "dev": true, - "requires": { - "readable-stream": "~2.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - } - } - }, "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", - "dev": true - }, - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", "dev": true }, "bn.js": { @@ -1015,27 +694,27 @@ "dev": true }, "body-parser": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", - "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, "requires": { - "bytes": "2.4.0", - "content-type": "~1.0.2", - "debug": "2.6.7", - "depd": "~1.1.0", - "http-errors": "~1.6.1", - "iconv-lite": "0.4.15", + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.4.0", - "raw-body": "~2.2.0", - "type-is": "~1.6.15" + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "dependencies": { "debug": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", - "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -1048,49 +727,32 @@ "dev": true }, "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true } } }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "hoek": "2.x.x" - } - }, - "brace-expansion": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", - "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=", - "dev": true, - "requires": { - "balanced-match": "^0.4.1", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "fill-range": "^7.0.1" } }, - "breakable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/breakable/-/breakable-1.0.0.tgz", - "integrity": "sha1-eEp5eRWjjq0nutRWtVcstLuqeME=", - "dev": true - }, "brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", @@ -1303,10 +965,38 @@ "isarray": "^1.0.0" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, "buffer-shims": { @@ -1321,12 +1011,6 @@ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, "builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -1334,9 +1018,9 @@ "dev": true }, "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true }, "cache-base": { @@ -1371,9 +1055,9 @@ } }, "cached-path-relative": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", - "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", + "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", "dev": true }, "callsite": { @@ -1382,6 +1066,12 @@ "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", "dev": true }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, "camelcase": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", @@ -1399,22 +1089,11 @@ } }, "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -1428,21 +1107,34 @@ "supports-color": "^2.0.0" } }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", + "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", "dev": true, "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.3.0" + }, + "dependencies": { + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + } } }, "cipher-base": { @@ -1484,140 +1176,20 @@ } } }, - "cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "^7.1.1" - }, - "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - } - } - }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { - "colors": "1.0.3" - }, - "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true - } + "restore-cursor": "^3.1.0" } }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true }, "clone": { "version": "1.0.2", @@ -1714,6 +1286,21 @@ "object-visit": "^1.0.0" } }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -1726,23 +1313,6 @@ "integrity": "sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw==", "dev": true }, - "combine-lists": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true, - "requires": { - "lodash": "^4.5.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - } - } - }, "combine-source-map": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", @@ -1756,334 +1326,67 @@ } }, "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } + "optional": true }, - "comment-parser": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.3.2.tgz", - "integrity": "sha1-PAPwd2uGo239mgosl8YwfzMggv4=", + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", "dev": true, "requires": { - "readable-stream": "^2.0.4" + "inherits": "~2.0.1", + "readable-stream": "~2.0.0", + "typedarray": "~0.0.5" }, "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { "core-util-is": "~1.0.0", - "inherits": "~2.0.3", + "inherits": "~2.0.1", "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - } - } - }, - "commoner": { - "version": "0.10.8", - "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", - "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", - "dev": true, - "requires": { - "commander": "^2.5.0", - "detective": "^4.3.1", - "glob": "^5.0.15", - "graceful-fs": "^4.1.2", - "iconv-lite": "^0.4.5", - "mkdirp": "^0.5.0", - "private": "^0.1.6", - "q": "^1.1.2", - "recast": "^0.11.17" - }, - "dependencies": { - "acorn": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.6.0.tgz", - "integrity": "sha512-QatFQ4C0n+PLqemyC6zXEv04tSqRR0hRqe+uGKPEVgKe2G8kl8wJvHzRYWwz6vqqEqt6idPVMFojZ4P1zlyAzQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "detective": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", - "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", - "dev": true, - "requires": { - "acorn": "^5.2.1", - "defined": "^1.0.0" - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", - "dev": true, - "requires": { - "ast-types": "0.9.6", - "esprima": "~3.1.0", - "private": "~0.1.5", - "source-map": "~0.5.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - } - } - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "compress-commons": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.0.tgz", - "integrity": "sha1-WFhwku8g03y1i68AARLJJ4/3O58=", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.1", - "crc32-stream": "^2.0.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "~2.0.0", - "typedarray": "~0.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", "util-deprecate": "~1.0.1" } } @@ -2106,32 +1409,22 @@ } } }, - "config-chain": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", - "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, "connect": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.3.tgz", - "integrity": "sha512-GLSZqgjVxPvGYVD/2vz//gS201MEXk4b7t3nHV6OVnTdDNWi/Gm7Rpxs/ybvljPWvULys/wrzIV3jB3YvEc3nQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "requires": { - "debug": "2.6.8", - "finalhandler": "1.0.4", - "parseurl": "~1.3.1", - "utils-merge": "1.0.0" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, "dependencies": { "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -2161,9 +1454,9 @@ "dev": true }, "content-type": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", - "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true }, "convert-source-map": { @@ -2184,86 +1477,12 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "coveralls": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-2.13.3.tgz", - "integrity": "sha512-iiAmn+l1XqRwNLXhW8Rs5qHZRFMYp9ZIPjEOVRpC/c4so6Y/f4/lFi0FfR5B9cCqgyhkJ5cZmbvcVRfP8MHchw==", - "dev": true, - "requires": { - "js-yaml": "3.6.1", - "lcov-parse": "0.0.10", - "log-driver": "1.2.5", - "minimist": "1.2.0", - "request": "2.79.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "js-yaml": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", - "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - } - } - }, - "crc": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", - "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=", - "dev": true - }, - "crc32-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", - "dev": true, - "requires": { - "crc": "^3.4.4", - "readable-stream": "^2.0.0" - } - }, "create-ecdh": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", @@ -2300,13 +1519,17 @@ "sha.js": "^2.4.8" } }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "boom": "2.x.x" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-browserify": { @@ -2328,34 +1551,25 @@ } }, "css": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz", - "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", "dev": true, "requires": { - "inherits": "^2.0.1", - "source-map": "^0.1.38", - "source-map-resolve": "^0.3.0", + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", "urix": "^0.1.0" }, "dependencies": { "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "ctype": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", - "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", - "dev": true - }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -2371,21 +1585,6 @@ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", "dev": true }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", - "dev": true - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "^0.10.9" - } - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -2393,16 +1592,14 @@ "dev": true, "requires": { "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } } }, + "date-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", + "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", + "dev": true + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -2426,12 +1623,12 @@ "dev": true }, "debug": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.4.4.tgz", - "integrity": "sha1-wE0XplTpICRkgD8JYVP3Cm8x9L4=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } }, "debug-fabulous": { @@ -2465,12 +1662,6 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -2494,6 +1685,15 @@ } } }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -2553,138 +1753,6 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", "dev": true }, - "defs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/defs/-/defs-1.1.1.tgz", - "integrity": "sha1-siYJ8sehG6ej2xFoBcE5scr/qdI=", - "dev": true, - "requires": { - "alter": "~0.2.0", - "ast-traverse": "~0.1.1", - "breakable": "~1.0.0", - "esprima-fb": "~15001.1001.0-dev-harmony-fb", - "simple-fmt": "~0.1.0", - "simple-is": "~0.2.0", - "stringmap": "~0.2.2", - "stringset": "~0.2.1", - "tryor": "~0.1.2", - "yargs": "~3.27.0" - }, - "dependencies": { - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "^0.1.1" - } - }, - "window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", - "dev": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "yargs": { - "version": "3.27.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.27.0.tgz", - "integrity": "sha1-ISBUaTFuk5Ex1Z8toMbX+YIh6kA=", - "dev": true, - "requires": { - "camelcase": "^1.2.1", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "os-locale": "^1.4.0", - "window-size": "^0.1.2", - "y18n": "^3.2.0" - } - } - } - }, "del": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", @@ -2714,9 +1782,9 @@ "dev": true }, "depd": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", - "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, "deprecated": { @@ -2753,55 +1821,6 @@ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, - "detect-indent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz", - "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "minimist": "^1.1.0", - "repeating": "^1.1.0" - }, - "dependencies": { - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "repeating": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", - "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - } - } - }, "detect-newline": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", @@ -2854,6 +1873,15 @@ "sqlite3": "^3.1.1" } }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", @@ -2866,61 +1894,12 @@ "void-elements": "^2.0.0" } }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - } - } - }, "domain-browser": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", "dev": true }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "dottie": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/dottie/-/dottie-1.1.1.tgz", @@ -2936,14 +1915,37 @@ "readable-stream": "^2.0.2" } }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + } + } + }, "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, - "optional": true, "requires": { - "jsbn": "~0.1.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, "ee-first": { @@ -2967,10 +1969,16 @@ "minimalistic-crypto-utils": "^1.0.0" } }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "encodeurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, "end-of-stream": { @@ -3000,79 +2008,83 @@ } }, "engine.io": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", - "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", "dev": true, "requires": { - "accepts": "1.3.3", + "accepts": "~1.3.4", "base64id": "1.0.0", "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "1.1.2" + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" }, "dependencies": { "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, "engine.io-client": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", - "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", "dev": true, "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", "has-cors": "1.1.0", "indexof": "0.0.1", - "parsejson": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "1.1.2", - "xmlhttprequest-ssl": "1.5.3", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" }, "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, "engine.io-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", "dev": true, "requires": { "after": "0.8.2", - "arraybuffer.slice": "0.0.6", + "arraybuffer.slice": "~0.0.7", "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" + "blob": "0.0.5", + "has-binary2": "~1.0.2" } }, "ent": { @@ -3081,111 +2093,51 @@ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", "dev": true }, - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", - "dev": true - }, "error-ex": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", - "integrity": "sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "error-stack-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.4.tgz", - "integrity": "sha512-fZ0KkoxSjLFmhW5lHbUT3tLwy3nX1qEzMYo8koY1vrsAco53CMT1djnBSeC/wUjTEZRhZl9iRw7PaMaxfJ4wzQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", "requires": { - "stackframe": "^1.1.0" + "stackframe": "^1.1.1" }, "dependencies": { "stackframe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.0.tgz", - "integrity": "sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.1.tgz", + "integrity": "sha512-0PlYhdKh6AfFxRyK/v+6/k+/mMfyiEBbTM5L94D0ZytQnJ166wuwoTYLHFWGbs2dpA8Rgq763KGWmN1EQEYHRQ==" } } }, - "es5-ext": { - "version": "0.10.44", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.44.tgz", - "integrity": "sha512-TO4Vt9IhW3FzDKLDOpoA8VS9BCV4b9WTf6BqvMOgfoa8wX73F3Kh3y2J7yTstTaXlQ0k1vq4DH2vw6RSs42z+g==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" - } - }, "es6-promise": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", "dev": true }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" + "es6-promise": "^4.0.3" + }, + "dependencies": { + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + } } }, "escape-html": { @@ -3213,6 +2165,12 @@ "source-map": "~0.2.0" }, "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, "estraverse": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", @@ -3231,30 +2189,214 @@ } } }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", "dev": true, "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", "esrecurse": "^4.1.0", "estraverse": "^4.1.1" } }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } }, - "esprima-fb": { - "version": "15001.1001.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", "dev": true }, + "espree": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", + "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", + "dev": true, + "requires": { + "acorn": "^7.1.0", + "acorn-jsx": "^5.1.0", + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "acorn": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "dev": true + } + } + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, "esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", @@ -3265,31 +2407,21 @@ } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", "dev": true }, "events": { @@ -3313,68 +2445,6 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "dev": true, - "requires": { - "array-slice": "^0.2.3", - "array-unique": "^0.2.1", - "braces": "^0.1.2" - }, - "dependencies": { - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true, - "requires": { - "expand-range": "^0.1.0" - } - }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "^0.1.1", - "repeat-string": "^0.2.2" - } - }, - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true - } - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "^2.1.0" - } - }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", @@ -3385,9 +2455,9 @@ } }, "extend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "extend-shallow": { @@ -3436,25 +2506,62 @@ } } }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" } }, - "extsprintf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", - "dev": true + "extract-zip": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", + "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "debug": "2.6.9", + "mkdirp": "0.5.1", + "yauzl": "2.4.1" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, "fancy-log": { @@ -3468,50 +2575,90 @@ "time-stamp": "^1.0.0" } }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "filename-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", - "integrity": "sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=", - "dev": true + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "figures": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", "dev": true, "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^1.1.3", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "escape-string-regexp": "^1.0.5" } }, - "finalhandler": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.4.tgz", - "integrity": "sha512-16l/r8RgzlXKmFOhZpHBztvye+lAhC5SU7hXavnerC9UfZqZxxXl3BzL8MhffPT3kF61lj9Oav2LKEzh0ei7tg==", + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, "requires": { - "debug": "2.6.8", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.1", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" + "flat-cache": "^2.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" }, "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -3914,76 +3061,114 @@ "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=", "dev": true }, - "for-in": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz", - "integrity": "sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=", - "dev": true - }, - "for-own": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", - "integrity": "sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=", + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, "requires": { - "for-in": "^0.1.5" + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", "dev": true }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" }, "dependencies": { - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "follow-redirects": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", + "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", + "dev": true, + "requires": { + "debug": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "mime-db": "~1.33.0" + "ms": "^2.1.1" } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -3993,20 +3178,26 @@ "map-cache": "^0.2.2" } }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { - "null-check": "^1.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "fs-readdir-recursive": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz", - "integrity": "sha1-MVtPuMHKW4xH3v7zGdBz2tNWgFk=", - "dev": true + "fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + } }, "fs.realpath": { "version": "1.0.0", @@ -4015,2097 +3206,2281 @@ "dev": true }, "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", + "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gaze": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", + "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", + "dev": true, + "requires": { + "globule": "~0.1.0" + } + }, + "generic-pool": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.2.tgz", + "integrity": "sha1-iGvFvwvrfblugby7oHiBjeWmJoM=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, - "optional": true, "requires": { - "nan": "^2.3.0", - "node-pre-gyp": "^0.6.36" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, - "ajv": { - "version": "4.11.8", - "bundled": true, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "optional": true, "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "optional": true + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-stream": { + "version": "3.1.18", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", + "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", + "dev": true, + "requires": { + "glob": "^4.3.1", + "glob2base": "^0.0.12", + "minimatch": "^2.0.1", + "ordered-read-streams": "^0.1.0", + "through2": "^0.6.1", + "unique-stream": "^1.0.0" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "optional": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, + "glob": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", + "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", "dev": true, - "optional": true + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^2.0.1", + "once": "^1.3.0" + } }, - "aws4": { - "version": "1.6.0", - "bundled": true, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, - "optional": true + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } }, - "balanced-match": { - "version": "0.4.2", - "bundled": true, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true }, - "block-stream": { - "version": "0.0.9", - "bundled": true, + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "inherits": "~2.0.0" + "brace-expansion": "^1.0.0" } }, - "boom": { - "version": "2.10.1", - "bundled": true, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "hoek": "2.x.x" + "wrappy": "1" } }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "balanced-match": "^0.4.1", - "concat-map": "0.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, - "concat-map": { - "version": "0.0.1", - "bundled": true, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + } + } + }, + "glob-watcher": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", + "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", + "dev": true, + "requires": { + "gaze": "^0.5.1" + } + }, + "glob2base": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", + "dev": true, + "requires": { + "find-index": "^0.1.1" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "dependencies": { + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "optional": true, "requires": { - "boom": "2.x.x" + "isexe": "^2.0.0" } + } + } + }, + "globals": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", + "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, - "dashdash": { - "version": "1.14.1", - "bundled": true, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, - "optional": true, "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "debug": { - "version": "2.6.8", - "bundled": true, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, - "optional": true, "requires": { - "ms": "2.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "optional": true + "requires": { + "brace-expansion": "^1.1.7" + } }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + } + } + }, + "globule": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", + "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", + "dev": true, + "requires": { + "glob": "~3.1.21", + "lodash": "~1.0.1", + "minimatch": "~0.2.11" + }, + "dependencies": { + "glob": { + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", "dev": true, - "optional": true, "requires": { - "jsbn": "~0.1.0" + "graceful-fs": "~1.2.0", + "inherits": "1", + "minimatch": "~0.2.11" } }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true + "graceful-fs": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true }, - "extsprintf": { + "inherits": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", "dev": true }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", "dev": true, - "optional": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" + "lru-cache": "2", + "sigmund": "~1.0.0" } + } + } + }, + "glogg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", + "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", + "dev": true, + "requires": { + "sparkles": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "gulp": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", + "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", + "dev": true, + "requires": { + "archy": "^1.0.0", + "chalk": "^1.0.0", + "deprecated": "^0.0.1", + "gulp-util": "^3.0.0", + "interpret": "^1.0.0", + "liftoff": "^2.1.0", + "minimist": "^1.1.0", + "orchestrator": "^0.3.0", + "pretty-hrtime": "^1.0.0", + "semver": "^4.1.0", + "tildify": "^1.0.0", + "v8flags": "^2.0.2", + "vinyl-fs": "^0.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, - "fstream": { - "version": "1.0.11", - "bundled": true, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, - "fstream-ignore": { + "escape-string-regexp": { "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fstream": "^1.0.0", - "inherits": "2", - "minimatch": "^3.0.0" - } + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, - "gauge": { - "version": "2.7.4", - "bundled": true, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, - "optional": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "ansi-regex": "^2.0.0" } }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true }, - "glob": { - "version": "7.1.2", - "bundled": true, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "ansi-regex": "^2.0.0" } }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "gulp-concat": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", + "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", + "dev": true, + "requires": { + "concat-with-sourcemaps": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^2.0.0" + }, + "dependencies": { + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", "dev": true }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" - } + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true }, - "hawk": { - "version": "3.1.3", - "bundled": true, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, - "optional": true, "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "hoek": { - "version": "2.16.3", - "bundled": true, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", "dev": true }, - "http-signature": { + "string_decoder": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "optional": true, "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "safe-buffer": "~5.1.0" } }, - "inflight": { - "version": "1.0.6", - "bundled": true, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, - "inherits": { - "version": "2.0.3", - "bundled": true, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "ini": { - "version": "1.3.4", - "bundled": true, + "vinyl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "dev": true, - "optional": true + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + } + } + }, + "gulp-rename": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.3.tgz", + "integrity": "sha512-CmdPM0BjJ105QCX1fk+j7NGhiN/1rCl9HLGss+KllBS/tdYadpjTxqdKyh/5fNV+M3yjT1MFz5z93bXdrTyzAw==", + "dev": true + }, + "gulp-sourcemaps": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.12.0.tgz", + "integrity": "sha1-eG+XyUoPloSSRl1wVY4EJCxnlZg=", + "dev": true, + "requires": { + "@gulp-sourcemaps/map-sources": "1.X", + "acorn": "4.X", + "convert-source-map": "1.X", + "css": "2.X", + "debug-fabulous": "0.0.X", + "detect-newline": "2.X", + "graceful-fs": "4.X", + "source-map": "0.X", + "strip-bom": "2.X", + "through2": "2.X", + "vinyl": "1.X" + }, + "dependencies": { + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, + } + } + }, + "gulp-uglify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-1.5.4.tgz", + "integrity": "sha1-UkeI2HZm0J+dDCH7IXf5ADmmWMk=", + "dev": true, + "requires": { + "deap": "^1.0.0", + "fancy-log": "^1.0.0", + "gulp-util": "^3.0.0", + "isobject": "^2.0.0", + "through2": "^2.0.0", + "uglify-js": "2.6.4", + "uglify-save-license": "^0.4.1", + "vinyl-sourcemaps-apply": "^0.2.0" + }, + "dependencies": { + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, - "optional": true + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + } }, - "isarray": { - "version": "1.0.0", - "bundled": true, + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", "dev": true }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "dev": true, - "optional": true, "requires": { - "jsbn": "~0.1.0" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, - "optional": true, "requires": { - "jsonify": "~0.0.0" + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" } }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true }, - "mime-db": { - "version": "1.27.0", - "bundled": true, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "mime-types": { - "version": "2.1.15", - "bundled": true, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "requires": { - "mime-db": "~1.27.0" + "isarray": "1.0.0" } }, - "minimatch": { - "version": "3.0.4", - "bundled": true, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "is-buffer": "^1.1.5" } }, - "minimist": { - "version": "0.0.8", - "bundled": true, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", "dev": true }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true }, - "ms": { + "process-nextick-args": { "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true }, - "node-pre-gyp": { - "version": "0.6.36", - "bundled": true, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, - "optional": true, "requires": { - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "request": "^2.81.0", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^2.2.1", - "tar-pack": "^3.4.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true }, - "npmlog": { - "version": "4.1.0", - "bundled": true, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dev": true, - "optional": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "align-text": "^0.1.1" } }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "wrappy": "1" + "safe-buffer": "~5.1.0" } }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, - "optional": true + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + } }, - "osenv": { - "version": "0.1.4", - "bundled": true, + "uglify-js": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", + "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=", "dev": true, - "optional": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "async": "~0.2.6", + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" } }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "dev": true }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", "dev": true }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true }, - "qs": { - "version": "6.4.0", - "bundled": true, - "dev": true, - "optional": true + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true }, - "rc": { - "version": "1.2.1", - "bundled": true, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, - "optional": true, "requires": { - "deep-extend": "~0.4.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true, - "requires": { - "buffer-shims": "~1.0.0", - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~1.0.0", - "util-deprecate": "~1.0.1" + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" } + } + } + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "dev": true, + "requires": { + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", + "replace-ext": "0.0.1", + "through2": "^2.0.0", + "vinyl": "^0.5.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, - "request": { - "version": "2.81.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~4.2.1", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "performance-now": "^0.2.0", - "qs": "~6.4.0", - "safe-buffer": "^5.0.1", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.0.0" - } + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true }, - "rimraf": { - "version": "2.6.1", - "bundled": true, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "glob": "^7.0.5" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "semver": { - "version": "5.3.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true + "dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "dev": true }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, - "sntp": { - "version": "1.0.9", - "bundled": true, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, - "optional": true, "requires": { - "hoek": "2.x.x" + "ansi-regex": "^2.0.0" } }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jodid25519": "^1.0.0", - "jsbn": "~0.1.0", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true }, - "string-width": { - "version": "1.0.2", - "bundled": true, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, "string_decoder": { - "version": "1.0.1", - "bundled": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { "ansi-regex": "^2.0.0" } }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, - "optional": true, "requires": { - "debug": "^2.2.0", - "fstream": "^1.0.10", - "fstream-ignore": "^1.0.5", - "once": "^1.3.3", - "readable-stream": "^2.1.4", - "rimraf": "^2.5.1", - "tar": "^2.2.1", - "uid-number": "^0.0.6" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "^1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, "util-deprecate": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true } } }, - "function-bind": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", - "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", - "dev": true + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "requires": { + "glogg": "^1.0.0" + } }, - "gaze": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", + "handlebars": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", + "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", "dev": true, "requires": { - "globule": "~0.1.0" + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "generate-function": { + "har-schema": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "dev": true }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "dev": true, "requires": { - "is-property": "^1.0.0" + "ajv": "^6.5.5", + "har-schema": "^2.0.0" } }, - "generic-pool": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.2.tgz", - "integrity": "sha1-iGvFvwvrfblugby7oHiBjeWmJoM=", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "^1.0.2" + } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } }, - "getpass": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", - "integrity": "sha1-KD/9n8ElaECHUxHBtg6MQBhxEOY=", + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "isarray": "2.0.1" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "dev": true } } }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", "dev": true, "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" + "sparkles": "^1.0.0" } }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "is-glob": "^2.0.0" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, - "glob-stream": { - "version": "3.1.18", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", - "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "glob": "^4.3.1", - "glob2base": "^0.0.12", - "minimatch": "^2.0.1", - "ordered-read-streams": "^0.1.0", - "through2": "^0.6.1", - "unique-stream": "^1.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "glob": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^2.0.1", - "once": "^1.3.0" + "is-buffer": "^1.1.5" } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "^1.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true } } }, - "glob-watcher": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", - "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", "dev": true, "requires": { - "gaze": "^0.5.1" + "inherits": "^2.0.1" } }, - "glob2base": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "dev": true, "requires": { - "find-index": "^0.1.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" } }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "hasha": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", + "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", "dev": true, "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "is-stream": "^1.0.1", + "pinkie-promise": "^2.0.0" } }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "dependencies": { - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "globals": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-6.4.1.tgz", - "integrity": "sha1-hJgDKzttHMge68X3lpDY/in6v08=", + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", "dev": true }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-proxy": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", + "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "dev": true + }, + "https-proxy-agent": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", + "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" }, "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "ms": "^2.1.1" } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { - "glob": "~3.1.21", - "lodash": "~1.0.1", - "minimatch": "~0.2.11" - }, - "dependencies": { - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "~1.2.0", - "inherits": "1", - "minimatch": "~0.2.11" - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2", - "sigmund": "~1.0.0" - } - } + "safer-buffer": ">= 2.1.2 < 3" } }, - "glogg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", - "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", "dev": true, "requires": { - "sparkles": "^1.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "dev": true }, - "gulp": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", - "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", + "inflection": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", + "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "archy": "^1.0.0", - "chalk": "^1.0.0", - "deprecated": "^0.0.1", - "gulp-util": "^3.0.0", - "interpret": "^1.0.0", - "liftoff": "^2.1.0", - "minimist": "^1.1.0", - "orchestrator": "^0.3.0", - "pretty-hrtime": "^1.0.0", - "semver": "^4.1.0", - "tildify": "^1.0.0", - "v8flags": "^2.0.2", - "vinyl-fs": "^0.3.0" + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dev": true, + "requires": { + "source-map": "~0.5.3" + } + }, + "inquirer": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.3.tgz", + "integrity": "sha512-+OiOVeVydu4hnCGLCSX+wedovR/Yzskv9BFqUNNKq9uU2qg7LCcCo3R86S2E7WLo0y/x2pnEZfZe1CoYnORUAw==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.2.0", + "rxjs": "^6.5.3", + "string-width": "^4.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" }, "dependencies": { "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "color-convert": "^1.9.0" } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^4.1.0" } }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, - "gulp-concat": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", - "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", + "insert-module-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", + "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", "dev": true, "requires": { - "concat-with-sourcemaps": "^1.0.0", + "JSONStream": "^1.0.3", + "combine-source-map": "~0.7.1", + "concat-stream": "~1.5.1", + "is-buffer": "^1.1.0", + "lexical-scope": "^1.2.0", + "process": "~0.11.0", "through2": "^2.0.0", - "vinyl": "^2.0.0" + "xtend": "^4.0.0" + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" }, "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "is-buffer": "^1.1.5" } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true } } }, - "gulp-coveralls": { + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", + "integrity": "sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=", + "dev": true + }, + "is-data-descriptor": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/gulp-coveralls/-/gulp-coveralls-0.1.4.tgz", - "integrity": "sha1-L2IKyN9i0LhrS73mTaNnzEGhkMk=", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "coveralls": "^2.11.2", - "gulp-util": "^3.0.4", - "through2": "^1.1.1" + "kind-of": "^3.0.2" }, "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "through2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz", - "integrity": "sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "readable-stream": ">=1.1.13-1 <1.2.0-0", - "xtend": ">=4.0.0 <4.1.0-0" + "is-buffer": "^1.1.5" } - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true } } }, - "gulp-jshint": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/gulp-jshint/-/gulp-jshint-1.12.0.tgz", - "integrity": "sha1-I/vRuv3W+/5h6mRmenSAmpYdA94=", + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "gulp-util": "^3.0.0", - "jshint": "^2.7.0", - "lodash": "^3.0.1", - "minimatch": "^2.0.1", - "rcloader": "0.1.2", - "through2": "~0.6.1" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "^1.0.0" - } - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true } } }, - "gulp-rename": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.3.tgz", - "integrity": "sha512-CmdPM0BjJ105QCX1fk+j7NGhiN/1rCl9HLGss+KllBS/tdYadpjTxqdKyh/5fNV+M3yjT1MFz5z93bXdrTyzAw==", + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, - "gulp-sourcemaps": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.12.0.tgz", - "integrity": "sha1-eG+XyUoPloSSRl1wVY4EJCxnlZg=", + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "@gulp-sourcemaps/map-sources": "1.X", - "acorn": "4.X", - "convert-source-map": "1.X", - "css": "2.X", - "debug-fabulous": "0.0.X", - "detect-newline": "2.X", - "graceful-fs": "4.X", - "source-map": "0.X", - "strip-bom": "2.X", - "through2": "2.X", - "vinyl": "1.X" - }, - "dependencies": { - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "dev": true, + "requires": { + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true } } }, - "gulp-uglify": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-1.5.4.tgz", - "integrity": "sha1-UkeI2HZm0J+dDCH7IXf5ADmmWMk=", + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", "dev": true, "requires": { - "deap": "^1.0.0", - "fancy-log": "^1.0.0", - "gulp-util": "^3.0.0", - "isobject": "^2.0.0", - "through2": "^2.0.0", - "uglify-js": "2.6.4", - "uglify-save-license": "^0.4.1", - "vinyl-sourcemaps-apply": "^0.2.0" + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz", + "integrity": "sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "requires": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" }, "dependencies": { - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "dev": true }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" + "has-flag": "^1.0.0" } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + } + } + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + } + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "has-flag": "^3.0.0" } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "ms": "^2.1.1" } }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "align-text": "^0.1.1" + "glob": "^7.1.3" } }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "dev": true, + "requires": { + "handlebars": "^4.1.2" + } + }, + "jasmine": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.7.0.tgz", + "integrity": "sha1-XPC7TllLRgC7QjVWA2YhKsWuobI=", + "dev": true, + "requires": { + "exit": "^0.1.2", + "glob": "^7.0.6", + "jasmine-core": "~2.7.0" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "uglify-js": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", - "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=", + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "async": "~0.2.6", - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" + "brace-expansion": "^1.1.7" } } } }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "jasmine-ajax": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jasmine-ajax/-/jasmine-ajax-3.4.0.tgz", + "integrity": "sha512-LIVNVCmx5ou+IG6wgX7j73YYzvE2e3aqFWMjOhvAHWTnLICOYSobIH+PG/gOwtP20X0u2SkD3NXT/j5X8rMGOA==", + "dev": true + }, + "jasmine-core": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.7.0.tgz", + "integrity": "sha1-UP+MT5LY71wLLBuEbdJj7YUVIJE=", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + } + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdoc-dash-template": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/jsdoc-dash-template/-/jsdoc-dash-template-1.2.0.tgz", + "integrity": "sha1-8iUxyOvERmJ5pxNuVO+SDHKtEOk=", + "dev": true, + "requires": { + "jsdoc-docset": "^0.2.1" + } + }, + "jsdoc-docset": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/jsdoc-docset/-/jsdoc-docset-0.2.1.tgz", + "integrity": "sha1-5XLsy4aj+lYBrnxrtkMBU1MeezU=", + "dev": true, + "requires": { + "docset-generator": "^0.2.1", + "object-assign": "^4.0.1" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + } + } + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jszip": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.2.tgz", + "integrity": "sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA==", + "dev": true, + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + }, + "dependencies": { + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -6117,12 +5492,6 @@ "util-deprecate": "~1.0.1" } }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -6131,4295 +5500,2257 @@ "requires": { "safe-buffer": "~5.1.0" } + } + } + }, + "karma": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-4.4.1.tgz", + "integrity": "sha512-L5SIaXEYqzrh6b1wqYC42tNsFMx2PWuxky84pK9coK09MvmL7mxii3G3bZBh/0rvD27lqDd0le9jyhzvwif73A==", + "dev": true, + "requires": { + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "braces": "^3.0.2", + "chokidar": "^3.0.0", + "colors": "^1.1.0", + "connect": "^3.6.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "flatted": "^2.0.0", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^4.17.14", + "log4js": "^4.0.0", + "mime": "^2.3.1", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", + "socket.io": "2.1.1", + "source-map": "^0.6.1", + "tmp": "0.0.33", + "useragent": "2.3.0" + }, + "dependencies": { + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" + "glob": "^7.1.3" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "karma-chrome-launcher": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", + "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", "dev": true, "requires": { - "glogg": "^1.0.0" + "which": "^1.2.1" } }, - "handlebars": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", - "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "karma-coverage": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.1.tgz", + "integrity": "sha512-SnFkHsnLsaXfxkey51rRN9JDLAEKYW2Lb0qOEvcruukk0NkSNDkjobNDZPt9Ni3kIhLZkLtpGOz661hN7OaZvQ==", "dev": true, "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "dateformat": "^1.0.6", + "istanbul": "^0.4.0", + "istanbul-lib-coverage": "^2.0.5", + "istanbul-lib-instrument": "^3.3.0", + "istanbul-lib-report": "^2.0.8", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^2.2.4", + "lodash": "^4.17.11", + "minimatch": "^3.0.0", + "source-map": "^0.5.1" }, "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true } } }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "commander": "^2.9.0", - "is-my-json-valid": "^2.12.4", - "pinkie-promise": "^2.0.0" - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "karma-coveralls": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-coveralls/-/karma-coveralls-2.1.0.tgz", + "integrity": "sha512-l2qg7ufv7ooPJ5gFDfQM63eI6LaNGjGlkR8PIvBsi/m3nrfY+m4a7ph6fvQ7Zb+gDTWlo92NM5H0p+VTk8lupw==", "dev": true, "requires": { - "function-bind": "^1.0.2" + "coveralls": "~3.0.0", + "lcov-result-merger": "^3.0.0", + "through2": "^2.0.0", + "vinyl-fs": "^3.0.2" + }, + "dependencies": { + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "coveralls": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.9.tgz", + "integrity": "sha512-nNBg3B1+4iDox5A5zqHKzUTiwl2ey4k2o0NEcVZYvl+GOSJdKBj4AJGKLv6h3SvWch7tABHePAQOSZWM9E2hMg==", + "dev": true, + "requires": { + "js-yaml": "^3.13.1", + "lcov-parse": "^1.0.0", + "log-driver": "^1.2.7", + "minimist": "^1.2.0", + "request": "^2.88.0" + } + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + }, + "lcov-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", + "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", + "dev": true + }, + "log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true + }, + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dev": true, + "requires": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "dev": true + }, + "vinyl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", + "dev": true, + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, + "vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "requires": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + } + } } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "karma-firefox-launcher": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.2.0.tgz", + "integrity": "sha512-j9Zp8M8+VLq1nI/5xZGfzeaEPtGQ/vk3G+Y8vpmFWLvKLNZ2TDjD6cu2dUu7lDbu1HXNgatsAX4jgCZTkR9qhQ==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "is-wsl": "^2.1.0" } }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "karma-ie-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/karma-ie-launcher/-/karma-ie-launcher-1.0.0.tgz", + "integrity": "sha1-SXmGhCxJAZA0bNifVJTKmDDG1Zw=", "dev": true, "requires": { - "isarray": "0.0.1" + "lodash": "^4.6.1" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true } } }, - "has-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", - "dev": true - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "karma-jasmine": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz", + "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=", "dev": true }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "karma-jasmine-ajax": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/karma-jasmine-ajax/-/karma-jasmine-ajax-0.1.13.tgz", + "integrity": "sha1-eLuS2Jb+MqJaGACYxHci4dlgW/w=", "dev": true, "requires": { - "sparkles": "^1.0.0" + "jasmine-ajax": "^3.0.0" } }, - "has-value": { + "karma-opera-launcher": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } + "resolved": "https://registry.npmjs.org/karma-opera-launcher/-/karma-opera-launcher-1.0.0.tgz", + "integrity": "sha1-+lFihTGh0L6EstjcDX7iCfyP+Ro=", + "dev": true }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "karma-phantomjs-launcher": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", + "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=", "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "lodash": "^4.0.1", + "phantomjs-prebuilt": "^2.1.7" }, "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "dev": true }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" } }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" } - } - } - }, - "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true, - "requires": { - "inherits": "^2.0.1" + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "kew": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", + "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", + "dev": true + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "phantomjs-prebuilt": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", + "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3", + "extract-zip": "^1.6.5", + "fs-extra": "^1.0.0", + "hasha": "^2.2.0", + "kew": "^0.7.0", + "progress": "^1.1.8", + "request": "^2.81.0", + "request-progress": "^2.0.1", + "which": "^1.2.10" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "request-progress": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", + "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "dev": true + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "dev": true + } } }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "karma-safari-launcher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/karma-safari-launcher/-/karma-safari-launcher-1.0.0.tgz", + "integrity": "sha1-lpgqLMR9BmquccVTursoMZEVos4=", + "dev": true + }, + "karma-sauce-launcher": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/karma-sauce-launcher/-/karma-sauce-launcher-2.0.2.tgz", + "integrity": "sha512-jLUFaJhHMcKpxFWUesyWYihzM5FvQiJsDwGcCtKeOy2lsWhkVw0V0Byqb1d+wU6myU1mribBtsIcub23HS4kWA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "sauce-connect-launcher": "^1.2.4", + "saucelabs": "^1.5.0", + "selenium-webdriver": "^4.0.0-alpha.1" } }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "karma-spec-reporter": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.32.tgz", + "integrity": "sha1-LpxyB+pyZ3EmAln4K+y1QyCeRAo=", "dev": true, "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" + "colors": "^1.1.2" } }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", "dev": true, "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "graceful-fs": "^4.1.9" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "home-or-tmp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-1.0.0.tgz", - "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", + "labeled-stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", + "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", "dev": true, "requires": { - "os-tmpdir": "^1.0.1", - "user-home": "^1.1.1" + "inherits": "^2.0.1", + "isarray": "~0.0.1", + "stream-splicer": "^2.0.0" }, "dependencies": { - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true } } }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "lazy-debug-legacy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/lazy-debug-legacy/-/lazy-debug-legacy-0.0.1.tgz", + "integrity": "sha1-U3cWwHduTPeePtG2IfdljCkRsbE=", + "dev": true + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "dev": true, "requires": { - "parse-passwd": "^1.0.0" + "readable-stream": "^2.0.5" } }, - "hosted-git-info": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz", - "integrity": "sha1-C6gdkNouJas0ozLm7HeTbhWYEYs=", - "dev": true - }, - "htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", - "dev": true - }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "lcov-result-merger": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lcov-result-merger/-/lcov-result-merger-3.1.0.tgz", + "integrity": "sha512-vGXaMNGZRr4cYvW+xMVg+rg7qd5DX9SbGXl+0S3k85+gRZVK4K7UvxPWzKb/qiMwe+4bx3EOrW2o4mbdb1WnsA==", "dev": true, "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" + "through2": "^2.0.3", + "vinyl": "^2.1.0", + "vinyl-fs": "^3.0.2" }, "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", "dev": true }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + }, + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dev": true, + "requires": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "vinyl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", + "dev": true, + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, + "vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "requires": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + } } } }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", "dev": true, "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true - } + "flush-write-stream": "^1.0.2" } }, - "http-proxy": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", - "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "eventemitter3": "1.x.x", - "requires-port": "1.x.x" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "lexical-scope": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", + "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", "dev": true, "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "astw": "^2.0.0" } }, - "https-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", - "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", - "dev": true - }, - "https-proxy-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", - "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, "requires": { - "agent-base": "2", - "debug": "2", - "extend": "3" + "immediate": "~3.0.5" } }, - "i": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", - "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", - "dev": true - }, - "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "liftoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", + "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", "dev": true, "requires": { - "repeating": "^2.0.0" + "extend": "^3.0.0", + "findup-sync": "^2.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "dependencies": { + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + } } }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "lodash": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", "dev": true }, - "inflection": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", - "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", "dev": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true }, - "inherit": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/inherit/-/inherit-2.2.6.tgz", - "integrity": "sha1-8WFLBshUToEo5CKchjR9tzrZeI0=", + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", "dev": true }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", "dev": true }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", "dev": true }, - "inline-source-map": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", "dev": true, "requires": { - "source-map": "~0.5.3" + "lodash._root": "^3.0.0" } }, - "insert-module-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", - "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "JSONStream": "^1.0.3", - "combine-source-map": "~0.7.1", - "concat-stream": "~1.5.1", - "is-buffer": "^1.1.0", - "lexical-scope": "^1.2.0", - "process": "~0.11.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", "dev": true }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", "dev": true }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", "dev": true, "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" + } + }, + "log4js": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz", + "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==", + "dev": true, + "requires": { + "date-format": "^2.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.0", + "rfdc": "^1.1.4", + "streamroller": "^1.0.6" }, "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "ms": "^2.1.1" } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, - "is-buffer": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", - "integrity": "sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=", + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", "dev": true }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "kind-of": "^3.0.2" + "pify": "^4.0.1", + "semver": "^5.6.0" }, "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } } } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "kind-of": "^6.0.2" }, "dependencies": { "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } } }, - "is-dotfile": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", - "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=", + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true }, - "is-extglob": { + "map-visit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "object-visit": "^1.0.0" } }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true }, - "is-integer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.7.tgz", - "integrity": "sha1-a96Bqs3feLZZtmKdYpytxRqIbVw=", + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "is-finite": "^1.0.0" + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" }, "dependencies": { - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true } } }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true - }, - "is-my-json-valid": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz", - "integrity": "sha1-k27do8o8IR/ZjzstPgjaQ/eykVs=", + "miller-rabin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", + "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", "dev": true, "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true }, - "is-odd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", "dev": true, "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } + "mime-db": "1.43.0" } }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "is-path-in-cwd": { + "minimalistic-assert": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", "dev": true, "requires": { - "is-path-inside": "^1.0.0" + "brace-expansion": "^1.0.0" } }, - "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "requires": { - "path-is-inside": "^1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { - "isobject": "^3.0.1" + "minimist": "0.0.8" }, "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true } } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "module-deps": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", + "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", "dev": true, "requires": { - "is-unc-path": "^1.0.0" + "JSONStream": "^1.0.3", + "browser-resolve": "^1.7.0", + "cached-path-relative": "^1.0.0", + "concat-stream": "~1.5.0", + "defined": "^1.0.0", + "detective": "^4.0.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.3", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "moment": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", + "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==", "dev": true }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "moment-timezone": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.17.tgz", + "integrity": "sha512-Y/JpVEWIOA9Gho4vO15MTnW1FCmHi3ypprrkUaxsZ1TKg3uqC8q/qMBjTddkHoiwwZN3qvZSr4zJP7x9V3LpXA==", "dev": true, "requires": { - "unc-path-regex": "^0.1.2" + "moment": ">= 2.9.0" } }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isbinaryfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", - "dev": true - }, - "isexe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", - "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { + "multipipe": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", "dev": true, "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" + "duplexer2": "0.0.2" }, "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "readable-stream": "~1.1.9" } }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } } }, - "jasmine": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.7.0.tgz", - "integrity": "sha1-XPC7TllLRgC7QjVWA2YhKsWuobI=", + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "nanomatch": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "dev": true, "requires": { - "exit": "^0.1.2", - "glob": "^7.0.6", - "jasmine-core": "~2.7.0" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-odd": "^2.0.0", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true } } }, - "jasmine-ajax": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jasmine-ajax/-/jasmine-ajax-3.4.0.tgz", - "integrity": "sha512-LIVNVCmx5ou+IG6wgX7j73YYzvE2e3aqFWMjOhvAHWTnLICOYSobIH+PG/gOwtP20X0u2SkD3NXT/j5X8rMGOA==", + "natives": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz", + "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==", "dev": true }, - "jasmine-core": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.7.0.tgz", - "integrity": "sha1-UP+MT5LY71wLLBuEbdJj7YUVIJE=", + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "jodid25519": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0" - } + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true }, - "js-tokens": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.1.tgz", - "integrity": "sha1-zENaXIuUrRWst5gxQPyAGCyJrq4=", + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, - "js-yaml": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", - "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" + "abbrev": "1" } }, - "jsbn": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", - "integrity": "sha1-ZQmH2g3XT06/WhE3eiqi0nPpff0=", + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "optional": true - }, - "jscs": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/jscs/-/jscs-2.11.0.tgz", - "integrity": "sha1-bhHvDKqgdzH53MKysn2OzuHdvLY=", - "dev": true, - "requires": { - "babel-jscs": "^2.0.0", - "chalk": "~1.1.0", - "cli-table": "~0.3.1", - "commander": "~2.9.0", - "escope": "^3.2.0", - "esprima": "~2.7.0", - "estraverse": "^4.1.0", - "exit": "~0.1.2", - "glob": "^5.0.1", - "htmlparser2": "3.8.3", - "js-yaml": "~3.4.0", - "jscs-jsdoc": "^1.3.1", - "jscs-preset-wikimedia": "~1.0.0", - "jsonlint": "~1.6.2", - "lodash": "~3.10.0", - "minimatch": "~3.0.0", - "natural-compare": "~1.2.2", - "pathval": "~0.1.1", - "prompt": "~0.2.14", - "reserved-words": "^0.1.1", - "resolve": "^1.1.6", - "strip-bom": "^2.0.0", - "strip-json-comments": "~1.0.2", - "to-double-quotes": "^2.0.0", - "to-single-quotes": "^2.0.0", - "vow": "~0.4.8", - "vow-fs": "~0.3.4", - "xmlbuilder": "^3.1.0" + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "resolve": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz", + "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==", "dev": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "path-parse": "^1.0.6" } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "js-yaml": { - "version": "3.4.6", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.4.6.tgz", - "integrity": "sha1-a+GyP2JJ9T0pM3D9TRqqY84bTrA=", - "dev": true, - "requires": { - "argparse": "^1.0.2", - "esprima": "^2.6.0", - "inherit": "^2.2.2" - } - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true } } }, - "jscs-jsdoc": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/jscs-jsdoc/-/jscs-jsdoc-1.3.2.tgz", - "integrity": "sha1-HyyCtqtLl1JNqVj0a05WLgMF+ac=", + "normalize-path": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", + "integrity": "sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=", + "dev": true + }, + "now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", "dev": true, "requires": { - "comment-parser": "^0.3.1", - "jsdoctypeparser": "~1.2.0" + "once": "^1.3.2" } }, - "jscs-preset-wikimedia": { + "number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.1.tgz", - "integrity": "sha512-RWqu6IYSUlnYuCRCF0obCOHjJV0vhpLcvKbauwxmLQoZ0PiXDTWBYlfpsEfdhg7pmREAEwrARfDRz5qWD6qknA==", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "jsdoc-dash-template": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jsdoc-dash-template/-/jsdoc-dash-template-1.2.0.tgz", - "integrity": "sha1-8iUxyOvERmJ5pxNuVO+SDHKtEOk=", + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "jsdoc-docset": "^0.2.1" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "jsdoc-docset": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/jsdoc-docset/-/jsdoc-docset-0.2.1.tgz", - "integrity": "sha1-5XLsy4aj+lYBrnxrtkMBU1MeezU=", + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "docset-generator": "^0.2.1", - "object-assign": "^4.0.1" + "isobject": "^3.0.0" }, "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true } } }, - "jsdoctypeparser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz", - "integrity": "sha1-597cFToRhJ/8UUEUSuhqfvDCU5I=", + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { - "lodash": "^3.7.0" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" }, "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true } } }, - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "jshint": { - "version": "2.9.5", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz", - "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", "dev": true, "requires": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "3.7.x", - "minimatch": "~3.0.2", - "shelljs": "0.3.x", - "strip-json-comments": "1.0.x" + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" }, "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "date-now": "^0.1.4" + "for-in": "^1.0.1" } }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true - }, - "lodash": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", - "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=", + } + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "dependencies": { + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "for-in": "^1.0.1" } } } }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "jsonify": "~0.0.0" + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "json5": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", - "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonlint": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.3.tgz", - "integrity": "sha512-jMVTMzP+7gU/IyC6hvKyWpUU8tmTkK5b3BPNuMI9U8Sit+YAWLlZwB6Y6YrdCxfg2kNz05p3XY3Bmm4m26Nv3A==", + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, "requires": { - "JSV": "^4.0.x", - "nomnom": "^1.5.x" + "ee-first": "1.1.1" } }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz", - "integrity": "sha1-ZmHhYdL8RF8Z+YQwIxNDci4fy9U=", - "dev": true + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } }, - "jsprim": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", - "integrity": "sha1-KnJW9wQSop7jZwqspiWZTE3P8lI=", + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "dev": true, "requires": { - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" + "mimic-fn": "^2.1.0" } }, - "karma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.0.tgz", - "integrity": "sha1-b3oaQGRG+i4YfslTmGmPTO5HYmk=", + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "bluebird": "^3.3.0", - "body-parser": "^1.16.1", - "chokidar": "^1.4.1", - "colors": "^1.1.0", - "combine-lists": "^1.0.0", - "connect": "^3.6.0", - "core-js": "^2.2.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.0", - "expand-braces": "^0.1.1", - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "http-proxy": "^1.13.0", - "isbinaryfile": "^3.0.0", - "lodash": "^3.8.0", - "log4js": "^0.6.31", - "mime": "^1.3.4", - "minimatch": "^3.0.2", - "optimist": "^0.6.1", - "qjobs": "^1.1.4", - "range-parser": "^1.2.0", - "rimraf": "^2.6.0", - "safe-buffer": "^5.0.1", - "socket.io": "1.7.3", - "source-map": "^0.5.3", - "tmp": "0.0.31", - "useragent": "^2.1.12" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" }, "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "bluebird": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", - "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "core-js": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz", - "integrity": "sha1-VpwFCRi+ZIazg3VSAorgRmtxcIY=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true - }, - "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true, - "requires": { - "glob": "^7.0.5" - } } } }, - "karma-chrome-launcher": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", - "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { - "fs-access": "^1.0.0", - "which": "^1.2.1" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" } }, - "karma-coverage": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.1.tgz", - "integrity": "sha1-Wv+LOc9plNwi3kyENix2ABtjfPY=", + "orchestrator": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", + "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", "dev": true, "requires": { - "dateformat": "^1.0.6", - "istanbul": "^0.4.0", - "lodash": "^3.8.0", - "minimatch": "^3.0.0", - "source-map": "^0.5.1" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } + "end-of-stream": "~0.1.5", + "sequencify": "~0.0.7", + "stream-consume": "~0.1.0" } }, - "karma-firefox-launcher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.0.1.tgz", - "integrity": "sha1-zlj0fCATqIFW1VpdYTN8CZz1u1E=", + "ordered-read-streams": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", + "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", "dev": true }, - "karma-ie-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/karma-ie-launcher/-/karma-ie-launcher-1.0.0.tgz", - "integrity": "sha1-SXmGhCxJAZA0bNifVJTKmDDG1Zw=", - "dev": true, - "requires": { - "lodash": "^4.6.1" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - } - } + "os-browserify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", + "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=", + "dev": true }, - "karma-jasmine": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.0.tgz", - "integrity": "sha1-IuTAa/mhguUpTR9wXjczgRuBCs8=", + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, - "karma-jasmine-ajax": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/karma-jasmine-ajax/-/karma-jasmine-ajax-0.1.13.tgz", - "integrity": "sha1-eLuS2Jb+MqJaGACYxHci4dlgW/w=", - "dev": true, - "requires": { - "jasmine-ajax": "^3.0.0" - } + "p-map": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.1.1.tgz", + "integrity": "sha1-BfXkrpegaDcbwqXMhr+9vBnErno=", + "dev": true }, - "karma-opera-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/karma-opera-launcher/-/karma-opera-launcher-1.0.0.tgz", - "integrity": "sha1-+lFihTGh0L6EstjcDX7iCfyP+Ro=", + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", "dev": true }, - "karma-phantomjs2-launcher": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/karma-phantomjs2-launcher/-/karma-phantomjs2-launcher-0.5.0.tgz", - "integrity": "sha1-X/jI8i0N+OZygoyoeQhiq8Amk0U=", + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { - "lodash": "^3.10.1", - "phantomjs2-ext": "^0.2.1" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } + "callsites": "^3.0.0" } }, - "karma-safari-launcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/karma-safari-launcher/-/karma-safari-launcher-1.0.0.tgz", - "integrity": "sha1-lpgqLMR9BmquccVTursoMZEVos4=", - "dev": true - }, - "karma-sauce-launcher": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/karma-sauce-launcher/-/karma-sauce-launcher-1.1.0.tgz", - "integrity": "sha1-PQg89WWdZzarl7zuXYrNhq1SIhI=", + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", "dev": true, "requires": { - "q": "^1.4.1", - "sauce-connect-launcher": "^0.17.0", - "saucelabs": "^1.3.0", - "wd": "^1.0.0" + "path-platform": "~0.11.15" } }, - "karma-spec-reporter": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.31.tgz", - "integrity": "sha1-SDDccUihVcfXoYbmMjOaDYD63sM=", + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", "dev": true, "requires": { - "colors": "^1.1.2" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, - "kew": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/kew/-/kew-0.5.0.tgz", - "integrity": "sha1-7OEctdjQGoH4zoBMjQu6BuayXKI=", - "dev": true - }, - "kind-of": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", - "integrity": "sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=", + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", "dev": true, "requires": { - "is-buffer": "^1.0.2" + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" } }, - "labeled-stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", - "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "inherits": "^2.0.1", - "isarray": "~0.0.1", - "stream-splicer": "^2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } + "error-ex": "^1.2.0" } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true, - "optional": true - }, - "lazy-debug-legacy": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/lazy-debug-legacy/-/lazy-debug-legacy-0.0.1.tgz", - "integrity": "sha1-U3cWwHduTPeePtG2IfdljCkRsbE=", + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", "dev": true }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "dev": true, "requires": { - "readable-stream": "^2.0.5" + "better-assert": "~1.0.0" } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "dev": true, "requires": { - "invert-kv": "^1.0.0" + "better-assert": "~1.0.0" } }, - "lcov-parse": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", - "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", "dev": true }, - "leven": { + "path-dirname": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/leven/-/leven-1.0.2.tgz", - "integrity": "sha1-kUS27ryl8dBoAWnxpncNzqYLdcM=", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "dev": true }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "pinkie-promise": "^2.0.0" } }, - "lexical-scope": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", - "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", - "dev": true, - "requires": { - "astw": "^2.0.0" - } + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, - "liftoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", - "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", "dev": true, "requires": { - "extend": "^3.0.0", - "findup-sync": "^2.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - }, - "dependencies": { - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - } + "path-root-regex": "^0.1.0" } }, - "load-json-file": { + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "path-type": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "pinkie-promise": "^2.0.0" } }, - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", - "dev": true - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "pbkdf2": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.13.tgz", + "integrity": "sha512-+dCHxDH+djNtjgWmvVC/my3SYBAKpKNqKSjLkp+GtWWYe4XPE+e/PSD2aCanlEZZnqPk2uekTKNC/ccbwd2X2Q==", "dev": true, "requires": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "picomatch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", + "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==", "dev": true }, - "lodash._bindcallback": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, - "lodash._createassigner": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", - "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "lodash._bindcallback": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash.restparam": "^3.0.0" + "pinkie": "^2.0.0" } }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", "dev": true }, - "lodash.assign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", - "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", - "dev": true, - "requires": { - "lodash._baseassign": "^3.0.0", - "lodash._createassigner": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "^3.0.0" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", "dev": true }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", "dev": true }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "psl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", + "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==", "dev": true }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" - } - }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", "dev": true, "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" } }, - "log-driver": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", - "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=", - "dev": true - }, - "log4js": { - "version": "0.6.38", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", - "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "readable-stream": "~1.0.2", - "semver": "~4.3.3" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "once": "^1.4.0" } } } }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", "dev": true }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "dependencies": { - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "dev": true - } - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "miller-rabin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", - "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", - "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", - "dev": true - }, - "mime-db": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz", - "integrity": "sha1-wY29fHOl2/b0SgJNwNFloeexw5I=", - "dev": true - }, - "mime-types": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", - "integrity": "sha1-4HqqnGxrmnyjASxpADrSWjnpKog=", - "dev": true, - "requires": { - "mime-db": "~1.25.0" - } - }, - "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", - "dev": true, - "requires": { - "brace-expansion": "^1.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "module-deps": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", - "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", - "dev": true, - "requires": { - "JSONStream": "^1.0.3", - "browser-resolve": "^1.7.0", - "cached-path-relative": "^1.0.0", - "concat-stream": "~1.5.0", - "defined": "^1.0.0", - "detective": "^4.0.0", - "duplexer2": "^0.1.2", - "inherits": "^2.0.1", - "parents": "^1.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.1.3", - "stream-combiner2": "^1.1.1", - "subarg": "^1.0.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "moment": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", - "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==", - "dev": true - }, - "moment-timezone": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.17.tgz", - "integrity": "sha512-Y/JpVEWIOA9Gho4vO15MTnW1FCmHi3ypprrkUaxsZ1TKg3uqC8q/qMBjTddkHoiwwZN3qvZSr4zJP7x9V3LpXA==", - "dev": true, - "requires": { - "moment": ">= 2.9.0" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true, - "requires": { - "duplexer2": "0.0.2" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "~1.1.9" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", - "integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "natives": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz", - "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==", - "dev": true - }, - "natural-compare": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.2.2.tgz", - "integrity": "sha1-H5bWDjFBysG20FZTzg2urHY69qo=", - "dev": true - }, - "ncp": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", - "integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=", - "dev": true - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "node-uuid": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz", - "integrity": "sha1-baWhdmjEs91ZYjvaEc9/pMH2Cm8=", - "dev": true - }, - "nomnom": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", - "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", - "dev": true, - "requires": { - "chalk": "~0.4.0", - "underscore": "~1.6.0" - }, - "dependencies": { - "ansi-styles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", - "dev": true - }, - "chalk": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", - "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", - "dev": true, - "requires": { - "ansi-styles": "~1.0.0", - "has-color": "~0.1.0", - "strip-ansi": "~0.1.0" - } - }, - "strip-ansi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", - "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", - "dev": true - } - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", - "integrity": "sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", - "integrity": "sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=", - "dev": true - }, - "npmconf": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/npmconf/-/npmconf-2.1.1.tgz", - "integrity": "sha1-ombH5cVmlet/VcrzpacyjyRRDa4=", - "dev": true, - "requires": { - "config-chain": "~1.1.8", - "inherits": "~2.0.0", - "ini": "^1.2.0", - "mkdirp": "^0.5.0", - "nopt": "~3.0.1", - "once": "~1.3.0", - "osenv": "^0.1.0", - "semver": "2 || 3 || 4", - "uid-number": "0.0.5" - }, - "dependencies": { - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "dev": true, - "requires": { - "wrappy": "1" - } - } - } - }, - "null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "dependencies": { - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - } - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "dev": true - }, - "orchestrator": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", - "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", - "dev": true, - "requires": { - "end-of-stream": "~0.1.5", - "sequencify": "~0.0.7", - "stream-consume": "~0.1.0" - } - }, - "ordered-read-streams": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", - "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", - "dev": true - }, - "os-browserify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", - "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "output-file-sync": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", - "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.4", - "mkdirp": "^0.5.1", - "object-assign": "^4.1.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } - } - }, - "p-map": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.1.1.tgz", - "integrity": "sha1-BfXkrpegaDcbwqXMhr+9vBnErno=", - "dev": true - }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", - "dev": true - }, - "parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "dev": true, - "requires": { - "path-platform": "~0.11.15" - } - }, - "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" - } - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parsejson": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseurl": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", - "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pathval": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-0.1.1.tgz", - "integrity": "sha1-CPkRzcqczllCiA2ngXvAtyO2bYI=", - "dev": true - }, - "pbkdf2": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.13.tgz", - "integrity": "sha512-+dCHxDH+djNtjgWmvVC/my3SYBAKpKNqKSjLkp+GtWWYe4XPE+e/PSD2aCanlEZZnqPk2uekTKNC/ccbwd2X2Q==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "phantomjs2-ext": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/phantomjs2-ext/-/phantomjs2-ext-0.2.2.tgz", - "integrity": "sha1-v8oHkeYPniZVVctr76Pw3PVaviw=", - "dev": true, - "requires": { - "adm-zip": "0.4.7", - "kew": "0.5.0", - "mkdirp": "0.5.0", - "ncp": "~2.0.0", - "npmconf": "2.1.1", - "progress": "1.1.8", - "request": "2.55.0", - "request-progress": "0.3.1", - "rimraf": "~2.3.2", - "which": "~1.0.9" - }, - "dependencies": { - "asn1": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", - "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", - "dev": true - }, - "assert-plus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", - "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", - "dev": true - }, - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - }, - "aws-sign2": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", - "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", - "dev": true - }, - "bl": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", - "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", - "dev": true, - "requires": { - "readable-stream": "~1.0.26" - } - }, - "caseless": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.9.0.tgz", - "integrity": "sha1-t7Zc5r8UE4hlOc/VM/CzDv+pz4g=", - "dev": true - }, - "combined-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", - "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", - "dev": true, - "requires": { - "delayed-stream": "0.0.5" - } - }, - "delayed-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", - "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", - "dev": true - }, - "form-data": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz", - "integrity": "sha1-Jvi8JtpkQOKZy9z7aQNcT3em5GY=", - "dev": true, - "requires": { - "async": "~0.9.0", - "combined-stream": "~0.0.4", - "mime-types": "~2.0.3" - } - }, - "glob": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^2.0.1", - "once": "^1.3.0" - } - }, - "har-validator": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-1.8.0.tgz", - "integrity": "sha1-2DhCsOtMQ1lgrrEIoGejqpTA7rI=", - "dev": true, - "requires": { - "bluebird": "^2.9.30", - "chalk": "^1.0.0", - "commander": "^2.8.1", - "is-my-json-valid": "^2.12.0" - } - }, - "hawk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz", - "integrity": "sha1-HnMc45RH+h0PbXB/e87r7A/R7B8=", - "dev": true, - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, - "http-signature": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", - "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", - "dev": true, - "requires": { - "asn1": "0.1.11", - "assert-plus": "^0.1.5", - "ctype": "0.5.3" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "mime-db": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", - "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=", - "dev": true - }, - "mime-types": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", - "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", - "dev": true, - "requires": { - "mime-db": "~1.12.0" - } - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "^1.0.0" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", - "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", - "dev": true - }, - "oauth-sign": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.6.0.tgz", - "integrity": "sha1-fb6uRPbKRU4fFoRR1jB0ZzWBPOM=", - "dev": true - }, - "qs": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-2.4.2.tgz", - "integrity": "sha1-9854jld33wtQENp/fE5zujJHD1o=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "request": { - "version": "2.55.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.55.0.tgz", - "integrity": "sha1-11wc32eddrsQD5v/4f5VG1wk6T0=", - "dev": true, - "requires": { - "aws-sign2": "~0.5.0", - "bl": "~0.9.0", - "caseless": "~0.9.0", - "combined-stream": "~0.0.5", - "forever-agent": "~0.6.0", - "form-data": "~0.2.0", - "har-validator": "^1.4.0", - "hawk": "~2.3.0", - "http-signature": "~0.10.0", - "isstream": "~0.1.1", - "json-stringify-safe": "~5.0.0", - "mime-types": "~2.0.1", - "node-uuid": "~1.4.0", - "oauth-sign": "~0.6.0", - "qs": "~2.4.0", - "stringstream": "~0.0.4", - "tough-cookie": ">=0.12.0", - "tunnel-agent": "~0.4.0" - } - }, - "rimraf": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.3.4.tgz", - "integrity": "sha1-gtm8Gy/PMeIFrHsoE4oCXQjpFZo=", - "dev": true, - "requires": { - "glob": "^4.4.2" - } - }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", - "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", - "dev": true - } - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkginfo": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", - "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true - }, - "prompt": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", - "integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=", - "dev": true, - "requires": { - "pkginfo": "0.x.x", - "read": "1.0.x", - "revalidator": "0.1.x", - "utile": "0.2.x", - "winston": "0.8.x" - } - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true - }, - "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", - "dev": true - }, - "qjobs": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", - "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", - "dev": true - }, - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "randomatic": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", - "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=", - "dev": true, - "requires": { - "is-number": "^2.0.2", - "kind-of": "^3.0.2" - } - }, - "randombytes": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", - "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", - "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", - "dev": true, - "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.15", - "unpipe": "1.0.0" - } - }, - "rcfinder": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/rcfinder/-/rcfinder-0.1.9.tgz", - "integrity": "sha1-8+gPOH3fmugK4wpBADKWQuroERU=", - "dev": true, - "requires": { - "lodash.clonedeep": "^4.3.2" - } - }, - "rcloader": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/rcloader/-/rcloader-0.1.2.tgz", - "integrity": "sha1-oJY6ZDfQnvjLktky0trUl7DRc2w=", - "dev": true, - "requires": { - "lodash": "~2.4.1", - "rcfinder": "~0.1.6" - }, - "dependencies": { - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - } - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-only-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "readable-stream": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=", - "dev": true, - "requires": { - "buffer-shims": "^1.0.0", - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" - } - }, - "recast": { - "version": "0.10.33", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.10.33.tgz", - "integrity": "sha1-lCgI96oBbx+nFCxGHX5XBKqo1pc=", - "dev": true, - "requires": { - "ast-types": "0.8.12", - "esprima-fb": "~15001.1001.0-dev-harmony-fb", - "private": "~0.1.5", - "source-map": "~0.5.0" - }, - "dependencies": { - "ast-types": { - "version": "0.8.12", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.12.tgz", - "integrity": "sha1-oNkOQ1G7iHcWyD/WN+v4GK9K38w=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - }, - "dependencies": { - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - } - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerator": { - "version": "0.8.40", - "resolved": "https://registry.npmjs.org/regenerator/-/regenerator-0.8.40.tgz", - "integrity": "sha1-oORXxY69uuV1yfjNdRJ+k3VkNdg=", - "dev": true, - "requires": { - "commoner": "~0.10.3", - "defs": "~1.1.0", - "esprima-fb": "~15001.1001.0-dev-harmony-fb", - "private": "~0.1.5", - "recast": "0.10.33", - "through": "~2.3.8" - }, - "dependencies": { - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - } - } - }, - "regex-cache": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", - "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3", - "is-primitive": "^2.0.0" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexpu": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexpu/-/regexpu-1.3.0.tgz", - "integrity": "sha1-5TTcmRqeWEYFDJjebX3UpVyeoW0=", - "dev": true, - "requires": { - "esprima": "^2.6.0", - "recast": "^0.10.10", - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - } - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.11.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~2.0.6", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "qs": "~6.3.0", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "~0.4.1", - "uuid": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.x.x" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "^1.0.0" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "commander": "^2.9.0", - "is-my-json-valid": "^2.12.4", - "pinkie-promise": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "is-my-json-valid": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", - "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", - "dev": true, - "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" - } - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dev": true, - "requires": { - "mime-db": "~1.33.0" - } - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, - "sshpk": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", - "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "dev": true, - "requires": { - "punycode": "^1.4.1" - } - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "randombytes": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", + "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", + "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=", + "dev": true, + "requires": { + "buffer-shims": "^1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", + "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.7" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + }, + "dependencies": { + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "path-parse": "^1.0.5" } - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + } + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true } } }, - "request-progress": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz", - "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=", + "remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "dev": true, + "requires": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "throttleit": "~0.0.2" + "is-finite": "^1.0.0" } }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, - "reserved-words": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz", - "integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=", - "dev": true - }, "resolve": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", @@ -10436,12 +7767,37 @@ "global-modules": "^1.0.0" } }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "dev": true, + "requires": { + "value-or-function": "^3.0.0" + } + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -10481,22 +7837,12 @@ } } }, - "revalidator": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", - "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=", + "rfdc": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", + "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", "dev": true }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, "rimraf": { "version": "2.5.4", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", @@ -10532,6 +7878,15 @@ "inherits": "^2.0.1" } }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, "run-sequence": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-1.2.2.tgz", @@ -10542,6 +7897,15 @@ "gulp-util": "*" } }, + "rxjs": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", @@ -10564,54 +7928,104 @@ "dev": true }, "sauce-connect-launcher": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-0.17.0.tgz", - "integrity": "sha1-kI2TEeyvF92bRkehQ1/UogcugM4=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-1.3.1.tgz", + "integrity": "sha512-vIf9qDol3q2FlYzrKt0dr3kvec6LSjX2WS+/mVnAJIhqh1evSkPKCR2AzcJrnSmx9Xt9PtV0tLY7jYh0wsQi8A==", "dev": true, "requires": { "adm-zip": "~0.4.3", - "async": "1.4.0", - "https-proxy-agent": "~1.0.0", - "lodash": "3.10.1", - "rimraf": "2.4.3" + "async": "^2.1.2", + "https-proxy-agent": "^3.0.0", + "lodash": "^4.16.6", + "rimraf": "^2.5.4" }, "dependencies": { - "async": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.4.0.tgz", - "integrity": "sha1-Nfhvg8WeBCHQmc2akdgnj7V4wA0=", - "dev": true - }, "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true + } + } + }, + "saucelabs": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } }, - "rimraf": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.3.tgz", - "integrity": "sha1-5bUclDekxYKtuVXp8oz42UXicq8=", + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "dev": true, "requires": { - "glob": "^5.0.14" + "agent-base": "^4.3.0", + "debug": "^3.1.0" } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, - "saucelabs": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.4.0.tgz", - "integrity": "sha1-uTSpr52ih0s/QKrh/N5QpEZvXzg=", + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "selenium-webdriver": { + "version": "4.0.0-alpha.5", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.5.tgz", + "integrity": "sha512-hktl3DSrhzM59yLhWzDGHIX9o56DvA+cVK7Dw6FcJR6qQ4CGzkaHeXQPcdrslkWMTeq0Ci9AmCxq0EMOvm2Rkg==", "dev": true, "requires": { - "https-proxy-agent": "^1.0.0" + "jszip": "^3.1.5", + "rimraf": "^2.6.3", + "tmp": "0.0.30", + "xml2js": "^0.4.19" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "tmp": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + } } }, "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "sequelize": { @@ -10651,9 +8065,9 @@ "dev": true }, "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, "semver": { @@ -10677,9 +8091,9 @@ "dev": true }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -10696,19 +8110,13 @@ "requires": { "is-extendable": "^0.1.0" } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true } } }, "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, "sha.js": { @@ -10730,6 +8138,15 @@ "sha.js": "~2.4.4" } }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", @@ -10748,12 +8165,6 @@ "jsonify": "~0.0.0" } }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", - "dev": true - }, "shimmer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.1.0.tgz", @@ -10772,23 +8183,33 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "simple-fmt": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/simple-fmt/-/simple-fmt-0.1.0.tgz", - "integrity": "sha1-GRv1ZqWeZTBILLJatTtKjchcOms=", - "dev": true - }, - "simple-is": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz", - "integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } + } }, "snapdragon": { "version": "0.8.2", @@ -10967,135 +8388,112 @@ } } }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, "socket.io": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", - "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", "dev": true, "requires": { - "debug": "2.3.3", - "engine.io": "1.8.3", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.3", - "socket.io-parser": "2.3.1" + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" }, "dependencies": { "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } }, - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "socket.io-adapter": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", - "dev": true, - "requires": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - } - } + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", + "dev": true }, "socket.io-client": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", - "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", "dev": true, "requires": { "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "1.8.3", - "has-binary": "0.1.7", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", + "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", + "socket.io-parser": "~3.2.0", "to-array": "0.1.4" }, "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, "socket.io-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "dev": true, "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" }, "dependencies": { "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.1" + "ms": "2.0.0" } }, "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "dev": true }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } @@ -11106,47 +8504,22 @@ "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" }, "source-map-resolve": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz", - "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", - "dev": true, - "requires": { - "atob": "~1.1.0", - "resolve-url": "~0.2.1", - "source-map-url": "~0.3.0", - "urix": "~0.1.0" - } - }, - "source-map-support": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", - "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "dev": true, "requires": { - "source-map": "0.1.32" - }, - "dependencies": { - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "source-map": { - "version": "0.1.32", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", - "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz", - "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, "sparkles": { @@ -11156,24 +8529,35 @@ "dev": true }, "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { - "spdx-license-ids": "^1.0.2" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", "dev": true }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, "split-string": { @@ -12023,9 +9407,9 @@ } }, "sshpk": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.10.1.tgz", - "integrity": "sha1-MOGl0ykkSXShr2FREznVla9mOLA=", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -12034,58 +9418,38 @@ "dashdash": "^1.12.0", "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", - "jodid25519": "^1.0.0", "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } } }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, "stack-generator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.4.tgz", - "integrity": "sha512-ha1gosTNcgxwzo9uKTQ8zZ49aUp5FIUW58YHFxCqaAHtE0XqBg0chGFYA1MfmW//x1KWq3F4G7Ug7bJh4RiRtg==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.5.tgz", + "integrity": "sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q==", "requires": { - "stackframe": "^1.1.0" + "stackframe": "^1.1.1" }, "dependencies": { "stackframe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.0.tgz", - "integrity": "sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.1.tgz", + "integrity": "sha512-0PlYhdKh6AfFxRyK/v+6/k+/mMfyiEBbTM5L94D0ZytQnJ166wuwoTYLHFWGbs2dpA8Rgq763KGWmN1EQEYHRQ==" } } }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true - }, "stackframe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.0.tgz", - "integrity": "sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.1.tgz", + "integrity": "sha512-0PlYhdKh6AfFxRyK/v+6/k+/mMfyiEBbTM5L94D0ZytQnJ166wuwoTYLHFWGbs2dpA8Rgq763KGWmN1EQEYHRQ==" }, "stacktrace-gps": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.3.tgz", - "integrity": "sha512-51Rr7dXkyFUKNmhY/vqZWK+EvdsfFSRiQVtgHTFlAdNIYaDD7bVh21yBHXaNWAvTD+w+QSjxHg7/v6Tz4veExA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.4.tgz", + "integrity": "sha512-qIr8x41yZVSldqdqe6jciXEaSCKw1U8XTXpjDuy0ki/apyTn/r3w9hDAAQOhZdxvsC93H+WwwEu5cq5VemzYeg==", "requires": { "source-map": "0.5.6", - "stackframe": "^1.1.0" + "stackframe": "^1.1.1" } }, "static-extend": { @@ -12110,9 +9474,9 @@ } }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, "stream-browserify": { @@ -12180,6 +9544,12 @@ } } }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, "stream-splicer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", @@ -12190,30 +9560,76 @@ "readable-stream": "^2.0.2" } }, + "streamroller": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz", + "integrity": "sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==", + "dev": true, + "requires": { + "async": "^2.6.2", + "date-format": "^2.0.0", + "debug": "^3.2.6", + "fs-extra": "^7.0.1", + "lodash": "^4.17.14" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true }, - "stringmap": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stringmap/-/stringmap-0.2.2.tgz", - "integrity": "sha1-VWwTeyWPlCuHdvWy71gqoGnX0bE=", - "dev": true - }, - "stringset": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/stringset/-/stringset-0.2.1.tgz", - "integrity": "sha1-7yWcTjSTRDd/zRyRPdLoSMnAQrU=", - "dev": true - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -12242,9 +9658,9 @@ } }, "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", "dev": true }, "subarg": { @@ -12271,25 +9687,60 @@ "acorn": "^4.0.3" } }, - "tar-stream": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.4.tgz", - "integrity": "sha1-NlSc8E7RrumyowwBQyUiONr5QBY=", + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { - "bl": "^1.0.0", - "end-of-stream": "^1.0.0", - "readable-stream": "^2.0.0", - "xtend": "^4.0.0" + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" }, "dependencies": { - "end-of-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", - "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "once": "^1.4.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" } } } @@ -12313,10 +9764,10 @@ "terraformer": "~1.0.5" } }, - "throttleit": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", - "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "through": { @@ -12335,6 +9786,16 @@ "xtend": "~4.0.1" } }, + "through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dev": true, + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, "tildify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", @@ -12368,12 +9829,22 @@ } }, "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", "dev": true, "requires": { - "os-tmpdir": "~1.0.1" + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" } }, "to-array": { @@ -12388,18 +9859,6 @@ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, - "to-double-quotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-double-quotes/-/to-double-quotes-2.0.0.tgz", - "integrity": "sha1-qvIx1vqUiUn4GTAburRITYWI5Kc=", - "dev": true - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -12480,10 +9939,19 @@ } } }, - "to-single-quotes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/to-single-quotes/-/to-single-quotes-2.0.1.tgz", - "integrity": "sha1-fMKRUfD18sQZRvEZ9ZMv5VQXASU=", + "to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "dev": true, + "requires": { + "through2": "^2.0.3" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, "toposort-class": { @@ -12493,11 +9961,12 @@ "dev": true }, "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, "requires": { + "psl": "^1.1.24", "punycode": "^1.4.1" } }, @@ -12507,22 +9976,10 @@ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", "dev": true }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "try-resolve": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz", - "integrity": "sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=", - "dev": true - }, - "tryor": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz", - "integrity": "sha1-gUXkynyv9ArN48z5Rui4u3W0Fys=", + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", "dev": true }, "tty-browserify": { @@ -12532,17 +9989,19 @@ "dev": true }, "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true + "dev": true }, "type-check": { "version": "0.3.2", @@ -12553,33 +10012,22 @@ "prelude-ls": "~1.1.2" } }, - "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.15" - }, - "dependencies": { - "mime-db": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", - "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=", - "dev": true - }, - "mime-types": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", - "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", - "dev": true, - "requires": { - "mime-db": "~1.29.0" - } - } - } - }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -12587,22 +10035,20 @@ "dev": true }, "uglify-js": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", - "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.4.tgz", + "integrity": "sha512-tinYWE8X1QfCHxS1lBS8yiDekyhSXOO6R66yNOCdUJeojxxw+PX2BHAz/BWyW7PQ7pkiWVxJfIEbiDxyLWvUGg==", "dev": true, "optional": true, "requires": { - "async": "~0.2.6", - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" + "commander": "~2.20.3", + "source-map": "~0.6.1" }, "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "optional": true } @@ -12614,23 +10060,10 @@ "integrity": "sha1-lXJsF8xv0XHDYX479NjYKqjEzOE=", "dev": true }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.5.tgz", - "integrity": "sha1-Wj2yPvXb1VuB/ODsmirG/M3ruB4=", - "dev": true - }, "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, "umd": { @@ -12645,61 +10078,16 @@ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", "dev": true }, - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - }, - "underscore.string": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.4.tgz", - "integrity": "sha1-LCo/n4PmR2L9xF5s6sZRQoZCE9s=", - "dev": true, - "requires": { - "sprintf-js": "^1.0.3", - "util-deprecate": "^1.0.2" - } - }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "unique-stream": { @@ -12708,6 +10096,12 @@ "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", "dev": true }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -12752,246 +10146,133 @@ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "use": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", - "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, - "useragent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", - "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", - "dev": true, - "requires": { - "lru-cache": "2.2.x", - "tmp": "0.0.x" - }, - "dependencies": { - "lru-cache": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", - "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", - "dev": true - } - } - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utile": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", - "integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=", - "dev": true, - "requires": { - "async": "~0.2.9", - "deep-equal": "*", - "i": "0.3.x", - "mkdirp": "0.x.x", - "ncp": "0.4.x", - "rimraf": "2.x.x" - }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "use": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "useragent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "dev": true, + "requires": { + "lru-cache": "4.1.x", + "tmp": "0.0.x" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "glob": "^7.0.5" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + } + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", "dev": true } } }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, "utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, "uuid": { @@ -13000,6 +10281,12 @@ "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", "dev": true }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "dev": true + }, "v8flags": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", @@ -13010,13 +10297,13 @@ } }, "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "spdx-correct": "~1.0.0", - "spdx-expression-parse": "~1.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "validator": { @@ -13025,19 +10312,21 @@ "integrity": "sha1-eoelgUa2laxIYHEUHAxJ1n2gXlw=", "dev": true }, - "vargs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/vargs/-/vargs-0.1.0.tgz", - "integrity": "sha1-a2GE2mUgzDIEzhtAfKwm2SYJ6/8=", + "value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", "dev": true }, "verror": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "extsprintf": "1.0.2" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, "vinyl": { @@ -13317,388 +10606,194 @@ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", "dev": true }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "^0.2.0", - "clone-stats": "^0.0.1" - } - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - } - } - }, - "vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", - "dev": true, - "requires": { - "source-map": "^0.5.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, - "vow": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/vow/-/vow-0.4.17.tgz", - "integrity": "sha512-A3/9bWFqf6gT0jLR4/+bT+IPTe1mQf+tdsW6+WI5geP9smAp8Kbbu4R6QQCDKZN/8TSCqTlXVQm12QliB4rHfg==", - "dev": true - }, - "vow-fs": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.6.tgz", - "integrity": "sha1-LUxZviLivyYY3fWXq0uqkjvnIA0=", - "dev": true, - "requires": { - "glob": "^7.0.5", - "uuid": "^2.0.2", - "vow": "^0.4.7", - "vow-queue": "^0.4.1" - }, - "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "fs.realpath": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "safe-buffer": "~5.1.0" } }, - "inherits": { + "through2": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, "requires": { - "wrappy": "1" + "clone": "^0.2.0", + "clone-stats": "^0.0.1" } }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true } } }, - "vow-queue": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/vow-queue/-/vow-queue-0.4.3.tgz", - "integrity": "sha512-/poAKDTFL3zYbeQg7cl4BGcfP4sGgXKrHnRFSKj97dteUFu8oyXMwIcdwu8NSx/RmPGIuYx1Bik/y5vU4H/VKw==", - "dev": true, - "requires": { - "vow": "^0.4.17" - } - }, - "walkdir": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", - "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=", - "dev": true - }, - "wd": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/wd/-/wd-1.4.0.tgz", - "integrity": "sha512-VHii2f+jck5fgEcTQYCR3z99B99tPz0HlLCGsNowI2qsI21xMnKwd9O3SnJQnEBq0Erx9FPFfiZno+OYtXDXyw==", + "vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", "dev": true, "requires": { - "archiver": "1.3.0", - "async": "2.0.1", - "lodash": "4.16.2", - "mkdirp": "^0.5.1", - "q": "1.4.1", - "request": "2.79.0", - "underscore.string": "3.3.4", - "vargs": "0.1.0" + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" }, "dependencies": { - "async": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.0.1.tgz", - "integrity": "sha1-twnMAoCpw28J9FNr6CPIOKkEniU=", + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "requires": { - "lodash": "^4.8.0" + "safe-buffer": "~5.1.1" } }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" + "remove-trailing-separator": "^1.0.1" } }, - "lodash": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.16.2.tgz", - "integrity": "sha1-PmJtuCcEimmSgaihJSJjJs/A5lI=", - "dev": true - }, - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", "dev": true }, - "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", + "vinyl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", "dev": true, "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.11.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~2.0.6", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "qs": "~6.3.0", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "~0.4.1", - "uuid": "^3.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } - }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "dev": true } } }, - "which": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.12.tgz", - "integrity": "sha1-3me15FAmnxlJCe8j7OTr5Bb6EZI=", + "vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", "dev": true, "requires": { - "isexe": "^1.1.1" + "source-map": "^0.5.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", "dev": true, - "optional": true + "requires": { + "indexof": "0.0.1" + } }, - "winston": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", - "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=", + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "async": "0.2.x", - "colors": "0.6.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "pkginfo": "0.3.x", - "stack-trace": "0.0.x" - }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "pkginfo": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", - "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=", - "dev": true - } + "isexe": "^2.0.0" } }, "wkx": { @@ -13707,10 +10802,16 @@ "integrity": "sha1-dsJPFqzQzY+TzTSqMx4PeWElboQ=", "dev": true }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", "dev": true }, "wrappy": { @@ -13719,43 +10820,48 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "ws": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", - "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" + "mkdirp": "^0.5.1" } }, - "wtf-8": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", - "dev": true + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } }, - "xmlbuilder": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-3.1.0.tgz", - "integrity": "sha1-LIaIjy1OrehQ+jjKf3Ij9yCVFuE=", + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "dev": true, "requires": { - "lodash": "^3.5.0" + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" }, "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true } } }, "xmlhttprequest-ssl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", "dev": true }, "xtend": { @@ -13764,32 +10870,19 @@ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", "dev": true, - "optional": true, "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - } + "fd-slicer": "~1.0.1" } }, "yeast": { @@ -13797,26 +10890,6 @@ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", "dev": true - }, - "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", - "dev": true, - "requires": { - "archiver-utils": "^1.3.0", - "compress-commons": "^1.2.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - } - } } } } diff --git a/package.json b/package.json index 8590031..2543d2c 100644 --- a/package.json +++ b/package.json @@ -22,40 +22,39 @@ "url": "git://github.com/stacktracejs/stacktrace.js.git" }, "dependencies": { - "error-stack-parser": "^2.0.4", - "stack-generator": "^2.0.4", - "stacktrace-gps": "^3.0.3" + "error-stack-parser": "^2.0.6", + "stack-generator": "^2.0.5", + "stacktrace-gps": "^3.0.4" }, "devDependencies": { "browserify": "^13.3.0", "colors": "^1.1.2", "del": "^3.0.0", "es6-promise": "^3.1.2", + "eslint": "^6.8.0", "gulp": "^3.9.1", "gulp-concat": "^2.6.0", - "gulp-coveralls": "^0.1.4", - "gulp-jshint": "^1.12.0", "gulp-rename": "^1.2.2", "gulp-sourcemaps": "^1.12.0", "gulp-uglify": "^1.5.1", "jasmine": "^2.7.0", "jasmine-ajax": "^3.2.0", "jasmine-core": "^2.7.0", - "jscs": "^2.9.0", "jsdoc-dash-template": "^1.2.0", "json3": "^3.3.2", - "karma": "^1.7.0", - "karma-chrome-launcher": "^2.2.0", - "karma-coverage": "^1.1.1", - "karma-firefox-launcher": "^1.0.1", + "karma": "^4.4.1", + "karma-chrome-launcher": "^3.1.0", + "karma-coverage": "^2.0.1", + "karma-coveralls": "^2.1.0", + "karma-firefox-launcher": "^1.2.0", "karma-ie-launcher": "^1.0.0", - "karma-jasmine": "^1.1.0", + "karma-jasmine": "^1.1.2", "karma-jasmine-ajax": "^0.1.13", "karma-opera-launcher": "^1.0.0", - "karma-phantomjs2-launcher": "^0.5.0", + "karma-phantomjs-launcher": "^1.0.4", "karma-safari-launcher": "^1.0.0", - "karma-sauce-launcher": "^1.1.0", - "karma-spec-reporter": "^0.0.31", + "karma-sauce-launcher": "^2.0.2", + "karma-spec-reporter": "^0.0.32", "run-sequence": "^1.1.2", "vinyl-buffer": "^1.0.0", "vinyl-source-stream": "^1.1.0" @@ -74,7 +73,10 @@ ], "typings": "./stacktrace-js.d.ts", "scripts": { - "test": "gulp test", - "prepublish": "gulp dist" + "lint": "eslint --fix polyfills.js stacktrace.js spec/", + "prepare": "gulp dist", + "test": "karma start karma.conf.js --single-run", + "test-pr": "karma start karma.conf.js --single-run --browsers Firefox,Chrome_Travis", + "test-ci": "karma start karma.conf.ci.js --single-run" } } diff --git a/spec/fixtures/errors.js b/spec/fixtures/errors.js index 4fb4c98..37b439c 100755 --- a/spec/fixtures/errors.js +++ b/spec/fixtures/errors.js @@ -2,10 +2,10 @@ var Errors = {}; Errors.IE_11 = { - message: "Unable to get property 'undef' of undefined or null reference", - stack: "TypeError: Unable to get property 'undef' of undefined or null reference\n" + - " at Anonymous function (http://path/to/file.js:47:21)\n" + - " at foo (http://path/to/file.js:45:13)\n" + - " at bar (http://path/to/file.js:108:1)", - description: "Unable to get property 'undef' of undefined or null reference" + message: 'Unable to get property \'undef\' of undefined or null reference', + stack: 'TypeError: Unable to get property \'undef\' of undefined or null reference\n' + + ' at Anonymous function (http://path/to/file.js:47:21)\n' + + ' at foo (http://path/to/file.js:45:13)\n' + + ' at bar (http://path/to/file.js:108:1)', + description: 'Unable to get property \'undef\' of undefined or null reference' }; diff --git a/stacktrace.js b/stacktrace.js index 2f16236..879a4c2 100644 --- a/stacktrace.js +++ b/stacktrace.js @@ -45,7 +45,7 @@ [first, second].forEach(function(obj) { for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { + if (Object.prototype.hasOwnProperty.call(obj, prop)) { target[prop] = obj[prop]; } } @@ -209,7 +209,7 @@ if (requestOptions && typeof requestOptions.headers === 'object') { var headers = requestOptions.headers; for (var header in headers) { - if (headers.hasOwnProperty(header)) { + if (Object.prototype.hasOwnProperty.call(headers, header)) { req.setRequestHeader(header, headers[header]); } } From c597ba11db3c90c1af7be9a3cffbc556ed50c20b Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Mon, 6 Jan 2020 21:33:10 -0700 Subject: [PATCH 105/110] Fix sourcemaps generation config. Fixes #208 --- ...ktrace-with-promises-and-json-polyfills.js | 5 +- ...ce-with-promises-and-json-polyfills.js.map | 1 - ...ce-with-promises-and-json-polyfills.min.js | 4 +- ...ith-promises-and-json-polyfills.min.js.map | 2 +- dist/stacktrace.js | 5 +- dist/stacktrace.min.js | 2 +- dist/stacktrace.min.js.map | 2 +- gulpfile.js | 8 +- package-lock.json | 2569 +++++++---------- package.json | 4 +- 10 files changed, 1133 insertions(+), 1469 deletions(-) delete mode 100644 dist/stacktrace-with-promises-and-json-polyfills.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.js b/dist/stacktrace-with-promises-and-json-polyfills.js index 66f24e1..333c147 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.js @@ -1,4 +1,4 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.StackTrace = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o-1&&(t=t.replace(/eval code/g,\"eval\").replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g,\"\"));var n=t.replace(/^\\s+/,\"\").replace(/\\(eval code/g,\"(\").split(/\\s+/).slice(1),o=this.extractLocation(n.pop()),i=n.join(\" \")||void 0,a=r([\"eval\",\"\"],o[0])>-1?void 0:o[0];return new e(i,void 0,a,o[1],o[2],t)},this)},parseFFOrSafari:function(r){var o=n(r.stack.split(\"\\n\"),function(e){return!e.match(a)},this);return t(o,function(t){if(t.indexOf(\" > eval\")>-1&&(t=t.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g,\":$1\")),-1===t.indexOf(\"@\")&&-1===t.indexOf(\":\"))return new e(t);var n=t.split(\"@\"),r=this.extractLocation(n.pop()),o=n.join(\"@\")||void 0;return new e(o,void 0,r[0],r[1],r[2],t)},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf(\"\\n\")>-1&&e.message.split(\"\\n\").length>e.stacktrace.split(\"\\n\").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\\d+).*script (?:in )?(\\S+)/i,r=t.message.split(\"\\n\"),o=[],i=2,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera10:function(t){for(var n=/Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i,r=t.stacktrace.split(\"\\n\"),o=[],i=0,a=r.length;a>i;i+=2){var s=n.exec(r[i]);s&&o.push(new e(s[3]||void 0,void 0,s[2],s[1],void 0,r[i]))}return o},parseOpera11:function(r){var i=n(r.stack.split(\"\\n\"),function(e){return!!e.match(o)&&!e.match(/^Error created at/)},this);return t(i,function(t){var n,r=t.split(\"@\"),o=this.extractLocation(r.pop()),i=r.shift()||\"\",a=i.replace(//,\"$2\").replace(/\\([^\\)]*\\)/g,\"\")||void 0;i.match(/\\(([^\\)]*)\\)/)&&(n=i.replace(/^[^\\(]+\\(([^\\)]*)\\)$/,\"$1\"));var s=void 0===n||\"[arguments not available]\"===n?void 0:n.split(\",\");return new e(a,s,o[0],o[1],o[2],t)},this)}}})},{stackframe:14}],2:[function(t,n,r){(function(r,o){(function(){\"use strict\";function i(e){return\"function\"==typeof e||\"object\"==typeof e&&null!==e}function a(e){return\"function\"==typeof e}function s(e){Z=e}function u(e){V=e}function c(){return function(){r.nextTick(g)}}function l(){return function(){z(g)}}function f(){var e=0,t=new Q(g),n=document.createTextNode(\"\");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=g,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(g,1)}}function g(){for(var e=0;W>e;e+=2){var t=ne[e],n=ne[e+1];t(n),ne[e]=void 0,ne[e+1]=void 0}W=0}function d(){try{var e=t,n=e(\"vertx\");return z=n.runOnLoop||n.runOnContext,l()}catch(r){return h()}}function m(e,t){var n=this,r=n._state;if(r===ae&&!e||r===se&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var a=arguments[r-1];V(function(){P(r,o,a,i)})}else j(n,o,e,t);return o}function y(e){var t=this;if(e&&\"object\"==typeof e&&e.constructor===t)return e;var n=new t(v);return E(n,e),n}function v(){}function _(){return new TypeError(\"You cannot resolve a promise with itself\")}function w(){return new TypeError(\"A promises callback cannot return that same promise.\")}function b(e){try{return e.then}catch(t){return ue.error=t,ue}}function A(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function C(e,t,n){V(function(e){var r=!1,o=A(n,t,function(n){r||(r=!0,t!==n?E(e,n):N(e,n))},function(t){r||(r=!0,T(e,t))},\"Settle: \"+(e._label||\" unknown promise\"));!r&&o&&(r=!0,T(e,o))},e)}function O(e,t){t._state===ae?N(e,t._result):t._state===se?T(e,t._result):j(t,void 0,function(t){E(e,t)},function(t){T(e,t)})}function S(e,t,n){t.constructor===e.constructor&&n===re&&constructor.resolve===oe?O(e,t):n===ue?T(e,ue.error):void 0===n?N(e,t):a(n)?C(e,t,n):N(e,t)}function E(e,t){e===t?T(e,_()):i(t)?S(e,t,b(t)):N(e,t)}function L(e){e._onerror&&e._onerror(e._result),M(e)}function N(e,t){e._state===ie&&(e._result=t,e._state=ae,0!==e._subscribers.length&&V(M,e))}function T(e,t){e._state===ie&&(e._state=se,e._result=t,V(L,e))}function j(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+ae]=n,o[i+se]=r,0===i&&e._state&&V(M,e)}function M(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,a=0;aa;a++)j(r.resolve(e[a]),void 0,t,n);return o}function G(e){var t=this,n=new t(v);return T(n,e),n}function $(){throw new TypeError(\"You must pass a resolver function as the first argument to the promise constructor\")}function D(){throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\")}function B(e){this._id=he++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&(\"function\"!=typeof e&&$(),this instanceof B?R(this,e):D())}function J(e,t){this._instanceConstructor=e,this.promise=new e(v),Array.isArray(t)?(this._input=t,this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?N(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&N(this.promise,this._result))):T(this.promise,this._validationError())}function q(){var e;if(\"undefined\"!=typeof o)e=o;else if(\"undefined\"!=typeof self)e=self;else try{e=Function(\"return this\")()}catch(t){throw new Error(\"polyfill failed because global object is unavailable in this environment\")}var n=e.Promise;(!n||\"[object Promise]\"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ge)}var I;I=Array.isArray?Array.isArray:function(e){return\"[object Array]\"===Object.prototype.toString.call(e)};var z,Z,Y,H=I,W=0,V=function(e,t){ne[W]=e,ne[W+1]=t,W+=2,2===W&&(Z?Z(g):Y())},X=\"undefined\"!=typeof window?window:void 0,K=X||{},Q=K.MutationObserver||K.WebKitMutationObserver,ee=\"undefined\"!=typeof r&&\"[object process]\"==={}.toString.call(r),te=\"undefined\"!=typeof Uint8ClampedArray&&\"undefined\"!=typeof importScripts&&\"undefined\"!=typeof MessageChannel,ne=new Array(1e3);Y=ee?c():Q?f():te?p():void 0===X&&\"function\"==typeof t?d():h();var re=m,oe=y,ie=void 0,ae=1,se=2,ue=new k,ce=new k,le=F,fe=U,pe=G,he=0,ge=B;B.all=le,B.race=fe,B.resolve=oe,B.reject=pe,B._setScheduler=s,B._setAsap=u,B._asap=V,B.prototype={constructor:B,then:re,\"catch\":function(e){return this.then(null,e)}};var de=J;J.prototype._validationError=function(){return new Error(\"Array Methods must be provided an Array\")},J.prototype._enumerate=function(){for(var e=this.length,t=this._input,n=0;this._state===ie&&e>n;n++)this._eachEntry(t[n],n)},J.prototype._eachEntry=function(e,t){var n=this._instanceConstructor,r=n.resolve;if(r===oe){var o=b(e);if(o===re&&e._state!==ie)this._settledAt(e._state,t,e._result);else if(\"function\"!=typeof o)this._remaining--,this._result[t]=e;else if(n===ge){var i=new n(v);S(i,e,o),this._willSettleAt(i,t)}else this._willSettleAt(new n(function(t){t(e)}),t)}else this._willSettleAt(r(e),t)},J.prototype._settledAt=function(e,t,n){var r=this.promise;r._state===ie&&(this._remaining--,e===se?T(r,n):this._result[t]=n),0===this._remaining&&N(r,this._result)},J.prototype._willSettleAt=function(e,t){var n=this;j(e,void 0,function(e){n._settledAt(ae,t,e)},function(e){n._settledAt(se,t,e)})};var me=q,ye={Promise:ge,polyfill:me};\"function\"==typeof e&&e.amd?e(function(){return ye}):\"undefined\"!=typeof n&&n.exports?n.exports=ye:\"undefined\"!=typeof this&&(this.ES6Promise=ye),me()}).call(this)}).call(this,t(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{_process:4}],3:[function(t,n,r){(function(t){(function(){function o(e,t){function n(e){if(n[e]!==m)return n[e];var o;if(\"bug-string-char-index\"==e)o=\"a\"!=\"a\"[0];else if(\"json\"==e)o=n(\"json-stringify\")&&n(\"json-parse\");else{var a,s='{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';if(\"json-stringify\"==e){var u=t.stringify,l=\"function\"==typeof u&&_;if(l){(a=function(){return 1}).toJSON=a;try{l=\"0\"===u(0)&&\"0\"===u(new r)&&'\"\"'==u(new i)&&u(v)===m&&u(m)===m&&u()===m&&\"1\"===u(a)&&\"[1]\"==u([a])&&\"[null]\"==u([m])&&\"null\"==u(null)&&\"[null,null,null]\"==u([m,v,null])&&u({a:[a,!0,!1,null,\"\\x00\\b\\n\\f\\r\t\"]})==s&&\"1\"===u(null,a)&&\"[\\n 1,\\n 2\\n]\"==u([1,2],null,1)&&'\"-271821-04-20T00:00:00.000Z\"'==u(new c(-864e13))&&'\"+275760-09-13T00:00:00.000Z\"'==u(new c(864e13))&&'\"-000001-01-01T00:00:00.000Z\"'==u(new c(-621987552e5))&&'\"1969-12-31T23:59:59.999Z\"'==u(new c(-1))}catch(f){l=!1}}o=l}if(\"json-parse\"==e){var p=t.parse;if(\"function\"==typeof p)try{if(0===p(\"0\")&&!p(!1)){a=p(s);var h=5==a.a.length&&1===a.a[0];if(h){try{h=!p('\"\t\"')}catch(f){}if(h)try{h=1!==p(\"01\")}catch(f){}if(h)try{h=1!==p(\"1.\")}catch(f){}}}}catch(f){h=!1}o=h}}return n[e]=!!o}e||(e=u.Object()),t||(t=u.Object());var r=e.Number||u.Number,i=e.String||u.String,s=e.Object||u.Object,c=e.Date||u.Date,l=e.SyntaxError||u.SyntaxError,f=e.TypeError||u.TypeError,p=e.Math||u.Math,h=e.JSON||u.JSON;\"object\"==typeof h&&h&&(t.stringify=h.stringify,t.parse=h.parse);var g,d,m,y=s.prototype,v=y.toString,_=new c(-0xc782b5b800cec);try{_=-109252==_.getUTCFullYear()&&0===_.getUTCMonth()&&1===_.getUTCDate()&&10==_.getUTCHours()&&37==_.getUTCMinutes()&&6==_.getUTCSeconds()&&708==_.getUTCMilliseconds()}catch(w){}if(!n(\"json\")){var b=\"[object Function]\",A=\"[object Date]\",C=\"[object Number]\",O=\"[object String]\",S=\"[object Array]\",E=\"[object Boolean]\",L=n(\"bug-string-char-index\");if(!_)var N=p.floor,T=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return T[t]+365*(e-1970)+N((e-1969+(t=+(t>1)))/4)-N((e-1901+t)/100)+N((e-1601+t)/400)};if((g=y.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=v?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?d=2==i?function(e,t){var n,r={},o=v.call(e)==b;for(n in e)o&&\"prototype\"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=v.call(e)==b;for(n in e)o&&\"prototype\"==n||!g.call(e,n)||(r=\"constructor\"===n)||t(n);(r||g.call(e,n=\"constructor\"))&&t(n)}:(r=[\"valueOf\",\"toString\",\"toLocaleString\",\"propertyIsEnumerable\",\"isPrototypeOf\",\"hasOwnProperty\",\"constructor\"],d=function(e,t){var n,o,i=v.call(e)==b,s=!i&&\"function\"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&\"prototype\"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),d(e,t)},!n(\"json-stringify\")){var M={92:\"\\\\\\\\\",34:'\\\\\"',8:\"\\\\b\",12:\"\\\\f\",10:\"\\\\n\",13:\"\\\\r\",9:\"\\\\t\"},k=\"000000\",x=function(e,t){return(k+(t||0)).slice(-e)},P=\"\\\\u00\",R=function(e){for(var t='\"',n=0,r=e.length,o=!L||r>10,i=o&&(L?e.split(\"\"):e);r>n;n++){var a=e.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=M[a];break;default:if(32>a){t+=P+x(2,a.toString(16));break}t+=o?i[n]:e.charAt(n)}}return t+'\"'},F=function(e,t,n,r,o,i,a){var s,u,c,l,p,h,y,_,w,b,L,T,M,k,P,U;try{s=t[e]}catch(G){}if(\"object\"==typeof s&&s)if(u=v.call(s),u!=A||g.call(s,\"toJSON\"))\"function\"==typeof s.toJSON&&(u!=C&&u!=O&&u!=S||g.call(s,\"toJSON\"))&&(s=s.toJSON(e));else if(s>-1/0&&1/0>s){if(j){for(p=N(s/864e5),c=N(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(l=N((p-j(c,0))/30.42);j(c,l+1)<=p;l++);p=1+p-j(c,l),h=(s%864e5+864e5)%864e5,y=N(h/36e5)%24,_=N(h/6e4)%60,w=N(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),y=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(0>=c||c>=1e4?(0>c?\"-\":\"+\")+x(6,0>c?-c:c):x(4,c))+\"-\"+x(2,l+1)+\"-\"+x(2,p)+\"T\"+x(2,y)+\":\"+x(2,_)+\":\"+x(2,w)+\".\"+x(3,b)+\"Z\"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return\"null\";if(u=v.call(s),u==E)return\"\"+s;if(u==C)return s>-1/0&&1/0>s?\"\"+s:\"null\";if(u==O)return R(\"\"+s);if(\"object\"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),L=[],P=i,i+=o,u==S){for(M=0,k=s.length;k>M;M++)T=F(M,s,n,r,o,i,a),L.push(T===m?\"null\":T);U=L.length?o?\"[\\n\"+i+L.join(\",\\n\"+i)+\"\\n\"+P+\"]\":\"[\"+L.join(\",\")+\"]\":\"[]\"}else d(r||s,function(e){var t=F(e,s,n,r,o,i,a);t!==m&&L.push(R(e)+\":\"+(o?\" \":\"\")+t)}),U=L.length?o?\"{\\n\"+i+L.join(\",\\n\"+i)+\"\\n\"+P+\"}\":\"{\"+L.join(\",\")+\"}\":\"{}\";return a.pop(),U}};t.stringify=function(e,t,n){var r,o,i,s;if(a[typeof t]&&t)if((s=v.call(t))==b)o=t;else if(s==S){i={};for(var u,c=0,l=t.length;l>c;u=t[c++],s=v.call(u),(s==O||s==C)&&(i[u]=1));}if(n)if((s=v.call(n))==C){if((n-=n%1)>0)for(r=\"\",n>10&&(n=10);r.lengthU;)switch(o=i.charCodeAt(U)){case 9:case 10:case 13:case 32:U++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=L?i.charAt(U):i[U],U++,e;case 34:for(e=\"@\",U++;a>U;)if(o=i.charCodeAt(U),32>o)B();else if(92==o)switch(o=i.charCodeAt(++U)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=D[o],U++;break;case 117:for(t=++U,n=U+4;n>U;U++)o=i.charCodeAt(U),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||B();e+=$(\"0x\"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&57>=o)&&B(),r=!1;a>U&&(o=i.charCodeAt(U),o>=48&&57>=o);U++);if(46==i.charCodeAt(U)){for(n=++U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),(43==o||45==o)&&U++,n=U;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),\"true\"==i.slice(U,U+4))return U+=4,!0;if(\"false\"==i.slice(U,U+5))return U+=5,!1;if(\"null\"==i.slice(U,U+4))return U+=4,null;B()}return\"$\"},q=function(e){var t,n;if(\"$\"==e&&B(),\"string\"==typeof e){if(\"@\"==(L?e.charAt(0):e[0]))return e.slice(1);if(\"[\"==e){for(t=[];e=J(),\"]\"!=e;n||(n=!0))n&&(\",\"==e?(e=J(),\"]\"==e&&B()):B()),\",\"==e&&B(),t.push(q(e));return t}if(\"{\"==e){for(t={};e=J(),\"}\"!=e;n||(n=!0))n&&(\",\"==e?(e=J(),\"}\"==e&&B()):B()),(\",\"==e||\"string\"!=typeof e||\"@\"!=(L?e.charAt(0):e[0])||\":\"!=J())&&B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if(\"object\"==typeof o&&o)if(v.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,G=\"\"+e,n=q(J()),\"$\"!=J()&&B(),U=G=null,t&&v.call(t)==b?z((r={},r[\"\"]=n,r),\"\",t):n}}}return t.runInContext=o,t}var i=\"function\"==typeof e&&e.amd,a={\"function\":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&\"object\"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],4:[function(e,t,n){function r(e){if(c===setTimeout)return setTimeout(e,0);try{return c(e,0)}catch(t){try{return c.call(null,e,0)}catch(t){return c.call(this,e,0)}}}function o(e){if(l===clearTimeout)return clearTimeout(e);try{return l(e)}catch(t){try{return l.call(null,e)}catch(t){return l.call(this,e)}}}function i(){g&&p&&(g=!1,p.length?h=p.concat(h):d=-1,h.length&&a())}function a(){if(!g){var e=r(i);g=!0;for(var t=h.length;t;){for(p=h,h=[];++d1)for(var n=1;no;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;(!r||t)&&this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('\"'+e+'\" is not in the set.')},r.prototype.at=function(e){if(e>=0&&ee?(-e<<1)+1:(e<<1)+0}function o(e){var t=1===(1&e),n=e>>1;return t?-n:n}var i=e(\"./base64\"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(s=i.decode(e.charCodeAt(t++)),-1===s)throw new Error(\"Invalid base64 digit: \"+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<=0&&e=t&&n>=e?e-t:e>=r&&o>=e?e-r+c:e>=i&&a>=e?e-i+l:e==s?62:e==u?63:-1}},{}],8:[function(e,t,n){function r(e,t,o,i,a,s){var u=Math.floor((t-e)/2)+e,c=a(o,i[u],!0);return 0===c?u:c>0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:0>e?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(0>a)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],9:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(a>n){var s=o(n,a),u=n-1;r(e,s,a);for(var c=e[a],l=n;a>l;l++)t(e[l],c)<=0&&(u+=1,r(e,u,l));r(e,u+1,l);var f=u+1;i(e,t,n,f-1),i(e,t,f+1,a)}}n.quickSort=function(e,t){i(e,t,0,e.length-1)}},{}],10:[function(e,t,n){function r(e){var t=e;return\"string\"==typeof e&&(t=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\"))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;\"string\"==typeof e&&(t=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var n=s.getArg(t,\"version\"),r=s.getArg(t,\"sources\"),o=s.getArg(t,\"names\",[]),i=s.getArg(t,\"sourceRoot\",null),a=s.getArg(t,\"sourcesContent\",null),u=s.getArg(t,\"mappings\"),l=s.getArg(t,\"file\",null);if(n!=this._version)throw new Error(\"Unsupported version: \"+n);r=r.map(String).map(s.normalize).map(function(e){return i&&s.isAbsolute(i)&&s.isAbsolute(e)?s.relative(i,e):e}),this._names=c.fromArray(o.map(String),!0),this._sources=c.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=u,this.file=l}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;\"string\"==typeof e&&(t=JSON.parse(e.replace(/^\\)\\]\\}'/,\"\")));var n=s.getArg(t,\"version\"),o=s.getArg(t,\"sections\");if(n!=this._version)throw new Error(\"Unsupported version: \"+n);this._sources=new c,this._names=new c;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error(\"Support for url field in sections not implemented.\");var t=s.getArg(e,\"offset\"),n=s.getArg(t,\"line\"),o=s.getArg(t,\"column\");if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;h>p;p++){var g=a[p],d=new i;d.generatedLine=g.generatedLine,d.generatedColumn=g.generatedColumn,g.source&&(d.source=r.indexOf(g.source),d.originalLine=g.originalLine,d.originalColumn=g.originalColumn,g.name&&(d.name=n.indexOf(g.name)),l.push(d)),u.push(d)}return f(t.__originalMappings,s.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,\"sources\",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?s.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,u,c=1,p=0,h=0,g=0,d=0,m=0,y=e.length,v=0,_={},w={},b=[],A=[];y>v;)if(\";\"===e.charAt(v))c++,v++,p=0;else if(\",\"===e.charAt(v))v++;else{for(n=new i,n.generatedLine=c,a=v;y>a&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(v,a),o=_[r])v+=r.length;else{for(o=[];a>v;)l.decode(e,v,w),u=w.value,v=w.rest,o.push(u);if(2===o.length)throw new Error(\"Found a source, but no line and column\");if(3===o.length)throw new Error(\"Found a source and line, but no column\");_[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),A.push(n),\"number\"==typeof n.originalLine&&b.push(n)}f(A,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[n]);if(e[r]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,\"name\",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,\"originalLine\",null),column:s.getArg(o,\"originalColumn\",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}):!1},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\\/\\//,\"\");if(\"file\"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||\"/\"==n.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(t)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,\"source\");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,\"line\"),originalColumn:s.getArg(e,\"column\")},o=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",s.compareByOriginalPositions,s.getArg(e,\"bias\",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,\"sources\",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],\".\"===a?u.splice(l,1):\"..\"===a?c++:c>0&&(\"\"===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join(\"/\"),\"\"===t&&(t=s?\"/\":\".\"),r?(r.path=t,i(r)):t}function s(e,t){\"\"===e&&(e=\".\"),\"\"===t&&(t=\".\");var n=o(t),r=o(e);if(r&&(e=r.path||\"/\"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(v))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s=\"/\"===t.charAt(0)?t:a(e.replace(/\\/+$/,\"\")+\"/\"+t);return r?(r.path=s,i(r)):s}function u(e,t){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var n=0;0!==t.indexOf(e+\"/\");){var r=e.lastIndexOf(\"/\");if(0>r)return t;if(e=e.slice(0,r),e.match(/^([^\\/]+:\\/)?\\/*$/))return t;++n}return Array(n+1).join(\"../\")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?\"$\"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(9>t)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function d(e,t){return e===t?0:e>t?1:-1}function m(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=d(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:d(e.name,t.name)))))}n.getArg=r;var y=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,v=/^data:.+\\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(y)},n.relative=u;var _=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},{}],12:[function(t,n,r){!function(t,o){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stackframe\",[],o):\"object\"==typeof r?n.exports=o():t.StackFrame=o()}(this,function(){\"use strict\";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e,t,n,r,o,i){void 0!==e&&this.setFunctionName(e),void 0!==t&&this.setArgs(t),void 0!==n&&this.setFileName(n),void 0!==r&&this.setLineNumber(r),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return t.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(e){this.functionName=String(e)},getArgs:function(){return this.args},setArgs:function(e){if(\"[object Array]\"!==Object.prototype.toString.call(e))throw new TypeError(\"Args must be an Array\");this.args=e},getFileName:function(){return this.fileName},setFileName:function(e){this.fileName=String(e)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(t){if(!e(t))throw new TypeError(\"Line Number must be a Number\");this.lineNumber=Number(t)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(t){if(!e(t))throw new TypeError(\"Column Number must be a Number\");this.columnNumber=Number(t)},getSource:function(){return this.source},setSource:function(e){this.source=String(e)},toString:function(){var t=this.getFunctionName()||\"{anonymous}\",n=\"(\"+(this.getArgs()||[]).join(\",\")+\")\",r=this.getFileName()?\"@\"+this.getFileName():\"\",o=e(this.getLineNumber())?\":\"+this.getLineNumber():\"\",i=e(this.getColumnNumber())?\":\"+this.getColumnNumber():\"\";return t+n+r+o+i}},t})},{}],13:[function(t,n,r){!function(o,i){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stack-generator\",[\"stackframe\"],i):\"object\"==typeof r?n.exports=i(t(\"stackframe\")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;\"object\"==typeof t&&\"number\"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300?t(r.responseText):n(new Error(\"HTTP status: \"+r.status+\" retrieving \"+e)))},r.send()})}function r(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,t){for(var n,r=/function\\s+([^(]*?)\\s*\\(([^)]*)\\)/,o=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,i=/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,a=e.split(\"\\n\"),s=\"\",u=Math.min(t,20),c=0;u>c;++c){var l=a[t-c-1],f=l.indexOf(\"//\");if(f>=0&&(l=l.substr(0,f)),l){if(s=l+s,n=o.exec(s),n&&n[1])return n[1];if(n=r.exec(s),n&&n[1])return n[1];if(n=i.exec(s),n&&n[1])return n[1]}}}function a(){if(\"function\"!=typeof Object.defineProperty||\"function\"!=typeof Object.create)throw new Error(\"Unable to consume source maps in older browsers\")}function s(e){if(\"object\"!=typeof e)throw new TypeError(\"Given StackFrame is not an object\");if(\"string\"!=typeof e.fileName)throw new TypeError(\"Given file name is not a String\");if(\"number\"!=typeof e.lineNumber||e.lineNumber%1!==0||e.lineNumber<1)throw new TypeError(\"Given line number must be a positive integer\");if(\"number\"!=typeof e.columnNumber||e.columnNumber%1!==0||e.columnNumber<0)throw new TypeError(\"Given column number must be a non-negative integer\");return!0}function u(e){var t=/\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/.exec(e);if(t&&t[1])return t[1];throw new Error(\"sourceMappingURL not found\")}function c(n,r,o,i,a){var s=new e.SourceMapConsumer(n),u=s.originalPositionFor({line:o,column:i}),c=s.sourceContentFor(u.source);return c&&(a[u.source]=c),new t(u.name,r,u.source,u.line,u.column)}return function l(e){return this instanceof l?(e=e||{},this.sourceCache=e.sourceCache||{},this.ajax=e.ajax||n,this._atob=e.atob||r,this._get=function(t){return new Promise(function(n,r){var o=\"data:\"===t.substr(0,5);if(this.sourceCache[t])n(this.sourceCache[t]);else if(e.offline&&!o)r(new Error(\"Cannot make network requests in offline mode\"));else if(o){var i=/^data:application\\/json;([\\w=:\"-]+;)*base64,/,a=t.match(i);if(a){var s=a[0].length,u=t.substr(s),c=this._atob(u);this.sourceCache[t]=c,n(c)}else r(new Error(\"The encoding of the inline sourcemap is not supported\"))}else{var l=this.ajax(t,{method:\"get\"});this.sourceCache[t]=l,l.then(n,r)}}.bind(this))},this.pinpoint=function(e){return new Promise(function(t,n){this.getMappedLocation(e).then(function(e){function n(){t(e)}this.findFunctionName(e).then(t,n)[\"catch\"](n)}.bind(this),n)}.bind(this))},this.findFunctionName=function(e){return new Promise(function(n,r){s(e),this._get(e.fileName).then(function(r){var o=e.lineNumber,a=e.columnNumber,s=i(r,o,a);n(s?new t(s,e.args,e.fileName,o,a):e)},r)[\"catch\"](r)}.bind(this))},void(this.getMappedLocation=function(e){return new Promise(function(t,n){a(),s(e);var r=this.sourceCache,i=e.fileName;this._get(i).then(function(a){var s=u(a),l=\"data:\"===s.substr(0,5),f=i.substring(0,i.lastIndexOf(\"/\")+1);\"/\"===s[0]||l||/^https?:\\/\\/|^\\/\\//i.test(s)||(s=f+s),this._get(s).then(function(n){var i=e.lineNumber,a=e.columnNumber;\"string\"==typeof n&&(n=o(n.replace(/^\\)\\]\\}'/,\"\"))),\"undefined\"==typeof n.sourceRoot&&(n.sourceRoot=f),t(c(n,e.args,i,a,r))},n)[\"catch\"](n)}.bind(this),n)[\"catch\"](n)}.bind(this))})):new l(e)}})},{\"source-map/lib/source-map-consumer\":10,stackframe:14}],16:[function(e,t,n){Array.isArray||(Array.isArray=function(e){return\"[object Array]\"===Object.prototype.toString.call(e)}),\"undefined\"==typeof Promise&&ES6Promise.polyfill(),Function.prototype.bind||(Function.prototype.bind=function(e){if(\"function\"!=typeof this)throw new TypeError(\"Function.prototype.bind - what is trying to be bound is not callable\");var t=Array.prototype.slice.call(arguments,1),n=this,r=function(){},o=function(){return n.apply(this instanceof r&&e?this:e,t.concat(Array.prototype.slice.call(arguments)))};return r.prototype=this.prototype,o.prototype=new r,o}),Array.prototype.map||(Array.prototype.map=function(e,t){if(void 0===this||null===this)throw new TypeError(\"this is null or not defined\");var n,r=Object(this),o=r.length>>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;o>a;){var s,u;a in r&&(s=r[a],u=e.call(n,s,a,r),i[a]=u),a++}return i}),Array.prototype.filter||(Array.prototype.filter=function(e){if(void 0===this||null===this)throw new TypeError(\"this is null or not defined\");var t=Object(this),n=t.length>>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;n>i;i++)if(i in t){var a=t[i];e.call(o,a,i,t)&&r.push(a)}return r}),Array.prototype.forEach||(Array.prototype.forEach=function(e,t){var n,r;if(null===this||void 0===this)throw new TypeError(\" this is null or not defined\");var o=Object(this),i=o.length>>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");for(arguments.length>1&&(n=t),r=0;i>r;){var a;r in o&&(a=o[r],e.call(n,a,r,o)),r++}})},{}],17:[function(t,n,r){!function(o,i){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stacktrace\",[\"error-stack-parser\",\"stack-generator\",\"stacktrace-gps\"],i):\"object\"==typeof r?n.exports=i(t(\"error-stack-parser\"),t(\"stack-generator\"),t(\"stacktrace-gps\")):o.StackTrace=i(o.ErrorStackParser,o.StackGenerator,o.StackTraceGPS)}(this,function(e,t,n){function r(e,t){var n={};return[e,t].forEach(function(e){for(var t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);return n}),n}function o(e){return e.stack||e[\"opera#sourceloc\"]}function i(e,t){return\"function\"==typeof t?e.filter(t):e}var a={filter:function(e){return-1===(e.functionName||\"\").indexOf(\"StackTrace$$\")&&-1===(e.functionName||\"\").indexOf(\"ErrorStackParser$$\")&&-1===(e.functionName||\"\").indexOf(\"StackTraceGPS$$\")&&-1===(e.functionName||\"\").indexOf(\"StackGenerator$$\")},sourceCache:{}},s=function(){try{throw new Error}catch(e){return e}};return{get:function(e){var t=s();return o(t)?this.fromError(t,e):this.generateArtificially(e)},getSync:function(n){n=r(a,n);var u=s(),c=o(u)?e.parse(u):t.backtrace(n);return i(c,n.filter)},fromError:function(t,o){o=r(a,o);var s=new n(o);return new Promise(function(n){var r=i(e.parse(t),o.filter);n(Promise.all(r.map(function(e){return new Promise(function(t){function n(){t(e)}s.pinpoint(e).then(t,n)[\"catch\"](n)})})))}.bind(this))},generateArtificially:function(e){e=r(a,e);var n=t.backtrace(e);return\"function\"==typeof e.filter&&(n=n.filter(e.filter)),Promise.resolve(n)},instrument:function(e,t,n,r){if(\"function\"!=typeof e)throw new Error(\"Cannot instrument non-function object\");if(\"function\"==typeof e.__stacktraceOriginalFn)return e;var i=function(){try{return this.get().then(t,n)[\"catch\"](n),e.apply(r||this,arguments)}catch(i){throw o(i)&&this.fromError(i).then(t,n)[\"catch\"](n),i}}.bind(this);return i.__stacktraceOriginalFn=e,i},deinstrument:function(e){if(\"function\"!=typeof e)throw new Error(\"Cannot de-instrument non-function object\");return\"function\"==typeof e.__stacktraceOriginalFn?e.__stacktraceOriginalFn:e},report:function(e,t,n){return new Promise(function(r,o){var i=new XMLHttpRequest;i.onerror=o,i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<400?r(i.responseText):o(new Error(\"POST to \"+t+\" failed with status: \"+i.status)))},i.open(\"post\",t),i.setRequestHeader(\"Content-Type\",\"application/json\");var a={stack:e};void 0!==n&&(a.message=n),i.send(JSON.stringify(a))})}}})},{\"error-stack-parser\":1,\"stack-generator\":13,\"stacktrace-gps\":15}]},{},[2,3,16,17])(17)});"],"file":"stacktrace-with-promises-and-json-polyfills.js","sourceRoot":"/source/"} \ No newline at end of file diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js b/dist/stacktrace-with-promises-and-json-polyfills.min.js index f8afa1e..4860e63 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js @@ -1,3 +1,3 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"("),r=n.match(/ (\((.+):(\d+):(\d+)\)$)/);n=r?n.replace(r[0],""):n;var o=n.split(/\s+/).slice(1),i=this.extractLocation(r?r[1]:o.pop()),a=o.join(" ")||void 0,s=["eval",""].indexOf(i[0])>-1?void 0:i[0];return new e({functionName:a,fileName:s,lineNumber:i[1],columnNumber:i[2],source:t})},this)},parseFFOrSafari:function(t){var n=t.stack.split("\n").filter(function(e){return!e.match(r)},this);return n.map(function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),t.indexOf("@")===-1&&t.indexOf(":")===-1)return new e({functionName:t});var n=/((.*".+"[^@]*)?[^@]*)(?:@)/,r=t.match(n),o=r&&r[1]?r[1]:void 0,i=this.extractLocation(t.replace(n,""));return new e({functionName:o,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:t})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^)]*\)/g,"")||void 0;i.match(/\(([^)]*)\)/)&&(n=i.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:t})},this)}}})},{stackframe:2}],2:[function(t,n,r){!function(t,o){"use strict";"function"==typeof e&&e.amd?e("stackframe",[],o):"object"==typeof r?n.exports=o():t.StackFrame=o()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e){return e.charAt(0).toUpperCase()+e.substring(1)}function n(e){return function(){return this[e]}}function r(e){if(e)for(var n=0;n1)))/4)-T((e-1901+t)/100)+T((e-1601+t)/400)};if((g=v.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=y?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?d=2==i?function(e,t){var n,r={},o=y.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=y.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var n,o,i=y.call(e)==b,s=!i&&"function"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&"prototype"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),d(e,t)},!n("json-stringify")){var j={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},k="000000",x=function(e,t){return(k+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);n-1/0&&s<1/0){if(M){for(p=T(s/864e5),c=T(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=T((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,v=T(h/36e5)%24,_=T(h/6e4)%60,w=T(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),v=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(c<=0||c>=1e4?(c<0?"-":"+")+x(6,c<0?-c:c):x(4,c))+"-"+x(2,l+1)+"-"+x(2,p)+"T"+x(2,v)+":"+x(2,_)+":"+x(2,w)+"."+x(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=y.call(s),u==E)return""+s;if(u==A)return s>-1/0&&s<1/0?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==S){for(j=0,k=s.length;j0)for(r="",n>10&&(n=10);r.length=48&&o<=57||o>=97&&o<=102||o>=65&&o<=70||B();e+=G("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&o<=57){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&o<=57)&&B(),r=!1;U=48&&o<=57);U++);if(46==i.charCodeAt(U)){for(n=++U;n=48&&o<=57);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),43!=o&&45!=o||U++,n=U;n=48&&o<=57);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),","!=e&&"string"==typeof e&&"@"==(N?e.charAt(0):e[0])&&":"==J()||B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(y.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,$=""+e,n=q(J()),"$"!=J()&&B(),U=$=null,t&&y.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return t.runInContext=o,t}var i="function"==typeof e&&e.amd,a={"function":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&"object"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],5:[function(e,t,n){function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function a(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function s(){m&&g&&(m=!1,g.length?d=g.concat(d):v=-1,d.length&&u())}function u(){if(!m){var e=i(s);m=!0;for(var t=d.length;t;){for(g=d,d=[];++v1)for(var n=1;n=0&&e>1;return t?-n:n}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],10:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;p1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),C.push(n),"number"==typeof n.originalLine&&b.push(n)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)), -this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=o(t),r=o(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(y))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,i(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function d(e,t){return e===t?0:e>t?1:-1}function m(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=d(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:d(e.name,t.name)))))}n.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},n.relative=u;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},{}],13:[function(e,t,n){arguments[4][2][0].apply(n,arguments)},{dup:2}],14:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof r?n.exports=i(t("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300||"file://"===e.substr(0,7)&&r.responseText?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],r=e.split("\n"),o="",i=Math.min(t,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=n.length,l=0;l>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;a>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;i>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;r=200&&a.status<400?o(a.responseText):i(new Error("POST to "+t+" failed with status: "+a.status)))},a.open("post",t),a.setRequestHeader("Content-Type","application/json"),r&&"object"==typeof r.headers){var s=r.headers;for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==n&&null!==n&&(c.message=n),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":14,"stacktrace-gps":16}]},{},[3,4,17,18])(18)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function(){function e(t,n,r){function o(a,s){if(!n[a]){if(!t[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[a]={exports:{}};t[a][0].call(l.exports,function(e){var n=t[a][1][e];return o(n||e)},l,l.exports,e,t,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var n=t.replace(/^\s+/,"").replace(/\(eval code/g,"("),r=n.match(/ (\((.+):(\d+):(\d+)\)$)/);n=r?n.replace(r[0],""):n;var o=n.split(/\s+/).slice(1),i=this.extractLocation(r?r[1]:o.pop()),a=o.join(" ")||void 0,s=["eval",""].indexOf(i[0])>-1?void 0:i[0];return new e({functionName:a,fileName:s,lineNumber:i[1],columnNumber:i[2],source:t})},this)},parseFFOrSafari:function(t){var n=t.stack.split("\n").filter(function(e){return!e.match(r)},this);return n.map(function(t){if(t.indexOf(" > eval")>-1&&(t=t.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),t.indexOf("@")===-1&&t.indexOf(":")===-1)return new e({functionName:t});var n=/((.*".+"[^@]*)?[^@]*)(?:@)/,r=t.match(n),o=r&&r[1]?r[1]:void 0,i=this.extractLocation(t.replace(n,""));return new e({functionName:o,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:t})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\d+).*script (?:in )?(\S+)/i,r=t.message.split("\n"),o=[],i=2,a=r.length;i/,"$2").replace(/\([^)]*\)/g,"")||void 0;i.match(/\(([^)]*)\)/)&&(n=i.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var s=void 0===n||"[arguments not available]"===n?void 0:n.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:t})},this)}}})},{stackframe:2}],2:[function(t,n,r){!function(t,o){"use strict";"function"==typeof e&&e.amd?e("stackframe",[],o):"object"==typeof r?n.exports=o():t.StackFrame=o()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function t(e){return e.charAt(0).toUpperCase()+e.substring(1)}function n(e){return function(){return this[e]}}function r(e){if(e)for(var n=0;n1)))/4)-T((e-1901+t)/100)+T((e-1601+t)/400)};if((g=v.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=y?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),d=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?d=2==i?function(e,t){var n,r={},o=y.call(e)==b;for(n in e)o&&"prototype"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=y.call(e)==b;for(n in e)o&&"prototype"==n||!g.call(e,n)||(r="constructor"===n)||t(n);(r||g.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],d=function(e,t){var n,o,i=y.call(e)==b,s=!i&&"function"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&"prototype"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),d(e,t)},!n("json-stringify")){var j={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},k="000000",x=function(e,t){return(k+(t||0)).slice(-e)},P="\\u00",R=function(e){for(var t='"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(""):e);n-1/0&&s<1/0){if(M){for(p=T(s/864e5),c=T(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=T((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,v=T(h/36e5)%24,_=T(h/6e4)%60,w=T(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),v=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(c<=0||c>=1e4?(c<0?"-":"+")+x(6,c<0?-c:c):x(4,c))+"-"+x(2,l+1)+"-"+x(2,p)+"T"+x(2,v)+":"+x(2,_)+":"+x(2,w)+"."+x(3,b)+"Z"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return"null";if(u=y.call(s),u==E)return""+s;if(u==A)return s>-1/0&&s<1/0?""+s:"null";if(u==O)return R(""+s);if("object"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),N=[],P=i,i+=o,u==S){for(j=0,k=s.length;j0)for(r="",n>10&&(n=10);r.length=48&&o<=57||o>=97&&o<=102||o>=65&&o<=70||B();e+=G("0x"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&o<=57){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&o<=57)&&B(),r=!1;U=48&&o<=57);U++);if(46==i.charCodeAt(U)){for(n=++U;n=48&&o<=57);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),43!=o&&45!=o||U++,n=U;n=48&&o<=57);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),"true"==i.slice(U,U+4))return U+=4,!0;if("false"==i.slice(U,U+5))return U+=5,!1;if("null"==i.slice(U,U+4))return U+=4,null;B()}return"$"},q=function(e){var t,n;if("$"==e&&B(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=J(),"]"!=e;n||(n=!0))n&&(","==e?(e=J(),"]"==e&&B()):B()),","==e&&B(),t.push(q(e));return t}if("{"==e){for(t={};e=J(),"}"!=e;n||(n=!0))n&&(","==e?(e=J(),"}"==e&&B()):B()),","!=e&&"string"==typeof e&&"@"==(N?e.charAt(0):e[0])&&":"==J()||B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===m?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if("object"==typeof o&&o)if(y.call(o)==S)for(r=o.length;r--;)I(o,r,n);else d(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,$=""+e,n=q(J()),"$"!=J()&&B(),U=$=null,t&&y.call(t)==b?z((r={},r[""]=n,r),"",t):n}}}return t.runInContext=o,t}var i="function"==typeof e&&e.amd,a={"function":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&"object"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],5:[function(e,t,n){function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function a(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function s(){m&&g&&(m=!1,g.length?d=g.concat(d):v=-1,d.length&&u())}function u(){if(!m){var e=i(s);m=!0;for(var t=d.length;t;){for(g=d,d=[];++v1)for(var n=1;n=0&&e>1;return t?-n:n}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(t++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],10:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;p1&&(n.source=d+o[1],d+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=m+o[4],m+=o[4])),C.push(n),"number"==typeof n.originalLine&&b.push(n)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null; +if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,"source");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join("/"),""===t&&(t=s?"/":"."),r?(r.path=t,i(r)):t}function s(e,t){""===e&&(e="."),""===t&&(t=".");var n=o(t),r=o(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(y))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=s,i(r)):s}function u(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if(e=e.slice(0,r),e.match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function d(e,t){return e===t?0:e>t?1:-1}function m(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=d(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:d(e.name,t.name)))))}n.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,y=/^data:.+\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},n.relative=u;var _=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=m},{}],13:[function(e,t,n){arguments[4][2][0].apply(n,arguments)},{dup:2}],14:[function(t,n,r){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof r?n.exports=i(t("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;"object"==typeof t&&"number"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300||"file://"===e.substr(0,7)&&r.responseText?t(r.responseText):n(new Error("HTTP status: "+r.status+" retrieving "+e)))},r.send()})}function r(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,t){for(var n=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],r=e.split("\n"),o="",i=Math.min(t,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=n.length,l=0;l>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;a>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;i>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),r=0;r=200&&a.status<400?o(a.responseText):i(new Error("POST to "+t+" failed with status: "+a.status)))},a.open("post",t),a.setRequestHeader("Content-Type","application/json"),r&&"object"==typeof r.headers){var s=r.headers;for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==n&&null!==n&&(c.message=n),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":14,"stacktrace-gps":16}]},{},[3,4,17,18])(18)}); //# sourceMappingURL=stacktrace-with-promises-and-json-polyfills.min.js.map diff --git a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map index 3211e6b..98db9c7 100644 --- a/dist/stacktrace-with-promises-and-json-polyfills.min.js.map +++ b/dist/stacktrace-with-promises-and-json-polyfills.min.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["stacktrace-with-promises-and-json-polyfills.min.js"],"sourcesContent":["!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var t;t=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,t.StackTrace=e()}}(function(){var e;return function t(e,n,r){function o(a,s){if(!n[a]){if(!e[a]){var u=\"function\"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error(\"Cannot find module '\"+a+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var l=n[a]={exports:{}};e[a][0].call(l.exports,function(t){var n=e[a][1][t];return o(n?n:t)},l,l.exports,t,e,n,r)}return n[a].exports}for(var i=\"function\"==typeof require&&require,a=0;a-1&&(t=t.replace(/eval code/g,\"eval\").replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g,\"\"));var n=t.replace(/^\\s+/,\"\").replace(/\\(eval code/g,\"(\").split(/\\s+/).slice(1),r=this.extractLocation(n.pop()),o=n.join(\" \")||void 0,i=[\"eval\",\"\"].indexOf(r[0])>-1?void 0:r[0];return new e({functionName:o,fileName:i,lineNumber:r[1],columnNumber:r[2],source:t})},this)},parseFFOrSafari:function(t){var n=t.stack.split(\"\\n\").filter(function(e){return!e.match(r)},this);return n.map(function(t){if(t.indexOf(\" > eval\")>-1&&(t=t.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g,\":$1\")),t.indexOf(\"@\")===-1&&t.indexOf(\":\")===-1)return new e({functionName:t});var n=t.split(\"@\"),r=this.extractLocation(n.pop()),o=n.join(\"@\")||void 0;return new e({functionName:o,fileName:r[0],lineNumber:r[1],columnNumber:r[2],source:t})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf(\"\\n\")>-1&&e.message.split(\"\\n\").length>e.stacktrace.split(\"\\n\").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(t){for(var n=/Line (\\d+).*script (?:in )?(\\S+)/i,r=t.message.split(\"\\n\"),o=[],i=2,a=r.length;i/,\"$2\").replace(/\\([^\\)]*\\)/g,\"\")||void 0;i.match(/\\(([^\\)]*)\\)/)&&(n=i.replace(/^[^\\(]+\\(([^\\)]*)\\)$/,\"$1\"));var s=void 0===n||\"[arguments not available]\"===n?void 0:n.split(\",\");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:t})},this)}}})},{stackframe:13}],2:[function(t,n,r){(function(o,i){!function(t,o){\"object\"==typeof r&&\"undefined\"!=typeof n?n.exports=o():\"function\"==typeof e&&e.amd?e(o):t.ES6Promise=o()}(this,function(){\"use strict\";function e(e){return\"function\"==typeof e||\"object\"==typeof e&&null!==e}function n(e){return\"function\"==typeof e}function r(e){W=e}function a(e){V=e}function s(){return function(){return o.nextTick(p)}}function u(){return function(){Y(p)}}function c(){var e=0,t=new Q(p),n=document.createTextNode(\"\");return t.observe(n,{characterData:!0}),function(){n.data=e=++e%2}}function l(){var e=new MessageChannel;return e.port1.onmessage=p,function(){return e.port2.postMessage(0)}}function f(){var e=setTimeout;return function(){return e(p,1)}}function p(){for(var e=0;e1)))/4)-T((e-1901+t)/100)+T((e-1601+t)/400)};if((g=v.hasOwnProperty)||(g=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=y?g=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,g=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,g.call(this,e)}),m=function(e,t){var n,r,o,i=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(o in r)g.call(r,o)&&i++;return n=r=null,i?m=2==i?function(e,t){var n,r={},o=y.call(e)==b;for(n in e)o&&\"prototype\"==n||g.call(r,n)||!(r[n]=1)||!g.call(e,n)||t(n)}:function(e,t){var n,r,o=y.call(e)==b;for(n in e)o&&\"prototype\"==n||!g.call(e,n)||(r=\"constructor\"===n)||t(n);(r||g.call(e,n=\"constructor\"))&&t(n)}:(r=[\"valueOf\",\"toString\",\"toLocaleString\",\"propertyIsEnumerable\",\"isPrototypeOf\",\"hasOwnProperty\",\"constructor\"],m=function(e,t){var n,o,i=y.call(e)==b,s=!i&&\"function\"!=typeof e.constructor&&a[typeof e.hasOwnProperty]&&e.hasOwnProperty||g;for(n in e)i&&\"prototype\"==n||!s.call(e,n)||t(n);for(o=r.length;n=r[--o];s.call(e,n)&&t(n));}),m(e,t)},!n(\"json-stringify\")){var j={92:\"\\\\\\\\\",34:'\\\\\"',8:\"\\\\b\",12:\"\\\\f\",10:\"\\\\n\",13:\"\\\\r\",9:\"\\\\t\"},k=\"000000\",P=function(e,t){return(k+(t||0)).slice(-e)},x=\"\\\\u00\",R=function(e){for(var t='\"',n=0,r=e.length,o=!N||r>10,i=o&&(N?e.split(\"\"):e);n-1/0&&s<1/0){if(M){for(p=T(s/864e5),c=T(p/365.2425)+1970-1;M(c+1,0)<=p;c++);for(l=T((p-M(c,0))/30.42);M(c,l+1)<=p;l++);p=1+p-M(c,l),h=(s%864e5+864e5)%864e5,v=T(h/36e5)%24,_=T(h/6e4)%60,w=T(h/1e3)%60,b=h%1e3}else c=s.getUTCFullYear(),l=s.getUTCMonth(),p=s.getUTCDate(),v=s.getUTCHours(),_=s.getUTCMinutes(),w=s.getUTCSeconds(),b=s.getUTCMilliseconds();s=(c<=0||c>=1e4?(c<0?\"-\":\"+\")+P(6,c<0?-c:c):P(4,c))+\"-\"+P(2,l+1)+\"-\"+P(2,p)+\"T\"+P(2,v)+\":\"+P(2,_)+\":\"+P(2,w)+\".\"+P(3,b)+\"Z\"}else s=null;if(n&&(s=n.call(t,e,s)),null===s)return\"null\";if(u=y.call(s),u==E)return\"\"+s;if(u==A)return s>-1/0&&s<1/0?\"\"+s:\"null\";if(u==O)return R(\"\"+s);if(\"object\"==typeof s){for(k=a.length;k--;)if(a[k]===s)throw f();if(a.push(s),N=[],x=i,i+=o,u==S){for(j=0,k=s.length;j0)for(r=\"\",n>10&&(n=10);r.length=48&&o<=57||o>=97&&o<=102||o>=65&&o<=70||B();e+=G(\"0x\"+i.slice(t,U));break;default:B()}else{if(34==o)break;for(o=i.charCodeAt(U),t=U;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++U);e+=i.slice(t,U)}if(34==i.charCodeAt(U))return U++,e;B();default:if(t=U,45==o&&(r=!0,o=i.charCodeAt(++U)),o>=48&&o<=57){for(48==o&&(o=i.charCodeAt(U+1),o>=48&&o<=57)&&B(),r=!1;U=48&&o<=57);U++);if(46==i.charCodeAt(U)){for(n=++U;n=48&&o<=57);n++);n==U&&B(),U=n}if(o=i.charCodeAt(U),101==o||69==o){for(o=i.charCodeAt(++U),43!=o&&45!=o||U++,n=U;n=48&&o<=57);n++);n==U&&B(),U=n}return+i.slice(t,U)}if(r&&B(),\"true\"==i.slice(U,U+4))return U+=4,!0;if(\"false\"==i.slice(U,U+5))return U+=5,!1;if(\"null\"==i.slice(U,U+4))return U+=4,null;B()}return\"$\"},q=function(e){var t,n;if(\"$\"==e&&B(),\"string\"==typeof e){if(\"@\"==(N?e.charAt(0):e[0]))return e.slice(1);if(\"[\"==e){for(t=[];e=J(),\"]\"!=e;n||(n=!0))n&&(\",\"==e?(e=J(),\"]\"==e&&B()):B()),\",\"==e&&B(),t.push(q(e));return t}if(\"{\"==e){for(t={};e=J(),\"}\"!=e;n||(n=!0))n&&(\",\"==e?(e=J(),\"}\"==e&&B()):B()),\",\"!=e&&\"string\"==typeof e&&\"@\"==(N?e.charAt(0):e[0])&&\":\"==J()||B(),t[e.slice(1)]=q(J());return t}B()}return e},I=function(e,t,n){var r=z(e,t,n);r===d?delete e[t]:e[t]=r},z=function(e,t,n){var r,o=e[t];if(\"object\"==typeof o&&o)if(y.call(o)==S)for(r=o.length;r--;)I(o,r,n);else m(o,function(e){I(o,e,n)});return n.call(e,t,o)};t.parse=function(e,t){var n,r;return U=0,$=\"\"+e,n=q(J()),\"$\"!=J()&&B(),U=$=null,t&&y.call(t)==b?z((r={},r[\"\"]=n,r),\"\",t):n}}}return t.runInContext=o,t}var i=\"function\"==typeof e&&e.amd,a={\"function\":!0,object:!0},s=a[typeof r]&&r&&!r.nodeType&&r,u=a[typeof window]&&window||this,c=s&&a[typeof n]&&n&&!n.nodeType&&\"object\"==typeof t&&t;if(!c||c.global!==c&&c.window!==c&&c.self!==c||(u=c),s&&!i)o(u,s);else{var l=u.JSON,f=u.JSON3,p=!1,h=o(u,u.JSON3={noConflict:function(){return p||(p=!0,u.JSON=l,u.JSON3=f,l=f=null),h}});u.JSON={parse:h.parse,stringify:h.stringify}}i&&e(function(){return h})}).call(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],4:[function(e,t,n){function r(){throw new Error(\"setTimeout has not been defined\")}function o(){throw new Error(\"clearTimeout has not been defined\")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function a(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function s(){d&&g&&(d=!1,g.length?m=g.concat(m):v=-1,m.length&&u())}function u(){if(!d){var e=i(s);d=!0;for(var t=m.length;t;){for(g=m,m=[];++v1)for(var n=1;n=0&&e>1;return t?-n:n}var i=e(\"./base64\"),a=5,s=1<>>=a,o>0&&(t|=c),n+=i.encode(t);while(o>0);return n},n.decode=function(e,t,n){var r,s,l=e.length,f=0,p=0;do{if(t>=l)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(s=i.decode(e.charCodeAt(t++)),s===-1)throw new Error(\"Invalid base64 digit: \"+e.charAt(t-1));r=!!(s&c),s&=u,f+=s<0?t-u>1?r(u,t,o,i,a,s):s==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,a,s):s==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],9:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(n=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==c;)r.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=c.fromArray(e._names.toArray(),!0),r=t._sources=c.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),u=t.__generatedMappings=[],l=t.__originalMappings=[],p=0,h=a.length;p1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=g+o[3],g=n.originalColumn,o.length>4&&(n.name=d+o[4],d+=o[4])),C.push(n),\"number\"==typeof n.originalLine&&b.push(n)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[n]);if(e[r]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[r]);return u.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=s.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,\"name\",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,\"originalLine\",null),column:s.getArg(o,\"originalColumn\",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=s.urlParse(this.sourceRoot))){var r=e.replace(/^file:\\/\\//,\"\");if(\"file\"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||\"/\"==n.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(t)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=s.getArg(e,\"source\");if(null!=this.sourceRoot&&(t=s.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};t=this._sources.indexOf(t);var n={source:t,originalLine:s.getArg(e,\"line\"),originalColumn:s.getArg(e,\"column\")},o=this._findMapping(n,this._originalMappings,\"originalLine\",\"originalColumn\",s.compareByOriginalPositions,s.getArg(e,\"bias\",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,\"sources\",{get:function(){for(var e=[],t=0;t=0;l--)a=u[l],\".\"===a?u.splice(l,1):\"..\"===a?c++:c>0&&(\"\"===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return t=u.join(\"/\"),\"\"===t&&(t=s?\"/\":\".\"),r?(r.path=t,i(r)):t}function s(e,t){\"\"===e&&(e=\".\"),\"\"===t&&(t=\".\");var n=o(t),r=o(e);if(r&&(e=r.path||\"/\"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(y))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var s=\"/\"===t.charAt(0)?t:a(e.replace(/\\/+$/,\"\")+\"/\"+t);return r?(r.path=s,i(r)):s}function u(e,t){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var n=0;0!==t.indexOf(e+\"/\");){var r=e.lastIndexOf(\"/\");if(r<0)return t;if(e=e.slice(0,r),e.match(/^([^\\/]+:\\/)?\\/*$/))return t;++n}return Array(n+1).join(\"../\")+t.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?\"$\"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r||n?r:(r=e.generatedColumn-t.generatedColumn,0!==r?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name))))}function g(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:(r=e.generatedColumn-t.generatedColumn,0!==r||n?r:(r=e.source-t.source,0!==r?r:(r=e.originalLine-t.originalLine,0!==r?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name))))}function m(e,t){return e===t?0:e>t?1:-1}function d(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:(n=e.generatedColumn-t.generatedColumn,0!==n?n:(n=m(e.source,t.source),0!==n?n:(n=e.originalLine-t.originalLine,0!==n?n:(n=e.originalColumn-t.originalColumn,0!==n?n:m(e.name,t.name)))))}n.getArg=r;var v=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,y=/^data:.+\\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=s,n.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(v)},n.relative=u;var _=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();n.toSetString=_?c:l,n.fromSetString=_?c:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=g,n.compareByGeneratedPositionsInflated=d},{}],12:[function(t,n,r){!function(o,i){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stack-generator\",[\"stackframe\"],i):\"object\"==typeof r?n.exports=i(t(\"stackframe\")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(t){var n=[],r=10;\"object\"==typeof t&&\"number\"==typeof t.maxStackSize&&(r=t.maxStackSize);for(var o=arguments.callee;o&&n.length=200&&r.status<300||\"file://\"===e.substr(0,7)&&r.responseText?t(r.responseText):n(new Error(\"HTTP status: \"+r.status+\" retrieving \"+e)))},r.send()})}function r(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,t){for(var n=[/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,/function\\s+([^('\"`]*?)\\s*\\(([^)]*)\\)/,/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,/\\b(?!(?:if|for|switch|while|with|catch)\\b)(?:(?:static)\\s+)?(\\S+)\\s*\\(.*?\\)\\s*\\{/,/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*\\(.*?\\)\\s*=>/],r=e.split(\"\\n\"),o=\"\",i=Math.min(t,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=n.length,l=0;l>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");arguments.length>1&&(n=t);for(var i=new Array(o),a=0;a>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");for(var r=[],o=arguments.length>=2?arguments[1]:void 0,i=0;i>>0;if(\"function\"!=typeof e)throw new TypeError(e+\" is not a function\");for(arguments.length>1&&(n=t),r=0;r=200&&a.status<400?o(a.responseText):i(new Error(\"POST to \"+t+\" failed with status: \"+a.status)))},a.open(\"post\",t),a.setRequestHeader(\"Content-Type\",\"application/json\"),r&&\"object\"==typeof r.headers){var s=r.headers;for(var u in s)s.hasOwnProperty(u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==n&&null!==n&&(c.message=n),a.send(JSON.stringify(c))})}}})},{\"error-stack-parser\":1,\"stack-generator\":12,\"stacktrace-gps\":14}]},{},[2,3,15,16])(16)});"],"file":"stacktrace-with-promises-and-json-polyfills.min.js"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/error-stack-parser/error-stack-parser.js","stacktrace-with-promises-and-json-polyfills.js","node_modules/error-stack-parser/node_modules/stackframe/stackframe.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/json3/lib/json3.js","node_modules/process/browser.js","node_modules/source-map/lib/array-set.js","node_modules/source-map/lib/base64-vlq.js","node_modules/source-map/lib/base64.js","node_modules/source-map/lib/binary-search.js","node_modules/source-map/lib/quick-sort.js","node_modules/source-map/lib/source-map-consumer.js","node_modules/source-map/lib/util.js","node_modules/stack-generator/stack-generator.js","node_modules/stacktrace-gps/stacktrace-gps.js","polyfills.js","stacktrace.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","StackTrace","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","root","factory","ErrorStackParser","StackFrame","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","parse","error","stacktrace","parseOpera","stack","match","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","indexOf","regExp","parts","exec","replace","undefined","filtered","split","filter","line","map","sanitizedLine","location","tokens","slice","locationParts","pop","functionName","join","fileName","lineNumber","columnNumber","source","functionNameRegex","matches","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","push","argsRaw","functionCall","shift","args","stackframe","2","_isNumber","isNaN","parseFloat","isFinite","_capitalize","str","charAt","toUpperCase","substring","_getter","obj","props","booleanProps","numericProps","stringProps","arrayProps","concat","prototype","getArgs","setArgs","v","Object","toString","TypeError","getEvalOrigin","evalOrigin","setEvalOrigin","getFileName","getLineNumber","getColumnNumber","getFunctionName","getIsEval","fromString","argsStartIndex","argsEndIndex","lastIndexOf","locationString","Boolean","j","Number","k","String","3","process","ES6Promise","objectOrFunction","x","isFunction","setScheduler","scheduleFn","customSchedulerFn","setAsap","asapFn","asap","useNextTick","nextTick","flush","useVertxTimer","vertxNext","useMutationObserver","iterations","observer","BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","useSetTimeout","globalSetTimeout","setTimeout","callback","queue","arg","attemptVertx","vertx","runOnLoop","runOnContext","then","onFulfillment","onRejection","_arguments","arguments","parent","child","constructor","noop","PROMISE_ID","makePromise","_state","invokeCallback","_result","subscribe","resolve","object","Constructor","promise","_resolve","selfFulfillment","cannotReturnOwn","getThen","GET_THEN_ERROR","tryThen","value","fulfillmentHandler","rejectionHandler","handleForeignThenable","thenable","sealed","fulfill","reason","_reject","_label","handleOwnThenable","FULFILLED","REJECTED","handleMaybeThenable","maybeThenable","then$$","publishRejection","_onerror","publish","PENDING","_subscribers","subscribers","settled","detail","ErrorObject","tryCatch","TRY_CATCH_ERROR","hasCallback","succeeded","failed","initializePromise","resolver","nextId","id","Enumerator","input","_instanceConstructor","isArray","_input","_remaining","Array","_enumerate","validationError","all","entries","race","reject","_","needsResolver","needsNew","Promise","polyfill","local","Function","P","promiseToString","cast","_isArray","scheduleFlush","browserWindow","browserGlobal","MutationObserver","WebKitMutationObserver","isNode","isWorker","Uint8ClampedArray","importScripts","Math","random","_eachEntry","entry","resolve$$","_then","_settledAt","_willSettleAt","state","enumerator","_setScheduler","_setAsap","_asap","catch","_process","4","runInContext","context","has","name","undef","isSupported","serialized","stringify","stringifySupported","isExtended","toJSON","getClass","Date","exception","parseSupported","SyntaxError","nativeJSON","isProperty","forEach","objectProto","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","functionClass","dateClass","numberClass","stringClass","arrayClass","booleanClass","charIndexBuggy","floor","Months","getDay","year","month","hasOwnProperty","property","members","__proto__","original","Properties","size","valueOf","isConstructor","hasProperty","objectTypes","Escapes","92","34","8","12","10","13","9","leadingZeroes","toPaddedString","width","unicodePrefix","quote","index","useCharIndex","symbols","charCode","charCodeAt","serialize","properties","whitespace","indentation","className","date","time","hours","minutes","seconds","milliseconds","results","element","prefix","Index","Source","fromCharCode","Unescapes","47","98","116","110","102","114","abort","lex","begin","position","isSigned","get","hasMembers","update","walk","isLoader","function","freeExports","nodeType","freeGlobal","JSON","previousJSON","isRestored","JSON3","noConflict","5","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","timeout","run","Item","array","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","6","ArraySet","_array","_set","create","util","fromArray","aArray","aAllowDuplicates","set","add","getOwnPropertyNames","aStr","sStr","toSetString","isDuplicate","idx","at","aIdx","toArray","./util","7","toVLQSigned","aValue","fromVLQSigned","isNegative","shifted","base64","VLQ_BASE_SHIFT","VLQ_BASE","VLQ_BASE_MASK","VLQ_CONTINUATION_BIT","encode","digit","encoded","vlq","decode","aIndex","aOutParam","continuation","strLen","rest","./base64","intToCharMap","number","bigA","bigZ","littleA","littleZ","zero","nine","plus","slash","littleOffset","numberOffset","recursiveSearch","aLow","aHigh","aNeedle","aHaystack","aCompare","aBias","mid","cmp","LEAST_UPPER_BOUND","GREATEST_LOWER_BOUND","search","swap","ary","y","temp","randomIntInRange","low","high","round","doQuickSort","comparator","pivotIndex","pivot","q","quickSort","11","SourceMapConsumer","aSourceMap","sourceMap","sections","IndexedSourceMapConsumer","BasicSourceMapConsumer","getArg","sources","names","sourceRoot","sourcesContent","mappings","file","_version","normalize","isAbsolute","relative","_names","_sources","_mappings","Mapping","generatedLine","generatedColumn","originalLine","originalColumn","lastOffset","column","_sections","s","url","offset","offsetLine","offsetColumn","generatedOffset","consumer","binarySearch","base64VLQ","fromSourceMap","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","aSourceRoot","GENERATED_ORDER","ORIGINAL_ORDER","eachMapping","aCallback","aContext","aOrder","order","_generatedMappings","_originalMappings","mapping","allGeneratedPositionsFor","aArgs","needle","_findMapping","compareByOriginalPositions","lastColumn","smc","_sourceRoot","_generateSourcesContent","_file","generatedMappings","destGeneratedMappings","destOriginalMappings","srcMapping","destMapping","segment","end","previousGeneratedColumn","previousOriginalLine","previousOriginalColumn","previousSource","previousName","cachedSegments","originalMappings","compareByGeneratedPositionsDeflated","aMappings","aLineName","aColumnName","aComparator","computeColumnSpans","nextMapping","lastGeneratedColumn","Infinity","originalPositionFor","hasContentsOfAllSources","some","sc","sourceContentFor","aSource","nullOnMissing","urlParse","fileUriAbsPath","scheme","path","generatedPositionFor","sectionIndex","section","bias","every","content","generatedPosition","ret","sectionMappings","adjustedMapping","./array-set","./base64-vlq","./binary-search","./quick-sort","aName","aDefaultValue","aUrl","urlRegexp","auth","host","port","urlGenerate","aParsedUrl","aPath","part","up","splice","aRoot","aPathUrl","aRootUrl","dataUrlRegexp","joined","level","substr","identity","isProtoString","fromSetString","mappingA","mappingB","onlyCompareOriginal","onlyCompareGenerated","strcmp","aStr1","aStr2","compareByGeneratedPositionsInflated","supportsNullProto","dup","14","StackGenerator","backtrace","opts","maxStackSize","curr","callee","test","RegExp","$1","caller","15","16","StackTraceGPS","SourceMap","_xdr","req","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","_atob","b64str","atob","_parseJson","string","_findFunctionName","syntaxes","maxLines","min","commentPos","m","_ensureSupportedEnvironment","_ensureStackFrameIsLegit","_findSourceMappingURL","lastSourceMappingUrl","matchSourceMappingUrl","sourceMappingUrlRegExp","_extractLocationInfoFromSourceMapSource","sourceMapConsumer","sourceCache","loc","mappedSource","sourceMapConsumerCache","ajax","_get","isDataUrl","offline","supportedEncodingRegexp","sourceMapStart","encodedSource","xhrPromise","method","bind","_getSourceMapConsumer","sourceMappingURL","defaultSourceRoot","sourceMapConsumerPromise","sourceMapSource","pinpoint","getMappedLocation","mappedStackFrame","resolveMappedStackFrame","findFunctionName","guessedFunctionName","source-map/lib/source-map-consumer","17","oThis","fToBind","NoOp","fBound","thisArg","T","O","A","kValue","mappedValue","res","val","18","_merge","first","second","target","prop","_isShapedLikeParsableError","err","_filtered","stackframes","_options","_generateError","fromError","generateArtificially","getSync","gps","sf","resolveOriginal","stackFrames","instrument","fn","errback","__stacktraceOriginalFn","instrumented","deinstrument","report","errorMsg","requestOptions","setRequestHeader","headers","header","reportPayload","error-stack-parser","stack-generator","stacktrace-gps"],"mappings":"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","file":"stacktrace-with-promises-and-json-polyfills.min.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^()]*)|(\\),.*$)/g, '');\n }\n var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(');\n\n // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n // case it has spaces in it, as the string is split on \\s+ later on\n var location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/);\n\n // remove the parenthesized location from the line, if it was matched\n sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n\n var tokens = sanitizedLine.split(/\\s+/).slice(1);\n // if a location was matched, pass it to extractLocation() otherwise pop the last token\n var locationParts = this.extractLocation(location ? location[1] : tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : undefined;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n }));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame({\n functionName: match[3] || undefined,\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n })\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return filtered.map(function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^(]+\\(([^)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n\n return new StackFrame({\n functionName: functionName,\n args: args,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n }\n };\n}));\n","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.StackTrace = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^()]*)|(\\),.*$)/g, '');\n }\n var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(');\n\n // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n // case it has spaces in it, as the string is split on \\s+ later on\n var location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/);\n\n // remove the parenthesized location from the line, if it was matched\n sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n\n var tokens = sanitizedLine.split(/\\s+/).slice(1);\n // if a location was matched, pass it to extractLocation() otherwise pop the last token\n var locationParts = this.extractLocation(location ? location[1] : tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : undefined;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n }));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame({\n functionName: match[3] || undefined,\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n })\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return filtered.map(function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^(]+\\(([^)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n\n return new StackFrame({\n functionName: functionName,\n args: args,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n }\n };\n}));\n\n},{\"stackframe\":2}],2:[function(require,module,exports){\n(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function() {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n }\n\n function _getter(p) {\n return function() {\n return this[p];\n };\n }\n\n var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n var numericProps = ['columnNumber', 'lineNumber'];\n var stringProps = ['fileName', 'functionName', 'source'];\n var arrayProps = ['args'];\n\n var props = booleanProps.concat(numericProps, stringProps, arrayProps);\n\n function StackFrame(obj) {\n if (!obj) return;\n for (var i = 0; i < props.length; i++) {\n if (obj[props[i]] !== undefined) {\n this['set' + _capitalize(props[i])](obj[props[i]]);\n }\n }\n }\n\n StackFrame.prototype = {\n getArgs: function() {\n return this.args;\n },\n setArgs: function(v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n getEvalOrigin: function() {\n return this.evalOrigin;\n },\n setEvalOrigin: function(v) {\n if (v instanceof StackFrame) {\n this.evalOrigin = v;\n } else if (v instanceof Object) {\n this.evalOrigin = new StackFrame(v);\n } else {\n throw new TypeError('Eval Origin must be an Object or StackFrame');\n }\n },\n\n toString: function() {\n var fileName = this.getFileName() || '';\n var lineNumber = this.getLineNumber() || '';\n var columnNumber = this.getColumnNumber() || '';\n var functionName = this.getFunctionName() || '';\n if (this.getIsEval()) {\n if (fileName) {\n return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return '[eval]:' + lineNumber + ':' + columnNumber;\n }\n if (functionName) {\n return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return fileName + ':' + lineNumber + ':' + columnNumber;\n }\n };\n\n StackFrame.fromString = function StackFrame$$fromString(str) {\n var argsStartIndex = str.indexOf('(');\n var argsEndIndex = str.lastIndexOf(')');\n\n var functionName = str.substring(0, argsStartIndex);\n var args = str.substring(argsStartIndex + 1, argsEndIndex).split(',');\n var locationString = str.substring(argsEndIndex + 1);\n\n if (locationString.indexOf('@') === 0) {\n var parts = /@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(locationString, '');\n var fileName = parts[1];\n var lineNumber = parts[2];\n var columnNumber = parts[3];\n }\n\n return new StackFrame({\n functionName: functionName,\n args: args || undefined,\n fileName: fileName,\n lineNumber: lineNumber || undefined,\n columnNumber: columnNumber || undefined\n });\n };\n\n for (var i = 0; i < booleanProps.length; i++) {\n StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) {\n return function(v) {\n this[p] = Boolean(v);\n };\n })(booleanProps[i]);\n }\n\n for (var j = 0; j < numericProps.length; j++) {\n StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) {\n return function(v) {\n if (!_isNumber(v)) {\n throw new TypeError(p + ' must be a Number');\n }\n this[p] = Number(v);\n };\n })(numericProps[j]);\n }\n\n for (var k = 0; k < stringProps.length; k++) {\n StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) {\n return function(v) {\n this[p] = String(v);\n };\n })(stringProps[k]);\n }\n\n return StackFrame;\n}));\n\n},{}],3:[function(require,module,exports){\n(function (process,global){\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version 3.3.1\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n return typeof x === 'function' || typeof x === 'object' && x !== null;\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\nvar _isArray = undefined;\nif (!Array.isArray) {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n} else {\n _isArray = Array.isArray;\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = undefined;\nvar customSchedulerFn = undefined;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n return function () {\n vertxNext(flush);\n };\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = undefined;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var _arguments = arguments;\n\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n if (_state) {\n (function () {\n var callback = _arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n })();\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n _resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(16);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nvar GET_THEN_ERROR = new ErrorObject();\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction getThen(promise) {\n try {\n return promise.then;\n } catch (error) {\n GET_THEN_ERROR.error = error;\n return GET_THEN_ERROR;\n }\n}\n\nfunction tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n _resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n _reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n _reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n _reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return _resolve(promise, value);\n }, function (reason) {\n return _reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$) {\n if (maybeThenable.constructor === promise.constructor && then$$ === then && maybeThenable.constructor.resolve === resolve) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$ === GET_THEN_ERROR) {\n _reject(promise, GET_THEN_ERROR.error);\n } else if (then$$ === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$)) {\n handleForeignThenable(promise, maybeThenable, then$$);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction _resolve(promise, value) {\n if (promise === value) {\n _reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n handleMaybeThenable(promise, value, getThen(value));\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction _reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = undefined,\n callback = undefined,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction ErrorObject() {\n this.error = null;\n}\n\nvar TRY_CATCH_ERROR = new ErrorObject();\n\nfunction tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch (e) {\n TRY_CATCH_ERROR.error = e;\n return TRY_CATCH_ERROR;\n }\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = undefined,\n error = undefined,\n succeeded = undefined,\n failed = undefined;\n\n if (hasCallback) {\n value = tryCatch(callback, detail);\n\n if (value === TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n _reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n _resolve(promise, value);\n } else if (failed) {\n _reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n _reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n _resolve(promise, value);\n }, function rejectPromise(reason) {\n _reject(promise, reason);\n });\n } catch (e) {\n _reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n _reject(this.promise, validationError());\n }\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n};\n\nEnumerator.prototype._enumerate = function () {\n var length = this.length;\n var _input = this._input;\n\n for (var i = 0; this._state === PENDING && i < length; i++) {\n this._eachEntry(_input[i], i);\n }\n};\n\nEnumerator.prototype._eachEntry = function (entry, i) {\n var c = this._instanceConstructor;\n var resolve$$ = c.resolve;\n\n if (resolve$$ === resolve) {\n var _then = getThen(entry);\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise) {\n var promise = new c(noop);\n handleMaybeThenable(promise, entry, _then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$) {\n return resolve$$(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$(entry), i);\n }\n};\n\nEnumerator.prototype._settledAt = function (state, i, value) {\n var promise = this.promise;\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n _reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n};\n\nEnumerator.prototype._willSettleAt = function (promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n};\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all(entries) {\n return new Enumerator(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n _reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n*/\nfunction Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n}\n\nPromise.all = all;\nPromise.race = race;\nPromise.resolve = resolve;\nPromise.reject = reject;\nPromise._setScheduler = setScheduler;\nPromise._setAsap = setAsap;\nPromise._asap = asap;\n\nPromise.prototype = {\n constructor: Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n \n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n \n Chaining\n --------\n \n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n \n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n \n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n \n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n \n Assimilation\n ------------\n \n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n \n If the assimliated promise rejects, then the downstream promise will also reject.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n \n Simple Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let result;\n \n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n \n Advanced Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let author, books;\n \n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n \n function foundBooks(books) {\n \n }\n \n function failure(reason) {\n \n }\n \n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n \n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: then,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n \n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n \n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n \n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n \n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function _catch(onRejection) {\n return this.then(null, onRejection);\n }\n};\n\nfunction polyfill() {\n var local = undefined;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise;\n}\n\npolyfill();\n// Strange compat..\nPromise.polyfill = polyfill;\nPromise.Promise = Promise;\n\nreturn Promise;\n\n})));\n\n}).call(this,require('_process'),typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{\"_process\":5}],4:[function(require,module,exports){\n(function (global){\n/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n\n},{}],5:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],6:[function(require,module,exports){\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = util.toSetString(aStr);\n var isDuplicate = has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n this._set[sStr] = idx;\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n\n},{\"./util\":12}],7:[function(require,module,exports){\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0\n ? ((-aValue) << 1) + 1\n : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative\n ? -shifted\n : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n\n var vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};\n\n},{\"./base64\":8}],8:[function(require,module,exports){\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return (charCode - bigA);\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return (charCode - littleA + littleOffset);\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return (charCode - zero + numberOffset);\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};\n\n},{}],9:[function(require,module,exports){\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n var cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n }\n else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n } else {\n return mid;\n }\n }\n else {\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n } else {\n return aLow < 0 ? -1 : aLow;\n }\n }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n\n var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n\n return index;\n};\n\n},{}],10:[function(require,module,exports){\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n * The array.\n * @param {Number} x\n * The index of the first item.\n * @param {Number} y\n * The index of the second item.\n */\nfunction swap(ary, x, y) {\n var temp = ary[x];\n ary[x] = ary[y];\n ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n * The lower bound on the range.\n * @param {Number} high\n * The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n * @param {Number} p\n * Start index of the array\n * @param {Number} r\n * End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n // If our lower bound is less than our upper bound, we (1) partition the\n // array into two pieces and (2) recurse on each half. If it is not, this is\n // the empty array and our base case.\n\n if (p < r) {\n // (1) Partitioning.\n //\n // The partitioning chooses a pivot between `p` and `r` and moves all\n // elements that are less than or equal to the pivot to the before it, and\n // all the elements that are greater than it after it. The effect is that\n // once partition is done, the pivot is in the exact place it will be when\n // the array is put in sorted order, and it will not need to be moved\n // again. This runs in O(n) time.\n\n // Always choose a random pivot so that an input array which is reverse\n // sorted does not cause O(n^2) running time.\n var pivotIndex = randomIntInRange(p, r);\n var i = p - 1;\n\n swap(ary, pivotIndex, r);\n var pivot = ary[r];\n\n // Immediately after `j` is incremented in this loop, the following hold\n // true:\n //\n // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n //\n // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n for (var j = p; j < r; j++) {\n if (comparator(ary[j], pivot) <= 0) {\n i += 1;\n swap(ary, i, j);\n }\n }\n\n swap(ary, i + 1, j);\n var q = i + 1;\n\n // (2) Recurse on each half.\n\n doQuickSort(ary, comparator, p, q - 1);\n doQuickSort(ary, comparator, q + 1, r);\n }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n\n},{}],11:[function(require,module,exports){\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n return sourceMap.sections != null\n ? new IndexedSourceMapConsumer(sourceMap)\n : new BasicSourceMapConsumer(sourceMap);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n// {\n// generatedLine: The line number in the generated code,\n// generatedColumn: The column number in the generated code,\n// source: The path to the original source file that generated this\n// chunk of code,\n// originalLine: The line number in the original source that\n// corresponds to this chunk of generated code,\n// originalColumn: The column number in the original source that\n// corresponds to this chunk of generated code,\n// name: The name of the original symbol which generated this chunk of\n// code.\n// }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n get: function () {\n if (!this.__generatedMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__generatedMappings;\n }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n get: function () {\n if (!this.__originalMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__originalMappings;\n }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n var c = aStr.charAt(index);\n return c === \";\" || c === \",\";\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n var context = aContext || null;\n var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n var mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n\n var sourceRoot = this.sourceRoot;\n mappings.map(function (mapping) {\n var source = mapping.source === null ? null : this._sources.at(mapping.source);\n if (source != null && sourceRoot != null) {\n source = util.join(sourceRoot, source);\n }\n return {\n source: source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: Optional. the column number in the original source.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n var line = util.getArg(aArgs, 'line');\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n var needle = {\n source: util.getArg(aArgs, 'source'),\n originalLine: line,\n originalColumn: util.getArg(aArgs, 'column', 0)\n };\n\n if (this.sourceRoot != null) {\n needle.source = util.relative(this.sourceRoot, needle.source);\n }\n if (!this._sources.has(needle.source)) {\n return [];\n }\n needle.source = this._sources.indexOf(needle.source);\n\n var mappings = [];\n\n var index = this._findMapping(needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (aArgs.column === undefined) {\n var originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n } else {\n var originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping &&\n mapping.originalLine === line &&\n mapping.originalColumn == originalColumn) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n }\n }\n\n return mappings;\n };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The only parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referrenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sources = util.getArg(sourceMap, 'sources');\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n var names = util.getArg(sourceMap, 'names', []);\n var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n var mappings = util.getArg(sourceMap, 'mappings');\n var file = util.getArg(sourceMap, 'file', null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n sources = sources\n .map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function (source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n ? util.relative(sourceRoot, source)\n : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n this._names = ArraySet.fromArray(names.map(String), true);\n this._sources = ArraySet.fromArray(sources, true);\n\n this.sourceRoot = sourceRoot;\n this.sourcesContent = sourcesContent;\n this._mappings = mappings;\n this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n function SourceMapConsumer_fromSourceMap(aSourceMap) {\n var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n smc.sourceRoot = aSourceMap._sourceRoot;\n smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n smc.sourceRoot);\n smc.file = aSourceMap._file;\n\n // Because we are modifying the entries (by converting string sources and\n // names to indices into the sources and names ArraySets), we have to make\n // a copy of the entry or else bad things happen. Shared mutable state\n // strikes again! See github issue #191.\n\n var generatedMappings = aSourceMap._mappings.toArray().slice();\n var destGeneratedMappings = smc.__generatedMappings = [];\n var destOriginalMappings = smc.__originalMappings = [];\n\n for (var i = 0, length = generatedMappings.length; i < length; i++) {\n var srcMapping = generatedMappings[i];\n var destMapping = new Mapping;\n destMapping.generatedLine = srcMapping.generatedLine;\n destMapping.generatedColumn = srcMapping.generatedColumn;\n\n if (srcMapping.source) {\n destMapping.source = sources.indexOf(srcMapping.source);\n destMapping.originalLine = srcMapping.originalLine;\n destMapping.originalColumn = srcMapping.originalColumn;\n\n if (srcMapping.name) {\n destMapping.name = names.indexOf(srcMapping.name);\n }\n\n destOriginalMappings.push(destMapping);\n }\n\n destGeneratedMappings.push(destMapping);\n }\n\n quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n return smc;\n };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n get: function () {\n return this._sources.toArray().map(function (s) {\n return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n }, this);\n }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n var generatedLine = 1;\n var previousGeneratedColumn = 0;\n var previousOriginalLine = 0;\n var previousOriginalColumn = 0;\n var previousSource = 0;\n var previousName = 0;\n var length = aStr.length;\n var index = 0;\n var cachedSegments = {};\n var temp = {};\n var originalMappings = [];\n var generatedMappings = [];\n var mapping, str, segment, end, value;\n\n while (index < length) {\n if (aStr.charAt(index) === ';') {\n generatedLine++;\n index++;\n previousGeneratedColumn = 0;\n }\n else if (aStr.charAt(index) === ',') {\n index++;\n }\n else {\n mapping = new Mapping();\n mapping.generatedLine = generatedLine;\n\n // Because each offset is encoded relative to the previous one,\n // many segments often have the same encoding. We can exploit this\n // fact by caching the parsed variable length fields of each segment,\n // allowing us to avoid a second parse if we encounter the same\n // segment again.\n for (end = index; end < length; end++) {\n if (this._charIsMappingSeparator(aStr, end)) {\n break;\n }\n }\n str = aStr.slice(index, end);\n\n segment = cachedSegments[str];\n if (segment) {\n index += str.length;\n } else {\n segment = [];\n while (index < end) {\n base64VLQ.decode(aStr, index, temp);\n value = temp.value;\n index = temp.rest;\n segment.push(value);\n }\n\n if (segment.length === 2) {\n throw new Error('Found a source, but no line and column');\n }\n\n if (segment.length === 3) {\n throw new Error('Found a source and line, but no column');\n }\n\n cachedSegments[str] = segment;\n }\n\n // Generated column.\n mapping.generatedColumn = previousGeneratedColumn + segment[0];\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (segment.length > 1) {\n // Original source.\n mapping.source = previousSource + segment[1];\n previousSource += segment[1];\n\n // Original line.\n mapping.originalLine = previousOriginalLine + segment[2];\n previousOriginalLine = mapping.originalLine;\n // Lines are stored 0-based\n mapping.originalLine += 1;\n\n // Original column.\n mapping.originalColumn = previousOriginalColumn + segment[3];\n previousOriginalColumn = mapping.originalColumn;\n\n if (segment.length > 4) {\n // Original name.\n mapping.name = previousName + segment[4];\n previousName += segment[4];\n }\n }\n\n generatedMappings.push(mapping);\n if (typeof mapping.originalLine === 'number') {\n originalMappings.push(mapping);\n }\n }\n }\n\n quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n this.__generatedMappings = generatedMappings;\n\n quickSort(originalMappings, util.compareByOriginalPositions);\n this.__originalMappings = originalMappings;\n };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError('Line must be greater than or equal to 1, got '\n + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError('Column must be greater than or equal to 0, got '\n + aNeedle[aColumnName]);\n }\n\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n function SourceMapConsumer_computeColumnSpans() {\n for (var index = 0; index < this._generatedMappings.length; ++index) {\n var mapping = this._generatedMappings[index];\n\n // Mappings do not contain a field for the last generated columnt. We\n // can come up with an optimistic estimate, however, by assuming that\n // mappings are contiguous (i.e. given two consecutive mappings, the\n // first mapping ends where the second one starts).\n if (index + 1 < this._generatedMappings.length) {\n var nextMapping = this._generatedMappings[index + 1];\n\n if (mapping.generatedLine === nextMapping.generatedLine) {\n mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n continue;\n }\n }\n\n // The last mapping for each line spans the entire line.\n mapping.lastGeneratedColumn = Infinity;\n }\n };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n function SourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._generatedMappings,\n \"generatedLine\",\n \"generatedColumn\",\n util.compareByGeneratedPositionsDeflated,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._generatedMappings[index];\n\n if (mapping.generatedLine === needle.generatedLine) {\n var source = util.getArg(mapping, 'source', null);\n if (source !== null) {\n source = this._sources.at(source);\n if (this.sourceRoot != null) {\n source = util.join(this.sourceRoot, source);\n }\n }\n var name = util.getArg(mapping, 'name', null);\n if (name !== null) {\n name = this._names.at(name);\n }\n return {\n source: source,\n line: util.getArg(mapping, 'originalLine', null),\n column: util.getArg(mapping, 'originalColumn', null),\n name: name\n };\n }\n }\n\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n function BasicSourceMapConsumer_hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() &&\n !this.sourcesContent.some(function (sc) { return sc == null; });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n\n if (this.sourceRoot != null) {\n aSource = util.relative(this.sourceRoot, aSource);\n }\n\n if (this._sources.has(aSource)) {\n return this.sourcesContent[this._sources.indexOf(aSource)];\n }\n\n var url;\n if (this.sourceRoot != null\n && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\"\n && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n }\n\n if ((!url.path || url.path == \"/\")\n && this._sources.has(\"/\" + aSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n function SourceMapConsumer_generatedPositionFor(aArgs) {\n var source = util.getArg(aArgs, 'source');\n if (this.sourceRoot != null) {\n source = util.relative(this.sourceRoot, source);\n }\n if (!this._sources.has(source)) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n source = this._sources.indexOf(source);\n\n var needle = {\n source: source,\n originalLine: util.getArg(aArgs, 'line'),\n originalColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (mapping.source === needle.source) {\n return {\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n };\n }\n }\n\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The only parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sections = util.getArg(sourceMap, 'sections');\n\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n this._sources = new ArraySet();\n this._names = new ArraySet();\n\n var lastOffset = {\n line: -1,\n column: 0\n };\n this._sections = sections.map(function (s) {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error('Support for url field in sections not implemented.');\n }\n var offset = util.getArg(s, 'offset');\n var offsetLine = util.getArg(offset, 'line');\n var offsetColumn = util.getArg(offset, 'column');\n\n if (offsetLine < lastOffset.line ||\n (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n throw new Error('Section offsets must be ordered and non-overlapping.');\n }\n lastOffset = offset;\n\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n }\n });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n get: function () {\n var sources = [];\n for (var i = 0; i < this._sections.length; i++) {\n for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n var sectionIndex = binarySearch.search(needle, this._sections,\n function(needle, section) {\n var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n\n return (needle.generatedColumn -\n section.generatedOffset.generatedColumn);\n });\n var section = this._sections[sectionIndex];\n\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n return section.consumer.originalPositionFor({\n line: needle.generatedLine -\n (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn -\n (section.generatedOffset.generatedLine === needle.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n bias: aArgs.bias\n });\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n return this._sections.every(function (s) {\n return s.consumer.hasContentsOfAllSources();\n });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n var content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n continue;\n }\n var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n var ret = {\n line: generatedPosition.line +\n (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column +\n (section.generatedOffset.generatedLine === generatedPosition.line\n ? section.generatedOffset.generatedColumn - 1\n : 0)\n };\n return ret;\n }\n }\n\n return {\n line: null,\n column: null\n };\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n this.__generatedMappings = [];\n this.__originalMappings = [];\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var sectionMappings = section.consumer._generatedMappings;\n for (var j = 0; j < sectionMappings.length; j++) {\n var mapping = sectionMappings[j];\n\n var source = section.consumer._sources.at(mapping.source);\n if (section.consumer.sourceRoot !== null) {\n source = util.join(section.consumer.sourceRoot, source);\n }\n this._sources.add(source);\n source = this._sources.indexOf(source);\n\n var name = section.consumer._names.at(mapping.name);\n this._names.add(name);\n name = this._names.indexOf(name);\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n var adjustedMapping = {\n source: source,\n generatedLine: mapping.generatedLine +\n (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn +\n (section.generatedOffset.generatedLine === mapping.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: name\n };\n\n this.__generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === 'number') {\n this.__originalMappings.push(adjustedMapping);\n }\n }\n }\n\n quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n quickSort(this.__originalMappings, util.compareByOriginalPositions);\n };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n},{\"./array-set\":6,\"./base64-vlq\":7,\"./binary-search\":9,\"./quick-sort\":10,\"./util\":12}],12:[function(require,module,exports){\n/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n\n var parts = path.split(/\\/+/);\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n\n var joined = aPath.charAt(0) === '/'\n ? aPath\n : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n var length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return mappingA.name - mappingB.name;\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return mappingA.name - mappingB.name;\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n},{}],13:[function(require,module,exports){\narguments[4][2][0].apply(exports,arguments)\n},{\"dup\":2}],14:[function(require,module,exports){\n(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function(StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize && curr['arguments']) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame({functionName: RegExp.$1 || undefined, args: args}));\n } else {\n stack.push(new StackFrame({args: args}));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n\n},{\"stackframe\":13}],15:[function(require,module,exports){\narguments[4][2][0].apply(exports,arguments)\n},{\"dup\":2}],16:[function(require,module,exports){\n(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace-gps', ['source-map', 'stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('source-map/lib/source-map-consumer'), require('stackframe'));\n } else {\n root.StackTraceGPS = factory(root.SourceMap || root.sourceMap, root.StackFrame);\n }\n}(this, function(SourceMap, StackFrame) {\n 'use strict';\n\n /**\n * Make a X-Domain request to url and callback.\n *\n * @param {String} url\n * @returns {Promise} with response text if fulfilled\n */\n function _xdr(url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.open('get', url);\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if ((req.status >= 200 && req.status < 300) ||\n (url.substr(0, 7) === 'file://' && req.responseText)) {\n resolve(req.responseText);\n } else {\n reject(new Error('HTTP status: ' + req.status + ' retrieving ' + url));\n }\n }\n };\n req.send();\n });\n\n }\n\n /**\n * Convert a Base64-encoded string into its original representation.\n * Used for inline sourcemaps.\n *\n * @param {String} b64str Base-64 encoded string\n * @returns {String} original representation of the base64-encoded string.\n */\n function _atob(b64str) {\n if (typeof window !== 'undefined' && window.atob) {\n return window.atob(b64str);\n } else {\n throw new Error('You must supply a polyfill for window.atob in this environment');\n }\n }\n\n function _parseJson(string) {\n if (typeof JSON !== 'undefined' && JSON.parse) {\n return JSON.parse(string);\n } else {\n throw new Error('You must supply a polyfill for JSON.parse in this environment');\n }\n }\n\n function _findFunctionName(source, lineNumber/*, columnNumber*/) {\n var syntaxes = [\n // {name} = function ({args}) TODO args capture\n /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,\n // function {name}({args}) m[1]=name m[2]=args\n /function\\s+([^('\"`]*?)\\s*\\(([^)]*)\\)/,\n // {name} = eval()\n /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,\n // fn_name() {\n /\\b(?!(?:if|for|switch|while|with|catch)\\b)(?:(?:static)\\s+)?(\\S+)\\s*\\(.*?\\)\\s*\\{/,\n // {name} = () => {\n /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*\\(.*?\\)\\s*=>/\n ];\n var lines = source.split('\\n');\n\n // Walk backwards in the source lines until we find the line which matches one of the patterns above\n var code = '';\n var maxLines = Math.min(lineNumber, 20);\n for (var i = 0; i < maxLines; ++i) {\n // lineNo is 1-based, source[] is 0-based\n var line = lines[lineNumber - i - 1];\n var commentPos = line.indexOf('//');\n if (commentPos >= 0) {\n line = line.substr(0, commentPos);\n }\n\n if (line) {\n code = line + code;\n var len = syntaxes.length;\n for (var index = 0; index < len; index++) {\n var m = syntaxes[index].exec(code);\n if (m && m[1]) {\n return m[1];\n }\n }\n }\n }\n return undefined;\n }\n\n function _ensureSupportedEnvironment() {\n if (typeof Object.defineProperty !== 'function' || typeof Object.create !== 'function') {\n throw new Error('Unable to consume source maps in older browsers');\n }\n }\n\n function _ensureStackFrameIsLegit(stackframe) {\n if (typeof stackframe !== 'object') {\n throw new TypeError('Given StackFrame is not an object');\n } else if (typeof stackframe.fileName !== 'string') {\n throw new TypeError('Given file name is not a String');\n } else if (typeof stackframe.lineNumber !== 'number' ||\n stackframe.lineNumber % 1 !== 0 ||\n stackframe.lineNumber < 1) {\n throw new TypeError('Given line number must be a positive integer');\n } else if (typeof stackframe.columnNumber !== 'number' ||\n stackframe.columnNumber % 1 !== 0 ||\n stackframe.columnNumber < 0) {\n throw new TypeError('Given column number must be a non-negative integer');\n }\n return true;\n }\n\n function _findSourceMappingURL(source) {\n var sourceMappingUrlRegExp = /\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/mg;\n var lastSourceMappingUrl;\n var matchSourceMappingUrl;\n // eslint-disable-next-line no-cond-assign\n while (matchSourceMappingUrl = sourceMappingUrlRegExp.exec(source)) {\n lastSourceMappingUrl = matchSourceMappingUrl[1];\n }\n if (lastSourceMappingUrl) {\n return lastSourceMappingUrl;\n } else {\n throw new Error('sourceMappingURL not found');\n }\n }\n\n function _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) {\n return new Promise(function(resolve, reject) {\n var loc = sourceMapConsumer.originalPositionFor({\n line: stackframe.lineNumber,\n column: stackframe.columnNumber\n });\n\n if (loc.source) {\n // cache mapped sources\n var mappedSource = sourceMapConsumer.sourceContentFor(loc.source);\n if (mappedSource) {\n sourceCache[loc.source] = mappedSource;\n }\n\n resolve(\n // given stackframe and source location, update stackframe\n new StackFrame({\n functionName: loc.name || stackframe.functionName,\n args: stackframe.args,\n fileName: loc.source,\n lineNumber: loc.line,\n columnNumber: loc.column\n }));\n } else {\n reject(new Error('Could not get original source for given stackframe and source map'));\n }\n });\n }\n\n /**\n * @constructor\n * @param {Object} opts\n * opts.sourceCache = {url: \"Source String\"} => preload source cache\n * opts.sourceMapConsumerCache = {/path/file.js.map: SourceMapConsumer}\n * opts.offline = True to prevent network requests.\n * Best effort without sources or source maps.\n * opts.ajax = Promise returning function to make X-Domain requests\n */\n return function StackTraceGPS(opts) {\n if (!(this instanceof StackTraceGPS)) {\n return new StackTraceGPS(opts);\n }\n opts = opts || {};\n\n this.sourceCache = opts.sourceCache || {};\n this.sourceMapConsumerCache = opts.sourceMapConsumerCache || {};\n\n this.ajax = opts.ajax || _xdr;\n\n this._atob = opts.atob || _atob;\n\n this._get = function _get(location) {\n return new Promise(function(resolve, reject) {\n var isDataUrl = location.substr(0, 5) === 'data:';\n if (this.sourceCache[location]) {\n resolve(this.sourceCache[location]);\n } else if (opts.offline && !isDataUrl) {\n reject(new Error('Cannot make network requests in offline mode'));\n } else {\n if (isDataUrl) {\n // data URLs can have parameters.\n // see http://tools.ietf.org/html/rfc2397\n var supportedEncodingRegexp =\n /^data:application\\/json;([\\w=:\"-]+;)*base64,/;\n var match = location.match(supportedEncodingRegexp);\n if (match) {\n var sourceMapStart = match[0].length;\n var encodedSource = location.substr(sourceMapStart);\n var source = this._atob(encodedSource);\n this.sourceCache[location] = source;\n resolve(source);\n } else {\n reject(new Error('The encoding of the inline sourcemap is not supported'));\n }\n } else {\n var xhrPromise = this.ajax(location, {method: 'get'});\n // Cache the Promise to prevent duplicate in-flight requests\n this.sourceCache[location] = xhrPromise;\n xhrPromise.then(resolve, reject);\n }\n }\n }.bind(this));\n };\n\n /**\n * Creating SourceMapConsumers is expensive, so this wraps the creation of a\n * SourceMapConsumer in a per-instance cache.\n *\n * @param {String} sourceMappingURL = URL to fetch source map from\n * @param {String} defaultSourceRoot = Default source root for source map if undefined\n * @returns {Promise} that resolves a SourceMapConsumer\n */\n this._getSourceMapConsumer = function _getSourceMapConsumer(sourceMappingURL, defaultSourceRoot) {\n return new Promise(function(resolve) {\n if (this.sourceMapConsumerCache[sourceMappingURL]) {\n resolve(this.sourceMapConsumerCache[sourceMappingURL]);\n } else {\n var sourceMapConsumerPromise = new Promise(function(resolve, reject) {\n return this._get(sourceMappingURL).then(function(sourceMapSource) {\n if (typeof sourceMapSource === 'string') {\n sourceMapSource = _parseJson(sourceMapSource.replace(/^\\)\\]\\}'/, ''));\n }\n if (typeof sourceMapSource.sourceRoot === 'undefined') {\n sourceMapSource.sourceRoot = defaultSourceRoot;\n }\n\n resolve(new SourceMap.SourceMapConsumer(sourceMapSource));\n }, reject);\n }.bind(this));\n this.sourceMapConsumerCache[sourceMappingURL] = sourceMapConsumerPromise;\n resolve(sourceMapConsumerPromise);\n }\n }.bind(this));\n };\n\n /**\n * Given a StackFrame, enhance function name and use source maps for a\n * better StackFrame.\n *\n * @param {StackFrame} stackframe object\n * @returns {Promise} that resolves with with source-mapped StackFrame\n */\n this.pinpoint = function StackTraceGPS$$pinpoint(stackframe) {\n return new Promise(function(resolve, reject) {\n this.getMappedLocation(stackframe).then(function(mappedStackFrame) {\n function resolveMappedStackFrame() {\n resolve(mappedStackFrame);\n }\n\n this.findFunctionName(mappedStackFrame)\n .then(resolve, resolveMappedStackFrame)\n // eslint-disable-next-line no-unexpected-multiline\n ['catch'](resolveMappedStackFrame);\n }.bind(this), reject);\n }.bind(this));\n };\n\n /**\n * Given a StackFrame, guess function name from location information.\n *\n * @param {StackFrame} stackframe\n * @returns {Promise} that resolves with enhanced StackFrame.\n */\n this.findFunctionName = function StackTraceGPS$$findFunctionName(stackframe) {\n return new Promise(function(resolve, reject) {\n _ensureStackFrameIsLegit(stackframe);\n this._get(stackframe.fileName).then(function getSourceCallback(source) {\n var lineNumber = stackframe.lineNumber;\n var columnNumber = stackframe.columnNumber;\n var guessedFunctionName = _findFunctionName(source, lineNumber, columnNumber);\n // Only replace functionName if we found something\n if (guessedFunctionName) {\n resolve(new StackFrame({\n functionName: guessedFunctionName,\n args: stackframe.args,\n fileName: stackframe.fileName,\n lineNumber: lineNumber,\n columnNumber: columnNumber\n }));\n } else {\n resolve(stackframe);\n }\n }, reject)['catch'](reject);\n }.bind(this));\n };\n\n /**\n * Given a StackFrame, seek source-mapped location and return new enhanced StackFrame.\n *\n * @param {StackFrame} stackframe\n * @returns {Promise} that resolves with enhanced StackFrame.\n */\n this.getMappedLocation = function StackTraceGPS$$getMappedLocation(stackframe) {\n return new Promise(function(resolve, reject) {\n _ensureSupportedEnvironment();\n _ensureStackFrameIsLegit(stackframe);\n\n var sourceCache = this.sourceCache;\n var fileName = stackframe.fileName;\n this._get(fileName).then(function(source) {\n var sourceMappingURL = _findSourceMappingURL(source);\n var isDataUrl = sourceMappingURL.substr(0, 5) === 'data:';\n var defaultSourceRoot = fileName.substring(0, fileName.lastIndexOf('/') + 1);\n\n if (sourceMappingURL[0] !== '/' && !isDataUrl && !(/^https?:\\/\\/|^\\/\\//i).test(sourceMappingURL)) {\n sourceMappingURL = defaultSourceRoot + sourceMappingURL;\n }\n\n return this._getSourceMapConsumer(sourceMappingURL, defaultSourceRoot)\n .then(function(sourceMapConsumer) {\n return _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache)\n .then(resolve)['catch'](function() {\n resolve(stackframe);\n });\n });\n }.bind(this), reject)['catch'](reject);\n }.bind(this));\n };\n };\n}));\n\n},{\"source-map/lib/source-map-consumer\":11,\"stackframe\":15}],17:[function(require,module,exports){\n// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function(oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function() {\n };\n var fBound = function() {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue;\n var mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T;\n var k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n\n},{}],18:[function(require,module,exports){\n(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n var _generateError = function StackTrace$$GenerateError() {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n return err;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n function _filtered(stackframes, filter) {\n if (typeof filter === 'function') {\n return stackframes.filter(filter);\n }\n return stackframes;\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n var err = _generateError();\n return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts);\n },\n\n /**\n * Get a backtrace from invocation point.\n * IMPORTANT: Does not handle source maps or guess function names!\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n getSync: function StackTrace$$getSync(opts) {\n opts = _merge(_options, opts);\n var err = _generateError();\n var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts);\n return _filtered(stack, opts.filter);\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter);\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n * @param {Object} requestOptions\n */\n report: function StackTrace$$report(stackframes, url, errorMsg, requestOptions) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n\n // Set request headers\n req.setRequestHeader('Content-Type', 'application/json');\n if (requestOptions && typeof requestOptions.headers === 'object') {\n var headers = requestOptions.headers;\n for (var header in headers) {\n if (Object.prototype.hasOwnProperty.call(headers, header)) {\n req.setRequestHeader(header, headers[header]);\n }\n }\n }\n\n var reportPayload = {stack: stackframes};\n if (errorMsg !== undefined && errorMsg !== null) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n\n},{\"error-stack-parser\":1,\"stack-generator\":14,\"stacktrace-gps\":16}]},{},[3,4,17,18])(18)\n});\n\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function() {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n }\n\n function _getter(p) {\n return function() {\n return this[p];\n };\n }\n\n var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n var numericProps = ['columnNumber', 'lineNumber'];\n var stringProps = ['fileName', 'functionName', 'source'];\n var arrayProps = ['args'];\n\n var props = booleanProps.concat(numericProps, stringProps, arrayProps);\n\n function StackFrame(obj) {\n if (!obj) return;\n for (var i = 0; i < props.length; i++) {\n if (obj[props[i]] !== undefined) {\n this['set' + _capitalize(props[i])](obj[props[i]]);\n }\n }\n }\n\n StackFrame.prototype = {\n getArgs: function() {\n return this.args;\n },\n setArgs: function(v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n getEvalOrigin: function() {\n return this.evalOrigin;\n },\n setEvalOrigin: function(v) {\n if (v instanceof StackFrame) {\n this.evalOrigin = v;\n } else if (v instanceof Object) {\n this.evalOrigin = new StackFrame(v);\n } else {\n throw new TypeError('Eval Origin must be an Object or StackFrame');\n }\n },\n\n toString: function() {\n var fileName = this.getFileName() || '';\n var lineNumber = this.getLineNumber() || '';\n var columnNumber = this.getColumnNumber() || '';\n var functionName = this.getFunctionName() || '';\n if (this.getIsEval()) {\n if (fileName) {\n return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return '[eval]:' + lineNumber + ':' + columnNumber;\n }\n if (functionName) {\n return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return fileName + ':' + lineNumber + ':' + columnNumber;\n }\n };\n\n StackFrame.fromString = function StackFrame$$fromString(str) {\n var argsStartIndex = str.indexOf('(');\n var argsEndIndex = str.lastIndexOf(')');\n\n var functionName = str.substring(0, argsStartIndex);\n var args = str.substring(argsStartIndex + 1, argsEndIndex).split(',');\n var locationString = str.substring(argsEndIndex + 1);\n\n if (locationString.indexOf('@') === 0) {\n var parts = /@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(locationString, '');\n var fileName = parts[1];\n var lineNumber = parts[2];\n var columnNumber = parts[3];\n }\n\n return new StackFrame({\n functionName: functionName,\n args: args || undefined,\n fileName: fileName,\n lineNumber: lineNumber || undefined,\n columnNumber: columnNumber || undefined\n });\n };\n\n for (var i = 0; i < booleanProps.length; i++) {\n StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) {\n return function(v) {\n this[p] = Boolean(v);\n };\n })(booleanProps[i]);\n }\n\n for (var j = 0; j < numericProps.length; j++) {\n StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) {\n return function(v) {\n if (!_isNumber(v)) {\n throw new TypeError(p + ' must be a Number');\n }\n this[p] = Number(v);\n };\n })(numericProps[j]);\n }\n\n for (var k = 0; k < stringProps.length; k++) {\n StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) {\n return function(v) {\n this[p] = String(v);\n };\n })(stringProps[k]);\n }\n\n return StackFrame;\n}));\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version 3.3.1\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n return typeof x === 'function' || typeof x === 'object' && x !== null;\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\nvar _isArray = undefined;\nif (!Array.isArray) {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n} else {\n _isArray = Array.isArray;\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = undefined;\nvar customSchedulerFn = undefined;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && ({}).toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n return function () {\n vertxNext(flush);\n };\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var r = require;\n var vertx = r('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = undefined;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var _arguments = arguments;\n\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n if (_state) {\n (function () {\n var callback = _arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n })();\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n _resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(16);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nvar GET_THEN_ERROR = new ErrorObject();\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction getThen(promise) {\n try {\n return promise.then;\n } catch (error) {\n GET_THEN_ERROR.error = error;\n return GET_THEN_ERROR;\n }\n}\n\nfunction tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n _resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n _reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n _reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n _reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return _resolve(promise, value);\n }, function (reason) {\n return _reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$) {\n if (maybeThenable.constructor === promise.constructor && then$$ === then && maybeThenable.constructor.resolve === resolve) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$ === GET_THEN_ERROR) {\n _reject(promise, GET_THEN_ERROR.error);\n } else if (then$$ === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$)) {\n handleForeignThenable(promise, maybeThenable, then$$);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction _resolve(promise, value) {\n if (promise === value) {\n _reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n handleMaybeThenable(promise, value, getThen(value));\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction _reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = undefined,\n callback = undefined,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction ErrorObject() {\n this.error = null;\n}\n\nvar TRY_CATCH_ERROR = new ErrorObject();\n\nfunction tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch (e) {\n TRY_CATCH_ERROR.error = e;\n return TRY_CATCH_ERROR;\n }\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = undefined,\n error = undefined,\n succeeded = undefined,\n failed = undefined;\n\n if (hasCallback) {\n value = tryCatch(callback, detail);\n\n if (value === TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n _reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n _resolve(promise, value);\n } else if (failed) {\n _reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n _reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n _resolve(promise, value);\n }, function rejectPromise(reason) {\n _reject(promise, reason);\n });\n } catch (e) {\n _reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this._input = input;\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate();\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n _reject(this.promise, validationError());\n }\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n};\n\nEnumerator.prototype._enumerate = function () {\n var length = this.length;\n var _input = this._input;\n\n for (var i = 0; this._state === PENDING && i < length; i++) {\n this._eachEntry(_input[i], i);\n }\n};\n\nEnumerator.prototype._eachEntry = function (entry, i) {\n var c = this._instanceConstructor;\n var resolve$$ = c.resolve;\n\n if (resolve$$ === resolve) {\n var _then = getThen(entry);\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise) {\n var promise = new c(noop);\n handleMaybeThenable(promise, entry, _then);\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$) {\n return resolve$$(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$(entry), i);\n }\n};\n\nEnumerator.prototype._settledAt = function (state, i, value) {\n var promise = this.promise;\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n _reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n};\n\nEnumerator.prototype._willSettleAt = function (promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n};\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all(entries) {\n return new Enumerator(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n _reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n*/\nfunction Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n}\n\nPromise.all = all;\nPromise.race = race;\nPromise.resolve = resolve;\nPromise.reject = reject;\nPromise._setScheduler = setScheduler;\nPromise._setAsap = setAsap;\nPromise._asap = asap;\n\nPromise.prototype = {\n constructor: Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n \n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n \n Chaining\n --------\n \n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n \n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n \n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n \n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n \n Assimilation\n ------------\n \n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n \n If the assimliated promise rejects, then the downstream promise will also reject.\n \n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n \n Simple Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let result;\n \n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n \n Advanced Example\n --------------\n \n Synchronous Example\n \n ```javascript\n let author, books;\n \n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n \n Errback Example\n \n ```js\n \n function foundBooks(books) {\n \n }\n \n function failure(reason) {\n \n }\n \n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n \n Promise Example;\n \n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n \n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: then,\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n \n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n \n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n \n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n \n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function _catch(onRejection) {\n return this.then(null, onRejection);\n }\n};\n\nfunction polyfill() {\n var local = undefined;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise;\n}\n\npolyfill();\n// Strange compat..\nPromise.polyfill = polyfill;\nPromise.Promise = Promise;\n\nreturn Promise;\n\n})));\n//# sourceMappingURL=es6-promise.map","/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */\n;(function () {\n // Detect the `define` function exposed by asynchronous module loaders. The\n // strict `define` check is necessary for compatibility with `r.js`.\n var isLoader = typeof define === \"function\" && define.amd;\n\n // A set of types used to distinguish objects from primitives.\n var objectTypes = {\n \"function\": true,\n \"object\": true\n };\n\n // Detect the `exports` object exposed by CommonJS implementations.\n var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;\n\n // Use the `global` object exposed by Node (including Browserify via\n // `insert-module-globals`), Narwhal, and Ringo as the default context,\n // and the `window` object in browsers. Rhino exports a `global` function\n // instead.\n var root = objectTypes[typeof window] && window || this,\n freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == \"object\" && global;\n\n if (freeGlobal && (freeGlobal[\"global\"] === freeGlobal || freeGlobal[\"window\"] === freeGlobal || freeGlobal[\"self\"] === freeGlobal)) {\n root = freeGlobal;\n }\n\n // Public: Initializes JSON 3 using the given `context` object, attaching the\n // `stringify` and `parse` functions to the specified `exports` object.\n function runInContext(context, exports) {\n context || (context = root[\"Object\"]());\n exports || (exports = root[\"Object\"]());\n\n // Native constructor aliases.\n var Number = context[\"Number\"] || root[\"Number\"],\n String = context[\"String\"] || root[\"String\"],\n Object = context[\"Object\"] || root[\"Object\"],\n Date = context[\"Date\"] || root[\"Date\"],\n SyntaxError = context[\"SyntaxError\"] || root[\"SyntaxError\"],\n TypeError = context[\"TypeError\"] || root[\"TypeError\"],\n Math = context[\"Math\"] || root[\"Math\"],\n nativeJSON = context[\"JSON\"] || root[\"JSON\"];\n\n // Delegate to the native `stringify` and `parse` implementations.\n if (typeof nativeJSON == \"object\" && nativeJSON) {\n exports.stringify = nativeJSON.stringify;\n exports.parse = nativeJSON.parse;\n }\n\n // Convenience aliases.\n var objectProto = Object.prototype,\n getClass = objectProto.toString,\n isProperty, forEach, undef;\n\n // Test the `Date#getUTC*` methods. Based on work by @Yaffle.\n var isExtended = new Date(-3509827334573292);\n try {\n // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical\n // results for certain dates in Opera >= 10.53.\n isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&\n // Safari < 2.0.2 stores the internal millisecond time value correctly,\n // but clips the values returned by the date methods to the range of\n // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).\n isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;\n } catch (exception) {}\n\n // Internal: Determines whether the native `JSON.stringify` and `parse`\n // implementations are spec-compliant. Based on work by Ken Snyder.\n function has(name) {\n if (has[name] !== undef) {\n // Return cached feature test result.\n return has[name];\n }\n var isSupported;\n if (name == \"bug-string-char-index\") {\n // IE <= 7 doesn't support accessing string characters using square\n // bracket notation. IE 8 only supports this for primitives.\n isSupported = \"a\"[0] != \"a\";\n } else if (name == \"json\") {\n // Indicates whether both `JSON.stringify` and `JSON.parse` are\n // supported.\n isSupported = has(\"json-stringify\") && has(\"json-parse\");\n } else {\n var value, serialized = '{\"a\":[1,true,false,null,\"\\\\u0000\\\\b\\\\n\\\\f\\\\r\\\\t\"]}';\n // Test `JSON.stringify`.\n if (name == \"json-stringify\") {\n var stringify = exports.stringify, stringifySupported = typeof stringify == \"function\" && isExtended;\n if (stringifySupported) {\n // A test function object with a custom `toJSON` method.\n (value = function () {\n return 1;\n }).toJSON = value;\n try {\n stringifySupported =\n // Firefox 3.1b1 and b2 serialize string, number, and boolean\n // primitives as object literals.\n stringify(0) === \"0\" &&\n // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object\n // literals.\n stringify(new Number()) === \"0\" &&\n stringify(new String()) == '\"\"' &&\n // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or\n // does not define a canonical JSON representation (this applies to\n // objects with `toJSON` properties as well, *unless* they are nested\n // within an object or array).\n stringify(getClass) === undef &&\n // IE 8 serializes `undefined` as `\"undefined\"`. Safari <= 5.1.7 and\n // FF 3.1b3 pass this test.\n stringify(undef) === undef &&\n // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,\n // respectively, if the value is omitted entirely.\n stringify() === undef &&\n // FF 3.1b1, 2 throw an error if the given value is not a number,\n // string, array, object, Boolean, or `null` literal. This applies to\n // objects with custom `toJSON` methods as well, unless they are nested\n // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`\n // methods entirely.\n stringify(value) === \"1\" &&\n stringify([value]) == \"[1]\" &&\n // Prototype <= 1.6.1 serializes `[undefined]` as `\"[]\"` instead of\n // `\"[null]\"`.\n stringify([undef]) == \"[null]\" &&\n // YUI 3.0.0b1 fails to serialize `null` literals.\n stringify(null) == \"null\" &&\n // FF 3.1b1, 2 halts serialization if an array contains a function:\n // `[1, true, getClass, 1]` serializes as \"[1,true,],\". FF 3.1b3\n // elides non-JSON values from objects and arrays, unless they\n // define custom `toJSON` methods.\n stringify([undef, getClass, null]) == \"[null,null,null]\" &&\n // Simple serialization test. FF 3.1b1 uses Unicode escape sequences\n // where character escape codes are expected (e.g., `\\b` => `\\u0008`).\n stringify({ \"a\": [value, true, false, null, \"\\x00\\b\\n\\f\\r\\t\"] }) == serialized &&\n // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.\n stringify(null, value) === \"1\" &&\n stringify([1, 2], null, 1) == \"[\\n 1,\\n 2\\n]\" &&\n // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly\n // serialize extended years.\n stringify(new Date(-8.64e15)) == '\"-271821-04-20T00:00:00.000Z\"' &&\n // The milliseconds are optional in ES 5, but required in 5.1.\n stringify(new Date(8.64e15)) == '\"+275760-09-13T00:00:00.000Z\"' &&\n // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative\n // four-digit years instead of six-digit years. Credits: @Yaffle.\n stringify(new Date(-621987552e5)) == '\"-000001-01-01T00:00:00.000Z\"' &&\n // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond\n // values less than 1000. Credits: @Yaffle.\n stringify(new Date(-1)) == '\"1969-12-31T23:59:59.999Z\"';\n } catch (exception) {\n stringifySupported = false;\n }\n }\n isSupported = stringifySupported;\n }\n // Test `JSON.parse`.\n if (name == \"json-parse\") {\n var parse = exports.parse;\n if (typeof parse == \"function\") {\n try {\n // FF 3.1b1, b2 will throw an exception if a bare literal is provided.\n // Conforming implementations should also coerce the initial argument to\n // a string prior to parsing.\n if (parse(\"0\") === 0 && !parse(false)) {\n // Simple parsing test.\n value = parse(serialized);\n var parseSupported = value[\"a\"].length == 5 && value[\"a\"][0] === 1;\n if (parseSupported) {\n try {\n // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.\n parseSupported = !parse('\"\\t\"');\n } catch (exception) {}\n if (parseSupported) {\n try {\n // FF 4.0 and 4.0.1 allow leading `+` signs and leading\n // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow\n // certain octal literals.\n parseSupported = parse(\"01\") !== 1;\n } catch (exception) {}\n }\n if (parseSupported) {\n try {\n // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal\n // points. These environments, along with FF 3.1b1 and 2,\n // also allow trailing commas in JSON objects and arrays.\n parseSupported = parse(\"1.\") !== 1;\n } catch (exception) {}\n }\n }\n }\n } catch (exception) {\n parseSupported = false;\n }\n }\n isSupported = parseSupported;\n }\n }\n return has[name] = !!isSupported;\n }\n\n if (!has(\"json\")) {\n // Common `[[Class]]` name aliases.\n var functionClass = \"[object Function]\",\n dateClass = \"[object Date]\",\n numberClass = \"[object Number]\",\n stringClass = \"[object String]\",\n arrayClass = \"[object Array]\",\n booleanClass = \"[object Boolean]\";\n\n // Detect incomplete support for accessing string characters by index.\n var charIndexBuggy = has(\"bug-string-char-index\");\n\n // Define additional utility methods if the `Date` methods are buggy.\n if (!isExtended) {\n var floor = Math.floor;\n // A mapping between the months of the year and the number of days between\n // January 1st and the first of the respective month.\n var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n // Internal: Calculates the number of days between the Unix epoch and the\n // first day of the given month.\n var getDay = function (year, month) {\n return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);\n };\n }\n\n // Internal: Determines if a property is a direct property of the given\n // object. Delegates to the native `Object#hasOwnProperty` method.\n if (!(isProperty = objectProto.hasOwnProperty)) {\n isProperty = function (property) {\n var members = {}, constructor;\n if ((members.__proto__ = null, members.__proto__ = {\n // The *proto* property cannot be set multiple times in recent\n // versions of Firefox and SeaMonkey.\n \"toString\": 1\n }, members).toString != getClass) {\n // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but\n // supports the mutable *proto* property.\n isProperty = function (property) {\n // Capture and break the object's prototype chain (see section 8.6.2\n // of the ES 5.1 spec). The parenthesized expression prevents an\n // unsafe transformation by the Closure Compiler.\n var original = this.__proto__, result = property in (this.__proto__ = null, this);\n // Restore the original prototype chain.\n this.__proto__ = original;\n return result;\n };\n } else {\n // Capture a reference to the top-level `Object` constructor.\n constructor = members.constructor;\n // Use the `constructor` property to simulate `Object#hasOwnProperty` in\n // other environments.\n isProperty = function (property) {\n var parent = (this.constructor || constructor).prototype;\n return property in this && !(property in parent && this[property] === parent[property]);\n };\n }\n members = null;\n return isProperty.call(this, property);\n };\n }\n\n // Internal: Normalizes the `for...in` iteration algorithm across\n // environments. Each enumerated key is yielded to a `callback` function.\n forEach = function (object, callback) {\n var size = 0, Properties, members, property;\n\n // Tests for bugs in the current environment's `for...in` algorithm. The\n // `valueOf` property inherits the non-enumerable flag from\n // `Object.prototype` in older versions of IE, Netscape, and Mozilla.\n (Properties = function () {\n this.valueOf = 0;\n }).prototype.valueOf = 0;\n\n // Iterate over a new instance of the `Properties` class.\n members = new Properties();\n for (property in members) {\n // Ignore all properties inherited from `Object.prototype`.\n if (isProperty.call(members, property)) {\n size++;\n }\n }\n Properties = members = null;\n\n // Normalize the iteration algorithm.\n if (!size) {\n // A list of non-enumerable properties inherited from `Object.prototype`.\n members = [\"valueOf\", \"toString\", \"toLocaleString\", \"propertyIsEnumerable\", \"isPrototypeOf\", \"hasOwnProperty\", \"constructor\"];\n // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable\n // properties.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, length;\n var hasProperty = !isFunction && typeof object.constructor != \"function\" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;\n for (property in object) {\n // Gecko <= 1.0 enumerates the `prototype` property of functions under\n // certain conditions; IE does not.\n if (!(isFunction && property == \"prototype\") && hasProperty.call(object, property)) {\n callback(property);\n }\n }\n // Manually invoke the callback for each non-enumerable property.\n for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));\n };\n } else if (size == 2) {\n // Safari <= 2.0.4 enumerates shadowed properties twice.\n forEach = function (object, callback) {\n // Create a set of iterated properties.\n var members = {}, isFunction = getClass.call(object) == functionClass, property;\n for (property in object) {\n // Store each property name to prevent double enumeration. The\n // `prototype` property of functions is not enumerated due to cross-\n // environment inconsistencies.\n if (!(isFunction && property == \"prototype\") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {\n callback(property);\n }\n }\n };\n } else {\n // No bugs detected; use the standard `for...in` algorithm.\n forEach = function (object, callback) {\n var isFunction = getClass.call(object) == functionClass, property, isConstructor;\n for (property in object) {\n if (!(isFunction && property == \"prototype\") && isProperty.call(object, property) && !(isConstructor = property === \"constructor\")) {\n callback(property);\n }\n }\n // Manually invoke the callback for the `constructor` property due to\n // cross-environment inconsistencies.\n if (isConstructor || isProperty.call(object, (property = \"constructor\"))) {\n callback(property);\n }\n };\n }\n return forEach(object, callback);\n };\n\n // Public: Serializes a JavaScript `value` as a JSON string. The optional\n // `filter` argument may specify either a function that alters how object and\n // array members are serialized, or an array of strings and numbers that\n // indicates which properties should be serialized. The optional `width`\n // argument may be either a string or number that specifies the indentation\n // level of the output.\n if (!has(\"json-stringify\")) {\n // Internal: A map of control characters and their escaped equivalents.\n var Escapes = {\n 92: \"\\\\\\\\\",\n 34: '\\\\\"',\n 8: \"\\\\b\",\n 12: \"\\\\f\",\n 10: \"\\\\n\",\n 13: \"\\\\r\",\n 9: \"\\\\t\"\n };\n\n // Internal: Converts `value` into a zero-padded string such that its\n // length is at least equal to `width`. The `width` must be <= 6.\n var leadingZeroes = \"000000\";\n var toPaddedString = function (width, value) {\n // The `|| 0` expression is necessary to work around a bug in\n // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== \"0\"`.\n return (leadingZeroes + (value || 0)).slice(-width);\n };\n\n // Internal: Double-quotes a string `value`, replacing all ASCII control\n // characters (characters with code unit values between 0 and 31) with\n // their escaped equivalents. This is an implementation of the\n // `Quote(value)` operation defined in ES 5.1 section 15.12.3.\n var unicodePrefix = \"\\\\u00\";\n var quote = function (value) {\n var result = '\"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;\n var symbols = useCharIndex && (charIndexBuggy ? value.split(\"\") : value);\n for (; index < length; index++) {\n var charCode = value.charCodeAt(index);\n // If the character is a control character, append its Unicode or\n // shorthand escape sequence; otherwise, append the character as-is.\n switch (charCode) {\n case 8: case 9: case 10: case 12: case 13: case 34: case 92:\n result += Escapes[charCode];\n break;\n default:\n if (charCode < 32) {\n result += unicodePrefix + toPaddedString(2, charCode.toString(16));\n break;\n }\n result += useCharIndex ? symbols[index] : value.charAt(index);\n }\n }\n return result + '\"';\n };\n\n // Internal: Recursively serializes an object. Implements the\n // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.\n var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {\n var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;\n try {\n // Necessary for host object support.\n value = object[property];\n } catch (exception) {}\n if (typeof value == \"object\" && value) {\n className = getClass.call(value);\n if (className == dateClass && !isProperty.call(value, \"toJSON\")) {\n if (value > -1 / 0 && value < 1 / 0) {\n // Dates are serialized according to the `Date#toJSON` method\n // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15\n // for the ISO 8601 date time string format.\n if (getDay) {\n // Manually compute the year, month, date, hours, minutes,\n // seconds, and milliseconds if the `getUTC*` methods are\n // buggy. Adapted from @Yaffle's `date-shim` project.\n date = floor(value / 864e5);\n for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);\n for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);\n date = 1 + date - getDay(year, month);\n // The `time` value specifies the time within the day (see ES\n // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used\n // to compute `A modulo B`, as the `%` operator does not\n // correspond to the `modulo` operation for negative numbers.\n time = (value % 864e5 + 864e5) % 864e5;\n // The hours, minutes, seconds, and milliseconds are obtained by\n // decomposing the time within the day. See section 15.9.1.10.\n hours = floor(time / 36e5) % 24;\n minutes = floor(time / 6e4) % 60;\n seconds = floor(time / 1e3) % 60;\n milliseconds = time % 1e3;\n } else {\n year = value.getUTCFullYear();\n month = value.getUTCMonth();\n date = value.getUTCDate();\n hours = value.getUTCHours();\n minutes = value.getUTCMinutes();\n seconds = value.getUTCSeconds();\n milliseconds = value.getUTCMilliseconds();\n }\n // Serialize extended years correctly.\n value = (year <= 0 || year >= 1e4 ? (year < 0 ? \"-\" : \"+\") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +\n \"-\" + toPaddedString(2, month + 1) + \"-\" + toPaddedString(2, date) +\n // Months, dates, hours, minutes, and seconds should have two\n // digits; milliseconds should have three.\n \"T\" + toPaddedString(2, hours) + \":\" + toPaddedString(2, minutes) + \":\" + toPaddedString(2, seconds) +\n // Milliseconds are optional in ES 5.0, but required in 5.1.\n \".\" + toPaddedString(3, milliseconds) + \"Z\";\n } else {\n value = null;\n }\n } else if (typeof value.toJSON == \"function\" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, \"toJSON\"))) {\n // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the\n // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3\n // ignores all `toJSON` methods on these objects unless they are\n // defined directly on an instance.\n value = value.toJSON(property);\n }\n }\n if (callback) {\n // If a replacement function was provided, call it to obtain the value\n // for serialization.\n value = callback.call(object, property, value);\n }\n if (value === null) {\n return \"null\";\n }\n className = getClass.call(value);\n if (className == booleanClass) {\n // Booleans are represented literally.\n return \"\" + value;\n } else if (className == numberClass) {\n // JSON numbers must be finite. `Infinity` and `NaN` are serialized as\n // `\"null\"`.\n return value > -1 / 0 && value < 1 / 0 ? \"\" + value : \"null\";\n } else if (className == stringClass) {\n // Strings are double-quoted and escaped.\n return quote(\"\" + value);\n }\n // Recursively serialize objects and arrays.\n if (typeof value == \"object\") {\n // Check for cyclic structures. This is a linear search; performance\n // is inversely proportional to the number of unique nested objects.\n for (length = stack.length; length--;) {\n if (stack[length] === value) {\n // Cyclic structures cannot be serialized by `JSON.stringify`.\n throw TypeError();\n }\n }\n // Add the object to the stack of traversed objects.\n stack.push(value);\n results = [];\n // Save the current indentation level and indent one additional level.\n prefix = indentation;\n indentation += whitespace;\n if (className == arrayClass) {\n // Recursively serialize array elements.\n for (index = 0, length = value.length; index < length; index++) {\n element = serialize(index, value, callback, properties, whitespace, indentation, stack);\n results.push(element === undef ? \"null\" : element);\n }\n result = results.length ? (whitespace ? \"[\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"]\" : (\"[\" + results.join(\",\") + \"]\")) : \"[]\";\n } else {\n // Recursively serialize object members. Members are selected from\n // either a user-specified list of property names, or the object\n // itself.\n forEach(properties || value, function (property) {\n var element = serialize(property, value, callback, properties, whitespace, indentation, stack);\n if (element !== undef) {\n // According to ES 5.1 section 15.12.3: \"If `gap` {whitespace}\n // is not the empty string, let `member` {quote(property) + \":\"}\n // be the concatenation of `member` and the `space` character.\"\n // The \"`space` character\" refers to the literal space\n // character, not the `space` {width} argument provided to\n // `JSON.stringify`.\n results.push(quote(property) + \":\" + (whitespace ? \" \" : \"\") + element);\n }\n });\n result = results.length ? (whitespace ? \"{\\n\" + indentation + results.join(\",\\n\" + indentation) + \"\\n\" + prefix + \"}\" : (\"{\" + results.join(\",\") + \"}\")) : \"{}\";\n }\n // Remove the object from the traversed object stack.\n stack.pop();\n return result;\n }\n };\n\n // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.\n exports.stringify = function (source, filter, width) {\n var whitespace, callback, properties, className;\n if (objectTypes[typeof filter] && filter) {\n if ((className = getClass.call(filter)) == functionClass) {\n callback = filter;\n } else if (className == arrayClass) {\n // Convert the property names array into a makeshift set.\n properties = {};\n for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));\n }\n }\n if (width) {\n if ((className = getClass.call(width)) == numberClass) {\n // Convert the `width` to an integer and create a string containing\n // `width` number of space characters.\n if ((width -= width % 1) > 0) {\n for (whitespace = \"\", width > 10 && (width = 10); whitespace.length < width; whitespace += \" \");\n }\n } else if (className == stringClass) {\n whitespace = width.length <= 10 ? width : width.slice(0, 10);\n }\n }\n // Opera <= 7.54u2 discards the values associated with empty string keys\n // (`\"\"`) only if they are used directly within an object member list\n // (e.g., `!(\"\" in { \"\": 1})`).\n return serialize(\"\", (value = {}, value[\"\"] = source, value), callback, properties, whitespace, \"\", []);\n };\n }\n\n // Public: Parses a JSON source string.\n if (!has(\"json-parse\")) {\n var fromCharCode = String.fromCharCode;\n\n // Internal: A map of escaped control characters and their unescaped\n // equivalents.\n var Unescapes = {\n 92: \"\\\\\",\n 34: '\"',\n 47: \"/\",\n 98: \"\\b\",\n 116: \"\\t\",\n 110: \"\\n\",\n 102: \"\\f\",\n 114: \"\\r\"\n };\n\n // Internal: Stores the parser state.\n var Index, Source;\n\n // Internal: Resets the parser state and throws a `SyntaxError`.\n var abort = function () {\n Index = Source = null;\n throw SyntaxError();\n };\n\n // Internal: Returns the next token, or `\"$\"` if the parser has reached\n // the end of the source string. A token may be a string, number, `null`\n // literal, or Boolean literal.\n var lex = function () {\n var source = Source, length = source.length, value, begin, position, isSigned, charCode;\n while (Index < length) {\n charCode = source.charCodeAt(Index);\n switch (charCode) {\n case 9: case 10: case 13: case 32:\n // Skip whitespace tokens, including tabs, carriage returns, line\n // feeds, and space characters.\n Index++;\n break;\n case 123: case 125: case 91: case 93: case 58: case 44:\n // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at\n // the current position.\n value = charIndexBuggy ? source.charAt(Index) : source[Index];\n Index++;\n return value;\n case 34:\n // `\"` delimits a JSON string; advance to the next character and\n // begin parsing the string. String tokens are prefixed with the\n // sentinel `@` character to distinguish them from punctuators and\n // end-of-string tokens.\n for (value = \"@\", Index++; Index < length;) {\n charCode = source.charCodeAt(Index);\n if (charCode < 32) {\n // Unescaped ASCII control characters (those with a code unit\n // less than the space character) are not permitted.\n abort();\n } else if (charCode == 92) {\n // A reverse solidus (`\\`) marks the beginning of an escaped\n // control character (including `\"`, `\\`, and `/`) or Unicode\n // escape sequence.\n charCode = source.charCodeAt(++Index);\n switch (charCode) {\n case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:\n // Revive escaped control characters.\n value += Unescapes[charCode];\n Index++;\n break;\n case 117:\n // `\\u` marks the beginning of a Unicode escape sequence.\n // Advance to the first character and validate the\n // four-digit code point.\n begin = ++Index;\n for (position = Index + 4; Index < position; Index++) {\n charCode = source.charCodeAt(Index);\n // A valid sequence comprises four hexdigits (case-\n // insensitive) that form a single hexadecimal value.\n if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {\n // Invalid Unicode escape sequence.\n abort();\n }\n }\n // Revive the escaped character.\n value += fromCharCode(\"0x\" + source.slice(begin, Index));\n break;\n default:\n // Invalid escape sequence.\n abort();\n }\n } else {\n if (charCode == 34) {\n // An unescaped double-quote character marks the end of the\n // string.\n break;\n }\n charCode = source.charCodeAt(Index);\n begin = Index;\n // Optimize for the common case where a string is valid.\n while (charCode >= 32 && charCode != 92 && charCode != 34) {\n charCode = source.charCodeAt(++Index);\n }\n // Append the string as-is.\n value += source.slice(begin, Index);\n }\n }\n if (source.charCodeAt(Index) == 34) {\n // Advance to the next character and return the revived string.\n Index++;\n return value;\n }\n // Unterminated string.\n abort();\n default:\n // Parse numbers and literals.\n begin = Index;\n // Advance past the negative sign, if one is specified.\n if (charCode == 45) {\n isSigned = true;\n charCode = source.charCodeAt(++Index);\n }\n // Parse an integer or floating-point value.\n if (charCode >= 48 && charCode <= 57) {\n // Leading zeroes are interpreted as octal literals.\n if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {\n // Illegal octal literal.\n abort();\n }\n isSigned = false;\n // Parse the integer component.\n for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);\n // Floats cannot contain a leading decimal point; however, this\n // case is already accounted for by the parser.\n if (source.charCodeAt(Index) == 46) {\n position = ++Index;\n // Parse the decimal component.\n for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal trailing decimal.\n abort();\n }\n Index = position;\n }\n // Parse exponents. The `e` denoting the exponent is\n // case-insensitive.\n charCode = source.charCodeAt(Index);\n if (charCode == 101 || charCode == 69) {\n charCode = source.charCodeAt(++Index);\n // Skip past the sign following the exponent, if one is\n // specified.\n if (charCode == 43 || charCode == 45) {\n Index++;\n }\n // Parse the exponential component.\n for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);\n if (position == Index) {\n // Illegal empty exponent.\n abort();\n }\n Index = position;\n }\n // Coerce the parsed value to a JavaScript number.\n return +source.slice(begin, Index);\n }\n // A negative sign may only precede numbers.\n if (isSigned) {\n abort();\n }\n // `true`, `false`, and `null` literals.\n if (source.slice(Index, Index + 4) == \"true\") {\n Index += 4;\n return true;\n } else if (source.slice(Index, Index + 5) == \"false\") {\n Index += 5;\n return false;\n } else if (source.slice(Index, Index + 4) == \"null\") {\n Index += 4;\n return null;\n }\n // Unrecognized token.\n abort();\n }\n }\n // Return the sentinel `$` character if the parser has reached the end\n // of the source string.\n return \"$\";\n };\n\n // Internal: Parses a JSON `value` token.\n var get = function (value) {\n var results, hasMembers;\n if (value == \"$\") {\n // Unexpected end of input.\n abort();\n }\n if (typeof value == \"string\") {\n if ((charIndexBuggy ? value.charAt(0) : value[0]) == \"@\") {\n // Remove the sentinel `@` character.\n return value.slice(1);\n }\n // Parse object and array literals.\n if (value == \"[\") {\n // Parses a JSON array, returning a new JavaScript array.\n results = [];\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing square bracket marks the end of the array literal.\n if (value == \"]\") {\n break;\n }\n // If the array literal contains elements, the current token\n // should be a comma separating the previous element from the\n // next.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"]\") {\n // Unexpected trailing `,` in array literal.\n abort();\n }\n } else {\n // A `,` must separate each array element.\n abort();\n }\n }\n // Elisions and leading commas are not permitted.\n if (value == \",\") {\n abort();\n }\n results.push(get(value));\n }\n return results;\n } else if (value == \"{\") {\n // Parses a JSON object, returning a new JavaScript object.\n results = {};\n for (;; hasMembers || (hasMembers = true)) {\n value = lex();\n // A closing curly brace marks the end of the object literal.\n if (value == \"}\") {\n break;\n }\n // If the object literal contains members, the current token\n // should be a comma separator.\n if (hasMembers) {\n if (value == \",\") {\n value = lex();\n if (value == \"}\") {\n // Unexpected trailing `,` in object literal.\n abort();\n }\n } else {\n // A `,` must separate each object member.\n abort();\n }\n }\n // Leading commas are not permitted, object property names must be\n // double-quoted strings, and a `:` must separate each property\n // name and value.\n if (value == \",\" || typeof value != \"string\" || (charIndexBuggy ? value.charAt(0) : value[0]) != \"@\" || lex() != \":\") {\n abort();\n }\n results[value.slice(1)] = get(lex());\n }\n return results;\n }\n // Unexpected token encountered.\n abort();\n }\n return value;\n };\n\n // Internal: Updates a traversed object member.\n var update = function (source, property, callback) {\n var element = walk(source, property, callback);\n if (element === undef) {\n delete source[property];\n } else {\n source[property] = element;\n }\n };\n\n // Internal: Recursively traverses a parsed JSON object, invoking the\n // `callback` function for each value. This is an implementation of the\n // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.\n var walk = function (source, property, callback) {\n var value = source[property], length;\n if (typeof value == \"object\" && value) {\n // `forEach` can't be used to traverse an array in Opera <= 8.54\n // because its `Object#hasOwnProperty` implementation returns `false`\n // for array indices (e.g., `![1, 2, 3].hasOwnProperty(\"0\")`).\n if (getClass.call(value) == arrayClass) {\n for (length = value.length; length--;) {\n update(value, length, callback);\n }\n } else {\n forEach(value, function (property) {\n update(value, property, callback);\n });\n }\n }\n return callback.call(source, property, value);\n };\n\n // Public: `JSON.parse`. See ES 5.1 section 15.12.2.\n exports.parse = function (source, callback) {\n var result, value;\n Index = 0;\n Source = \"\" + source;\n result = get(lex());\n // If a JSON string contains multiple tokens, it is invalid.\n if (lex() != \"$\") {\n abort();\n }\n // Reset the parser state.\n Index = Source = null;\n return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[\"\"] = result, value), \"\", callback) : result;\n };\n }\n }\n\n exports[\"runInContext\"] = runInContext;\n return exports;\n }\n\n if (freeExports && !isLoader) {\n // Export for CommonJS environments.\n runInContext(root, freeExports);\n } else {\n // Export for web browsers and JavaScript engines.\n var nativeJSON = root.JSON,\n previousJSON = root[\"JSON3\"],\n isRestored = false;\n\n var JSON3 = runInContext(root, (root[\"JSON3\"] = {\n // Public: Restores the original value of the global `JSON` object and\n // returns a reference to the `JSON3` object.\n \"noConflict\": function () {\n if (!isRestored) {\n isRestored = true;\n root.JSON = nativeJSON;\n root[\"JSON3\"] = previousJSON;\n nativeJSON = previousJSON = null;\n }\n return JSON3;\n }\n }));\n\n root.JSON = {\n \"parse\": JSON3.parse,\n \"stringify\": JSON3.stringify\n };\n }\n\n // Export for asynchronous module loaders.\n if (isLoader) {\n define(function () {\n return JSON3;\n });\n }\n}).call(this);\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = util.toSetString(aStr);\n var isDuplicate = has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n this._set[sStr] = idx;\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0\n ? ((-aValue) << 1) + 1\n : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative\n ? -shifted\n : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n\n var vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return (charCode - bigA);\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return (charCode - littleA + littleOffset);\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return (charCode - zero + numberOffset);\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n var cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n }\n else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n } else {\n return mid;\n }\n }\n else {\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n } else {\n return aLow < 0 ? -1 : aLow;\n }\n }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n\n var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n\n return index;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n * The array.\n * @param {Number} x\n * The index of the first item.\n * @param {Number} y\n * The index of the second item.\n */\nfunction swap(ary, x, y) {\n var temp = ary[x];\n ary[x] = ary[y];\n ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n * The lower bound on the range.\n * @param {Number} high\n * The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n * @param {Number} p\n * Start index of the array\n * @param {Number} r\n * End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n // If our lower bound is less than our upper bound, we (1) partition the\n // array into two pieces and (2) recurse on each half. If it is not, this is\n // the empty array and our base case.\n\n if (p < r) {\n // (1) Partitioning.\n //\n // The partitioning chooses a pivot between `p` and `r` and moves all\n // elements that are less than or equal to the pivot to the before it, and\n // all the elements that are greater than it after it. The effect is that\n // once partition is done, the pivot is in the exact place it will be when\n // the array is put in sorted order, and it will not need to be moved\n // again. This runs in O(n) time.\n\n // Always choose a random pivot so that an input array which is reverse\n // sorted does not cause O(n^2) running time.\n var pivotIndex = randomIntInRange(p, r);\n var i = p - 1;\n\n swap(ary, pivotIndex, r);\n var pivot = ary[r];\n\n // Immediately after `j` is incremented in this loop, the following hold\n // true:\n //\n // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n //\n // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n for (var j = p; j < r; j++) {\n if (comparator(ary[j], pivot) <= 0) {\n i += 1;\n swap(ary, i, j);\n }\n }\n\n swap(ary, i + 1, j);\n var q = i + 1;\n\n // (2) Recurse on each half.\n\n doQuickSort(ary, comparator, p, q - 1);\n doQuickSort(ary, comparator, q + 1, r);\n }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n return sourceMap.sections != null\n ? new IndexedSourceMapConsumer(sourceMap)\n : new BasicSourceMapConsumer(sourceMap);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n// {\n// generatedLine: The line number in the generated code,\n// generatedColumn: The column number in the generated code,\n// source: The path to the original source file that generated this\n// chunk of code,\n// originalLine: The line number in the original source that\n// corresponds to this chunk of generated code,\n// originalColumn: The column number in the original source that\n// corresponds to this chunk of generated code,\n// name: The name of the original symbol which generated this chunk of\n// code.\n// }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n get: function () {\n if (!this.__generatedMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__generatedMappings;\n }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n get: function () {\n if (!this.__originalMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__originalMappings;\n }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n var c = aStr.charAt(index);\n return c === \";\" || c === \",\";\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n var context = aContext || null;\n var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n var mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n\n var sourceRoot = this.sourceRoot;\n mappings.map(function (mapping) {\n var source = mapping.source === null ? null : this._sources.at(mapping.source);\n if (source != null && sourceRoot != null) {\n source = util.join(sourceRoot, source);\n }\n return {\n source: source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: Optional. the column number in the original source.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n var line = util.getArg(aArgs, 'line');\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n var needle = {\n source: util.getArg(aArgs, 'source'),\n originalLine: line,\n originalColumn: util.getArg(aArgs, 'column', 0)\n };\n\n if (this.sourceRoot != null) {\n needle.source = util.relative(this.sourceRoot, needle.source);\n }\n if (!this._sources.has(needle.source)) {\n return [];\n }\n needle.source = this._sources.indexOf(needle.source);\n\n var mappings = [];\n\n var index = this._findMapping(needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (aArgs.column === undefined) {\n var originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n } else {\n var originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping &&\n mapping.originalLine === line &&\n mapping.originalColumn == originalColumn) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n }\n }\n\n return mappings;\n };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The only parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referrenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sources = util.getArg(sourceMap, 'sources');\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n var names = util.getArg(sourceMap, 'names', []);\n var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n var mappings = util.getArg(sourceMap, 'mappings');\n var file = util.getArg(sourceMap, 'file', null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n sources = sources\n .map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function (source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n ? util.relative(sourceRoot, source)\n : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n this._names = ArraySet.fromArray(names.map(String), true);\n this._sources = ArraySet.fromArray(sources, true);\n\n this.sourceRoot = sourceRoot;\n this.sourcesContent = sourcesContent;\n this._mappings = mappings;\n this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n function SourceMapConsumer_fromSourceMap(aSourceMap) {\n var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n smc.sourceRoot = aSourceMap._sourceRoot;\n smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n smc.sourceRoot);\n smc.file = aSourceMap._file;\n\n // Because we are modifying the entries (by converting string sources and\n // names to indices into the sources and names ArraySets), we have to make\n // a copy of the entry or else bad things happen. Shared mutable state\n // strikes again! See github issue #191.\n\n var generatedMappings = aSourceMap._mappings.toArray().slice();\n var destGeneratedMappings = smc.__generatedMappings = [];\n var destOriginalMappings = smc.__originalMappings = [];\n\n for (var i = 0, length = generatedMappings.length; i < length; i++) {\n var srcMapping = generatedMappings[i];\n var destMapping = new Mapping;\n destMapping.generatedLine = srcMapping.generatedLine;\n destMapping.generatedColumn = srcMapping.generatedColumn;\n\n if (srcMapping.source) {\n destMapping.source = sources.indexOf(srcMapping.source);\n destMapping.originalLine = srcMapping.originalLine;\n destMapping.originalColumn = srcMapping.originalColumn;\n\n if (srcMapping.name) {\n destMapping.name = names.indexOf(srcMapping.name);\n }\n\n destOriginalMappings.push(destMapping);\n }\n\n destGeneratedMappings.push(destMapping);\n }\n\n quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n return smc;\n };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n get: function () {\n return this._sources.toArray().map(function (s) {\n return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n }, this);\n }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n var generatedLine = 1;\n var previousGeneratedColumn = 0;\n var previousOriginalLine = 0;\n var previousOriginalColumn = 0;\n var previousSource = 0;\n var previousName = 0;\n var length = aStr.length;\n var index = 0;\n var cachedSegments = {};\n var temp = {};\n var originalMappings = [];\n var generatedMappings = [];\n var mapping, str, segment, end, value;\n\n while (index < length) {\n if (aStr.charAt(index) === ';') {\n generatedLine++;\n index++;\n previousGeneratedColumn = 0;\n }\n else if (aStr.charAt(index) === ',') {\n index++;\n }\n else {\n mapping = new Mapping();\n mapping.generatedLine = generatedLine;\n\n // Because each offset is encoded relative to the previous one,\n // many segments often have the same encoding. We can exploit this\n // fact by caching the parsed variable length fields of each segment,\n // allowing us to avoid a second parse if we encounter the same\n // segment again.\n for (end = index; end < length; end++) {\n if (this._charIsMappingSeparator(aStr, end)) {\n break;\n }\n }\n str = aStr.slice(index, end);\n\n segment = cachedSegments[str];\n if (segment) {\n index += str.length;\n } else {\n segment = [];\n while (index < end) {\n base64VLQ.decode(aStr, index, temp);\n value = temp.value;\n index = temp.rest;\n segment.push(value);\n }\n\n if (segment.length === 2) {\n throw new Error('Found a source, but no line and column');\n }\n\n if (segment.length === 3) {\n throw new Error('Found a source and line, but no column');\n }\n\n cachedSegments[str] = segment;\n }\n\n // Generated column.\n mapping.generatedColumn = previousGeneratedColumn + segment[0];\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (segment.length > 1) {\n // Original source.\n mapping.source = previousSource + segment[1];\n previousSource += segment[1];\n\n // Original line.\n mapping.originalLine = previousOriginalLine + segment[2];\n previousOriginalLine = mapping.originalLine;\n // Lines are stored 0-based\n mapping.originalLine += 1;\n\n // Original column.\n mapping.originalColumn = previousOriginalColumn + segment[3];\n previousOriginalColumn = mapping.originalColumn;\n\n if (segment.length > 4) {\n // Original name.\n mapping.name = previousName + segment[4];\n previousName += segment[4];\n }\n }\n\n generatedMappings.push(mapping);\n if (typeof mapping.originalLine === 'number') {\n originalMappings.push(mapping);\n }\n }\n }\n\n quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n this.__generatedMappings = generatedMappings;\n\n quickSort(originalMappings, util.compareByOriginalPositions);\n this.__originalMappings = originalMappings;\n };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError('Line must be greater than or equal to 1, got '\n + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError('Column must be greater than or equal to 0, got '\n + aNeedle[aColumnName]);\n }\n\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n function SourceMapConsumer_computeColumnSpans() {\n for (var index = 0; index < this._generatedMappings.length; ++index) {\n var mapping = this._generatedMappings[index];\n\n // Mappings do not contain a field for the last generated columnt. We\n // can come up with an optimistic estimate, however, by assuming that\n // mappings are contiguous (i.e. given two consecutive mappings, the\n // first mapping ends where the second one starts).\n if (index + 1 < this._generatedMappings.length) {\n var nextMapping = this._generatedMappings[index + 1];\n\n if (mapping.generatedLine === nextMapping.generatedLine) {\n mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n continue;\n }\n }\n\n // The last mapping for each line spans the entire line.\n mapping.lastGeneratedColumn = Infinity;\n }\n };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n function SourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._generatedMappings,\n \"generatedLine\",\n \"generatedColumn\",\n util.compareByGeneratedPositionsDeflated,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._generatedMappings[index];\n\n if (mapping.generatedLine === needle.generatedLine) {\n var source = util.getArg(mapping, 'source', null);\n if (source !== null) {\n source = this._sources.at(source);\n if (this.sourceRoot != null) {\n source = util.join(this.sourceRoot, source);\n }\n }\n var name = util.getArg(mapping, 'name', null);\n if (name !== null) {\n name = this._names.at(name);\n }\n return {\n source: source,\n line: util.getArg(mapping, 'originalLine', null),\n column: util.getArg(mapping, 'originalColumn', null),\n name: name\n };\n }\n }\n\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n function BasicSourceMapConsumer_hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() &&\n !this.sourcesContent.some(function (sc) { return sc == null; });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n\n if (this.sourceRoot != null) {\n aSource = util.relative(this.sourceRoot, aSource);\n }\n\n if (this._sources.has(aSource)) {\n return this.sourcesContent[this._sources.indexOf(aSource)];\n }\n\n var url;\n if (this.sourceRoot != null\n && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\"\n && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n }\n\n if ((!url.path || url.path == \"/\")\n && this._sources.has(\"/\" + aSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n function SourceMapConsumer_generatedPositionFor(aArgs) {\n var source = util.getArg(aArgs, 'source');\n if (this.sourceRoot != null) {\n source = util.relative(this.sourceRoot, source);\n }\n if (!this._sources.has(source)) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n source = this._sources.indexOf(source);\n\n var needle = {\n source: source,\n originalLine: util.getArg(aArgs, 'line'),\n originalColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (mapping.source === needle.source) {\n return {\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n };\n }\n }\n\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The only parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sections = util.getArg(sourceMap, 'sections');\n\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n this._sources = new ArraySet();\n this._names = new ArraySet();\n\n var lastOffset = {\n line: -1,\n column: 0\n };\n this._sections = sections.map(function (s) {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error('Support for url field in sections not implemented.');\n }\n var offset = util.getArg(s, 'offset');\n var offsetLine = util.getArg(offset, 'line');\n var offsetColumn = util.getArg(offset, 'column');\n\n if (offsetLine < lastOffset.line ||\n (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n throw new Error('Section offsets must be ordered and non-overlapping.');\n }\n lastOffset = offset;\n\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n }\n });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n get: function () {\n var sources = [];\n for (var i = 0; i < this._sections.length; i++) {\n for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n var sectionIndex = binarySearch.search(needle, this._sections,\n function(needle, section) {\n var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n\n return (needle.generatedColumn -\n section.generatedOffset.generatedColumn);\n });\n var section = this._sections[sectionIndex];\n\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n return section.consumer.originalPositionFor({\n line: needle.generatedLine -\n (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn -\n (section.generatedOffset.generatedLine === needle.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n bias: aArgs.bias\n });\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n return this._sections.every(function (s) {\n return s.consumer.hasContentsOfAllSources();\n });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n var content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n continue;\n }\n var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n var ret = {\n line: generatedPosition.line +\n (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column +\n (section.generatedOffset.generatedLine === generatedPosition.line\n ? section.generatedOffset.generatedColumn - 1\n : 0)\n };\n return ret;\n }\n }\n\n return {\n line: null,\n column: null\n };\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n this.__generatedMappings = [];\n this.__originalMappings = [];\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var sectionMappings = section.consumer._generatedMappings;\n for (var j = 0; j < sectionMappings.length; j++) {\n var mapping = sectionMappings[j];\n\n var source = section.consumer._sources.at(mapping.source);\n if (section.consumer.sourceRoot !== null) {\n source = util.join(section.consumer.sourceRoot, source);\n }\n this._sources.add(source);\n source = this._sources.indexOf(source);\n\n var name = section.consumer._names.at(mapping.name);\n this._names.add(name);\n name = this._names.indexOf(name);\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n var adjustedMapping = {\n source: source,\n generatedLine: mapping.generatedLine +\n (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn +\n (section.generatedOffset.generatedLine === mapping.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: name\n };\n\n this.__generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === 'number') {\n this.__originalMappings.push(adjustedMapping);\n }\n }\n }\n\n quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n quickSort(this.__originalMappings, util.compareByOriginalPositions);\n };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n\n var parts = path.split(/\\/+/);\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n\n var joined = aPath.charAt(0) === '/'\n ? aPath\n : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n var length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return mappingA.name - mappingB.name;\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return mappingA.name - mappingB.name;\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function(StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize && curr['arguments']) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame({functionName: RegExp.$1 || undefined, args: args}));\n } else {\n stack.push(new StackFrame({args: args}));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace-gps', ['source-map', 'stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('source-map/lib/source-map-consumer'), require('stackframe'));\n } else {\n root.StackTraceGPS = factory(root.SourceMap || root.sourceMap, root.StackFrame);\n }\n}(this, function(SourceMap, StackFrame) {\n 'use strict';\n\n /**\n * Make a X-Domain request to url and callback.\n *\n * @param {String} url\n * @returns {Promise} with response text if fulfilled\n */\n function _xdr(url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.open('get', url);\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if ((req.status >= 200 && req.status < 300) ||\n (url.substr(0, 7) === 'file://' && req.responseText)) {\n resolve(req.responseText);\n } else {\n reject(new Error('HTTP status: ' + req.status + ' retrieving ' + url));\n }\n }\n };\n req.send();\n });\n\n }\n\n /**\n * Convert a Base64-encoded string into its original representation.\n * Used for inline sourcemaps.\n *\n * @param {String} b64str Base-64 encoded string\n * @returns {String} original representation of the base64-encoded string.\n */\n function _atob(b64str) {\n if (typeof window !== 'undefined' && window.atob) {\n return window.atob(b64str);\n } else {\n throw new Error('You must supply a polyfill for window.atob in this environment');\n }\n }\n\n function _parseJson(string) {\n if (typeof JSON !== 'undefined' && JSON.parse) {\n return JSON.parse(string);\n } else {\n throw new Error('You must supply a polyfill for JSON.parse in this environment');\n }\n }\n\n function _findFunctionName(source, lineNumber/*, columnNumber*/) {\n var syntaxes = [\n // {name} = function ({args}) TODO args capture\n /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,\n // function {name}({args}) m[1]=name m[2]=args\n /function\\s+([^('\"`]*?)\\s*\\(([^)]*)\\)/,\n // {name} = eval()\n /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,\n // fn_name() {\n /\\b(?!(?:if|for|switch|while|with|catch)\\b)(?:(?:static)\\s+)?(\\S+)\\s*\\(.*?\\)\\s*\\{/,\n // {name} = () => {\n /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*\\(.*?\\)\\s*=>/\n ];\n var lines = source.split('\\n');\n\n // Walk backwards in the source lines until we find the line which matches one of the patterns above\n var code = '';\n var maxLines = Math.min(lineNumber, 20);\n for (var i = 0; i < maxLines; ++i) {\n // lineNo is 1-based, source[] is 0-based\n var line = lines[lineNumber - i - 1];\n var commentPos = line.indexOf('//');\n if (commentPos >= 0) {\n line = line.substr(0, commentPos);\n }\n\n if (line) {\n code = line + code;\n var len = syntaxes.length;\n for (var index = 0; index < len; index++) {\n var m = syntaxes[index].exec(code);\n if (m && m[1]) {\n return m[1];\n }\n }\n }\n }\n return undefined;\n }\n\n function _ensureSupportedEnvironment() {\n if (typeof Object.defineProperty !== 'function' || typeof Object.create !== 'function') {\n throw new Error('Unable to consume source maps in older browsers');\n }\n }\n\n function _ensureStackFrameIsLegit(stackframe) {\n if (typeof stackframe !== 'object') {\n throw new TypeError('Given StackFrame is not an object');\n } else if (typeof stackframe.fileName !== 'string') {\n throw new TypeError('Given file name is not a String');\n } else if (typeof stackframe.lineNumber !== 'number' ||\n stackframe.lineNumber % 1 !== 0 ||\n stackframe.lineNumber < 1) {\n throw new TypeError('Given line number must be a positive integer');\n } else if (typeof stackframe.columnNumber !== 'number' ||\n stackframe.columnNumber % 1 !== 0 ||\n stackframe.columnNumber < 0) {\n throw new TypeError('Given column number must be a non-negative integer');\n }\n return true;\n }\n\n function _findSourceMappingURL(source) {\n var sourceMappingUrlRegExp = /\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/mg;\n var lastSourceMappingUrl;\n var matchSourceMappingUrl;\n // eslint-disable-next-line no-cond-assign\n while (matchSourceMappingUrl = sourceMappingUrlRegExp.exec(source)) {\n lastSourceMappingUrl = matchSourceMappingUrl[1];\n }\n if (lastSourceMappingUrl) {\n return lastSourceMappingUrl;\n } else {\n throw new Error('sourceMappingURL not found');\n }\n }\n\n function _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) {\n return new Promise(function(resolve, reject) {\n var loc = sourceMapConsumer.originalPositionFor({\n line: stackframe.lineNumber,\n column: stackframe.columnNumber\n });\n\n if (loc.source) {\n // cache mapped sources\n var mappedSource = sourceMapConsumer.sourceContentFor(loc.source);\n if (mappedSource) {\n sourceCache[loc.source] = mappedSource;\n }\n\n resolve(\n // given stackframe and source location, update stackframe\n new StackFrame({\n functionName: loc.name || stackframe.functionName,\n args: stackframe.args,\n fileName: loc.source,\n lineNumber: loc.line,\n columnNumber: loc.column\n }));\n } else {\n reject(new Error('Could not get original source for given stackframe and source map'));\n }\n });\n }\n\n /**\n * @constructor\n * @param {Object} opts\n * opts.sourceCache = {url: \"Source String\"} => preload source cache\n * opts.sourceMapConsumerCache = {/path/file.js.map: SourceMapConsumer}\n * opts.offline = True to prevent network requests.\n * Best effort without sources or source maps.\n * opts.ajax = Promise returning function to make X-Domain requests\n */\n return function StackTraceGPS(opts) {\n if (!(this instanceof StackTraceGPS)) {\n return new StackTraceGPS(opts);\n }\n opts = opts || {};\n\n this.sourceCache = opts.sourceCache || {};\n this.sourceMapConsumerCache = opts.sourceMapConsumerCache || {};\n\n this.ajax = opts.ajax || _xdr;\n\n this._atob = opts.atob || _atob;\n\n this._get = function _get(location) {\n return new Promise(function(resolve, reject) {\n var isDataUrl = location.substr(0, 5) === 'data:';\n if (this.sourceCache[location]) {\n resolve(this.sourceCache[location]);\n } else if (opts.offline && !isDataUrl) {\n reject(new Error('Cannot make network requests in offline mode'));\n } else {\n if (isDataUrl) {\n // data URLs can have parameters.\n // see http://tools.ietf.org/html/rfc2397\n var supportedEncodingRegexp =\n /^data:application\\/json;([\\w=:\"-]+;)*base64,/;\n var match = location.match(supportedEncodingRegexp);\n if (match) {\n var sourceMapStart = match[0].length;\n var encodedSource = location.substr(sourceMapStart);\n var source = this._atob(encodedSource);\n this.sourceCache[location] = source;\n resolve(source);\n } else {\n reject(new Error('The encoding of the inline sourcemap is not supported'));\n }\n } else {\n var xhrPromise = this.ajax(location, {method: 'get'});\n // Cache the Promise to prevent duplicate in-flight requests\n this.sourceCache[location] = xhrPromise;\n xhrPromise.then(resolve, reject);\n }\n }\n }.bind(this));\n };\n\n /**\n * Creating SourceMapConsumers is expensive, so this wraps the creation of a\n * SourceMapConsumer in a per-instance cache.\n *\n * @param {String} sourceMappingURL = URL to fetch source map from\n * @param {String} defaultSourceRoot = Default source root for source map if undefined\n * @returns {Promise} that resolves a SourceMapConsumer\n */\n this._getSourceMapConsumer = function _getSourceMapConsumer(sourceMappingURL, defaultSourceRoot) {\n return new Promise(function(resolve) {\n if (this.sourceMapConsumerCache[sourceMappingURL]) {\n resolve(this.sourceMapConsumerCache[sourceMappingURL]);\n } else {\n var sourceMapConsumerPromise = new Promise(function(resolve, reject) {\n return this._get(sourceMappingURL).then(function(sourceMapSource) {\n if (typeof sourceMapSource === 'string') {\n sourceMapSource = _parseJson(sourceMapSource.replace(/^\\)\\]\\}'/, ''));\n }\n if (typeof sourceMapSource.sourceRoot === 'undefined') {\n sourceMapSource.sourceRoot = defaultSourceRoot;\n }\n\n resolve(new SourceMap.SourceMapConsumer(sourceMapSource));\n }, reject);\n }.bind(this));\n this.sourceMapConsumerCache[sourceMappingURL] = sourceMapConsumerPromise;\n resolve(sourceMapConsumerPromise);\n }\n }.bind(this));\n };\n\n /**\n * Given a StackFrame, enhance function name and use source maps for a\n * better StackFrame.\n *\n * @param {StackFrame} stackframe object\n * @returns {Promise} that resolves with with source-mapped StackFrame\n */\n this.pinpoint = function StackTraceGPS$$pinpoint(stackframe) {\n return new Promise(function(resolve, reject) {\n this.getMappedLocation(stackframe).then(function(mappedStackFrame) {\n function resolveMappedStackFrame() {\n resolve(mappedStackFrame);\n }\n\n this.findFunctionName(mappedStackFrame)\n .then(resolve, resolveMappedStackFrame)\n // eslint-disable-next-line no-unexpected-multiline\n ['catch'](resolveMappedStackFrame);\n }.bind(this), reject);\n }.bind(this));\n };\n\n /**\n * Given a StackFrame, guess function name from location information.\n *\n * @param {StackFrame} stackframe\n * @returns {Promise} that resolves with enhanced StackFrame.\n */\n this.findFunctionName = function StackTraceGPS$$findFunctionName(stackframe) {\n return new Promise(function(resolve, reject) {\n _ensureStackFrameIsLegit(stackframe);\n this._get(stackframe.fileName).then(function getSourceCallback(source) {\n var lineNumber = stackframe.lineNumber;\n var columnNumber = stackframe.columnNumber;\n var guessedFunctionName = _findFunctionName(source, lineNumber, columnNumber);\n // Only replace functionName if we found something\n if (guessedFunctionName) {\n resolve(new StackFrame({\n functionName: guessedFunctionName,\n args: stackframe.args,\n fileName: stackframe.fileName,\n lineNumber: lineNumber,\n columnNumber: columnNumber\n }));\n } else {\n resolve(stackframe);\n }\n }, reject)['catch'](reject);\n }.bind(this));\n };\n\n /**\n * Given a StackFrame, seek source-mapped location and return new enhanced StackFrame.\n *\n * @param {StackFrame} stackframe\n * @returns {Promise} that resolves with enhanced StackFrame.\n */\n this.getMappedLocation = function StackTraceGPS$$getMappedLocation(stackframe) {\n return new Promise(function(resolve, reject) {\n _ensureSupportedEnvironment();\n _ensureStackFrameIsLegit(stackframe);\n\n var sourceCache = this.sourceCache;\n var fileName = stackframe.fileName;\n this._get(fileName).then(function(source) {\n var sourceMappingURL = _findSourceMappingURL(source);\n var isDataUrl = sourceMappingURL.substr(0, 5) === 'data:';\n var defaultSourceRoot = fileName.substring(0, fileName.lastIndexOf('/') + 1);\n\n if (sourceMappingURL[0] !== '/' && !isDataUrl && !(/^https?:\\/\\/|^\\/\\//i).test(sourceMappingURL)) {\n sourceMappingURL = defaultSourceRoot + sourceMappingURL;\n }\n\n return this._getSourceMapConsumer(sourceMappingURL, defaultSourceRoot)\n .then(function(sourceMapConsumer) {\n return _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache)\n .then(resolve)['catch'](function() {\n resolve(stackframe);\n });\n });\n }.bind(this), reject)['catch'](reject);\n }.bind(this));\n };\n };\n}));\n","// Polyfill for old browsers\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\nif (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n\nif (typeof Promise === 'undefined') {\n ES6Promise.polyfill();\n}\n\n// ES5 Polyfills\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function(oThis) {\n if (typeof this !== 'function') {\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1);\n var fToBind = this;\n var NoOp = function() {\n };\n var fBound = function() {\n return fToBind.apply(this instanceof NoOp && oThis ? this : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n NoOp.prototype = this.prototype;\n fBound.prototype = new NoOp();\n\n return fBound;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map\nif (!Array.prototype.map) {\n Array.prototype.map = function(callback, thisArg) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n var O = Object(this);\n var len = O.length >>> 0;\n var T;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n if (arguments.length > 1) {\n T = thisArg;\n }\n\n var A = new Array(len);\n var k = 0;\n\n while (k < len) {\n var kValue;\n var mappedValue;\n if (k in O) {\n kValue = O[k];\n mappedValue = callback.call(T, kValue, k, O);\n A[k] = mappedValue;\n }\n k++;\n }\n\n return A;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\nif (!Array.prototype.filter) {\n Array.prototype.filter = function(callback/*, thisArg*/) {\n if (this === void 0 || this === null) {\n throw new TypeError('this is null or not defined');\n }\n\n var t = Object(this);\n var len = t.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var res = [];\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n for (var i = 0; i < len; i++) {\n if (i in t) {\n var val = t[i];\n if (callback.call(thisArg, val, i, t)) {\n res.push(val);\n }\n }\n }\n\n return res;\n };\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach\nif (!Array.prototype.forEach) {\n Array.prototype.forEach = function(callback, thisArg) {\n var T;\n var k;\n if (this === null || this === undefined) {\n throw new TypeError(' this is null or not defined');\n }\n\n var O = Object(this);\n var len = O.length >>> 0;\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n if (arguments.length > 1) {\n T = thisArg;\n }\n k = 0;\n while (k < len) {\n var kValue;\n if (k in O) {\n kValue = O[k];\n callback.call(T, kValue, k, O);\n }\n k++;\n }\n };\n}\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n var _generateError = function StackTrace$$GenerateError() {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n return err;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n function _filtered(stackframes, filter) {\n if (typeof filter === 'function') {\n return stackframes.filter(filter);\n }\n return stackframes;\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n var err = _generateError();\n return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts);\n },\n\n /**\n * Get a backtrace from invocation point.\n * IMPORTANT: Does not handle source maps or guess function names!\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n getSync: function StackTrace$$getSync(opts) {\n opts = _merge(_options, opts);\n var err = _generateError();\n var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts);\n return _filtered(stack, opts.filter);\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter);\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n * @param {Object} requestOptions\n */\n report: function StackTrace$$report(stackframes, url, errorMsg, requestOptions) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n\n // Set request headers\n req.setRequestHeader('Content-Type', 'application/json');\n if (requestOptions && typeof requestOptions.headers === 'object') {\n var headers = requestOptions.headers;\n for (var header in headers) {\n if (Object.prototype.hasOwnProperty.call(headers, header)) {\n req.setRequestHeader(header, headers[header]);\n }\n }\n }\n\n var reportPayload = {stack: stackframes};\n if (errorMsg !== undefined && errorMsg !== null) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n"]} \ No newline at end of file diff --git a/dist/stacktrace.js b/dist/stacktrace.js index 972651c..596e975 100644 --- a/dist/stacktrace.js +++ b/dist/stacktrace.js @@ -1,4 +1,4 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.StackTrace = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var r=n.replace(/^\s+/,"").replace(/\(eval code/g,"("),t=r.match(/ (\((.+):(\d+):(\d+)\)$)/);r=t?r.replace(t[0],""):r;var o=r.split(/\s+/).slice(1),i=this.extractLocation(t?t[1]:o.pop()),a=o.join(" ")||void 0,s=["eval",""].indexOf(i[0])>-1?void 0:i[0];return new e({functionName:a,fileName:s,lineNumber:i[1],columnNumber:i[2],source:n})},this)},parseFFOrSafari:function(n){var r=n.stack.split("\n").filter(function(e){return!e.match(t)},this);return r.map(function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),n.indexOf("@")===-1&&n.indexOf(":")===-1)return new e({functionName:n});var r=/((.*".+"[^@]*)?[^@]*)(?:@)/,t=n.match(r),o=t&&t[1]?t[1]:void 0,i=this.extractLocation(n.replace(r,""));return new e({functionName:o,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:n})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,t=n.message.split("\n"),o=[],i=2,a=t.length;i/,"$2").replace(/\([^)]*\)/g,"")||void 0;i.match(/\(([^)]*)\)/)&&(r=i.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:n})},this)}}})},{stackframe:2}],2:[function(n,r,t){!function(n,o){"use strict";"function"==typeof e&&e.amd?e("stackframe",[],o):"object"==typeof t?r.exports=o():n.StackFrame=o()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e){return e.charAt(0).toUpperCase()+e.substring(1)}function r(e){return function(){return this[e]}}function t(e){if(e)for(var r=0;r=0&&e>1;return n?-r:r}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(n|=c),r+=i.encode(n);while(o>0);return r},r.decode=function(e,n,r){var t,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(s&c),s&=u,f+=s<0?n-u>1?t(u,n,o,i,a,s):s==r.LEAST_UPPER_BOUND?n1?t(e,u,o,i,a,s):s==r.LEAST_UPPER_BOUND?u:e<0?-1:e}r.GREATEST_LOWER_BOUND=1,r.LEAST_UPPER_BOUND=2,r.search=function(e,n,o,i){if(0===n.length)return-1;var a=t(-1,n.length,e,n,o,i||r.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],7:[function(e,n,r){function t(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,r,a){if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},r.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=c.fromArray(e._names.toArray(),!0),t=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;p1&&(r.source=m+o[1],m+=o[1],r.originalLine=g+o[2],g=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),O.push(r),"number"==typeof r.originalLine&&b.push(r)}f(O,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=O,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=s.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},r.BasicSourceMapConsumer=o,a.prototype=Object.create(t.prototype),a.prototype.constructor=t,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),t?(t.path=n,i(t)):n}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=o(n),t=o(e);if(t&&(e=t.path||"/"),r&&!r.scheme)return t&&(r.scheme=t.scheme),i(r);if(r||n.match(_))return n;if(t&&!t.host&&!t.path)return t.host=n,i(t);var s="/"===n.charAt(0)?n:a(e.replace(/\/+$/,"")+"/"+n);return t?(t.path=s,i(t)):s}function u(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function g(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=m(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:m(e.name,n.name)))))}r.getArg=t;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;r.urlParse=o,r.urlGenerate=i,r.normalize=a,r.join=s,r.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},r.relative=u;var y=function(){var e=Object.create(null);return!("__proto__"in e)}();r.toSetString=y?c:l,r.fromSetString=y?c:f,r.compareByOriginalPositions=g,r.compareByGeneratedPositionsDeflated=h,r.compareByGeneratedPositionsInflated=d},{}],10:[function(e,n,r){arguments[4][2][0].apply(r,arguments)},{dup:2}],11:[function(n,r,t){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof t?r.exports=i(n("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var r=[],t=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(t=n.maxStackSize);for(var o=arguments.callee;o&&r.length=200&&t.status<300||"file://"===e.substr(0,7)&&t.responseText?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],t=e.split("\n"),o="",i=Math.min(n,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=r.length,l=0;l=200&&a.status<400?o(a.responseText):i(new Error("POST to "+n+" failed with status: "+a.status)))},a.open("post",n),a.setRequestHeader("Content-Type","application/json"),t&&"object"==typeof t.headers){var s=t.headers;for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==r&&null!==r&&(c.message=r),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":11,"stacktrace-gps":13}]},{},[14])(14)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;n="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,n.StackTrace=e()}}(function(){var e;return function(){function e(n,r,t){function o(a,s){if(!r[a]){if(!n[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var l=r[a]={exports:{}};n[a][0].call(l.exports,function(e){var r=n[a][1][e];return o(r||e)},l,l.exports,e,n,r,t)}return r[a].exports}for(var i="function"==typeof require&&require,a=0;a-1&&(n=n.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var r=n.replace(/^\s+/,"").replace(/\(eval code/g,"("),t=r.match(/ (\((.+):(\d+):(\d+)\)$)/);r=t?r.replace(t[0],""):r;var o=r.split(/\s+/).slice(1),i=this.extractLocation(t?t[1]:o.pop()),a=o.join(" ")||void 0,s=["eval",""].indexOf(i[0])>-1?void 0:i[0];return new e({functionName:a,fileName:s,lineNumber:i[1],columnNumber:i[2],source:n})},this)},parseFFOrSafari:function(n){var r=n.stack.split("\n").filter(function(e){return!e.match(t)},this);return r.map(function(n){if(n.indexOf(" > eval")>-1&&(n=n.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),n.indexOf("@")===-1&&n.indexOf(":")===-1)return new e({functionName:n});var r=/((.*".+"[^@]*)?[^@]*)(?:@)/,t=n.match(r),o=t&&t[1]?t[1]:void 0,i=this.extractLocation(n.replace(r,""));return new e({functionName:o,fileName:i[0],lineNumber:i[1],columnNumber:i[2],source:n})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,t=n.message.split("\n"),o=[],i=2,a=t.length;i/,"$2").replace(/\([^)]*\)/g,"")||void 0;i.match(/\(([^)]*)\)/)&&(r=i.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:n})},this)}}})},{stackframe:2}],2:[function(n,r,t){!function(n,o){"use strict";"function"==typeof e&&e.amd?e("stackframe",[],o):"object"==typeof t?r.exports=o():n.StackFrame=o()}(this,function(){"use strict";function e(e){return!isNaN(parseFloat(e))&&isFinite(e)}function n(e){return e.charAt(0).toUpperCase()+e.substring(1)}function r(e){return function(){return this[e]}}function t(e){if(e)for(var r=0;r=0&&e>1;return n?-r:r}var i=e("./base64"),a=5,s=1<>>=a,o>0&&(n|=c),r+=i.encode(n);while(o>0);return r},r.decode=function(e,n,r){var t,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(s=i.decode(e.charCodeAt(n++)),s===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(s&c),s&=u,f+=s<0?n-u>1?t(u,n,o,i,a,s):s==r.LEAST_UPPER_BOUND?n1?t(e,u,o,i,a,s):s==r.LEAST_UPPER_BOUND?u:e<0?-1:e}r.GREATEST_LOWER_BOUND=1,r.LEAST_UPPER_BOUND=2,r.search=function(e,n,o,i){if(0===n.length)return-1;var a=t(-1,n.length,e,n,o,i||r.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],7:[function(e,n,r){function t(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,r,a){if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)t.push({line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},r.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=c.fromArray(e._names.toArray(),!0),t=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;p1&&(r.source=m+o[1],m+=o[1],r.originalLine=g+o[2],g=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),O.push(r),"number"==typeof r.originalLine&&b.push(r)}f(O,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=O,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,"originalLine",null),column:s.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=s.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,"source");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:s.getArg(e,"line"),originalColumn:s.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",s.compareByOriginalPositions,s.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:s.getArg(i,"generatedLine",null),column:s.getArg(i,"generatedColumn",null),lastColumn:s.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},r.BasicSourceMapConsumer=o,a.prototype=Object.create(t.prototype),a.prototype.constructor=t,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],"."===a?u.splice(l,1):".."===a?c++:c>0&&(""===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join("/"),""===n&&(n=s?"/":"."),t?(t.path=n,i(t)):n}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=o(n),t=o(e);if(t&&(e=t.path||"/"),r&&!r.scheme)return t&&(r.scheme=t.scheme),i(r);if(r||n.match(_))return n;if(t&&!t.host&&!t.path)return t.host=n,i(t);var s="/"===n.charAt(0)?n:a(e.replace(/\/+$/,"")+"/"+n);return t?(t.path=s,i(t)):s}function u(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function g(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=m(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:m(e.name,n.name)))))}r.getArg=t;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;r.urlParse=o,r.urlGenerate=i,r.normalize=a,r.join=s,r.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},r.relative=u;var y=function(){var e=Object.create(null);return!("__proto__"in e)}();r.toSetString=y?c:l,r.fromSetString=y?c:f,r.compareByOriginalPositions=g,r.compareByGeneratedPositionsDeflated=h,r.compareByGeneratedPositionsInflated=d},{}],10:[function(e,n,r){arguments[4][2][0].apply(r,arguments)},{dup:2}],11:[function(n,r,t){!function(o,i){"use strict";"function"==typeof e&&e.amd?e("stack-generator",["stackframe"],i):"object"==typeof t?r.exports=i(n("stackframe")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var r=[],t=10;"object"==typeof n&&"number"==typeof n.maxStackSize&&(t=n.maxStackSize);for(var o=arguments.callee;o&&r.length=200&&t.status<300||"file://"===e.substr(0,7)&&t.responseText?n(t.responseText):r(new Error("HTTP status: "+t.status+" retrieving "+e)))},t.send()})}function t(e){if("undefined"!=typeof window&&window.atob)return window.atob(e);throw new Error("You must supply a polyfill for window.atob in this environment")}function o(e){if("undefined"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error("You must supply a polyfill for JSON.parse in this environment")}function i(e,n){for(var r=[/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/,/function\s+([^('"`]*?)\s*\(([^)]*)\)/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/,/\b(?!(?:if|for|switch|while|with|catch)\b)(?:(?:static)\s+)?(\S+)\s*\(.*?\)\s*\{/,/['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*\(.*?\)\s*=>/],t=e.split("\n"),o="",i=Math.min(n,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=r.length,l=0;l=200&&a.status<400?o(a.responseText):i(new Error("POST to "+n+" failed with status: "+a.status)))},a.open("post",n),a.setRequestHeader("Content-Type","application/json"),t&&"object"==typeof t.headers){var s=t.headers;for(var u in s)Object.prototype.hasOwnProperty.call(s,u)&&a.setRequestHeader(u,s[u])}var c={stack:e};void 0!==r&&null!==r&&(c.message=r),a.send(JSON.stringify(c))})}}})},{"error-stack-parser":1,"stack-generator":11,"stacktrace-gps":13}]},{},[14])(14)}); //# sourceMappingURL=stacktrace.min.js.map diff --git a/dist/stacktrace.min.js.map b/dist/stacktrace.min.js.map index 55567b8..f04e393 100644 --- a/dist/stacktrace.min.js.map +++ b/dist/stacktrace.min.js.map @@ -1 +1 @@ -{"version":3,"names":[],"mappings":"","sources":["stacktrace.min.js"],"sourcesContent":["!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var n;n=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,n.StackTrace=e()}}(function(){var e;return function n(e,r,t){function o(a,s){if(!r[a]){if(!e[a]){var u=\"function\"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var c=new Error(\"Cannot find module '\"+a+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var l=r[a]={exports:{}};e[a][0].call(l.exports,function(n){var r=e[a][1][n];return o(r?r:n)},l,l.exports,n,e,r,t)}return r[a].exports}for(var i=\"function\"==typeof require&&require,a=0;a-1&&(n=n.replace(/eval code/g,\"eval\").replace(/(\\(eval at [^\\()]*)|(\\)\\,.*$)/g,\"\"));var r=n.replace(/^\\s+/,\"\").replace(/\\(eval code/g,\"(\").split(/\\s+/).slice(1),t=this.extractLocation(r.pop()),o=r.join(\" \")||void 0,i=[\"eval\",\"\"].indexOf(t[0])>-1?void 0:t[0];return new e({functionName:o,fileName:i,lineNumber:t[1],columnNumber:t[2],source:n})},this)},parseFFOrSafari:function(n){var r=n.stack.split(\"\\n\").filter(function(e){return!e.match(t)},this);return r.map(function(n){if(n.indexOf(\" > eval\")>-1&&(n=n.replace(/ line (\\d+)(?: > eval line \\d+)* > eval\\:\\d+\\:\\d+/g,\":$1\")),n.indexOf(\"@\")===-1&&n.indexOf(\":\")===-1)return new e({functionName:n});var r=n.split(\"@\"),t=this.extractLocation(r.pop()),o=r.join(\"@\")||void 0;return new e({functionName:o,fileName:t[0],lineNumber:t[1],columnNumber:t[2],source:n})},this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf(\"\\n\")>-1&&e.message.split(\"\\n\").length>e.stacktrace.split(\"\\n\").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(n){for(var r=/Line (\\d+).*script (?:in )?(\\S+)/i,t=n.message.split(\"\\n\"),o=[],i=2,a=t.length;i/,\"$2\").replace(/\\([^\\)]*\\)/g,\"\")||void 0;i.match(/\\(([^\\)]*)\\)/)&&(r=i.replace(/^[^\\(]+\\(([^\\)]*)\\)$/,\"$1\"));var s=void 0===r||\"[arguments not available]\"===r?void 0:r.split(\",\");return new e({functionName:a,args:s,fileName:o[0],lineNumber:o[1],columnNumber:o[2],source:n})},this)}}})},{stackframe:10}],2:[function(e,n,r){function t(){this._array=[],this._set=Object.create(null)}var o=e(\"./util\"),i=Object.prototype.hasOwnProperty;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;o=0&&e>1;return n?-r:r}var i=e(\"./base64\"),a=5,s=1<>>=a,o>0&&(n|=c),r+=i.encode(n);while(o>0);return r},r.decode=function(e,n,r){var t,s,l=e.length,f=0,p=0;do{if(n>=l)throw new Error(\"Expected more digits in base 64 VLQ value.\");if(s=i.decode(e.charCodeAt(n++)),s===-1)throw new Error(\"Invalid base64 digit: \"+e.charAt(n-1));t=!!(s&c),s&=u,f+=s<0?n-u>1?t(u,n,o,i,a,s):s==r.LEAST_UPPER_BOUND?n1?t(e,u,o,i,a,s):s==r.LEAST_UPPER_BOUND?u:e<0?-1:e}r.GREATEST_LOWER_BOUND=1,r.LEAST_UPPER_BOUND=2,r.search=function(e,n,o,i){if(0===n.length)return-1;var a=t(-1,n.length,e,n,o,i||r.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(n[a],n[a-1],!0);)--a;return a}},{}],6:[function(e,n,r){function t(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function o(e,n){return Math.round(e+Math.random()*(n-e))}function i(e,n,r,a){if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)t.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o];else for(var c=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==c;)t.push({line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}),i=this._originalMappings[++o]}return t},r.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=c.fromArray(e._names.toArray(),!0),t=n._sources=c.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var a=e._mappings.toArray().slice(),u=n.__generatedMappings=[],l=n.__originalMappings=[],p=0,g=a.length;p1&&(r.source=m+o[1],m+=o[1],r.originalLine=g+o[2],g=r.originalLine,r.originalLine+=1,r.originalColumn=h+o[3],h=r.originalColumn,o.length>4&&(r.name=d+o[4],d+=o[4])),C.push(r),\"number\"==typeof r.originalLine&&b.push(r)}f(C,s.compareByGeneratedPositionsDeflated),this.__generatedMappings=C,f(b,s.compareByOriginalPositions),this.__originalMappings=b},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError(\"Line must be greater than or equal to 1, got \"+e[r]);if(e[t]<0)throw new TypeError(\"Column must be greater than or equal to 0, got \"+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=s.getArg(o,\"source\",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=s.join(this.sourceRoot,i)));var a=s.getArg(o,\"name\",null);return null!==a&&(a=this._names.at(a)),{source:i,line:s.getArg(o,\"originalLine\",null),column:s.getArg(o,\"originalColumn\",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=s.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=s.urlParse(this.sourceRoot))){var t=e.replace(/^file:\\/\\//,\"\");if(\"file\"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||\"/\"==r.path)&&this._sources.has(\"/\"+e))return this.sourcesContent[this._sources.indexOf(\"/\"+e)]}if(n)return null;throw new Error('\"'+e+'\" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=s.getArg(e,\"source\");if(null!=this.sourceRoot&&(n=s.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:s.getArg(e,\"line\"),originalColumn:s.getArg(e,\"column\")},o=this._findMapping(r,this._originalMappings,\"originalLine\",\"originalColumn\",s.compareByOriginalPositions,s.getArg(e,\"bias\",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:s.getArg(i,\"generatedLine\",null),column:s.getArg(i,\"generatedColumn\",null),lastColumn:s.getArg(i,\"lastGeneratedColumn\",null)}}return{line:null,column:null,lastColumn:null}},r.BasicSourceMapConsumer=o,a.prototype=Object.create(t.prototype),a.prototype.constructor=t,a.prototype._version=3,Object.defineProperty(a.prototype,\"sources\",{get:function(){for(var e=[],n=0;n=0;l--)a=u[l],\".\"===a?u.splice(l,1):\"..\"===a?c++:c>0&&(\"\"===a?(u.splice(l+1,c),c=0):(u.splice(l,2),c--));return n=u.join(\"/\"),\"\"===n&&(n=s?\"/\":\".\"),t?(t.path=n,i(t)):n}function s(e,n){\"\"===e&&(e=\".\"),\"\"===n&&(n=\".\");var r=o(n),t=o(e);if(t&&(e=t.path||\"/\"),r&&!r.scheme)return t&&(r.scheme=t.scheme),i(r);if(r||n.match(_))return n;if(t&&!t.host&&!t.path)return t.host=n,i(t);var s=\"/\"===n.charAt(0)?n:a(e.replace(/\\/+$/,\"\")+\"/\"+n);return t?(t.path=s,i(t)):s}function u(e,n){\"\"===e&&(e=\".\"),e=e.replace(/\\/$/,\"\");for(var r=0;0!==n.indexOf(e+\"/\");){var t=e.lastIndexOf(\"/\");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\\/]+:\\/)?\\/*$/))return n;++r}return Array(r+1).join(\"../\")+n.substr(e.length+1)}function c(e){return e}function l(e){return p(e)?\"$\"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function g(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function m(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=m(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:m(e.name,n.name)))))}r.getArg=t;var v=/^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/,_=/^data:.+\\,.+$/;r.urlParse=o,r.urlGenerate=i,r.normalize=a,r.join=s,r.isAbsolute=function(e){return\"/\"===e.charAt(0)||!!e.match(v)},r.relative=u;var y=function(){var e=Object.create(null);return!(\"__proto__\"in e)}();r.toSetString=y?c:l,r.fromSetString=y?c:f,r.compareByOriginalPositions=g,r.compareByGeneratedPositionsDeflated=h,r.compareByGeneratedPositionsInflated=d},{}],9:[function(n,r,t){!function(o,i){\"use strict\";\"function\"==typeof e&&e.amd?e(\"stack-generator\",[\"stackframe\"],i):\"object\"==typeof t?r.exports=i(n(\"stackframe\")):o.StackGenerator=i(o.StackFrame)}(this,function(e){return{backtrace:function(n){var r=[],t=10;\"object\"==typeof n&&\"number\"==typeof n.maxStackSize&&(t=n.maxStackSize);for(var o=arguments.callee;o&&r.length=200&&t.status<300||\"file://\"===e.substr(0,7)&&t.responseText?n(t.responseText):r(new Error(\"HTTP status: \"+t.status+\" retrieving \"+e)))},t.send()})}function t(e){if(\"undefined\"!=typeof window&&window.atob)return window.atob(e);throw new Error(\"You must supply a polyfill for window.atob in this environment\")}function o(e){if(\"undefined\"!=typeof JSON&&JSON.parse)return JSON.parse(e);throw new Error(\"You must supply a polyfill for JSON.parse in this environment\")}function i(e,n){for(var r=[/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,/function\\s+([^('\"`]*?)\\s*\\(([^)]*)\\)/,/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,/\\b(?!(?:if|for|switch|while|with|catch)\\b)(?:(?:static)\\s+)?(\\S+)\\s*\\(.*?\\)\\s*\\{/,/['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*\\(.*?\\)\\s*=>/],t=e.split(\"\\n\"),o=\"\",i=Math.min(n,20),a=0;a=0&&(s=s.substr(0,u)),s){o=s+o;for(var c=r.length,l=0;l=200&&i.status<400?t(i.responseText):o(new Error(\"POST to \"+n+\" failed with status: \"+i.status)))},i.open(\"post\",n),i.setRequestHeader(\"Content-Type\",\"application/json\");var a={stack:e};void 0!==r&&(a.message=r),i.send(JSON.stringify(a))})}}})},{\"error-stack-parser\":1,\"stack-generator\":9,\"stacktrace-gps\":11}]},{},[12])(12)});"],"file":"stacktrace.min.js"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/error-stack-parser/error-stack-parser.js","stacktrace.js","node_modules/error-stack-parser/node_modules/stackframe/stackframe.js","node_modules/source-map/lib/array-set.js","node_modules/source-map/lib/base64-vlq.js","node_modules/source-map/lib/base64.js","node_modules/source-map/lib/binary-search.js","node_modules/source-map/lib/quick-sort.js","node_modules/source-map/lib/source-map-consumer.js","node_modules/source-map/lib/util.js","node_modules/stack-generator/stack-generator.js","node_modules/stacktrace-gps/stacktrace-gps.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","StackTrace","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","root","factory","ErrorStackParser","StackFrame","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","parse","error","stacktrace","parseOpera","stack","match","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","indexOf","regExp","parts","exec","replace","undefined","filtered","split","filter","line","map","sanitizedLine","location","tokens","slice","locationParts","pop","functionName","join","fileName","lineNumber","columnNumber","source","functionNameRegex","matches","message","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","len","push","argsRaw","functionCall","shift","args","stackframe","2","_isNumber","isNaN","parseFloat","isFinite","_capitalize","str","charAt","toUpperCase","substring","_getter","obj","props","booleanProps","numericProps","stringProps","arrayProps","concat","prototype","getArgs","setArgs","v","Object","toString","TypeError","getEvalOrigin","evalOrigin","setEvalOrigin","getFileName","getLineNumber","getColumnNumber","getFunctionName","getIsEval","fromString","argsStartIndex","argsEndIndex","lastIndexOf","locationString","Boolean","j","Number","k","String","3","ArraySet","_array","_set","create","util","has","hasOwnProperty","fromArray","aArray","aAllowDuplicates","set","add","size","getOwnPropertyNames","aStr","sStr","toSetString","isDuplicate","idx","at","aIdx","toArray","./util","4","toVLQSigned","aValue","fromVLQSigned","isNegative","shifted","base64","VLQ_BASE_SHIFT","VLQ_BASE","VLQ_BASE_MASK","VLQ_CONTINUATION_BIT","encode","digit","encoded","vlq","decode","aIndex","aOutParam","continuation","strLen","charCodeAt","value","rest","./base64","5","intToCharMap","number","charCode","bigA","bigZ","littleA","littleZ","zero","nine","plus","slash","littleOffset","numberOffset","6","recursiveSearch","aLow","aHigh","aNeedle","aHaystack","aCompare","aBias","mid","Math","floor","cmp","LEAST_UPPER_BOUND","GREATEST_LOWER_BOUND","search","index","7","swap","ary","x","y","temp","randomIntInRange","low","high","round","random","doQuickSort","comparator","pivotIndex","pivot","q","quickSort","8","SourceMapConsumer","aSourceMap","sourceMap","JSON","sections","IndexedSourceMapConsumer","BasicSourceMapConsumer","version","getArg","sources","names","sourceRoot","sourcesContent","mappings","file","_version","normalize","isAbsolute","relative","_names","_sources","_mappings","Mapping","generatedLine","generatedColumn","originalLine","originalColumn","name","lastOffset","column","_sections","s","url","offset","offsetLine","offsetColumn","generatedOffset","consumer","binarySearch","base64VLQ","fromSourceMap","__generatedMappings","defineProperty","get","_parseMappings","__originalMappings","_charIsMappingSeparator","aSourceRoot","GENERATED_ORDER","ORIGINAL_ORDER","eachMapping","aCallback","aContext","aOrder","context","order","_generatedMappings","_originalMappings","mapping","forEach","allGeneratedPositionsFor","aArgs","needle","_findMapping","compareByOriginalPositions","lastColumn","smc","_sourceRoot","_generateSourcesContent","_file","generatedMappings","destGeneratedMappings","destOriginalMappings","srcMapping","destMapping","segment","end","previousGeneratedColumn","previousOriginalLine","previousOriginalColumn","previousSource","previousName","cachedSegments","originalMappings","compareByGeneratedPositionsDeflated","aMappings","aLineName","aColumnName","aComparator","computeColumnSpans","nextMapping","lastGeneratedColumn","Infinity","originalPositionFor","hasContentsOfAllSources","some","sc","sourceContentFor","aSource","nullOnMissing","urlParse","fileUriAbsPath","scheme","path","generatedPositionFor","constructor","sectionIndex","section","bias","every","content","generatedPosition","ret","sectionMappings","adjustedMapping","./array-set","./base64-vlq","./binary-search","./quick-sort","9","aName","aDefaultValue","arguments","aUrl","urlRegexp","auth","host","port","urlGenerate","aParsedUrl","aPath","part","up","splice","aRoot","aPathUrl","aRootUrl","dataUrlRegexp","joined","level","Array","substr","identity","isProtoString","fromSetString","mappingA","mappingB","onlyCompareOriginal","onlyCompareGenerated","strcmp","aStr1","aStr2","compareByGeneratedPositionsInflated","supportsNullProto","10","apply","dup","11","StackGenerator","backtrace","opts","maxStackSize","curr","callee","test","RegExp","$1","caller","12","13","StackTraceGPS","SourceMap","_xdr","Promise","resolve","reject","req","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","responseText","send","_atob","b64str","atob","_parseJson","string","_findFunctionName","syntaxes","maxLines","min","commentPos","m","_ensureSupportedEnvironment","_ensureStackFrameIsLegit","_findSourceMappingURL","lastSourceMappingUrl","matchSourceMappingUrl","sourceMappingUrlRegExp","_extractLocationInfoFromSourceMapSource","sourceMapConsumer","sourceCache","loc","mappedSource","sourceMapConsumerCache","ajax","_get","isDataUrl","offline","supportedEncodingRegexp","sourceMapStart","encodedSource","xhrPromise","method","then","bind","_getSourceMapConsumer","sourceMappingURL","defaultSourceRoot","sourceMapConsumerPromise","sourceMapSource","pinpoint","getMappedLocation","mappedStackFrame","resolveMappedStackFrame","findFunctionName","guessedFunctionName","source-map/lib/source-map-consumer","14","_merge","first","second","target","prop","_isShapedLikeParsableError","err","_filtered","stackframes","_options","_generateError","fromError","generateArtificially","getSync","gps","all","sf","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","deinstrument","report","errorMsg","requestOptions","setRequestHeader","headers","header","reportPayload","stringify","error-stack-parser","stack-generator","stacktrace-gps"],"mappings":"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","file":"stacktrace.min.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^()]*)|(\\),.*$)/g, '');\n }\n var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(');\n\n // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n // case it has spaces in it, as the string is split on \\s+ later on\n var location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/);\n\n // remove the parenthesized location from the line, if it was matched\n sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n\n var tokens = sanitizedLine.split(/\\s+/).slice(1);\n // if a location was matched, pass it to extractLocation() otherwise pop the last token\n var locationParts = this.extractLocation(location ? location[1] : tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : undefined;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n }));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame({\n functionName: match[3] || undefined,\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n })\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return filtered.map(function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^(]+\\(([^)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n\n return new StackFrame({\n functionName: functionName,\n args: args,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n}(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function(stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 &&\n (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n\n var _generateError = function StackTrace$$GenerateError() {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n return err;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n\n [first, second].forEach(function(obj) {\n for (var prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n\n return target;\n }\n\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n\n function _filtered(stackframes, filter) {\n if (typeof filter === 'function') {\n return stackframes.filter(filter);\n }\n return stackframes;\n }\n\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n var err = _generateError();\n return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts);\n },\n\n /**\n * Get a backtrace from invocation point.\n * IMPORTANT: Does not handle source maps or guess function names!\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n getSync: function StackTrace$$getSync(opts) {\n opts = _merge(_options, opts);\n var err = _generateError();\n var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts);\n return _filtered(stack, opts.filter);\n },\n\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function(resolve) {\n var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter);\n resolve(Promise.all(stackframes.map(function(sf) {\n return new Promise(function(resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n\n return instrumented;\n },\n\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n * @param {Object} requestOptions\n */\n report: function StackTrace$$report(stackframes, url, errorMsg, requestOptions) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n\n // Set request headers\n req.setRequestHeader('Content-Type', 'application/json');\n if (requestOptions && typeof requestOptions.headers === 'object') {\n var headers = requestOptions.headers;\n for (var header in headers) {\n if (Object.prototype.hasOwnProperty.call(headers, header)) {\n req.setRequestHeader(header, headers[header]);\n }\n }\n }\n\n var reportPayload = {stack: stackframes};\n if (errorMsg !== undefined && errorMsg !== null) {\n reportPayload.message = errorMsg;\n }\n\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function() {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n }\n\n function _getter(p) {\n return function() {\n return this[p];\n };\n }\n\n var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n var numericProps = ['columnNumber', 'lineNumber'];\n var stringProps = ['fileName', 'functionName', 'source'];\n var arrayProps = ['args'];\n\n var props = booleanProps.concat(numericProps, stringProps, arrayProps);\n\n function StackFrame(obj) {\n if (!obj) return;\n for (var i = 0; i < props.length; i++) {\n if (obj[props[i]] !== undefined) {\n this['set' + _capitalize(props[i])](obj[props[i]]);\n }\n }\n }\n\n StackFrame.prototype = {\n getArgs: function() {\n return this.args;\n },\n setArgs: function(v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n getEvalOrigin: function() {\n return this.evalOrigin;\n },\n setEvalOrigin: function(v) {\n if (v instanceof StackFrame) {\n this.evalOrigin = v;\n } else if (v instanceof Object) {\n this.evalOrigin = new StackFrame(v);\n } else {\n throw new TypeError('Eval Origin must be an Object or StackFrame');\n }\n },\n\n toString: function() {\n var fileName = this.getFileName() || '';\n var lineNumber = this.getLineNumber() || '';\n var columnNumber = this.getColumnNumber() || '';\n var functionName = this.getFunctionName() || '';\n if (this.getIsEval()) {\n if (fileName) {\n return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return '[eval]:' + lineNumber + ':' + columnNumber;\n }\n if (functionName) {\n return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return fileName + ':' + lineNumber + ':' + columnNumber;\n }\n };\n\n StackFrame.fromString = function StackFrame$$fromString(str) {\n var argsStartIndex = str.indexOf('(');\n var argsEndIndex = str.lastIndexOf(')');\n\n var functionName = str.substring(0, argsStartIndex);\n var args = str.substring(argsStartIndex + 1, argsEndIndex).split(',');\n var locationString = str.substring(argsEndIndex + 1);\n\n if (locationString.indexOf('@') === 0) {\n var parts = /@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(locationString, '');\n var fileName = parts[1];\n var lineNumber = parts[2];\n var columnNumber = parts[3];\n }\n\n return new StackFrame({\n functionName: functionName,\n args: args || undefined,\n fileName: fileName,\n lineNumber: lineNumber || undefined,\n columnNumber: columnNumber || undefined\n });\n };\n\n for (var i = 0; i < booleanProps.length; i++) {\n StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) {\n return function(v) {\n this[p] = Boolean(v);\n };\n })(booleanProps[i]);\n }\n\n for (var j = 0; j < numericProps.length; j++) {\n StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) {\n return function(v) {\n if (!_isNumber(v)) {\n throw new TypeError(p + ' must be a Number');\n }\n this[p] = Number(v);\n };\n })(numericProps[j]);\n }\n\n for (var k = 0; k < stringProps.length; k++) {\n StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) {\n return function(v) {\n this[p] = String(v);\n };\n })(stringProps[k]);\n }\n\n return StackFrame;\n}));\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = util.toSetString(aStr);\n var isDuplicate = has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n this._set[sStr] = idx;\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0\n ? ((-aValue) << 1) + 1\n : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative\n ? -shifted\n : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n\n var vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return (charCode - bigA);\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return (charCode - littleA + littleOffset);\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return (charCode - zero + numberOffset);\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n var cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n }\n else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n } else {\n return mid;\n }\n }\n else {\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n } else {\n return aLow < 0 ? -1 : aLow;\n }\n }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n\n var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n\n return index;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n * The array.\n * @param {Number} x\n * The index of the first item.\n * @param {Number} y\n * The index of the second item.\n */\nfunction swap(ary, x, y) {\n var temp = ary[x];\n ary[x] = ary[y];\n ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n * The lower bound on the range.\n * @param {Number} high\n * The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n * @param {Number} p\n * Start index of the array\n * @param {Number} r\n * End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n // If our lower bound is less than our upper bound, we (1) partition the\n // array into two pieces and (2) recurse on each half. If it is not, this is\n // the empty array and our base case.\n\n if (p < r) {\n // (1) Partitioning.\n //\n // The partitioning chooses a pivot between `p` and `r` and moves all\n // elements that are less than or equal to the pivot to the before it, and\n // all the elements that are greater than it after it. The effect is that\n // once partition is done, the pivot is in the exact place it will be when\n // the array is put in sorted order, and it will not need to be moved\n // again. This runs in O(n) time.\n\n // Always choose a random pivot so that an input array which is reverse\n // sorted does not cause O(n^2) running time.\n var pivotIndex = randomIntInRange(p, r);\n var i = p - 1;\n\n swap(ary, pivotIndex, r);\n var pivot = ary[r];\n\n // Immediately after `j` is incremented in this loop, the following hold\n // true:\n //\n // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n //\n // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n for (var j = p; j < r; j++) {\n if (comparator(ary[j], pivot) <= 0) {\n i += 1;\n swap(ary, i, j);\n }\n }\n\n swap(ary, i + 1, j);\n var q = i + 1;\n\n // (2) Recurse on each half.\n\n doQuickSort(ary, comparator, p, q - 1);\n doQuickSort(ary, comparator, q + 1, r);\n }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n return sourceMap.sections != null\n ? new IndexedSourceMapConsumer(sourceMap)\n : new BasicSourceMapConsumer(sourceMap);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n// {\n// generatedLine: The line number in the generated code,\n// generatedColumn: The column number in the generated code,\n// source: The path to the original source file that generated this\n// chunk of code,\n// originalLine: The line number in the original source that\n// corresponds to this chunk of generated code,\n// originalColumn: The column number in the original source that\n// corresponds to this chunk of generated code,\n// name: The name of the original symbol which generated this chunk of\n// code.\n// }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n get: function () {\n if (!this.__generatedMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__generatedMappings;\n }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n get: function () {\n if (!this.__originalMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__originalMappings;\n }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n var c = aStr.charAt(index);\n return c === \";\" || c === \",\";\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n var context = aContext || null;\n var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n var mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n\n var sourceRoot = this.sourceRoot;\n mappings.map(function (mapping) {\n var source = mapping.source === null ? null : this._sources.at(mapping.source);\n if (source != null && sourceRoot != null) {\n source = util.join(sourceRoot, source);\n }\n return {\n source: source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: Optional. the column number in the original source.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n var line = util.getArg(aArgs, 'line');\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n var needle = {\n source: util.getArg(aArgs, 'source'),\n originalLine: line,\n originalColumn: util.getArg(aArgs, 'column', 0)\n };\n\n if (this.sourceRoot != null) {\n needle.source = util.relative(this.sourceRoot, needle.source);\n }\n if (!this._sources.has(needle.source)) {\n return [];\n }\n needle.source = this._sources.indexOf(needle.source);\n\n var mappings = [];\n\n var index = this._findMapping(needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (aArgs.column === undefined) {\n var originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n } else {\n var originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping &&\n mapping.originalLine === line &&\n mapping.originalColumn == originalColumn) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n }\n }\n\n return mappings;\n };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The only parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referrenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sources = util.getArg(sourceMap, 'sources');\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n var names = util.getArg(sourceMap, 'names', []);\n var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n var mappings = util.getArg(sourceMap, 'mappings');\n var file = util.getArg(sourceMap, 'file', null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n sources = sources\n .map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function (source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n ? util.relative(sourceRoot, source)\n : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n this._names = ArraySet.fromArray(names.map(String), true);\n this._sources = ArraySet.fromArray(sources, true);\n\n this.sourceRoot = sourceRoot;\n this.sourcesContent = sourcesContent;\n this._mappings = mappings;\n this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n function SourceMapConsumer_fromSourceMap(aSourceMap) {\n var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n smc.sourceRoot = aSourceMap._sourceRoot;\n smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n smc.sourceRoot);\n smc.file = aSourceMap._file;\n\n // Because we are modifying the entries (by converting string sources and\n // names to indices into the sources and names ArraySets), we have to make\n // a copy of the entry or else bad things happen. Shared mutable state\n // strikes again! See github issue #191.\n\n var generatedMappings = aSourceMap._mappings.toArray().slice();\n var destGeneratedMappings = smc.__generatedMappings = [];\n var destOriginalMappings = smc.__originalMappings = [];\n\n for (var i = 0, length = generatedMappings.length; i < length; i++) {\n var srcMapping = generatedMappings[i];\n var destMapping = new Mapping;\n destMapping.generatedLine = srcMapping.generatedLine;\n destMapping.generatedColumn = srcMapping.generatedColumn;\n\n if (srcMapping.source) {\n destMapping.source = sources.indexOf(srcMapping.source);\n destMapping.originalLine = srcMapping.originalLine;\n destMapping.originalColumn = srcMapping.originalColumn;\n\n if (srcMapping.name) {\n destMapping.name = names.indexOf(srcMapping.name);\n }\n\n destOriginalMappings.push(destMapping);\n }\n\n destGeneratedMappings.push(destMapping);\n }\n\n quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n return smc;\n };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n get: function () {\n return this._sources.toArray().map(function (s) {\n return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n }, this);\n }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n var generatedLine = 1;\n var previousGeneratedColumn = 0;\n var previousOriginalLine = 0;\n var previousOriginalColumn = 0;\n var previousSource = 0;\n var previousName = 0;\n var length = aStr.length;\n var index = 0;\n var cachedSegments = {};\n var temp = {};\n var originalMappings = [];\n var generatedMappings = [];\n var mapping, str, segment, end, value;\n\n while (index < length) {\n if (aStr.charAt(index) === ';') {\n generatedLine++;\n index++;\n previousGeneratedColumn = 0;\n }\n else if (aStr.charAt(index) === ',') {\n index++;\n }\n else {\n mapping = new Mapping();\n mapping.generatedLine = generatedLine;\n\n // Because each offset is encoded relative to the previous one,\n // many segments often have the same encoding. We can exploit this\n // fact by caching the parsed variable length fields of each segment,\n // allowing us to avoid a second parse if we encounter the same\n // segment again.\n for (end = index; end < length; end++) {\n if (this._charIsMappingSeparator(aStr, end)) {\n break;\n }\n }\n str = aStr.slice(index, end);\n\n segment = cachedSegments[str];\n if (segment) {\n index += str.length;\n } else {\n segment = [];\n while (index < end) {\n base64VLQ.decode(aStr, index, temp);\n value = temp.value;\n index = temp.rest;\n segment.push(value);\n }\n\n if (segment.length === 2) {\n throw new Error('Found a source, but no line and column');\n }\n\n if (segment.length === 3) {\n throw new Error('Found a source and line, but no column');\n }\n\n cachedSegments[str] = segment;\n }\n\n // Generated column.\n mapping.generatedColumn = previousGeneratedColumn + segment[0];\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (segment.length > 1) {\n // Original source.\n mapping.source = previousSource + segment[1];\n previousSource += segment[1];\n\n // Original line.\n mapping.originalLine = previousOriginalLine + segment[2];\n previousOriginalLine = mapping.originalLine;\n // Lines are stored 0-based\n mapping.originalLine += 1;\n\n // Original column.\n mapping.originalColumn = previousOriginalColumn + segment[3];\n previousOriginalColumn = mapping.originalColumn;\n\n if (segment.length > 4) {\n // Original name.\n mapping.name = previousName + segment[4];\n previousName += segment[4];\n }\n }\n\n generatedMappings.push(mapping);\n if (typeof mapping.originalLine === 'number') {\n originalMappings.push(mapping);\n }\n }\n }\n\n quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n this.__generatedMappings = generatedMappings;\n\n quickSort(originalMappings, util.compareByOriginalPositions);\n this.__originalMappings = originalMappings;\n };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError('Line must be greater than or equal to 1, got '\n + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError('Column must be greater than or equal to 0, got '\n + aNeedle[aColumnName]);\n }\n\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n function SourceMapConsumer_computeColumnSpans() {\n for (var index = 0; index < this._generatedMappings.length; ++index) {\n var mapping = this._generatedMappings[index];\n\n // Mappings do not contain a field for the last generated columnt. We\n // can come up with an optimistic estimate, however, by assuming that\n // mappings are contiguous (i.e. given two consecutive mappings, the\n // first mapping ends where the second one starts).\n if (index + 1 < this._generatedMappings.length) {\n var nextMapping = this._generatedMappings[index + 1];\n\n if (mapping.generatedLine === nextMapping.generatedLine) {\n mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n continue;\n }\n }\n\n // The last mapping for each line spans the entire line.\n mapping.lastGeneratedColumn = Infinity;\n }\n };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n function SourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._generatedMappings,\n \"generatedLine\",\n \"generatedColumn\",\n util.compareByGeneratedPositionsDeflated,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._generatedMappings[index];\n\n if (mapping.generatedLine === needle.generatedLine) {\n var source = util.getArg(mapping, 'source', null);\n if (source !== null) {\n source = this._sources.at(source);\n if (this.sourceRoot != null) {\n source = util.join(this.sourceRoot, source);\n }\n }\n var name = util.getArg(mapping, 'name', null);\n if (name !== null) {\n name = this._names.at(name);\n }\n return {\n source: source,\n line: util.getArg(mapping, 'originalLine', null),\n column: util.getArg(mapping, 'originalColumn', null),\n name: name\n };\n }\n }\n\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n function BasicSourceMapConsumer_hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() &&\n !this.sourcesContent.some(function (sc) { return sc == null; });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n\n if (this.sourceRoot != null) {\n aSource = util.relative(this.sourceRoot, aSource);\n }\n\n if (this._sources.has(aSource)) {\n return this.sourcesContent[this._sources.indexOf(aSource)];\n }\n\n var url;\n if (this.sourceRoot != null\n && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\"\n && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n }\n\n if ((!url.path || url.path == \"/\")\n && this._sources.has(\"/\" + aSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n function SourceMapConsumer_generatedPositionFor(aArgs) {\n var source = util.getArg(aArgs, 'source');\n if (this.sourceRoot != null) {\n source = util.relative(this.sourceRoot, source);\n }\n if (!this._sources.has(source)) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n source = this._sources.indexOf(source);\n\n var needle = {\n source: source,\n originalLine: util.getArg(aArgs, 'line'),\n originalColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (mapping.source === needle.source) {\n return {\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n };\n }\n }\n\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The only parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sections = util.getArg(sourceMap, 'sections');\n\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n this._sources = new ArraySet();\n this._names = new ArraySet();\n\n var lastOffset = {\n line: -1,\n column: 0\n };\n this._sections = sections.map(function (s) {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error('Support for url field in sections not implemented.');\n }\n var offset = util.getArg(s, 'offset');\n var offsetLine = util.getArg(offset, 'line');\n var offsetColumn = util.getArg(offset, 'column');\n\n if (offsetLine < lastOffset.line ||\n (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n throw new Error('Section offsets must be ordered and non-overlapping.');\n }\n lastOffset = offset;\n\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n }\n });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n get: function () {\n var sources = [];\n for (var i = 0; i < this._sections.length; i++) {\n for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n var sectionIndex = binarySearch.search(needle, this._sections,\n function(needle, section) {\n var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n\n return (needle.generatedColumn -\n section.generatedOffset.generatedColumn);\n });\n var section = this._sections[sectionIndex];\n\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n return section.consumer.originalPositionFor({\n line: needle.generatedLine -\n (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn -\n (section.generatedOffset.generatedLine === needle.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n bias: aArgs.bias\n });\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n return this._sections.every(function (s) {\n return s.consumer.hasContentsOfAllSources();\n });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n var content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n continue;\n }\n var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n var ret = {\n line: generatedPosition.line +\n (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column +\n (section.generatedOffset.generatedLine === generatedPosition.line\n ? section.generatedOffset.generatedColumn - 1\n : 0)\n };\n return ret;\n }\n }\n\n return {\n line: null,\n column: null\n };\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n this.__generatedMappings = [];\n this.__originalMappings = [];\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var sectionMappings = section.consumer._generatedMappings;\n for (var j = 0; j < sectionMappings.length; j++) {\n var mapping = sectionMappings[j];\n\n var source = section.consumer._sources.at(mapping.source);\n if (section.consumer.sourceRoot !== null) {\n source = util.join(section.consumer.sourceRoot, source);\n }\n this._sources.add(source);\n source = this._sources.indexOf(source);\n\n var name = section.consumer._names.at(mapping.name);\n this._names.add(name);\n name = this._names.indexOf(name);\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n var adjustedMapping = {\n source: source,\n generatedLine: mapping.generatedLine +\n (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn +\n (section.generatedOffset.generatedLine === mapping.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: name\n };\n\n this.__generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === 'number') {\n this.__originalMappings.push(adjustedMapping);\n }\n }\n }\n\n quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n quickSort(this.__originalMappings, util.compareByOriginalPositions);\n };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n\n var parts = path.split(/\\/+/);\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n\n var joined = aPath.charAt(0) === '/'\n ? aPath\n : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n var length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return mappingA.name - mappingB.name;\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return mappingA.name - mappingB.name;\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n}(this, function(StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize && curr['arguments']) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame({functionName: RegExp.$1 || undefined, args: args}));\n } else {\n stack.push(new StackFrame({args: args}));\n }\n\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace-gps', ['source-map', 'stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('source-map/lib/source-map-consumer'), require('stackframe'));\n } else {\n root.StackTraceGPS = factory(root.SourceMap || root.sourceMap, root.StackFrame);\n }\n}(this, function(SourceMap, StackFrame) {\n 'use strict';\n\n /**\n * Make a X-Domain request to url and callback.\n *\n * @param {String} url\n * @returns {Promise} with response text if fulfilled\n */\n function _xdr(url) {\n return new Promise(function(resolve, reject) {\n var req = new XMLHttpRequest();\n req.open('get', url);\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if ((req.status >= 200 && req.status < 300) ||\n (url.substr(0, 7) === 'file://' && req.responseText)) {\n resolve(req.responseText);\n } else {\n reject(new Error('HTTP status: ' + req.status + ' retrieving ' + url));\n }\n }\n };\n req.send();\n });\n\n }\n\n /**\n * Convert a Base64-encoded string into its original representation.\n * Used for inline sourcemaps.\n *\n * @param {String} b64str Base-64 encoded string\n * @returns {String} original representation of the base64-encoded string.\n */\n function _atob(b64str) {\n if (typeof window !== 'undefined' && window.atob) {\n return window.atob(b64str);\n } else {\n throw new Error('You must supply a polyfill for window.atob in this environment');\n }\n }\n\n function _parseJson(string) {\n if (typeof JSON !== 'undefined' && JSON.parse) {\n return JSON.parse(string);\n } else {\n throw new Error('You must supply a polyfill for JSON.parse in this environment');\n }\n }\n\n function _findFunctionName(source, lineNumber/*, columnNumber*/) {\n var syntaxes = [\n // {name} = function ({args}) TODO args capture\n /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,\n // function {name}({args}) m[1]=name m[2]=args\n /function\\s+([^('\"`]*?)\\s*\\(([^)]*)\\)/,\n // {name} = eval()\n /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,\n // fn_name() {\n /\\b(?!(?:if|for|switch|while|with|catch)\\b)(?:(?:static)\\s+)?(\\S+)\\s*\\(.*?\\)\\s*\\{/,\n // {name} = () => {\n /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*\\(.*?\\)\\s*=>/\n ];\n var lines = source.split('\\n');\n\n // Walk backwards in the source lines until we find the line which matches one of the patterns above\n var code = '';\n var maxLines = Math.min(lineNumber, 20);\n for (var i = 0; i < maxLines; ++i) {\n // lineNo is 1-based, source[] is 0-based\n var line = lines[lineNumber - i - 1];\n var commentPos = line.indexOf('//');\n if (commentPos >= 0) {\n line = line.substr(0, commentPos);\n }\n\n if (line) {\n code = line + code;\n var len = syntaxes.length;\n for (var index = 0; index < len; index++) {\n var m = syntaxes[index].exec(code);\n if (m && m[1]) {\n return m[1];\n }\n }\n }\n }\n return undefined;\n }\n\n function _ensureSupportedEnvironment() {\n if (typeof Object.defineProperty !== 'function' || typeof Object.create !== 'function') {\n throw new Error('Unable to consume source maps in older browsers');\n }\n }\n\n function _ensureStackFrameIsLegit(stackframe) {\n if (typeof stackframe !== 'object') {\n throw new TypeError('Given StackFrame is not an object');\n } else if (typeof stackframe.fileName !== 'string') {\n throw new TypeError('Given file name is not a String');\n } else if (typeof stackframe.lineNumber !== 'number' ||\n stackframe.lineNumber % 1 !== 0 ||\n stackframe.lineNumber < 1) {\n throw new TypeError('Given line number must be a positive integer');\n } else if (typeof stackframe.columnNumber !== 'number' ||\n stackframe.columnNumber % 1 !== 0 ||\n stackframe.columnNumber < 0) {\n throw new TypeError('Given column number must be a non-negative integer');\n }\n return true;\n }\n\n function _findSourceMappingURL(source) {\n var sourceMappingUrlRegExp = /\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/mg;\n var lastSourceMappingUrl;\n var matchSourceMappingUrl;\n // eslint-disable-next-line no-cond-assign\n while (matchSourceMappingUrl = sourceMappingUrlRegExp.exec(source)) {\n lastSourceMappingUrl = matchSourceMappingUrl[1];\n }\n if (lastSourceMappingUrl) {\n return lastSourceMappingUrl;\n } else {\n throw new Error('sourceMappingURL not found');\n }\n }\n\n function _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) {\n return new Promise(function(resolve, reject) {\n var loc = sourceMapConsumer.originalPositionFor({\n line: stackframe.lineNumber,\n column: stackframe.columnNumber\n });\n\n if (loc.source) {\n // cache mapped sources\n var mappedSource = sourceMapConsumer.sourceContentFor(loc.source);\n if (mappedSource) {\n sourceCache[loc.source] = mappedSource;\n }\n\n resolve(\n // given stackframe and source location, update stackframe\n new StackFrame({\n functionName: loc.name || stackframe.functionName,\n args: stackframe.args,\n fileName: loc.source,\n lineNumber: loc.line,\n columnNumber: loc.column\n }));\n } else {\n reject(new Error('Could not get original source for given stackframe and source map'));\n }\n });\n }\n\n /**\n * @constructor\n * @param {Object} opts\n * opts.sourceCache = {url: \"Source String\"} => preload source cache\n * opts.sourceMapConsumerCache = {/path/file.js.map: SourceMapConsumer}\n * opts.offline = True to prevent network requests.\n * Best effort without sources or source maps.\n * opts.ajax = Promise returning function to make X-Domain requests\n */\n return function StackTraceGPS(opts) {\n if (!(this instanceof StackTraceGPS)) {\n return new StackTraceGPS(opts);\n }\n opts = opts || {};\n\n this.sourceCache = opts.sourceCache || {};\n this.sourceMapConsumerCache = opts.sourceMapConsumerCache || {};\n\n this.ajax = opts.ajax || _xdr;\n\n this._atob = opts.atob || _atob;\n\n this._get = function _get(location) {\n return new Promise(function(resolve, reject) {\n var isDataUrl = location.substr(0, 5) === 'data:';\n if (this.sourceCache[location]) {\n resolve(this.sourceCache[location]);\n } else if (opts.offline && !isDataUrl) {\n reject(new Error('Cannot make network requests in offline mode'));\n } else {\n if (isDataUrl) {\n // data URLs can have parameters.\n // see http://tools.ietf.org/html/rfc2397\n var supportedEncodingRegexp =\n /^data:application\\/json;([\\w=:\"-]+;)*base64,/;\n var match = location.match(supportedEncodingRegexp);\n if (match) {\n var sourceMapStart = match[0].length;\n var encodedSource = location.substr(sourceMapStart);\n var source = this._atob(encodedSource);\n this.sourceCache[location] = source;\n resolve(source);\n } else {\n reject(new Error('The encoding of the inline sourcemap is not supported'));\n }\n } else {\n var xhrPromise = this.ajax(location, {method: 'get'});\n // Cache the Promise to prevent duplicate in-flight requests\n this.sourceCache[location] = xhrPromise;\n xhrPromise.then(resolve, reject);\n }\n }\n }.bind(this));\n };\n\n /**\n * Creating SourceMapConsumers is expensive, so this wraps the creation of a\n * SourceMapConsumer in a per-instance cache.\n *\n * @param {String} sourceMappingURL = URL to fetch source map from\n * @param {String} defaultSourceRoot = Default source root for source map if undefined\n * @returns {Promise} that resolves a SourceMapConsumer\n */\n this._getSourceMapConsumer = function _getSourceMapConsumer(sourceMappingURL, defaultSourceRoot) {\n return new Promise(function(resolve) {\n if (this.sourceMapConsumerCache[sourceMappingURL]) {\n resolve(this.sourceMapConsumerCache[sourceMappingURL]);\n } else {\n var sourceMapConsumerPromise = new Promise(function(resolve, reject) {\n return this._get(sourceMappingURL).then(function(sourceMapSource) {\n if (typeof sourceMapSource === 'string') {\n sourceMapSource = _parseJson(sourceMapSource.replace(/^\\)\\]\\}'/, ''));\n }\n if (typeof sourceMapSource.sourceRoot === 'undefined') {\n sourceMapSource.sourceRoot = defaultSourceRoot;\n }\n\n resolve(new SourceMap.SourceMapConsumer(sourceMapSource));\n }, reject);\n }.bind(this));\n this.sourceMapConsumerCache[sourceMappingURL] = sourceMapConsumerPromise;\n resolve(sourceMapConsumerPromise);\n }\n }.bind(this));\n };\n\n /**\n * Given a StackFrame, enhance function name and use source maps for a\n * better StackFrame.\n *\n * @param {StackFrame} stackframe object\n * @returns {Promise} that resolves with with source-mapped StackFrame\n */\n this.pinpoint = function StackTraceGPS$$pinpoint(stackframe) {\n return new Promise(function(resolve, reject) {\n this.getMappedLocation(stackframe).then(function(mappedStackFrame) {\n function resolveMappedStackFrame() {\n resolve(mappedStackFrame);\n }\n\n this.findFunctionName(mappedStackFrame)\n .then(resolve, resolveMappedStackFrame)\n // eslint-disable-next-line no-unexpected-multiline\n ['catch'](resolveMappedStackFrame);\n }.bind(this), reject);\n }.bind(this));\n };\n\n /**\n * Given a StackFrame, guess function name from location information.\n *\n * @param {StackFrame} stackframe\n * @returns {Promise} that resolves with enhanced StackFrame.\n */\n this.findFunctionName = function StackTraceGPS$$findFunctionName(stackframe) {\n return new Promise(function(resolve, reject) {\n _ensureStackFrameIsLegit(stackframe);\n this._get(stackframe.fileName).then(function getSourceCallback(source) {\n var lineNumber = stackframe.lineNumber;\n var columnNumber = stackframe.columnNumber;\n var guessedFunctionName = _findFunctionName(source, lineNumber, columnNumber);\n // Only replace functionName if we found something\n if (guessedFunctionName) {\n resolve(new StackFrame({\n functionName: guessedFunctionName,\n args: stackframe.args,\n fileName: stackframe.fileName,\n lineNumber: lineNumber,\n columnNumber: columnNumber\n }));\n } else {\n resolve(stackframe);\n }\n }, reject)['catch'](reject);\n }.bind(this));\n };\n\n /**\n * Given a StackFrame, seek source-mapped location and return new enhanced StackFrame.\n *\n * @param {StackFrame} stackframe\n * @returns {Promise} that resolves with enhanced StackFrame.\n */\n this.getMappedLocation = function StackTraceGPS$$getMappedLocation(stackframe) {\n return new Promise(function(resolve, reject) {\n _ensureSupportedEnvironment();\n _ensureStackFrameIsLegit(stackframe);\n\n var sourceCache = this.sourceCache;\n var fileName = stackframe.fileName;\n this._get(fileName).then(function(source) {\n var sourceMappingURL = _findSourceMappingURL(source);\n var isDataUrl = sourceMappingURL.substr(0, 5) === 'data:';\n var defaultSourceRoot = fileName.substring(0, fileName.lastIndexOf('/') + 1);\n\n if (sourceMappingURL[0] !== '/' && !isDataUrl && !(/^https?:\\/\\/|^\\/\\//i).test(sourceMappingURL)) {\n sourceMappingURL = defaultSourceRoot + sourceMappingURL;\n }\n\n return this._getSourceMapConsumer(sourceMappingURL, defaultSourceRoot)\n .then(function(sourceMapConsumer) {\n return _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache)\n .then(resolve)['catch'](function() {\n resolve(stackframe);\n });\n });\n }.bind(this), reject)['catch'](reject);\n }.bind(this));\n };\n };\n}));\n"]} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 772da49..10d7449 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -25,9 +25,9 @@ gulp.task('dist', function() { .pipe(vinylSourceStream(sources)) .pipe(gulp.dest('dist')) .pipe(vinylBuffer()) - .pipe(rename({extname: '.min.js'})) - .pipe(uglify()) .pipe(sourcemaps.init({loadMaps: true})) + .pipe(uglify()) + .pipe(rename({extname: '.min.js'})) .pipe(sourcemaps.write('./')) .pipe(gulp.dest('dist')); @@ -40,9 +40,9 @@ gulp.task('dist', function() { .pipe(vinylBuffer()) .pipe(concat(sources.replace('.js', '-with-promises-and-json-polyfills.js'))) .pipe(gulp.dest('dist')) - .pipe(uglify()) - .pipe(rename({extname: '.min.js'})) .pipe(sourcemaps.init({loadMaps: true})) + .pipe(uglify()) + .pipe(rename({extname: '.min.js'})) .pipe(sourcemaps.write('./')) .pipe(gulp.dest('dist')); }); diff --git a/package-lock.json b/package-lock.json index 2d74c7e..b70dac9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -220,16 +220,16 @@ "through2": "^2.0.3" } }, - "@types/geojson": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", - "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==", + "@types/node": { + "version": "13.1.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.4.tgz", + "integrity": "sha512-Lue/mlp2egZJoHXZr4LndxDAd7i/7SQYhV0EjWfb/a4/OZ6tuVwMCVPiwkU5nsEipxEf7hmkSU7Em5VQ8P5NGA==", "dev": true }, "JSONStream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", - "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "requires": { "jsonparse": "^1.2.0", @@ -264,6 +264,37 @@ "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", "dev": true }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + } + } + }, + "acorn-walk": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.0.0.tgz", + "integrity": "sha512-7Bv1We7ZGuU79zZbb6rRqcpxo3OY+zrdtloZWoyD8fmGX+FeXRjE+iuGkZjSXLVovLzrsvMGMy0EkwA0E0umxg==", + "dev": true + }, "adm-zip": { "version": "0.4.13", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz", @@ -340,6 +371,12 @@ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", "dev": true }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, "anymatch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", @@ -367,12 +404,28 @@ "buffer-equal": "^1.0.0" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -400,30 +453,12 @@ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", "dev": true }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -455,9 +490,9 @@ } }, "asn1.js": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", - "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { "bn.js": "^4.0.0", @@ -466,12 +501,36 @@ } }, "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { + "object-assign": "^4.1.1", "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } } }, "assert-plus": { @@ -492,15 +551,6 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, - "astw": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", - "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", - "dev": true, - "requires": { - "acorn": "^4.0.3" - } - }, "async": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", @@ -640,9 +690,9 @@ "dev": true }, "base64-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", - "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", "dev": true }, "base64id": { @@ -687,6 +737,12 @@ "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", "dev": true }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", @@ -760,22 +816,23 @@ "dev": true }, "browser-pack": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.2.tgz", - "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, "requires": { "JSONStream": "^1.0.3", - "combine-source-map": "~0.7.1", + "combine-source-map": "~0.8.0", "defined": "^1.0.0", + "safe-buffer": "^5.1.1", "through2": "^2.0.0", "umd": "^3.0.0" } }, "browser-resolve": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", - "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", "dev": true, "requires": { "resolve": "1.1.7" @@ -790,36 +847,37 @@ } }, "browserify": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-13.3.0.tgz", - "integrity": "sha1-tanJAgJD8McORnW+yCI7xifkFc4=", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.0.tgz", + "integrity": "sha512-6bfI3cl76YLAnCZ75AGu/XPOsqUhRyc0F/olGIJeCxtfxF2HvPKEcmjU9M8oAPxl4uBY1U7Nry33Q6koV3f2iw==", "dev": true, "requires": { "JSONStream": "^1.0.3", "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^1.11.0", - "browserify-zlib": "~0.1.2", - "buffer": "^4.1.0", + "browserify-zlib": "~0.2.0", + "buffer": "^5.0.2", "cached-path-relative": "^1.0.0", - "concat-stream": "~1.5.1", + "concat-stream": "^1.6.0", "console-browserify": "^1.1.0", "constants-browserify": "~1.0.0", "crypto-browserify": "^3.0.0", "defined": "^1.0.0", "deps-sort": "^2.0.0", - "domain-browser": "~1.1.0", + "domain-browser": "^1.2.0", "duplexer2": "~0.1.2", - "events": "~1.1.0", + "events": "^2.0.0", "glob": "^7.1.0", "has": "^1.0.0", "htmlescape": "^1.1.0", - "https-browserify": "~0.0.0", + "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.0.0", "labeled-stream-splicer": "^2.0.0", - "module-deps": "^4.0.8", - "os-browserify": "~0.1.1", + "mkdirp": "^0.5.0", + "module-deps": "^6.0.0", + "os-browserify": "~0.3.0", "parents": "^1.0.1", "path-browserify": "~0.0.0", "process": "~0.11.0", @@ -831,77 +889,54 @@ "shasum": "^1.0.0", "shell-quote": "^1.6.1", "stream-browserify": "^2.0.0", - "stream-http": "^2.0.0", - "string_decoder": "~0.10.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", "subarg": "^1.0.0", "syntax-error": "^1.1.1", "through2": "^2.0.0", "timers-browserify": "^1.0.1", - "tty-browserify": "~0.0.0", + "tty-browserify": "0.0.1", "url": "~0.11.0", "util": "~0.10.1", - "vm-browserify": "~0.0.1", + "vm-browserify": "^1.0.0", "xtend": "^4.0.0" }, "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", "dev": true }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "safe-buffer": "~5.2.0" } } } }, "browserify-aes": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", - "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "^1.0.2", + "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "inherits": "^2.0.1" + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { "browserify-aes": "^1.0.4", @@ -910,14 +945,23 @@ } }, "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", - "inherits": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + } } }, "browserify-rsa": { @@ -946,23 +990,22 @@ } }, "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "~0.2.0" + "pako": "~1.0.5" } }, "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", + "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", "dev": true, "requires": { "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "ieee754": "^1.1.4" } }, "buffer-alloc": { @@ -1137,6 +1180,12 @@ } } }, + "chownr": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", + "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", + "dev": true + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -1276,6 +1325,22 @@ } } }, + "cls-bluebird": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz", + "integrity": "sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4=", + "dev": true, + "requires": { + "is-bluebird": "^1.0.2", + "shimmer": "^1.1.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -1314,9 +1379,9 @@ "dev": true }, "combine-source-map": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", - "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", "dev": true, "requires": { "convert-source-map": "~1.1.0", @@ -1366,30 +1431,15 @@ "dev": true }, "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "inherits": "~2.0.1", - "readable-stream": "~2.0.0", - "typedarray": "~0.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - } + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "concat-with-sourcemaps": { @@ -1439,13 +1489,16 @@ } }, "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true }, "constants-browserify": { "version": "1.0.0", @@ -1484,9 +1537,9 @@ "dev": true }, "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { "bn.js": "^4.1.0", @@ -1494,21 +1547,22 @@ } }, "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", - "ripemd160": "^2.0.0", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", "sha.js": "^2.4.0" } }, "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { "cipher-base": "^1.0.3", @@ -1533,9 +1587,9 @@ } }, "crypto-browserify": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", - "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { "browserify-cipher": "^1.0.0", @@ -1547,7 +1601,8 @@ "inherits": "^2.0.1", "pbkdf2": "^3.0.3", "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0" + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "css": { @@ -1585,6 +1640,12 @@ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", "dev": true }, + "dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "dev": true + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -1600,12 +1661,6 @@ "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", "dev": true }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, "dateformat": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", @@ -1662,6 +1717,12 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -1781,6 +1842,12 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -1794,21 +1861,21 @@ "dev": true }, "deps-sort": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", - "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", + "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", "dev": true, "requires": { "JSONStream": "^1.0.3", - "shasum": "^1.0.0", + "shasum-object": "^1.0.0", "subarg": "^1.0.0", "through2": "^2.0.0" } }, "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -1821,6 +1888,12 @@ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true + }, "detect-newline": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", @@ -1828,21 +1901,14 @@ "dev": true }, "detective": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.3.2.tgz", - "integrity": "sha1-d2l+LnlHrD/nyOJqbW8RUjWvqRw=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", "dev": true, "requires": { - "acorn": "^3.1.0", - "defined": "^1.0.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" } }, "di": { @@ -1852,9 +1918,9 @@ "dev": true }, "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { "bn.js": "^4.1.0", @@ -1863,14 +1929,14 @@ } }, "docset-generator": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/docset-generator/-/docset-generator-0.2.2.tgz", - "integrity": "sha1-hCdOTIbxpCXIdDvmumMCRpoChHg=", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/docset-generator/-/docset-generator-0.3.0.tgz", + "integrity": "sha512-LckWHF5WCJdMGsdYkP4GR0482usYeBZU2xXTlBikNjQKPhGumBIOCEcForGq2J5g81M5q7Ae5Doo0IiWFA19Dw==", "dev": true, "requires": { "extended-fs": "^0.3.3", - "sequelize": "^3.15.1", - "sqlite3": "^3.1.1" + "sequelize": "^5.21.2", + "sqlite3": "^4.1.1" } }, "doctrine": { @@ -1895,15 +1961,15 @@ } }, "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, "dottie": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/dottie/-/dottie-1.1.1.tgz", - "integrity": "sha1-RcKj9IvWUo7u0memmoSOqspvqmo=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", + "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==", "dev": true }, "duplexer2": { @@ -1955,9 +2021,9 @@ "dev": true }, "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", + "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", "dev": true, "requires": { "bn.js": "^4.4.0", @@ -2425,18 +2491,19 @@ "dev": true }, "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", + "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", "dev": true }, "evp_bytestokey": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz", - "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "create-hash": "^1.1.1" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "exit": { @@ -2497,12 +2564,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=", "dev": true - }, - "q": { - "version": "0.9.7", - "resolved": "https://registry.npmjs.org/q/-/q-0.9.7.tgz", - "integrity": "sha1-TeLmyzspCIyeTLwDv51C+5bOL3U=", - "dev": true } } }, @@ -2593,6 +2654,12 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", + "dev": true + }, "fd-slicer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", @@ -3169,6 +3236,17 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -3189,6 +3267,15 @@ "universalify": "^0.1.0" } }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, "fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", @@ -3213,9 +3300,9 @@ "optional": true }, "function-bind": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", - "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "functional-red-black-tree": { @@ -3224,6 +3311,50 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, "gaze": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", @@ -3233,10 +3364,10 @@ "globule": "~0.1.0" } }, - "generic-pool": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.2.tgz", - "integrity": "sha1-iGvFvwvrfblugby7oHiBjeWmJoM=", + "get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", "dev": true }, "get-stdin": { @@ -4344,12 +4475,12 @@ } }, "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "^1.0.2" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -4405,6 +4536,12 @@ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -4472,22 +4609,23 @@ } }, "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "^1.0.1" } }, "hasha": { @@ -4568,9 +4706,9 @@ } }, "https-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", - "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, "https-proxy-agent": { @@ -4610,9 +4748,9 @@ } }, "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true }, "ignore": { @@ -4621,6 +4759,26 @@ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -4680,6 +4838,12 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, "inline-source-map": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", @@ -4769,18 +4933,20 @@ } }, "insert-module-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", - "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", + "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", "dev": true, "requires": { "JSONStream": "^1.0.3", - "combine-source-map": "~0.7.1", - "concat-stream": "~1.5.1", + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", "is-buffer": "^1.1.0", - "lexical-scope": "^1.2.0", + "path-is-absolute": "^1.0.1", "process": "~0.11.0", "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", "xtend": "^4.0.0" } }, @@ -4841,10 +5007,16 @@ "binary-extensions": "^2.0.0" } }, + "is-bluebird": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz", + "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=", + "dev": true + }, "is-buffer": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", - "integrity": "sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, "is-data-descriptor": { @@ -5355,21 +5527,21 @@ "dev": true }, "jsdoc-dash-template": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jsdoc-dash-template/-/jsdoc-dash-template-1.2.0.tgz", - "integrity": "sha1-8iUxyOvERmJ5pxNuVO+SDHKtEOk=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/jsdoc-dash-template/-/jsdoc-dash-template-2.1.0.tgz", + "integrity": "sha512-90CUGZBj2wHazJ1+YDXlZyxwug0yFRpHoSkzYTHnDFTef+1rYNjGzAMxOVUNV+TmTXVFSBpvl8DE4sjuA5x39Q==", "dev": true, "requires": { - "jsdoc-docset": "^0.2.1" + "jsdoc-docset": "^0.3.0" } }, "jsdoc-docset": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/jsdoc-docset/-/jsdoc-docset-0.2.1.tgz", - "integrity": "sha1-5XLsy4aj+lYBrnxrtkMBU1MeezU=", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/jsdoc-docset/-/jsdoc-docset-0.3.0.tgz", + "integrity": "sha512-VSwZsmbEyrzzkzNxrwtn+FQhm/wcqRPr/CErpVsf+2Aqx9vTxdc4bIYFIX9NRWoysSQ0AIZlq/tD5oS65mLBrg==", "dev": true, "requires": { - "docset-generator": "^0.2.1", + "docset-generator": "^0.3.0", "object-assign": "^4.0.1" }, "dependencies": { @@ -6078,22 +6250,13 @@ } }, "labeled-stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", - "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", + "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", "dev": true, "requires": { "inherits": "^2.0.1", - "isarray": "~0.0.1", "stream-splicer": "^2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } } }, "lazy-debug-legacy": { @@ -6286,15 +6449,6 @@ "type-check": "~0.3.2" } }, - "lexical-scope": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", - "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", - "dev": true, - "requires": { - "astw": "^2.0.0" - } - }, "lie": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", @@ -6583,6 +6737,25 @@ "object-visit": "^1.0.0" } }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + } + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -6616,9 +6789,9 @@ } }, "miller-rabin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", - "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { "bn.js": "^4.0.0", @@ -6653,9 +6826,9 @@ "dev": true }, "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "minimalistic-crypto-utils": { @@ -6679,6 +6852,39 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -6718,22 +6924,22 @@ } }, "module-deps": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", - "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.2.tgz", + "integrity": "sha512-a9y6yDv5u5I4A+IPHTnqFxcaKr4p50/zxTjcQJaX2ws9tN/W6J6YXnEKhqRyPhl494dkcxx951onSKVezmI+3w==", "dev": true, "requires": { "JSONStream": "^1.0.3", "browser-resolve": "^1.7.0", - "cached-path-relative": "^1.0.0", - "concat-stream": "~1.5.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", "defined": "^1.0.0", - "detective": "^4.0.0", + "detective": "^5.2.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", "parents": "^1.0.0", "readable-stream": "^2.0.2", - "resolve": "^1.1.3", + "resolve": "^1.4.0", "stream-combiner2": "^1.1.1", "subarg": "^1.0.0", "through2": "^2.0.0", @@ -6741,15 +6947,15 @@ } }, "moment": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", - "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==", + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", "dev": true }, "moment-timezone": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.17.tgz", - "integrity": "sha512-Y/JpVEWIOA9Gho4vO15MTnW1FCmHi3ypprrkUaxsZ1TKg3uqC8q/qMBjTddkHoiwwZN3qvZSr4zJP7x9V3LpXA==", + "version": "0.5.27", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.27.tgz", + "integrity": "sha512-EIKQs7h5sAsjhPCqN6ggx6cEbs94GK050254TIJySD1bzoM5JTYDwAU1IoVOeTOL6Gm27kYJ51/uuvq1kIlrbw==", "dev": true, "requires": { "moment": ">= 2.9.0" @@ -6823,6 +7029,12 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true + }, "nanomatch": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", @@ -6875,6 +7087,34 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "needle": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", + "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", + "dev": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -6893,6 +7133,45 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node-pre-gyp": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", + "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", + "dev": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + }, + "dependencies": { + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -6946,6 +7225,43 @@ "once": "^1.3.2" } }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-packlist": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.7.tgz", + "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==", + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -7212,9 +7528,15 @@ "dev": true }, "os-browserify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", - "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, "os-tmpdir": { @@ -7223,6 +7545,16 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, "p-map": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.1.1.tgz", @@ -7230,9 +7562,9 @@ "dev": true }, "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", "dev": true }, "parent-module": { @@ -7254,16 +7586,17 @@ } }, "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", "dev": true, "requires": { "asn1.js": "^4.0.0", "browserify-aes": "^1.0.0", "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "parse-filepath": { @@ -7323,9 +7656,9 @@ "dev": true }, "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", "dev": true }, "path-dirname": { @@ -7400,9 +7733,9 @@ } }, "pbkdf2": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.13.tgz", - "integrity": "sha512-+dCHxDH+djNtjgWmvVC/my3SYBAKpKNqKSjLkp+GtWWYe4XPE+e/PSD2aCanlEZZnqPk2uekTKNC/ccbwd2X2Q==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -7500,16 +7833,25 @@ "dev": true }, "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1" + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + } } }, "pump": { @@ -7550,12 +7892,24 @@ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, + "q": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/q/-/q-0.9.7.tgz", + "integrity": "sha1-TeLmyzspCIyeTLwDv51C+5bOL3U=", + "dev": true + }, "qjobs": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -7569,11 +7923,21 @@ "dev": true }, "randombytes": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", - "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { + "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" } }, @@ -7595,6 +7959,26 @@ "unpipe": "1.0.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + }, "read-only-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", @@ -7745,6 +8129,42 @@ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", "dev": true }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + } + } + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -7752,10 +8172,21 @@ "dev": true }, "resolve": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.2.0.tgz", - "integrity": "sha1-lYnD8vYUnRQXpAvswWY9tuxrwmw=", - "dev": true + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz", + "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + }, + "dependencies": { + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + } + } }, "resolve-dir": { "version": "1.0.1", @@ -7805,36 +8236,12 @@ "dev": true }, "retry-as-promised": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.2.tgz", - "integrity": "sha1-zZdO5P2bX+A8vzGHHuSCIcB3N7c=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-3.2.0.tgz", + "integrity": "sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg==", "dev": true, "requires": { - "bluebird": "^3.4.6", - "debug": "^2.6.9" - }, - "dependencies": { - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "any-promise": "^1.3.0" } }, "rfdc": { @@ -7869,12 +8276,12 @@ } }, "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "^2.0.0", + "hash-base": "^3.0.0", "inherits": "^2.0.1" } }, @@ -8029,40 +8436,36 @@ "dev": true }, "sequelize": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-3.33.0.tgz", - "integrity": "sha1-sOsSuHIjre0Q5QqdeFBuDdQvkgg=", - "dev": true, - "requires": { - "bluebird": "^3.3.4", - "depd": "^1.1.0", - "dottie": "^1.0.0", - "generic-pool": "2.4.2", - "inflection": "^1.6.0", - "lodash": "^4.17.10", - "moment": "^2.13.0", - "moment-timezone": "^0.5.4", - "retry-as-promised": "^2.0.0", - "semver": "^5.0.1", - "shimmer": "1.1.0", - "terraformer-wkt-parser": "^1.1.0", + "version": "5.21.3", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.21.3.tgz", + "integrity": "sha512-ptdeAxwTY0zbj7AK8m+SH3z52uHVrt/qmOTSIGo/kyfnSp3h5HeKlywkJf5GEk09kuRrPHfWARVSXH1W3IGU7g==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "cls-bluebird": "^2.1.0", + "debug": "^4.1.1", + "dottie": "^2.0.0", + "inflection": "1.12.0", + "lodash": "^4.17.15", + "moment": "^2.24.0", + "moment-timezone": "^0.5.21", + "retry-as-promised": "^3.2.0", + "semver": "^6.3.0", + "sequelize-pool": "^2.3.0", "toposort-class": "^1.0.1", - "uuid": "^3.0.0", - "validator": "^5.2.0", - "wkx": "0.2.0" + "uuid": "^3.3.3", + "validator": "^10.11.0", + "wkx": "^0.4.8" }, "dependencies": { - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } }, "lodash": { "version": "4.17.15", @@ -8070,20 +8473,38 @@ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, + "sequelize-pool": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-2.3.0.tgz", + "integrity": "sha512-Ibz08vnXvkZ8LJTiUOxRcj1Ckdn7qafNZ2t59jYHMX1VIebTAOYefWdRYFt6z6+hy52WGthAHAoLc9hvk3onqA==", + "dev": true + }, "sequencify": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", "dev": true }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, "set-immediate-shim": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", @@ -8120,12 +8541,13 @@ "dev": true }, "sha.js": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", - "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shasum": { @@ -8138,6 +8560,15 @@ "sha.js": "~2.4.4" } }, + "shasum-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", + "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", + "dev": true, + "requires": { + "fast-safe-stringify": "^2.0.7" + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -8154,21 +8585,15 @@ "dev": true }, "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true }, "shimmer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.1.0.tgz", - "integrity": "sha1-l9c3cTf/u6tCVSLkKf4KqJpIizU=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", "dev": true }, "sigmund": { @@ -8183,6 +8608,12 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", + "dev": true + }, "slice-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", @@ -8436,976 +8867,156 @@ "component-bind": "1.0.0", "component-emitter": "1.2.1", "debug": "~3.1.0", - "engine.io-client": "~3.2.0", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "socket.io-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sqlite3": { - "version": "3.1.13", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-3.1.13.tgz", - "integrity": "sha512-JxXKPJnkZ6NuHRojq+g2WXWBt3M1G9sjZaYiHEWSTGijDM3cwju/0T2XbWqMXFmPqDgw+iB7zKQvnns4bvzXlw==", - "dev": true, - "requires": { - "nan": "~2.7.0", - "node-pre-gyp": "~0.6.38" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "~2.0.0" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, - "brace-expansion": { - "version": "1.1.8", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.x.x" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true - } - } - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "fstream": "^1.0.0", - "inherits": "2", - "minimatch": "^3.0.0" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "requires": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true - } - } - }, - "mime-db": { - "version": "1.30.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.17", - "bundled": true, - "dev": true, - "requires": { - "mime-db": "~1.30.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "nan": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", - "dev": true - }, - "node-pre-gyp": { - "version": "0.6.38", - "bundled": true, - "dev": true, - "requires": { - "hawk": "3.1.3", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "request": "2.81.0", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^2.2.1", - "tar-pack": "^3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "dev": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "requires": { - "deep-extend": "~0.4.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true - } - } - }, - "readable-stream": { - "version": "2.3.3", - "bundled": true, - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "dev": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~4.2.1", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "performance-now": "^0.2.0", - "qs": "~6.4.0", - "safe-buffer": "^5.0.1", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.0.0" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.4.1", - "bundled": true, - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, - "sshpk": { - "version": "1.13.1", - "bundled": true, - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "requires": { - "debug": "^2.2.0", - "fstream": "^1.0.10", - "fstream-ignore": "^1.0.5", - "once": "^1.3.3", - "readable-stream": "^2.1.4", - "rimraf": "^2.5.1", - "tar": "^2.2.1", - "uid-number": "^0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.3", - "bundled": true, - "dev": true, - "requires": { - "punycode": "^1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "ms": "2.0.0" } }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true - }, - "uuid": { + } + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { "version": "3.1.0", - "bundled": true, - "dev": true - }, - "verror": { - "version": "1.10.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true - } + "ms": "2.0.0" } }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^1.0.2" - } + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true }, - "wrappy": { - "version": "1.0.2", - "bundled": true, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sqlite3": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.1.1.tgz", + "integrity": "sha512-CvT5XY+MWnn0HkbwVKJAyWEMfzpAPwnTiB3TobA5Mri44SrTovmmh499NPQP+gatkeOipqPlBLel7rn4E/PCQg==", + "dev": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.11.0", + "request": "^2.87.0" + } + }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -9480,9 +9091,9 @@ "dev": true }, "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "requires": { "inherits": "~2.0.1", @@ -9506,40 +9117,41 @@ "dev": true }, "stream-http": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", - "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.0.tgz", + "integrity": "sha512-cuB6RgO7BqC4FBYzmnvhob5Do3wIdIsXAgGycHJnW+981gHqoYcYz9lqjJrk8WXRddbwPuqPYRl+bag6mYv4lw==", "dev": true, "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", - "readable-stream": "^2.2.6", - "to-arraybuffer": "^1.0.0", + "readable-stream": "^3.0.6", "xtend": "^4.0.0" }, "dependencies": { "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + }, "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } } } @@ -9551,9 +9163,9 @@ "dev": true }, "stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", - "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", + "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -9679,12 +9291,12 @@ "dev": true }, "syntax-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", - "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", "dev": true, "requires": { - "acorn": "^4.0.3" + "acorn-node": "^1.2.0" } }, "table": { @@ -9745,23 +9357,33 @@ } } }, - "terraformer": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.8.tgz", - "integrity": "sha1-UeCtiXRvzyFh3G9lqnDkI3fItZM=", - "dev": true, - "requires": { - "@types/geojson": "^1.0.0" - } - }, - "terraformer-wkt-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.0.tgz", - "integrity": "sha512-QU3iA54St5lF8Za1jg1oj4NYc8sn5tCZ08aNSWDeGzrsaV48eZk1iAVWasxhNspYBoCqdHuoot1pUTUrE1AJ4w==", + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", "dev": true, "requires": { - "@types/geojson": "^1.0.0", - "terraformer": "~1.0.5" + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } } }, "text-table": { @@ -9853,12 +9475,6 @@ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", "dev": true }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -9983,9 +9599,9 @@ "dev": true }, "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", "dev": true }, "tunnel-agent": { @@ -10067,9 +9683,9 @@ "dev": true }, "umd": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", - "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", "dev": true }, "unc-path-regex": { @@ -10078,6 +9694,19 @@ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", "dev": true }, + "undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", + "dev": true, + "requires": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + } + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -10247,20 +9876,12 @@ } }, "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "dev": true, "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } + "inherits": "2.0.3" } }, "util-deprecate": { @@ -10276,9 +9897,9 @@ "dev": true }, "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", "dev": true }, "v8-compile-cache": { @@ -10307,9 +9928,9 @@ } }, "validator": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-5.7.0.tgz", - "integrity": "sha1-eoelgUa2laxIYHEUHAxJ1n2gXlw=", + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", + "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==", "dev": true }, "value-or-function": { @@ -10773,13 +10394,10 @@ } }, "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true }, "void-elements": { "version": "2.0.1", @@ -10796,11 +10414,56 @@ "isexe": "^2.0.0" } }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "wkx": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.2.0.tgz", - "integrity": "sha1-dsJPFqzQzY+TzTSqMx4PeWElboQ=", - "dev": true + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.8.tgz", + "integrity": "sha512-ikPXMM9IR/gy/LwiOSqWlSL3X/J5uk9EO2hHNRXS41eTLXaUFEVw9fn/593jW/tE5tedNg8YjT5HkCa4FqQZyQ==", + "dev": true, + "requires": { + "@types/node": "*" + } }, "word-wrap": { "version": "1.2.3", diff --git a/package.json b/package.json index 2543d2c..1d8b49d 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "stacktrace-gps": "^3.0.4" }, "devDependencies": { - "browserify": "^13.3.0", + "browserify": "^16.3.0", "colors": "^1.1.2", "del": "^3.0.0", "es6-promise": "^3.1.2", @@ -40,7 +40,7 @@ "jasmine": "^2.7.0", "jasmine-ajax": "^3.2.0", "jasmine-core": "^2.7.0", - "jsdoc-dash-template": "^1.2.0", + "jsdoc-dash-template": "^2.1.0", "json3": "^3.3.2", "karma": "^4.4.1", "karma-chrome-launcher": "^3.1.0", From e2681545cc7e0a89621c5b1136792935ed705484 Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Mon, 6 Jan 2020 21:37:06 -0700 Subject: [PATCH 106/110] 2.0.2 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index b70dac9..e398e11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "stacktrace-js", - "version": "2.0.1", + "version": "2.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 1d8b49d..8b30836 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "Oliver Salzburg (https://github.com/oliversalzburg)", "Ben Gourley (https://github.com/bengourley)" ], - "version": "2.0.1", + "version": "2.0.2", "license": "MIT", "keywords": [ "stacktrace", From 21472df17703fb3a0607bd62773563486a18419d Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Mon, 6 Jan 2020 22:39:52 -0700 Subject: [PATCH 107/110] Fix Sauce Labs Browser Matrix by setting sauce build id --- karma.conf.ci.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/karma.conf.ci.js b/karma.conf.ci.js index 37bef20..e8399ce 100644 --- a/karma.conf.ci.js +++ b/karma.conf.ci.js @@ -1,4 +1,4 @@ -module.exports = function(config) { +module.exports = function (config) { 'use strict'; if (!process.env.SAUCE_USERNAME || !process.env.SAUCE_ACCESS_KEY) { console.log('Make sure the SAUCE_USERNAME and SAUCE_ACCESS_KEY environment variables are set.'); @@ -95,7 +95,9 @@ module.exports = function(config) { connectOptions: { port: 5757, logfile: 'sauce_connect.log' - } + }, + build: process.env.TRAVIS_BUILD_ID || Math.floor((new Date).getTime() / 1000 - 1230768000).toString(), + tags: [process.env.TRAVIS_BRANCH || "local"] }, customLaunchers: customLaunchers, browsers: Object.keys(customLaunchers), From f4a58d4e2cdf513a419222d4916a5a25b444da6b Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Fri, 10 Apr 2020 08:46:00 -0700 Subject: [PATCH 108/110] Update transitive dev dependencies to fix vuln --- package-lock.json | 184 ++++++++++++++++++++++++++++++---------------- 1 file changed, 121 insertions(+), 63 deletions(-) diff --git a/package-lock.json b/package-lock.json index e398e11..5de26b7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -276,9 +276,9 @@ }, "dependencies": { "acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", "dev": true }, "xtend": { @@ -677,8 +677,7 @@ }, "kind-of": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "resolved": "", "dev": true } } @@ -902,6 +901,15 @@ "xtend": "^4.0.0" }, "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "safe-buffer": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", @@ -1799,12 +1807,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true } } }, @@ -2372,6 +2374,15 @@ "brace-expansion": "^1.1.7" } }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -2447,9 +2458,9 @@ }, "dependencies": { "acorn": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", - "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", "dev": true } } @@ -2611,6 +2622,21 @@ "ms": "2.0.0" } }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -3057,9 +3083,9 @@ "dev": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "micromatch": { @@ -3834,9 +3860,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "semver": { @@ -4664,6 +4690,12 @@ "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", "dev": true }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, "htmlescape": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", @@ -5304,6 +5336,15 @@ "path-is-absolute": "^1.0.0" } }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "resolve": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", @@ -5430,12 +5471,12 @@ } }, "istanbul-reports": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", - "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", + "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", "dev": true, "requires": { - "handlebars": "^4.1.2" + "html-escaper": "^2.0.0" } }, "jasmine": { @@ -6240,6 +6281,12 @@ "colors": "^1.1.2" } }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, "klaw": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", @@ -6709,9 +6756,9 @@ }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true } } @@ -6847,9 +6894,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "minipass": { @@ -6907,21 +6954,10 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, "module-deps": { "version": "6.2.2", @@ -7068,9 +7104,9 @@ "dev": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true } } @@ -7151,6 +7187,15 @@ "tar": "^4" }, "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "nopt": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", @@ -8787,8 +8832,7 @@ }, "kind-of": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "resolved": "", "dev": true } } @@ -9372,6 +9416,15 @@ "yallist": "^3.0.3" }, "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "safe-buffer": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", @@ -9840,9 +9893,9 @@ }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true } } @@ -10134,19 +10187,13 @@ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "readable-stream": { @@ -10490,6 +10537,17 @@ "dev": true, "requires": { "mkdirp": "^0.5.1" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } } }, "ws": { From c12fccdbf21b8ecf215b35474070da1b1c23206d Mon Sep 17 00:00:00 2001 From: Eric Wendelin Date: Fri, 10 Apr 2020 08:47:12 -0700 Subject: [PATCH 109/110] Update Travis CI config for Google Chrome --- .travis.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 904ab62..b78bf2b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,11 +6,7 @@ node_js: addons: sauce_connect: true firefox: latest - apt: - sources: - - google-chrome - packages: - - google-chrome-stable + chrome: stable services: - xvfb before_install: From c6ba00b67fe7ebfe5eb434340a835d6687f10369 Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Wed, 24 Mar 2021 17:09:43 -0700 Subject: [PATCH 110/110] Upgrade natives from 1.1.4 to 1.1.6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Without this, ‘npm install’ fails on Node ≥ 10.15.0 (to say nothing of 12.x or 14.x, which Gulp 3 doesn’t support at all): $ npm install > stacktrace-js@2.0.2 prepare /home/anders/js/stacktrace.js > gulp dist internal/util/inspect.js:31 const types = internalBinding('types'); ^ ReferenceError: internalBinding is not defined at internal/util/inspect.js:31:15 at req_ (/home/anders/js/stacktrace.js/node_modules/natives/index.js:137:5) at require (/home/anders/js/stacktrace.js/node_modules/natives/index.js:110:12) at util.js:25:21 at req_ (/home/anders/js/stacktrace.js/node_modules/natives/index.js:137:5) at require (/home/anders/js/stacktrace.js/node_modules/natives/index.js:110:12) at fs.js:42:21 at req_ (/home/anders/js/stacktrace.js/node_modules/natives/index.js:137:5) at Object.req [as require] (/home/anders/js/stacktrace.js/node_modules/natives/index.js:54:10) at Object. (/home/anders/js/stacktrace.js/node_modules/vinyl-fs/node_modules/graceful-fs/fs.js:1:37) npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! stacktrace-js@2.0.2 prepare: `gulp dist` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the stacktrace-js@2.0.2 prepare script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /home/anders/.npm/_logs/2021-03-25T00_14_18_635Z-debug.log Signed-off-by: Anders Kaseorg --- package-lock.json | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5de26b7..b244201 100644 --- a/package-lock.json +++ b/package-lock.json @@ -677,7 +677,8 @@ }, "kind-of": { "version": "6.0.2", - "resolved": "", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } } @@ -7112,9 +7113,9 @@ } }, "natives": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz", - "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz", + "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==", "dev": true }, "natural-compare": { @@ -8832,7 +8833,8 @@ }, "kind-of": { "version": "6.0.2", - "resolved": "", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true } }